grpc_toolbox 0.0.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da2f6797db91e94219dec03cec4c4307c5024214a01960be0792bbbed7ae5fba
4
- data.tar.gz: b7f81cb665732370b3a6970f9dad032a7b9da91e671dbd1b0f4fd83a350306c5
3
+ metadata.gz: 732e7da9e1516a9874903eb6c23e79524abd00bd13e66c9a03ababb86ba4a0f8
4
+ data.tar.gz: 983fcd3880d64149681633808be70a64e0b37d88f733a63fa0a9add74f172660
5
5
  SHA512:
6
- metadata.gz: 842da7b4be6a6d0fa2a1f3d3959b10f60e0f62ac04781f482e297f78db417b83dab1a601a3459d660f1802993178d0bc7ff84a6ac4743be77cb23bcd77595958
7
- data.tar.gz: 8cfa6e2259ef1779df889c3cd6c5a0d7aa41f672123ce272ec4571b553c2b753fa2b9068917d8d297520362d3c4e141965b5052e69926c7495c701fffcffc21e
6
+ metadata.gz: 3807eebd4573933256b6ba1c08bf262b52c0d9c91d80a3d3cbe9beb69fe8fd05810da34b3c6295279120a95b26d03423e0206ed452574d88593d2f5b9c4f5179
7
+ data.tar.gz: 0603ca06512bcbe05e9d4f1add9a8dc64b16389ed4c2fdb8f2dd57b387651e57ea758b9e452b9146da8573cf4dafa9deb2eb43194b2e1521bfeb6a1adcc31531
data/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
+ and this project adheres to [Semantic Versioning 2.0.0](http://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [0.1.1] - 2023-04-06
8
+ ### Changed
9
+ - Republish with a different version due to yank.
10
+
11
+ ## [0.1.0] - 2023-04-06
12
+ ### Added
13
+ - Changed gemspec configuration
14
+ - Changed `.send_audit_request` based on grpc server changes
15
+ - Added validation on `.send_audit_request` parameters
16
+
17
+ ## [0.0.0] - 2023-04-04
18
+ ### Added
19
+ - Created GRPC Toolbox MVP
data/README.md ADDED
@@ -0,0 +1,128 @@
1
+ # GrpcToolbox
2
+
3
+ This is a Gem created to manage the connection of a ruby/rails service
4
+ to Guide's GRPC Server (Sidecar). With it you can simplify the connection
5
+ process and send data to the sidecar both synchronously and asynchronously.
6
+
7
+ ## Pre-requisites
8
+
9
+ In order to connect to the grpc server, the app *must* use the https protocol.
10
+ In order to successfully connect to the server through https - instead of having it's connection
11
+ refused -, a `.crt ` security certificate file must be provided.
12
+
13
+ ## Installation
14
+
15
+ You can do that by either adding this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'grpc_toolbox'
19
+ ```
20
+
21
+ And then executing:
22
+
23
+ ```bash
24
+ bundle install
25
+ ```
26
+
27
+ Or by installing directly with:
28
+
29
+ ```bash
30
+ gem install grpc_toolbox
31
+ ```
32
+
33
+ ## Configuration
34
+ ## Step 1 - Configure the Certificate Volume
35
+
36
+ You only need to this step if you're using `docker` or `docker-compose` to run the application.
37
+ As said on the `Pre-requisites` section, you'll need a `.crt` file that can authenticate your connection
38
+ to the grpc server.
39
+ This step is to make it so the container can copy the `.crt` file provided by the host.
40
+
41
+ If you're using docker-compose, all you'll need to do is to make sure the `volumes` section of your
42
+ `docker-compose.yaml` has this line:
43
+
44
+ ```yaml
45
+ volumes:
46
+ - "${HOST_CERTIFICATES}/:${CONTAINER_CERTIFICATES_FOLDER}/"
47
+ ```
48
+
49
+ Where:
50
+
51
+ * `HOST_CERTIFICATES` is the path to the folder on the HOST machine where the .crt file is located
52
+ * `CONTAINER_CERTIFICATES_FOLDER` is the path to folder on the CONTAINER where the host's files are going to be copied to.
53
+
54
+ Example:
55
+
56
+ ```yaml
57
+ volumes:
58
+ - "/home/master/certificates/:/https/"
59
+ ```
60
+
61
+ if you're using `docker run`, you'll need to add the following option to your command:
62
+
63
+ ```bash
64
+ -v {HOST_CERTIFICATES}:{CONTAINER_CERTIFICATES_FOLDER}
65
+ ```
66
+
67
+ Where:
68
+
69
+ * `HOST_CERTIFICATES` is the path to the folder on the HOST machine where the .crt file is located
70
+ * `CONTAINER_CERTIFICATES_FOLDER` is the path to folder on the CONTAINER where the host's files are going to be copied to.
71
+
72
+ Example:
73
+
74
+ ```bash
75
+ docker run --name your_service -v /home/master/certificates:/https/ your-image
76
+ ```
77
+
78
+ ## Step 2 - Configure the Environment Variables
79
+
80
+ Create a file named `grpc_toolbox.rb` inside the `config/initializers`, then add the following lines:
81
+
82
+ ```ruby
83
+ GRPCToolbox.configure do |config|
84
+ config.server = {GRPC_SERVER_HOST}
85
+ config.certificate_path = {CONTAINER_CERTIFICATES_FULLPATH}
86
+ end
87
+ ```
88
+
89
+ Where
90
+
91
+ * `GRPC_SERVER_HOST` is the address the gem will use to communicate to the grpc_server
92
+ * `CONTAINER_CERTIFICATES_FULLPATH` is the full path to the `.crt` file the gem will use, including the file name.
93
+ * If this gem is being used on a docker container, the path should relate to a path inside the container.
94
+
95
+ Example:
96
+
97
+ ```ruby
98
+ GRPCToolbox.configure do |config|
99
+ config.server = "sidecar:443"
100
+ config.certificate_path = "/https/example.crt"
101
+ end
102
+ ```
103
+
104
+ ## Usage
105
+
106
+ Once configured, you'll just need to create an client object:
107
+
108
+ ```ruby
109
+ client = GRPCToolbox::Client.new
110
+ ```
111
+
112
+ then, pass the params you want to send as hash to the function `send_audit_request`:
113
+
114
+ ```ruby
115
+ params = {
116
+ origin_ip: '127.0.0.1',
117
+ username: 'rlnascimento',
118
+ origin_type: 'num-sei',
119
+ system: 'gem-toolbox',
120
+ module: 'gem',
121
+ operation_type: 'update'
122
+ }
123
+
124
+ client.async.send_audit_request(params)
125
+ ```
126
+
127
+ You can either use `client.async.send_audit_request` or `client.send_audit_request`. The logic is
128
+ the same, the only difference is that the first one is asynchronous and the second one is not.
data/lib/auditor_pb.rb CHANGED
@@ -15,8 +15,8 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
15
15
  optional :system, :string, 5
16
16
  optional :module, :string, 6
17
17
  optional :operation_type, :string, 7
18
- optional :diff_data, :bytes, 8
19
- optional :full_data, :bytes, 9
18
+ optional :changed_data, :bytes, 8
19
+ optional :audited_data, :bytes, 9
20
20
  end
21
21
  add_message "auditor.SendAuditReply" do
22
22
  optional :accepted, :bool, 1
@@ -2,27 +2,34 @@
2
2
 
3
3
  require 'grpc'
4
4
  require 'concurrent-ruby'
5
+ require 'google/protobuf/well_known_types'
5
6
 
7
+ require 'auditor_pb'
6
8
  require 'auditor_services_pb'
7
9
 
8
10
  module GRPCToolbox
9
11
  class Client
10
12
  include Concurrent::Async
11
13
 
14
+ REQUIRED_PARAMS = %i[system module username origin_ip audited_data].freeze
15
+
12
16
  def config
13
17
  @config ||= GRPCToolbox.configuration
14
18
  end
15
19
 
16
20
  def send_audit_request(params)
17
- stub = Auditor::Auditor::Stub.new(config.server,channel_credentials)
18
-
19
- begin
20
- message = stub.send_audit(
21
- Auditor::SendAuditRequest.new(audit_request_params(params))
22
- ).message
23
- rescue GRPC::BadStatus => e
24
- abort "ERROR: #{e.message}"
25
- end
21
+ validate_params(params)
22
+
23
+ stub = Auditor::Auditor::Stub.new(config.server, channel_credentials)
24
+
25
+ stub.send_audit(
26
+ Auditor::SendAuditRequest.new(audit_request_params(params))
27
+ )
28
+ rescue StandardError => e
29
+ Auditor::SendAuditReply.new(
30
+ accepted: false,
31
+ message: "EXCEPTION - #{e.class} : #{e.message}"
32
+ )
26
33
  end
27
34
 
28
35
  private
@@ -34,19 +41,23 @@ module GRPCToolbox
34
41
  end
35
42
 
36
43
  def audit_request_params(params)
37
- # TODO: pensar numa forma de indicar ao cliente como mandar os parametros corretos
38
- # TODO: adicionar uma clausula que quebra caso algum dado importante nao seja mandado
39
44
  {
40
- origin_ip: params[:origin_ip],
41
- username: params[:username],
45
+ origin_ip: params[:origin_ip], username: params[:username],
42
46
  origin_type: params[:origin_type],
43
- operation_timestamp: Time.now.getutc,
44
- system: params[:system],
45
- module: params[:module],
47
+ operation_timestamp: Google::Protobuf::Timestamp.new.from_time(Time.now),
48
+ system: params[:system], module: params[:module],
46
49
  operation_type: params[:operation_type],
47
- diff_data: params[:diff_data],
48
- full_data: params[:full_data]
50
+ changed_data: params[:changed_data],
51
+ audited_data: params[:audited_data]
49
52
  }
50
53
  end
54
+
55
+ def validate_params(params)
56
+ errors = REQUIRED_PARAMS.filter_map do |param|
57
+ "#{param} can't be nil" if params[param].nil?
58
+ end
59
+
60
+ raise ArgumentError, errors.join('; ') unless errors.empty?
61
+ end
51
62
  end
52
63
  end
@@ -4,4 +4,4 @@ module GRPCToolbox
4
4
  class Configuration
5
5
  attr_accessor :server, :certificate_path
6
6
  end
7
- end
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GRPCToolbox
4
+ VERSION = '0.1.1'
5
+ end
data/lib/grpc_toolbox.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'grpc_toolbox/client'
4
4
  require 'grpc_toolbox/configuration'
5
+ require 'grpc_toolbox/version'
5
6
 
6
7
  module GRPCToolbox
7
8
  class << self
@@ -17,4 +18,4 @@ module GRPCToolbox
17
18
  yield(configuration)
18
19
  end
19
20
  end
20
- end
21
+ end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpc_toolbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ricardo de Lucas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-23 00:00:00.000000000 Z
11
+ date: 2023-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: concurrent-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 13.0.6
19
+ version: 1.2.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 13.0.6
26
+ version: 1.2.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: google-protobuf
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.21'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.21'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: grpc
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,61 +53,89 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: 1.52.0
41
55
  - !ruby/object:Gem::Dependency
42
- name: concurrent-ruby
56
+ name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - '='
46
60
  - !ruby/object:Gem::Version
47
- version: 1.2.2
61
+ version: 13.0.6
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - '='
53
67
  - !ruby/object:Gem::Version
54
- version: 1.2.2
68
+ version: 13.0.6
69
+ - !ruby/object:Gem::Dependency
70
+ name: dotenv
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.8.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 2.8.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: grpc_mock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.4'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.4'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: grpc-tools
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
- - - ">="
101
+ - - "~>"
60
102
  - !ruby/object:Gem::Version
61
- version: '0'
103
+ version: 1.50.0
62
104
  type: :development
63
105
  prerelease: false
64
106
  version_requirements: !ruby/object:Gem::Requirement
65
107
  requirements:
66
- - - ">="
108
+ - - "~>"
67
109
  - !ruby/object:Gem::Version
68
- version: '0'
110
+ version: 1.50.0
69
111
  - !ruby/object:Gem::Dependency
70
- name: dotenv
112
+ name: pry
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
- - - ">="
115
+ - - "~>"
74
116
  - !ruby/object:Gem::Version
75
- version: '0'
117
+ version: '0.13'
76
118
  type: :development
77
119
  prerelease: false
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
- - - ">="
122
+ - - "~>"
81
123
  - !ruby/object:Gem::Version
82
- version: '0'
124
+ version: '0.13'
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: pry-byebug
85
127
  requirement: !ruby/object:Gem::Requirement
86
128
  requirements:
87
- - - ">="
129
+ - - "~>"
88
130
  - !ruby/object:Gem::Version
89
- version: '0'
131
+ version: '3.10'
90
132
  type: :development
91
133
  prerelease: false
92
134
  version_requirements: !ruby/object:Gem::Requirement
93
135
  requirements:
94
- - - ">="
136
+ - - "~>"
95
137
  - !ruby/object:Gem::Version
96
- version: '0'
138
+ version: '3.10'
97
139
  - !ruby/object:Gem::Dependency
98
140
  name: rspec
99
141
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +150,20 @@ dependencies:
108
150
  - - "~>"
109
151
  - !ruby/object:Gem::Version
110
152
  version: '3.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.49'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.49'
111
167
  - !ruby/object:Gem::Dependency
112
168
  name: shoulda-matchers
113
169
  requirement: !ruby/object:Gem::Requirement
@@ -122,18 +178,21 @@ dependencies:
122
178
  - - "~>"
123
179
  - !ruby/object:Gem::Version
124
180
  version: '3.1'
125
- description: A simple grpc gem for now
181
+ description: A simple grpc client for Guide's Sidecar
126
182
  email: rlnascimento@guide.com.br
127
183
  executables: []
128
184
  extensions: []
129
185
  extra_rdoc_files: []
130
186
  files:
187
+ - CHANGELOG.md
188
+ - README.md
131
189
  - lib/auditor_pb.rb
132
190
  - lib/auditor_services_pb.rb
133
191
  - lib/grpc_toolbox.rb
134
192
  - lib/grpc_toolbox/client.rb
135
193
  - lib/grpc_toolbox/configuration.rb
136
- homepage: https://rubygems.org/gems/hola
194
+ - lib/grpc_toolbox/version.rb
195
+ homepage: https://bitbucket.org/guideinvestimentos/grpc_toolbox/src/master/
137
196
  licenses:
138
197
  - MIT
139
198
  metadata: {}
@@ -145,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
204
  requirements:
146
205
  - - ">="
147
206
  - !ruby/object:Gem::Version
148
- version: '0'
207
+ version: 3.1.0
149
208
  required_rubygems_version: !ruby/object:Gem::Requirement
150
209
  requirements:
151
210
  - - ">="