teneo_grpc 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +1 -9
- data/lib/teneo_grpc/client.rb +2 -67
- data/lib/teneo_grpc/grpc_services/cloud_event_enum.rb +4 -5
- data/lib/teneo_grpc/server.rb +4 -2
- data/lib/teneo_grpc/util/convert.rb +23 -0
- metadata +6 -7
- data/lib/teneo_grpc/cloud_event_helpers/cloud_event_helper.rb +0 -18
- data/lib/teneo_grpc/grpc_services/cloud_event_chat_enum.rb +0 -22
- data/lib/teneo_grpc/grpc_services/cloud_events_service.rb +0 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12432238a9422f1a3c5726c0750b1771710271fffc898e1f1fe39fb4a856e305
|
4
|
+
data.tar.gz: 82067e9dd7db3312dd5f32ec7be962d5a57c459f09b8ced7e7af266b56ef501d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: beba697be0259b03345587363640f2c5fbe5ff687c3bb7746a8e22e88d563653c2cb96b2333996463f1fe20b6e429fff43fa95709628cc0360e018f0106466d1
|
7
|
+
data.tar.gz: fca4b1c4ae17d1b4bd5dc60c1fee94c258ef81c4a7a186dede6fbe646b14fa7790a737181c3d06b388f98283a2a196adc5bb65b0825d3588af1731506fe5a384
|
data/Rakefile
CHANGED
@@ -10,16 +10,8 @@ RSpec::Core::RakeTask.new(:spec)
|
|
10
10
|
|
11
11
|
RuboCop::RakeTask.new
|
12
12
|
|
13
|
-
task default: %w[spec rubocop
|
14
|
-
|
15
|
-
task :setup do
|
16
|
-
sh 'bundle install'
|
17
|
-
end
|
13
|
+
task default: %w[spec rubocop]
|
18
14
|
|
19
15
|
task :proto do
|
20
16
|
sh 'grpc_tools_ruby_protoc -I proto --ruby_out=lib/teneo/proto --grpc_out=lib/teneo/proto proto/*.proto'
|
21
17
|
end
|
22
|
-
|
23
|
-
task :run do
|
24
|
-
ruby 'bin/app.rb'
|
25
|
-
end
|
data/lib/teneo_grpc/client.rb
CHANGED
@@ -1,80 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '
|
3
|
+
require_relative 'util/convert'
|
4
4
|
require_relative 'grpc_services/cloud_event_enum'
|
5
5
|
require_relative 'proto/cloud_event_services_pb'
|
6
6
|
|
7
7
|
# Sends data to gRPC services
|
8
8
|
class Client
|
9
|
-
attr_accessor :socket
|
9
|
+
attr_accessor :socket, :stub
|
10
10
|
|
11
11
|
def initialize(socket:)
|
12
12
|
@socket = socket
|
13
13
|
@stub = CloudEvents::Stub.new(@socket, :this_channel_is_insecure)
|
14
14
|
end
|
15
|
-
|
16
|
-
# Example function that sends 1 request and receives 1 response
|
17
|
-
def send_1req_1resp(data:)
|
18
|
-
puts "sending to socket #{@socket}"
|
19
|
-
|
20
|
-
begin
|
21
|
-
event = CloudEventHelper.convert(text_data: data)
|
22
|
-
response = @stub.get_cloud_event(event)
|
23
|
-
rescue GRPC::Unavailable
|
24
|
-
puts "ERROR: failed to connect to host '#{@socket}'"
|
25
|
-
rescue StandardError => e
|
26
|
-
p e
|
27
|
-
end
|
28
|
-
|
29
|
-
response
|
30
|
-
end
|
31
|
-
|
32
|
-
# Example function that sends 1 request and receives a stream of responses
|
33
|
-
def send_1req_streamresp(data:)
|
34
|
-
puts "sending to socket #{@socket}"
|
35
|
-
|
36
|
-
begin
|
37
|
-
event = CloudEventHelper.convert(text_data: data)
|
38
|
-
responses = @stub.send_cloud_events(event)
|
39
|
-
rescue GRPC::Unavailable
|
40
|
-
puts "ERROR: failed to connect to host '#{@socket}'"
|
41
|
-
rescue StandardError => e
|
42
|
-
p e
|
43
|
-
end
|
44
|
-
|
45
|
-
responses
|
46
|
-
end
|
47
|
-
|
48
|
-
# Example function that sends a stream of requests and receives 1 response
|
49
|
-
def send_streamreq_1resp(data:)
|
50
|
-
puts "sending to socket #{@socket}"
|
51
|
-
|
52
|
-
begin
|
53
|
-
requests = CloudEventEnum.new(data: data, amount: 3)
|
54
|
-
response = @stub.get_cloud_events(requests.each)
|
55
|
-
rescue GRPC::Unavailable
|
56
|
-
puts "ERROR: failed to connect to host '#{@socket}'"
|
57
|
-
rescue StandardError => e
|
58
|
-
p e
|
59
|
-
end
|
60
|
-
|
61
|
-
response
|
62
|
-
end
|
63
|
-
|
64
|
-
# Example function that sends a stream of requests
|
65
|
-
# and receives a stream of responses
|
66
|
-
def send_streamreq_streamresp(data:)
|
67
|
-
puts "sending to socket #{@socket}"
|
68
|
-
|
69
|
-
begin
|
70
|
-
requests = CloudEventEnum.new(data: data, amount: 3)
|
71
|
-
responses = @stub.chat(requests.each)
|
72
|
-
rescue GRPC::Unavailable
|
73
|
-
puts "ERROR: failed to connect to host '#{@socket}'"
|
74
|
-
rescue StandardError => e
|
75
|
-
p e
|
76
|
-
end
|
77
|
-
|
78
|
-
responses
|
79
|
-
end
|
80
15
|
end
|
@@ -4,21 +4,20 @@ require 'securerandom'
|
|
4
4
|
|
5
5
|
# CloudEventEnum provides an Enumerator of cloud events
|
6
6
|
class CloudEventEnum
|
7
|
-
def initialize(
|
8
|
-
@
|
9
|
-
@amount = amount
|
7
|
+
def initialize(array:)
|
8
|
+
@array = array
|
10
9
|
end
|
11
10
|
|
12
11
|
def each
|
13
12
|
return enum_for(:each) unless block_given?
|
14
13
|
|
15
|
-
|
14
|
+
@array.each do |element|
|
16
15
|
yield CloudEvent.new(
|
17
16
|
id: SecureRandom.uuid,
|
18
17
|
source: '/server-context',
|
19
18
|
spec_version: '1.0',
|
20
19
|
type: 'com.example.server-event',
|
21
|
-
text_data:
|
20
|
+
text_data: element
|
22
21
|
)
|
23
22
|
end
|
24
23
|
end
|
data/lib/teneo_grpc/server.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative 'client'
|
4
4
|
require_relative 'service_orchestrator'
|
5
|
-
require_relative 'grpc_services/cloud_events_service'
|
6
5
|
|
7
6
|
# Encapsulating class for all gRPC communication
|
8
7
|
class Server
|
@@ -20,7 +19,10 @@ class Server
|
|
20
19
|
|
21
20
|
@orchestrator = ServiceOrchestrator.new(socket: @socket)
|
22
21
|
@orchestrator.initialize_listener
|
23
|
-
|
22
|
+
end
|
23
|
+
|
24
|
+
def register_service(service:)
|
25
|
+
@orchestrator.add(service)
|
24
26
|
end
|
25
27
|
|
26
28
|
def start_listening_for_data
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'securerandom'
|
4
|
+
|
5
|
+
require_relative '../proto/cloud_event_services_pb'
|
6
|
+
require_relative '../grpc_services/cloud_event_enum'
|
7
|
+
|
8
|
+
# The Convert module provides functionality on custom data conversion operations.
|
9
|
+
module Convert
|
10
|
+
def self.text_to_cloudevent(data:)
|
11
|
+
CloudEvent.new(
|
12
|
+
id: SecureRandom.uuid,
|
13
|
+
source: '/context',
|
14
|
+
spec_version: '1.0',
|
15
|
+
type: 'com.example.event',
|
16
|
+
text_data: data
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.array_to_cloudevent_enum(array:)
|
21
|
+
CloudEventEnum.new(array: array)
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teneo_grpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ruben Vanoverschelde
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-02-
|
11
|
+
date: 2025-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|
@@ -24,7 +24,8 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
description:
|
27
|
+
description: This gem can be used to implement gRPC and CloudEvents communication
|
28
|
+
between microservices.
|
28
29
|
email:
|
29
30
|
executables: []
|
30
31
|
extensions: []
|
@@ -57,15 +58,13 @@ files:
|
|
57
58
|
- bin/thor
|
58
59
|
- lib/teneo_grpc.rb
|
59
60
|
- lib/teneo_grpc/client.rb
|
60
|
-
- lib/teneo_grpc/cloud_event_helpers/cloud_event_helper.rb
|
61
61
|
- lib/teneo_grpc/error_classes/socket_format_error.rb
|
62
|
-
- lib/teneo_grpc/grpc_services/cloud_event_chat_enum.rb
|
63
62
|
- lib/teneo_grpc/grpc_services/cloud_event_enum.rb
|
64
|
-
- lib/teneo_grpc/grpc_services/cloud_events_service.rb
|
65
63
|
- lib/teneo_grpc/proto/cloud_event_pb.rb
|
66
64
|
- lib/teneo_grpc/proto/cloud_event_services_pb.rb
|
67
65
|
- lib/teneo_grpc/server.rb
|
68
66
|
- lib/teneo_grpc/service_orchestrator.rb
|
67
|
+
- lib/teneo_grpc/util/convert.rb
|
69
68
|
homepage: https://github.com/libis/teneo-grpc_skeleton_ruby
|
70
69
|
licenses:
|
71
70
|
- MIT
|
@@ -89,5 +88,5 @@ requirements: []
|
|
89
88
|
rubygems_version: 3.3.5
|
90
89
|
signing_key:
|
91
90
|
specification_version: 4
|
92
|
-
summary:
|
91
|
+
summary: Provides communication logic using the gRPC protocol and CloudEvents format.
|
93
92
|
test_files: []
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'securerandom'
|
4
|
-
|
5
|
-
require_relative '../proto/cloud_event_services_pb'
|
6
|
-
|
7
|
-
# Helper module for all thing CloudEvent related
|
8
|
-
module CloudEventHelper
|
9
|
-
def self.convert(text_data:)
|
10
|
-
CloudEvent.new(
|
11
|
-
id: SecureRandom.uuid,
|
12
|
-
source: '/context',
|
13
|
-
spec_version: '1.0',
|
14
|
-
type: 'com.example.event',
|
15
|
-
text_data: text_data
|
16
|
-
)
|
17
|
-
end
|
18
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../cloud_event_helpers/cloud_event_helper'
|
4
|
-
|
5
|
-
# CloudEventChatEnum provides an Enumerator for bidirectional communication
|
6
|
-
class CloudEventChatEnum
|
7
|
-
def initialize(requests:, default_response:)
|
8
|
-
@requests = requests
|
9
|
-
@default_response = default_response
|
10
|
-
end
|
11
|
-
|
12
|
-
def each
|
13
|
-
return enum_for(:each) unless block_given?
|
14
|
-
|
15
|
-
@requests.each do |request|
|
16
|
-
puts "Received request: '#{request}'"
|
17
|
-
yield CloudEventHelper.convert(text_data: @default_response)
|
18
|
-
# Pause 1 second between messages to show how the messages get exchanged
|
19
|
-
sleep 1
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../cloud_event_helpers/cloud_event_helper'
|
4
|
-
require_relative '../proto/cloud_event_services_pb'
|
5
|
-
require_relative 'cloud_event_chat_enum'
|
6
|
-
require_relative 'cloud_event_enum'
|
7
|
-
|
8
|
-
# Implements the CloudEvents service defined in proto/cloud_event.proto
|
9
|
-
class CloudEventsService < CloudEvents::Service
|
10
|
-
def initialize(socket:, clients:) # rubocop:disable Lint/MissingSuper
|
11
|
-
@socket = socket
|
12
|
-
@message = "ping from #{@socket}"
|
13
|
-
@clients = clients
|
14
|
-
end
|
15
|
-
|
16
|
-
def get_cloud_event(request, _call)
|
17
|
-
puts "Received request: '#{request}'"
|
18
|
-
|
19
|
-
# Forward request to other services if message equals "forward"
|
20
|
-
if request.text_data == 'forward'
|
21
|
-
@clients.each do |client|
|
22
|
-
response = client.send_1req_1resp(data: @message)
|
23
|
-
puts "Reply from: '#{response}'"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
CloudEventHelper.convert(text_data: @message)
|
28
|
-
end
|
29
|
-
|
30
|
-
def send_cloud_events(request, _call)
|
31
|
-
puts "Received request: '#{request}'"
|
32
|
-
|
33
|
-
# Forward request to other services if message equals "forward"
|
34
|
-
if request.text_data == 'forward'
|
35
|
-
@clients.each do |client|
|
36
|
-
responses = client.send_1req_streamresp(data: @message)
|
37
|
-
|
38
|
-
responses.each do |response|
|
39
|
-
puts "Reply from: '#{response}'"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
CloudEventEnum.new(data: @message, amount: 3).each
|
45
|
-
end
|
46
|
-
|
47
|
-
def forward_to_services?(call)
|
48
|
-
forward = true
|
49
|
-
call.each_remote_read do |request|
|
50
|
-
puts "Received request: '#{request}'"
|
51
|
-
forward = false unless request.text_data == 'forward'
|
52
|
-
end
|
53
|
-
|
54
|
-
forward
|
55
|
-
end
|
56
|
-
|
57
|
-
def get_cloud_events(call)
|
58
|
-
forward = forward_to_services?(call)
|
59
|
-
|
60
|
-
# Forward request to other services if message equals "forward"
|
61
|
-
if forward
|
62
|
-
@clients.each do |client|
|
63
|
-
response = client.send_streamreq_1resp(data: @message)
|
64
|
-
puts "Reply from: '#{response}'"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
CloudEventHelper.convert(text_data: @message)
|
69
|
-
end
|
70
|
-
|
71
|
-
def chat(call)
|
72
|
-
CloudEventChatEnum.new(requests: call, default_response: @message).each
|
73
|
-
end
|
74
|
-
end
|