evrblk 0.1.0
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 +7 -0
- data/Gemfile +23 -0
- data/LICENSE +21 -0
- data/README.md +41 -0
- data/evrblk.gemspec +42 -0
- data/lib/evrblk/authn/alfa.rb +33 -0
- data/lib/evrblk/authn/base.rb +43 -0
- data/lib/evrblk/authn/bravo.rb +26 -0
- data/lib/evrblk/authn/request_signer.rb +44 -0
- data/lib/evrblk/grackle/preview/api_pb.rb +71 -0
- data/lib/evrblk/grackle/preview/api_services_pb.rb +48 -0
- data/lib/evrblk/grackle/preview/client.rb +126 -0
- data/lib/evrblk/hash_converter.rb +62 -0
- data/lib/evrblk/iam/preview/api_pb.rb +56 -0
- data/lib/evrblk/iam/preview/api_services_pb.rb +39 -0
- data/lib/evrblk/iam/preview/client.rb +81 -0
- data/lib/evrblk/moab/preview/api_pb.rb +63 -0
- data/lib/evrblk/moab/preview/api_services_pb.rb +41 -0
- data/lib/evrblk/moab/preview/client.rb +90 -0
- data/lib/evrblk/myaccount/preview/api_pb.rb +25 -0
- data/lib/evrblk/myaccount/preview/api_services_pb.rb +26 -0
- data/lib/evrblk/myaccount/preview/client.rb +17 -0
- data/lib/evrblk/version.rb +5 -0
- data/lib/evrblk.rb +28 -0
- data/proto/grackle/preview/api.proto +325 -0
- data/proto/iam/preview/api.proto +230 -0
- data/proto/moab/preview/api.proto +307 -0
- data/proto/myaccount/preview/api.proto +68 -0
- data/protogen.sh +6 -0
- metadata +75 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9924f424ed8bba173f553b935b33bc1d257a8e8c03723e548cda6d805b5d1f2d
|
|
4
|
+
data.tar.gz: 44770bfbd52e3a904a77fcc1405281d4627680248817f5c645b52051f897a7af
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e0242e58cdde7851fd715020d01cd825777e57adf2f15ef7d9d759a108941e26df879339ae1bd7ceab823bea8e1204a55c1c26c02b5203e9a1c0c50bfff86da4
|
|
7
|
+
data.tar.gz: d5546338df65de54a9018f4382cf840da2b1506ddeb42248e20a12a8c8e6f688f89d7a6cecb5d36bd332914c65b61ad72aaf8b3926d043c32d4182b3fd293e14
|
data/Gemfile
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gemspec
|
|
6
|
+
|
|
7
|
+
gem "grpc"
|
|
8
|
+
gem "base64"
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem "rake"
|
|
12
|
+
gem "grpc-tools"
|
|
13
|
+
gem "test-unit"
|
|
14
|
+
|
|
15
|
+
# Rubocop changes pretty quickly: new cops get added and old cops change
|
|
16
|
+
# names or go into new namespaces. This is a library and we don't have
|
|
17
|
+
# `Gemfile.lock` checked in, so to prevent good builds from suddenly going
|
|
18
|
+
# bad, pin to a specific version number here. Try to keep this relatively
|
|
19
|
+
# up-to-date, but it's not the end of the world if it's not.
|
|
20
|
+
#
|
|
21
|
+
# The latest version of rubocop is only compatible with Ruby 2.7+
|
|
22
|
+
gem "rubocop", "1.57.2" if RUBY_VERSION >= "2.7"
|
|
23
|
+
end
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 EVRBLK
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Everblack Ruby SDK
|
|
2
|
+
|
|
3
|
+
## Installing
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
gem install evrblk
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Example
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
require "evrblk"
|
|
13
|
+
|
|
14
|
+
api_key_id = "key_alfa_z141pKeFzfmGGyYlUyPsbF"
|
|
15
|
+
api_key_secret = <<-END
|
|
16
|
+
-----BEGIN EC PRIVATE KEY-----
|
|
17
|
+
MHcCAQEEIN33cCNGxsuxwMaJ2jWvWcgxBSVr8HV7WUUSKGc71/BtoAoGCCqGSM49
|
|
18
|
+
AwEHoUQDQgAE0m8+ZVijytLp01dsupG7QF8ZpjX5UmP20wj/sluPdoHW3BgiiyCn
|
|
19
|
+
/pMwYptUs0yJUtUZ/0wzEyp8PgAWWhxglw==
|
|
20
|
+
-----END EC PRIVATE KEY-----
|
|
21
|
+
END
|
|
22
|
+
|
|
23
|
+
signer = Evrblk::AuthN::RequestSigner.new(api_key_id, api_key_secret)
|
|
24
|
+
grackle_client = Evrblk::Grackle::Preview::Client.new(signer, "localhost:8000")
|
|
25
|
+
|
|
26
|
+
grackle_client.create_namespace(
|
|
27
|
+
name: "mynamespace"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
now = Time.now
|
|
31
|
+
grackle_client.acquire_lock(
|
|
32
|
+
namespace_name: "mynamespace",
|
|
33
|
+
lock_name: "lock1",
|
|
34
|
+
process_id: "process1",
|
|
35
|
+
expires_at: (now.to_i + 60*5) * (10 ** 9) + now.nsec # expires in 5 min
|
|
36
|
+
)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## License
|
|
40
|
+
|
|
41
|
+
Everblack Ruby SDK is released under the [MIT License](https://opensource.org/licenses/MIT).
|
data/evrblk.gemspec
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "lib"))
|
|
4
|
+
|
|
5
|
+
require "evrblk/version"
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |s|
|
|
8
|
+
s.name = "evrblk"
|
|
9
|
+
s.version = Evrblk::VERSION
|
|
10
|
+
s.required_ruby_version = ">= 2.3.0"
|
|
11
|
+
s.summary = "Ruby bindings for the Everblack API"
|
|
12
|
+
s.description = "Build simple, secure, scalable systems with Everblack. " \
|
|
13
|
+
"See https://everblack.dev for details."
|
|
14
|
+
s.authors = ["Stanislav Spiridonov", "Everblack"]
|
|
15
|
+
s.email = "stanislav@spiridonov.pro"
|
|
16
|
+
s.homepage = "https://everblack.dev"
|
|
17
|
+
s.license = "MIT"
|
|
18
|
+
|
|
19
|
+
s.metadata = {
|
|
20
|
+
"bug_tracker_uri" => "https://github.com/evrblk/evrblk-ruby/issues",
|
|
21
|
+
# "changelog_uri" =>
|
|
22
|
+
# "https://github.com/evrblk/evrblk-ruby/blob/master/CHANGELOG.md",
|
|
23
|
+
"documentation_uri" => "https://everblack.dev/docs",
|
|
24
|
+
"github_repo" => "ssh://github.com/evrblk/evrblk-ruby",
|
|
25
|
+
"homepage_uri" => "https://everblack.dev",
|
|
26
|
+
"source_code_uri" => "https://github.com/evrblk/evrblk-ruby",
|
|
27
|
+
"rubygems_mfa_required" => "false",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ignored = Regexp.union(
|
|
31
|
+
/\A\.editorconfig/,
|
|
32
|
+
/\A\.git/,
|
|
33
|
+
/\A\.rubocop/,
|
|
34
|
+
/\A\.travis.yml/,
|
|
35
|
+
/\A\.vscode/,
|
|
36
|
+
/\A\.cursor/,
|
|
37
|
+
/\Abin/,
|
|
38
|
+
/\Atest/
|
|
39
|
+
)
|
|
40
|
+
s.files = `git ls-files`.split("\n").grep_v(ignored)
|
|
41
|
+
s.require_paths = ["lib"]
|
|
42
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'openssl'
|
|
4
|
+
require 'base64'
|
|
5
|
+
|
|
6
|
+
module Evrblk
|
|
7
|
+
module AuthN
|
|
8
|
+
class Alfa < Base
|
|
9
|
+
def initialize(private_key_pem)
|
|
10
|
+
# Parse the PEM-encoded private key
|
|
11
|
+
@private_key = OpenSSL::PKey::EC.new(private_key_pem)
|
|
12
|
+
|
|
13
|
+
# Verify that the private key is using the correct curve
|
|
14
|
+
unless @private_key.group.curve_name == 'prime256v1'
|
|
15
|
+
raise "Invalid key: Expected secp256r1 (prime256v1) but got #{@private_key.group.curve_name}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def sign(request, timestamp)
|
|
20
|
+
# Serialize timestamp and request body
|
|
21
|
+
data = serialize_int64(timestamp) + marshal_protobuf(request)
|
|
22
|
+
|
|
23
|
+
# Sign a digest using SHA-256 with the private key
|
|
24
|
+
signature = @private_key.sign(OpenSSL::Digest::SHA256.new, data)
|
|
25
|
+
|
|
26
|
+
# Convert the signature to Base64
|
|
27
|
+
signature_base64 = Base64.strict_encode64(signature)
|
|
28
|
+
|
|
29
|
+
return signature_base64
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Evrblk
|
|
4
|
+
module AuthN
|
|
5
|
+
class Base
|
|
6
|
+
def sign(request, timestamp)
|
|
7
|
+
raise "Implement me"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
# Serializes an Int64 value into an 8-byte big-endian
|
|
13
|
+
def serialize_int64(value)
|
|
14
|
+
# Ensure the value is within the 64-bit integer range
|
|
15
|
+
if value < -9223372036854775808 || value > 9223372036854775807
|
|
16
|
+
raise ArgumentError, "Value is outside the Int64 range"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Pack the integer into 8 bytes with big-endian byte order
|
|
20
|
+
bytes = [value].pack('q>')
|
|
21
|
+
|
|
22
|
+
return bytes
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Marshals a protobuf object into a byte array with deterministic serialization.
|
|
26
|
+
# The deterministic option ensures consistent byte representation regardless of system.
|
|
27
|
+
def marshal_protobuf(obj)
|
|
28
|
+
# Ensure the object is a valid protobuf message
|
|
29
|
+
unless obj.is_a?(Google::Protobuf::MessageExts)
|
|
30
|
+
raise ArgumentError, "Object must be a Google::Protobuf message"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Marshal the protobuf object with deterministic serialization option
|
|
34
|
+
options = { deterministic: true }
|
|
35
|
+
|
|
36
|
+
# Encode the protobuf message to bytes
|
|
37
|
+
bytes = obj.to_proto(options)
|
|
38
|
+
|
|
39
|
+
return bytes
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'base64'
|
|
4
|
+
|
|
5
|
+
module Evrblk
|
|
6
|
+
module AuthN
|
|
7
|
+
class Bravo < Base
|
|
8
|
+
def initialize(secret_base64)
|
|
9
|
+
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def sign(request, timestamp)
|
|
13
|
+
# Serialize timestamp and request body
|
|
14
|
+
data = serialize_int64(timestamp) + marshal_protobuf(request)
|
|
15
|
+
|
|
16
|
+
# Sign a digest using SHA-256 with the private key
|
|
17
|
+
signature = @private_key.sign(OpenSSL::Digest::SHA256.new, data)
|
|
18
|
+
|
|
19
|
+
# Convert the signature to Base64
|
|
20
|
+
signature_base64 = Base64.strict_encode64(signature)
|
|
21
|
+
|
|
22
|
+
return signature_base64
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Evrblk
|
|
4
|
+
module AuthN
|
|
5
|
+
class RequestSigner
|
|
6
|
+
def initialize(api_key_id, api_key_secret)
|
|
7
|
+
if !api_key_id.match?(/key_(alfa|bravo)_[0-9a-zA-Z]+/)
|
|
8
|
+
raise ArgumentError, "Invalid API Key ID #{api_key_id}"
|
|
9
|
+
end
|
|
10
|
+
@api_key_id = api_key_id
|
|
11
|
+
|
|
12
|
+
if api_key_id.start_with?("key_alfa")
|
|
13
|
+
@signer = Evrblk::AuthN::Alfa.new(api_key_secret)
|
|
14
|
+
else
|
|
15
|
+
@signer = Evrblk::AuthN::Bravo.new(api_key_secret)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def sign(request)
|
|
20
|
+
# Take current time
|
|
21
|
+
timestamp = Time.now.to_i
|
|
22
|
+
|
|
23
|
+
# Sign the request body with the timestamp
|
|
24
|
+
signature = @signer.sign(request, timestamp)
|
|
25
|
+
|
|
26
|
+
# Return gRPC headers for authentication
|
|
27
|
+
return {
|
|
28
|
+
"evrblk-signature": signature,
|
|
29
|
+
"evrblk-api-key-id": @api_key_id,
|
|
30
|
+
"evrblk-timestamp": timestamp.to_s,
|
|
31
|
+
}
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class NoOpSigner
|
|
36
|
+
def initialize()
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def sign(request)
|
|
40
|
+
return {}
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: grackle/preview/api.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x19grackle/preview/api.proto\x12\x1a\x63om.evrblk.grackle.preview\";\n\x16\x43reateNamespaceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"S\n\x17\x43reateNamespaceResponse\x12\x38\n\tnamespace\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Namespace\"@\n\x15ListNamespacesRequest\x12\x18\n\x10pagination_token\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x05\"\x95\x01\n\x16ListNamespacesResponse\x12\x39\n\nnamespaces\x18\x01 \x03(\x0b\x32%.com.evrblk.grackle.preview.Namespace\x12\x1d\n\x15next_pagination_token\x18\x02 \x01(\t\x12!\n\x19previous_pagination_token\x18\x03 \x01(\t\"-\n\x13GetNamespaceRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\"P\n\x14GetNamespaceResponse\x12\x38\n\tnamespace\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Namespace\"0\n\x16\x44\x65leteNamespaceRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\"\x19\n\x17\x44\x65leteNamespaceResponse\"E\n\x16UpdateNamespaceRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"S\n\x17UpdateNamespaceResponse\x12\x38\n\tnamespace\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Namespace\"n\n\x16\x43reateSemaphoreRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x16\n\x0esemaphore_name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07permits\x18\x04 \x01(\x04\"S\n\x17\x43reateSemaphoreResponse\x12\x38\n\tsemaphore\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Semaphore\"X\n\x15ListSemaphoresRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x18\n\x10pagination_token\x18\x02 \x01(\t\x12\r\n\x05limit\x18\x03 \x01(\x05\"\x95\x01\n\x16ListSemaphoresResponse\x12\x39\n\nsemaphores\x18\x01 \x03(\x0b\x32%.com.evrblk.grackle.preview.Semaphore\x12\x1d\n\x15next_pagination_token\x18\x02 \x01(\t\x12!\n\x19previous_pagination_token\x18\x03 \x01(\t\"E\n\x13GetSemaphoreRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x16\n\x0esemaphore_name\x18\x02 \x01(\t\"P\n\x14GetSemaphoreResponse\x12\x38\n\tsemaphore\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Semaphore\"q\n\x17\x41\x63quireSemaphoreRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x16\n\x0esemaphore_name\x18\x02 \x01(\t\x12\x12\n\nprocess_id\x18\x03 \x01(\t\x12\x12\n\nexpires_at\x18\x04 \x01(\x03\"e\n\x18\x41\x63quireSemaphoreResponse\x12\x38\n\tsemaphore\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Semaphore\x12\x0f\n\x07success\x18\x02 \x01(\x08\"]\n\x17ReleaseSemaphoreRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x16\n\x0esemaphore_name\x18\x02 \x01(\t\x12\x12\n\nprocess_id\x18\x03 \x01(\t\"T\n\x18ReleaseSemaphoreResponse\x12\x38\n\tsemaphore\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Semaphore\"n\n\x16UpdateSemaphoreRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x16\n\x0esemaphore_name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07permits\x18\x04 \x01(\x04\"S\n\x17UpdateSemaphoreResponse\x12\x38\n\tsemaphore\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.Semaphore\"H\n\x16\x44\x65leteSemaphoreRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x16\n\x0esemaphore_name\x18\x02 \x01(\t\"\x19\n\x17\x44\x65leteSemaphoreResponse\"\xaf\x01\n\tSemaphore\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x12\n\ncreated_at\x18\x03 \x01(\x03\x12\x12\n\nupdated_at\x18\x04 \x01(\x03\x12\x0f\n\x07permits\x18\x05 \x01(\x04\x12\x46\n\x11semaphore_holders\x18\x06 \x03(\x0b\x32+.com.evrblk.grackle.preview.SemaphoreHolder\"L\n\x0fSemaphoreHolder\x12\x12\n\nprocess_id\x18\x01 \x01(\t\x12\x11\n\tlocked_at\x18\x02 \x01(\x03\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\"\x83\x01\n\x16\x43reateWaitGroupRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x17\n\x0fwait_group_name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07\x63ounter\x18\x04 \x01(\x04\x12\x12\n\nexpires_at\x18\x05 \x01(\x03\"T\n\x17\x43reateWaitGroupResponse\x12\x39\n\nwait_group\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.WaitGroup\"X\n\x15ListWaitGroupsRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x18\n\x10pagination_token\x18\x02 \x01(\t\x12\r\n\x05limit\x18\x03 \x01(\x05\"\x96\x01\n\x16ListWaitGroupsResponse\x12:\n\x0bwait_groups\x18\x01 \x03(\x0b\x32%.com.evrblk.grackle.preview.WaitGroup\x12\x1d\n\x15next_pagination_token\x18\x02 \x01(\t\x12!\n\x19previous_pagination_token\x18\x03 \x01(\t\"F\n\x13GetWaitGroupRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x17\n\x0fwait_group_name\x18\x02 \x01(\t\"Q\n\x14GetWaitGroupResponse\x12\x39\n\nwait_group\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.WaitGroup\"I\n\x16\x44\x65leteWaitGroupRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x17\n\x0fwait_group_name\x18\x02 \x01(\t\"\x19\n\x17\x44\x65leteWaitGroupResponse\"]\n\x19\x41\x64\x64JobsToWaitGroupRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x17\n\x0fwait_group_name\x18\x02 \x01(\t\x12\x0f\n\x07\x63ounter\x18\x03 \x01(\x04\"W\n\x1a\x41\x64\x64JobsToWaitGroupResponse\x12\x39\n\nwait_group\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.WaitGroup\"h\n CompleteJobsFromWaitGroupRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x17\n\x0fwait_group_name\x18\x02 \x01(\t\x12\x13\n\x0bprocess_ids\x18\x03 \x03(\t\"^\n!CompleteJobsFromWaitGroupResponse\x12\x39\n\nwait_group\x18\x01 \x01(\x0b\x32%.com.evrblk.grackle.preview.WaitGroup\"\x8e\x01\n\tWaitGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x12\n\ncreated_at\x18\x03 \x01(\x03\x12\x12\n\nupdated_at\x18\x04 \x01(\x03\x12\x12\n\nexpires_at\x18\x05 \x01(\x03\x12\x0f\n\x07\x63ounter\x18\x06 \x01(\x04\x12\x11\n\tcompleted\x18\x07 \x01(\x04\"{\n\x12\x41\x63quireLockRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x11\n\tlock_name\x18\x02 \x01(\t\x12\x12\n\nprocess_id\x18\x03 \x01(\t\x12\x12\n\nwrite_lock\x18\x04 \x01(\x08\x12\x12\n\nexpires_at\x18\x05 \x01(\x03\"V\n\x13\x41\x63quireLockResponse\x12.\n\x04lock\x18\x01 \x01(\x0b\x32 .com.evrblk.grackle.preview.Lock\x12\x0f\n\x07success\x18\x02 \x01(\x08\"S\n\x12ReleaseLockRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x11\n\tlock_name\x18\x02 \x01(\t\x12\x12\n\nprocess_id\x18\x03 \x01(\t\"E\n\x13ReleaseLockResponse\x12.\n\x04lock\x18\x01 \x01(\x0b\x32 .com.evrblk.grackle.preview.Lock\";\n\x0eGetLockRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x11\n\tlock_name\x18\x02 \x01(\t\"A\n\x0fGetLockResponse\x12.\n\x04lock\x18\x01 \x01(\x0b\x32 .com.evrblk.grackle.preview.Lock\">\n\x11\x44\x65leteLockRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x11\n\tlock_name\x18\x02 \x01(\t\"\x14\n\x12\x44\x65leteLockResponse\"S\n\x10ListLocksRequest\x12\x16\n\x0enamespace_name\x18\x01 \x01(\t\x12\x18\n\x10pagination_token\x18\x02 \x01(\t\x12\r\n\x05limit\x18\x03 \x01(\x05\"\x86\x01\n\x11ListLocksResponse\x12/\n\x05locks\x18\x01 \x03(\x0b\x32 .com.evrblk.grackle.preview.Lock\x12\x1d\n\x15next_pagination_token\x18\x02 \x01(\t\x12!\n\x19previous_pagination_token\x18\x03 \x01(\t\"\xe3\x01\n\x04Lock\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x34\n\x05state\x18\x02 \x01(\x0e\x32%.com.evrblk.grackle.preview.LockState\x12\x11\n\tlocked_at\x18\x03 \x01(\x03\x12\x41\n\x11write_lock_holder\x18\x04 \x01(\x0b\x32&.com.evrblk.grackle.preview.LockHolder\x12\x41\n\x11read_lock_holders\x18\x05 \x03(\x0b\x32&.com.evrblk.grackle.preview.LockHolder\"G\n\nLockHolder\x12\x12\n\nprocess_id\x18\x01 \x01(\t\x12\x11\n\tlocked_at\x18\x02 \x01(\x03\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\"V\n\tNamespace\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x12\n\ncreated_at\x18\x03 \x01(\x03\x12\x12\n\nupdated_at\x18\x04 \x01(\x03*<\n\tLockState\x12\x0c\n\x08UNLOCKED\x10\x00\x12\x0f\n\x0bREAD_LOCKED\x10\x01\x12\x10\n\x0cWRITE_LOCKED\x10\x02\x32\x9f\x16\n\x11GracklePreviewApi\x12|\n\x0f\x43reateNamespace\x12\x32.com.evrblk.grackle.preview.CreateNamespaceRequest\x1a\x33.com.evrblk.grackle.preview.CreateNamespaceResponse\"\x00\x12y\n\x0eListNamespaces\x12\x31.com.evrblk.grackle.preview.ListNamespacesRequest\x1a\x32.com.evrblk.grackle.preview.ListNamespacesResponse\"\x00\x12s\n\x0cGetNamespace\x12/.com.evrblk.grackle.preview.GetNamespaceRequest\x1a\x30.com.evrblk.grackle.preview.GetNamespaceResponse\"\x00\x12|\n\x0f\x44\x65leteNamespace\x12\x32.com.evrblk.grackle.preview.DeleteNamespaceRequest\x1a\x33.com.evrblk.grackle.preview.DeleteNamespaceResponse\"\x00\x12|\n\x0fUpdateNamespace\x12\x32.com.evrblk.grackle.preview.UpdateNamespaceRequest\x1a\x33.com.evrblk.grackle.preview.UpdateNamespaceResponse\"\x00\x12|\n\x0f\x43reateSemaphore\x12\x32.com.evrblk.grackle.preview.CreateSemaphoreRequest\x1a\x33.com.evrblk.grackle.preview.CreateSemaphoreResponse\"\x00\x12y\n\x0eListSemaphores\x12\x31.com.evrblk.grackle.preview.ListSemaphoresRequest\x1a\x32.com.evrblk.grackle.preview.ListSemaphoresResponse\"\x00\x12s\n\x0cGetSemaphore\x12/.com.evrblk.grackle.preview.GetSemaphoreRequest\x1a\x30.com.evrblk.grackle.preview.GetSemaphoreResponse\"\x00\x12\x7f\n\x10\x41\x63quireSemaphore\x12\x33.com.evrblk.grackle.preview.AcquireSemaphoreRequest\x1a\x34.com.evrblk.grackle.preview.AcquireSemaphoreResponse\"\x00\x12\x7f\n\x10ReleaseSemaphore\x12\x33.com.evrblk.grackle.preview.ReleaseSemaphoreRequest\x1a\x34.com.evrblk.grackle.preview.ReleaseSemaphoreResponse\"\x00\x12|\n\x0fUpdateSemaphore\x12\x32.com.evrblk.grackle.preview.UpdateSemaphoreRequest\x1a\x33.com.evrblk.grackle.preview.UpdateSemaphoreResponse\"\x00\x12|\n\x0f\x44\x65leteSemaphore\x12\x32.com.evrblk.grackle.preview.DeleteSemaphoreRequest\x1a\x33.com.evrblk.grackle.preview.DeleteSemaphoreResponse\"\x00\x12|\n\x0f\x43reateWaitGroup\x12\x32.com.evrblk.grackle.preview.CreateWaitGroupRequest\x1a\x33.com.evrblk.grackle.preview.CreateWaitGroupResponse\"\x00\x12y\n\x0eListWaitGroups\x12\x31.com.evrblk.grackle.preview.ListWaitGroupsRequest\x1a\x32.com.evrblk.grackle.preview.ListWaitGroupsResponse\"\x00\x12s\n\x0cGetWaitGroup\x12/.com.evrblk.grackle.preview.GetWaitGroupRequest\x1a\x30.com.evrblk.grackle.preview.GetWaitGroupResponse\"\x00\x12|\n\x0f\x44\x65leteWaitGroup\x12\x32.com.evrblk.grackle.preview.DeleteWaitGroupRequest\x1a\x33.com.evrblk.grackle.preview.DeleteWaitGroupResponse\"\x00\x12\x85\x01\n\x12\x41\x64\x64JobsToWaitGroup\x12\x35.com.evrblk.grackle.preview.AddJobsToWaitGroupRequest\x1a\x36.com.evrblk.grackle.preview.AddJobsToWaitGroupResponse\"\x00\x12\x9a\x01\n\x19\x43ompleteJobsFromWaitGroup\x12<.com.evrblk.grackle.preview.CompleteJobsFromWaitGroupRequest\x1a=.com.evrblk.grackle.preview.CompleteJobsFromWaitGroupResponse\"\x00\x12p\n\x0b\x41\x63quireLock\x12..com.evrblk.grackle.preview.AcquireLockRequest\x1a/.com.evrblk.grackle.preview.AcquireLockResponse\"\x00\x12p\n\x0bReleaseLock\x12..com.evrblk.grackle.preview.ReleaseLockRequest\x1a/.com.evrblk.grackle.preview.ReleaseLockResponse\"\x00\x12\x64\n\x07GetLock\x12*.com.evrblk.grackle.preview.GetLockRequest\x1a+.com.evrblk.grackle.preview.GetLockResponse\"\x00\x12m\n\nDeleteLock\x12-.com.evrblk.grackle.preview.DeleteLockRequest\x1a..com.evrblk.grackle.preview.DeleteLockResponse\"\x00\x12j\n\tListLocks\x12,.com.evrblk.grackle.preview.ListLocksRequest\x1a-.com.evrblk.grackle.preview.ListLocksResponse\"\x00\x42PZ3github.com/evrblk/evrblk-go/grackle/preview;grackle\xea\x02\x18\x45vrblk::Grackle::Previewb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Evrblk
|
|
14
|
+
module Grackle
|
|
15
|
+
module Preview
|
|
16
|
+
CreateNamespaceRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CreateNamespaceRequest").msgclass
|
|
17
|
+
CreateNamespaceResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CreateNamespaceResponse").msgclass
|
|
18
|
+
ListNamespacesRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListNamespacesRequest").msgclass
|
|
19
|
+
ListNamespacesResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListNamespacesResponse").msgclass
|
|
20
|
+
GetNamespaceRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetNamespaceRequest").msgclass
|
|
21
|
+
GetNamespaceResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetNamespaceResponse").msgclass
|
|
22
|
+
DeleteNamespaceRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteNamespaceRequest").msgclass
|
|
23
|
+
DeleteNamespaceResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteNamespaceResponse").msgclass
|
|
24
|
+
UpdateNamespaceRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.UpdateNamespaceRequest").msgclass
|
|
25
|
+
UpdateNamespaceResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.UpdateNamespaceResponse").msgclass
|
|
26
|
+
CreateSemaphoreRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CreateSemaphoreRequest").msgclass
|
|
27
|
+
CreateSemaphoreResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CreateSemaphoreResponse").msgclass
|
|
28
|
+
ListSemaphoresRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListSemaphoresRequest").msgclass
|
|
29
|
+
ListSemaphoresResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListSemaphoresResponse").msgclass
|
|
30
|
+
GetSemaphoreRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetSemaphoreRequest").msgclass
|
|
31
|
+
GetSemaphoreResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetSemaphoreResponse").msgclass
|
|
32
|
+
AcquireSemaphoreRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.AcquireSemaphoreRequest").msgclass
|
|
33
|
+
AcquireSemaphoreResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.AcquireSemaphoreResponse").msgclass
|
|
34
|
+
ReleaseSemaphoreRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ReleaseSemaphoreRequest").msgclass
|
|
35
|
+
ReleaseSemaphoreResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ReleaseSemaphoreResponse").msgclass
|
|
36
|
+
UpdateSemaphoreRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.UpdateSemaphoreRequest").msgclass
|
|
37
|
+
UpdateSemaphoreResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.UpdateSemaphoreResponse").msgclass
|
|
38
|
+
DeleteSemaphoreRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteSemaphoreRequest").msgclass
|
|
39
|
+
DeleteSemaphoreResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteSemaphoreResponse").msgclass
|
|
40
|
+
Semaphore = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.Semaphore").msgclass
|
|
41
|
+
SemaphoreHolder = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.SemaphoreHolder").msgclass
|
|
42
|
+
CreateWaitGroupRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CreateWaitGroupRequest").msgclass
|
|
43
|
+
CreateWaitGroupResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CreateWaitGroupResponse").msgclass
|
|
44
|
+
ListWaitGroupsRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListWaitGroupsRequest").msgclass
|
|
45
|
+
ListWaitGroupsResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListWaitGroupsResponse").msgclass
|
|
46
|
+
GetWaitGroupRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetWaitGroupRequest").msgclass
|
|
47
|
+
GetWaitGroupResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetWaitGroupResponse").msgclass
|
|
48
|
+
DeleteWaitGroupRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteWaitGroupRequest").msgclass
|
|
49
|
+
DeleteWaitGroupResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteWaitGroupResponse").msgclass
|
|
50
|
+
AddJobsToWaitGroupRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.AddJobsToWaitGroupRequest").msgclass
|
|
51
|
+
AddJobsToWaitGroupResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.AddJobsToWaitGroupResponse").msgclass
|
|
52
|
+
CompleteJobsFromWaitGroupRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CompleteJobsFromWaitGroupRequest").msgclass
|
|
53
|
+
CompleteJobsFromWaitGroupResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.CompleteJobsFromWaitGroupResponse").msgclass
|
|
54
|
+
WaitGroup = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.WaitGroup").msgclass
|
|
55
|
+
AcquireLockRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.AcquireLockRequest").msgclass
|
|
56
|
+
AcquireLockResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.AcquireLockResponse").msgclass
|
|
57
|
+
ReleaseLockRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ReleaseLockRequest").msgclass
|
|
58
|
+
ReleaseLockResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ReleaseLockResponse").msgclass
|
|
59
|
+
GetLockRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetLockRequest").msgclass
|
|
60
|
+
GetLockResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.GetLockResponse").msgclass
|
|
61
|
+
DeleteLockRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteLockRequest").msgclass
|
|
62
|
+
DeleteLockResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.DeleteLockResponse").msgclass
|
|
63
|
+
ListLocksRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListLocksRequest").msgclass
|
|
64
|
+
ListLocksResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.ListLocksResponse").msgclass
|
|
65
|
+
Lock = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.Lock").msgclass
|
|
66
|
+
LockHolder = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.LockHolder").msgclass
|
|
67
|
+
Namespace = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.Namespace").msgclass
|
|
68
|
+
LockState = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("com.evrblk.grackle.preview.LockState").enummodule
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
|
+
# Source: grackle/preview/api.proto for package 'Evrblk.Grackle.Preview'
|
|
3
|
+
|
|
4
|
+
require 'grpc'
|
|
5
|
+
require 'evrblk/grackle/preview/api_pb'
|
|
6
|
+
|
|
7
|
+
module Evrblk
|
|
8
|
+
module Grackle
|
|
9
|
+
module Preview
|
|
10
|
+
module GracklePreviewApi
|
|
11
|
+
class Service
|
|
12
|
+
|
|
13
|
+
include ::GRPC::GenericService
|
|
14
|
+
|
|
15
|
+
self.marshal_class_method = :encode
|
|
16
|
+
self.unmarshal_class_method = :decode
|
|
17
|
+
self.service_name = 'com.evrblk.grackle.preview.GracklePreviewApi'
|
|
18
|
+
|
|
19
|
+
rpc :CreateNamespace, ::Evrblk::Grackle::Preview::CreateNamespaceRequest, ::Evrblk::Grackle::Preview::CreateNamespaceResponse
|
|
20
|
+
rpc :ListNamespaces, ::Evrblk::Grackle::Preview::ListNamespacesRequest, ::Evrblk::Grackle::Preview::ListNamespacesResponse
|
|
21
|
+
rpc :GetNamespace, ::Evrblk::Grackle::Preview::GetNamespaceRequest, ::Evrblk::Grackle::Preview::GetNamespaceResponse
|
|
22
|
+
rpc :DeleteNamespace, ::Evrblk::Grackle::Preview::DeleteNamespaceRequest, ::Evrblk::Grackle::Preview::DeleteNamespaceResponse
|
|
23
|
+
rpc :UpdateNamespace, ::Evrblk::Grackle::Preview::UpdateNamespaceRequest, ::Evrblk::Grackle::Preview::UpdateNamespaceResponse
|
|
24
|
+
rpc :CreateSemaphore, ::Evrblk::Grackle::Preview::CreateSemaphoreRequest, ::Evrblk::Grackle::Preview::CreateSemaphoreResponse
|
|
25
|
+
rpc :ListSemaphores, ::Evrblk::Grackle::Preview::ListSemaphoresRequest, ::Evrblk::Grackle::Preview::ListSemaphoresResponse
|
|
26
|
+
rpc :GetSemaphore, ::Evrblk::Grackle::Preview::GetSemaphoreRequest, ::Evrblk::Grackle::Preview::GetSemaphoreResponse
|
|
27
|
+
rpc :AcquireSemaphore, ::Evrblk::Grackle::Preview::AcquireSemaphoreRequest, ::Evrblk::Grackle::Preview::AcquireSemaphoreResponse
|
|
28
|
+
rpc :ReleaseSemaphore, ::Evrblk::Grackle::Preview::ReleaseSemaphoreRequest, ::Evrblk::Grackle::Preview::ReleaseSemaphoreResponse
|
|
29
|
+
rpc :UpdateSemaphore, ::Evrblk::Grackle::Preview::UpdateSemaphoreRequest, ::Evrblk::Grackle::Preview::UpdateSemaphoreResponse
|
|
30
|
+
rpc :DeleteSemaphore, ::Evrblk::Grackle::Preview::DeleteSemaphoreRequest, ::Evrblk::Grackle::Preview::DeleteSemaphoreResponse
|
|
31
|
+
rpc :CreateWaitGroup, ::Evrblk::Grackle::Preview::CreateWaitGroupRequest, ::Evrblk::Grackle::Preview::CreateWaitGroupResponse
|
|
32
|
+
rpc :ListWaitGroups, ::Evrblk::Grackle::Preview::ListWaitGroupsRequest, ::Evrblk::Grackle::Preview::ListWaitGroupsResponse
|
|
33
|
+
rpc :GetWaitGroup, ::Evrblk::Grackle::Preview::GetWaitGroupRequest, ::Evrblk::Grackle::Preview::GetWaitGroupResponse
|
|
34
|
+
rpc :DeleteWaitGroup, ::Evrblk::Grackle::Preview::DeleteWaitGroupRequest, ::Evrblk::Grackle::Preview::DeleteWaitGroupResponse
|
|
35
|
+
rpc :AddJobsToWaitGroup, ::Evrblk::Grackle::Preview::AddJobsToWaitGroupRequest, ::Evrblk::Grackle::Preview::AddJobsToWaitGroupResponse
|
|
36
|
+
rpc :CompleteJobsFromWaitGroup, ::Evrblk::Grackle::Preview::CompleteJobsFromWaitGroupRequest, ::Evrblk::Grackle::Preview::CompleteJobsFromWaitGroupResponse
|
|
37
|
+
rpc :AcquireLock, ::Evrblk::Grackle::Preview::AcquireLockRequest, ::Evrblk::Grackle::Preview::AcquireLockResponse
|
|
38
|
+
rpc :ReleaseLock, ::Evrblk::Grackle::Preview::ReleaseLockRequest, ::Evrblk::Grackle::Preview::ReleaseLockResponse
|
|
39
|
+
rpc :GetLock, ::Evrblk::Grackle::Preview::GetLockRequest, ::Evrblk::Grackle::Preview::GetLockResponse
|
|
40
|
+
rpc :DeleteLock, ::Evrblk::Grackle::Preview::DeleteLockRequest, ::Evrblk::Grackle::Preview::DeleteLockResponse
|
|
41
|
+
rpc :ListLocks, ::Evrblk::Grackle::Preview::ListLocksRequest, ::Evrblk::Grackle::Preview::ListLocksResponse
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Stub = Service.rpc_stub_class
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Evrblk::Grackle::Preview
|
|
4
|
+
class Client
|
|
5
|
+
def initialize(request_signer, endpoint)
|
|
6
|
+
@grpc = Evrblk::Grackle::Preview::GracklePreviewApi::Stub.new(endpoint, :this_channel_is_insecure)
|
|
7
|
+
@request_signer = request_signer
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def create_namespace(request_hash)
|
|
11
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::CreateNamespaceRequest)
|
|
12
|
+
@grpc.create_namespace(request, metadata: @request_signer.sign(request))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def list_namespaces(request_hash)
|
|
16
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::ListNamespacesRequest)
|
|
17
|
+
@grpc.list_namespaces(request, metadata: @request_signer.sign(request))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def get_namespace(request_hash)
|
|
21
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::GetNamespaceRequest)
|
|
22
|
+
@grpc.get_namespace(request, metadata: @request_signer.sign(request))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def delete_namespace(request_hash)
|
|
26
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::DeleteNamespaceRequest)
|
|
27
|
+
@grpc.delete_namespace(request, metadata: @request_signer.sign(request))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def update_namespace(request_hash)
|
|
31
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::UpdateNamespaceRequest)
|
|
32
|
+
@grpc.update_namespace(request, metadata: @request_signer.sign(request))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def create_semaphore(request_hash)
|
|
36
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::CreateSemaphoreRequest)
|
|
37
|
+
@grpc.create_semaphore(request, metadata: @request_signer.sign(request))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def list_semaphores(request_hash)
|
|
41
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::ListSemaphoresRequest)
|
|
42
|
+
@grpc.list_semaphores(request, metadata: @request_signer.sign(request))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def get_semaphore(request_hash)
|
|
46
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::GetSemaphoreRequest)
|
|
47
|
+
@grpc.get_semaphore(request, metadata: @request_signer.sign(request))
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def acquire_semaphore(request_hash)
|
|
51
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::AcquireSemaphoreRequest)
|
|
52
|
+
@grpc.acquire_semaphore(request, metadata: @request_signer.sign(request))
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def release_semaphore(request_hash)
|
|
56
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::ReleaseSemaphoreRequest)
|
|
57
|
+
@grpc.release_semaphore(request, metadata: @request_signer.sign(request))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def update_semaphore(request_hash)
|
|
61
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::UpdateSemaphoreRequest)
|
|
62
|
+
@grpc.update_semaphore(request, metadata: @request_signer.sign(request))
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def delete_semaphore(request_hash)
|
|
66
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::DeleteSemaphoreRequest)
|
|
67
|
+
@grpc.delete_semaphore(request, metadata: @request_signer.sign(request))
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def create_wait_group(request_hash)
|
|
71
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::CreateWaitGroupRequest)
|
|
72
|
+
@grpc.create_wait_group(request, metadata: @request_signer.sign(request))
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def list_wait_groups(request_hash)
|
|
76
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::ListWaitGroupsRequest)
|
|
77
|
+
@grpc.list_wait_groups(request, metadata: @request_signer.sign(request))
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def get_wait_group(request_hash)
|
|
81
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::GetWaitGroupRequest)
|
|
82
|
+
@grpc.get_wait_group(request, metadata: @request_signer.sign(request))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def delete_wait_group(request_hash)
|
|
86
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::DeleteWaitGroupRequest)
|
|
87
|
+
@grpc.delete_wait_group(request, metadata: @request_signer.sign(request))
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def add_jobs_to_wait_group(request_hash)
|
|
91
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::AddJobsToWaitGroupRequest)
|
|
92
|
+
@grpc.add_jobs_to_wait_group(request, metadata: @request_signer.sign(request))
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def complete_jobs_from_wait_group(request_hash)
|
|
96
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::CompleteJobsFromWaitGroupRequest)
|
|
97
|
+
@grpc.complete_jobs_from_wait_group(request, metadata: @request_signer.sign(request))
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def acquire_lock(request_hash)
|
|
101
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::AcquireLockRequest)
|
|
102
|
+
@grpc.acquire_lock(request, metadata: @request_signer.sign(request))
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def release_lock(request_hash)
|
|
106
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::ReleaseLockRequest)
|
|
107
|
+
@grpc.release_lock(request, metadata: @request_signer.sign(request))
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def get_lock(request_hash)
|
|
111
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::GetLockRequest)
|
|
112
|
+
@grpc.get_lock(request, metadata: @request_signer.sign(request))
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def delete_lock(request_hash)
|
|
116
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::DeleteLockRequest)
|
|
117
|
+
@grpc.delete_lock(request, metadata: @request_signer.sign(request))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def list_locks(request_hash)
|
|
121
|
+
request = Evrblk::HashConverter.hash_to_grpc_message(request_hash, Evrblk::Grackle::Preview::ListLocksRequest)
|
|
122
|
+
@grpc.list_locks(request, metadata: @request_signer.sign(request))
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Evrblk
|
|
4
|
+
class HashConverter
|
|
5
|
+
def self.hash_to_grpc_message(source_hash, message_class)
|
|
6
|
+
serialize_with_descriptor(message_class.descriptor, source_hash.dup)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def self.serialize_with_descriptor(descriptor_class, hash_value)
|
|
12
|
+
return hash_value if descriptor_class.nil?
|
|
13
|
+
|
|
14
|
+
new_hash = {}
|
|
15
|
+
available_keys = hash_value.keys
|
|
16
|
+
descriptor_class.entries.each do |entry|
|
|
17
|
+
is_key_present = available_keys.include?(entry.name.to_sym)
|
|
18
|
+
value = serialize_with_field_descriptor(entry, hash_value[entry.name.to_sym], is_key_present: is_key_present)
|
|
19
|
+
unless value.nil?
|
|
20
|
+
new_hash[entry.name] = value
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
descriptor_class.msgclass.new(new_hash)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.serialize_with_field_descriptor(field_descriptor, value, is_key_present: true)
|
|
28
|
+
return value if field_descriptor.nil?
|
|
29
|
+
|
|
30
|
+
if field_descriptor.label == :repeated
|
|
31
|
+
return serialize_with_repeated_field(field_descriptor, value)
|
|
32
|
+
end
|
|
33
|
+
if field_descriptor.type == :message
|
|
34
|
+
if field_descriptor.subtype.is_a?(Google::Protobuf::Descriptor)
|
|
35
|
+
return serialize_with_descriptor(field_descriptor.subtype, value) unless value.nil?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
return field_descriptor.subtype.msgclass.new(value) unless value.nil?
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
value
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.serialize_with_repeated_field(field_descriptor, value)
|
|
45
|
+
if field_descriptor.label == :repeated
|
|
46
|
+
if field_descriptor.subtype && field_descriptor.subtype.lookup("key")
|
|
47
|
+
if field_descriptor.subtype.lookup("value")
|
|
48
|
+
value_dup = ({})
|
|
49
|
+
org_value = value || {}
|
|
50
|
+
org_value.keys.each do |k|
|
|
51
|
+
value_dup[k.to_s] = (serialize_with_field_descriptor(field_descriptor.subtype.lookup("value"), org_value[k]))
|
|
52
|
+
end
|
|
53
|
+
return value_dup
|
|
54
|
+
else
|
|
55
|
+
return value
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
return (value || []).map { |v| serialize_with_descriptor(field_descriptor.subtype, v) }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|