polyseerio 0.0.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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +12 -0
  4. data/Gemfile +4 -0
  5. data/HISTORY.md +3 -0
  6. data/LICENSE +21 -0
  7. data/Makefile +43 -0
  8. data/README.md +307 -0
  9. data/lib/agent/agent.rb +35 -0
  10. data/lib/agent/default_config.rb +51 -0
  11. data/lib/agent/enum.rb +35 -0
  12. data/lib/agent/executor.rb +62 -0
  13. data/lib/agent/handler/event.rb +32 -0
  14. data/lib/agent/handler/expectation.rb +10 -0
  15. data/lib/agent/handler/fact.rb +18 -0
  16. data/lib/agent/handler/index.rb +15 -0
  17. data/lib/agent/handler/interface.rb +11 -0
  18. data/lib/agent/handler/metric.rb +23 -0
  19. data/lib/agent/handler/process.rb +10 -0
  20. data/lib/agent/helper.rb +137 -0
  21. data/lib/client.rb +47 -0
  22. data/lib/constant.rb +12 -0
  23. data/lib/enum.rb +82 -0
  24. data/lib/helper.rb +153 -0
  25. data/lib/middleware.rb +51 -0
  26. data/lib/polyseerio.rb +115 -0
  27. data/lib/request.rb +84 -0
  28. data/lib/resource/base.rb +73 -0
  29. data/lib/resource/definition.rb +166 -0
  30. data/lib/resource/factory.rb +149 -0
  31. data/lib/resource/helper.rb +91 -0
  32. data/lib/resource/routine.rb +26 -0
  33. data/lib/response.rb +27 -0
  34. data/lib/sdk/factory.rb +34 -0
  35. data/lib/sdk/helper.rb +50 -0
  36. data/lib/sdk/method/add_fact.rb +14 -0
  37. data/lib/sdk/method/add_gauge.rb +14 -0
  38. data/lib/sdk/method/attach.rb +26 -0
  39. data/lib/sdk/method/check.rb +11 -0
  40. data/lib/sdk/method/detach.rb +11 -0
  41. data/lib/sdk/method/execute.rb +11 -0
  42. data/lib/sdk/method/fact.rb +11 -0
  43. data/lib/sdk/method/gauge.rb +11 -0
  44. data/lib/sdk/method/index.rb +10 -0
  45. data/lib/sdk/method/message.rb +11 -0
  46. data/lib/sdk/method/remove.rb +11 -0
  47. data/lib/sdk/method/save.rb +32 -0
  48. data/lib/sdk/method/to_json.rb +11 -0
  49. data/lib/sdk/method/trigger.rb +17 -0
  50. data/lib/sdk/static/attach.rb +11 -0
  51. data/lib/sdk/static/check.rb +11 -0
  52. data/lib/sdk/static/create.rb +21 -0
  53. data/lib/sdk/static/detach.rb +11 -0
  54. data/lib/sdk/static/execute.rb +11 -0
  55. data/lib/sdk/static/find.rb +20 -0
  56. data/lib/sdk/static/find_by_id.rb +21 -0
  57. data/lib/sdk/static/find_by_name.rb +28 -0
  58. data/lib/sdk/static/index.rb +10 -0
  59. data/lib/sdk/static/message.rb +15 -0
  60. data/lib/sdk/static/remove.rb +21 -0
  61. data/lib/sdk/static/trigger.rb +17 -0
  62. data/lib/sdk/static/update.rb +18 -0
  63. data/lib/url_builder.rb +55 -0
  64. data/polyseerio.gemspec +32 -0
  65. metadata +205 -0
@@ -0,0 +1,34 @@
1
+ require 'sdk/static/index'
2
+ require 'sdk/method/index'
3
+ require 'sdk/helper'
4
+
5
+ module Polyseerio
6
+ module SDK
7
+ # SDK static module.
8
+ module Static
9
+ # Generates static functions.
10
+ def self.factory(request, resource, statics = [], options = {})
11
+ accumulator = Helper.accumulate_procs('static', MAP)
12
+
13
+ statics = statics.each_with_object({}, &accumulator)
14
+
15
+ # curry request, resource, and options
16
+ statics.each_with_object(statics) do |(name, static), hash|
17
+ if static.arity > 3
18
+ hash[name] = static.curry.call(request, resource, options)
19
+ end
20
+ end
21
+
22
+ statics
23
+ end
24
+ end
25
+
26
+ # SDK Method (instance) module.
27
+ module Method
28
+ # Generates method (instance) functions.
29
+ def self.factory(_request, _resource, methods = [], _options = {})
30
+ methods.each_with_object({}, &Helper.accumulate_procs('method', MAP))
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,50 @@
1
+ require 'constant'
2
+ require 'helper'
3
+ require 'url_builder'
4
+
5
+ module Polyseerio
6
+ module SDK
7
+ # SDK helpers.
8
+ module Helper
9
+ # Takes an instance and returns a uri.
10
+ def self.instance_to_uri(instance)
11
+ URL.get_resource_path(
12
+ instance.type,
13
+ eid: instance.eid,
14
+ id: instance.id
15
+ )
16
+ end
17
+
18
+ # Accumulates a function type from a map into an accumulator.
19
+ def self.accumulate_procs(*args)
20
+ proc do |type, map, name, acc|
21
+ unless map.key? name
22
+ raise "SDK factory could not find a #{type} #{name}."
23
+ end
24
+
25
+ acc[name] = map.fetch(name)
26
+
27
+ acc
28
+ end.curry.call(*args)
29
+ end
30
+
31
+ # Reduce method options with client options and method defaults
32
+ def self.reduce_options(options, copts = {}, defaults = {})
33
+ defaults.merge(copts).merge(options)
34
+ end
35
+
36
+ # Determine the eid given a reduced options hash
37
+ def self.resolve_eid(options)
38
+ return options[:environment] if options.key? :environment
39
+
40
+ if options[:deduce]
41
+ env = options.fetch(:env)
42
+
43
+ return ENV.fetch env if ENV.key? env
44
+ end
45
+
46
+ Constant::DEFAULT_ENVIRONMENT
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,14 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.add_fact
6
+ proc do |instance, key, value|
7
+ instance.facts ||= {}
8
+
9
+ instance.facts[key] = value
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.add_gauge
6
+ proc do |instance, key, value|
7
+ instance.gauges ||= {}
8
+
9
+ instance.gauges[key] = value
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ require 'sdk/helper'
2
+ require 'concurrent'
3
+
4
+ module Polyseerio
5
+ module SDK
6
+ # Introduce methods.
7
+ module Method
8
+ def self.attach
9
+ proc do |instance|
10
+ uri = Helper.instance_to_uri instance
11
+
12
+ Concurrent::Promise.new do
13
+ heartbeat_thread = Thread.new(instance.request) do |req|
14
+ loop do
15
+ req.post("#{uri}/heartbeat", {}).execute.value
16
+ sleep(5)
17
+ end
18
+ end
19
+
20
+ heartbeat_thread
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.check
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.detach
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Static methods.
4
+ module Method
5
+ def self.execute
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.fact
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.gauge
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require 'sdk/helper'
2
+
3
+ module Polyseerio
4
+ module SDK
5
+ # Intance methods.
6
+ module Method
7
+ MAP = Polyseerio::Helper.dir_proc_map(File.dirname(__FILE__), self)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.message
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.remove
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ require 'sdk/helper'
2
+
3
+ module Polyseerio
4
+ module SDK
5
+ # Instance methods.
6
+ module Method
7
+ def self.save
8
+ proc do |instance|
9
+ uri = Helper.instance_to_uri instance
10
+
11
+ # TODO: need a way to make raw requests without middleware.
12
+ # TODO: there is no reason to have to create another instance.
13
+ if instance.new?
14
+ instance.request.post(uri, instance.properties)
15
+ .then do |result|
16
+ instance.override_properties(result.properties)
17
+
18
+ instance
19
+ end
20
+ else
21
+ instance.request.put(uri, instance.properties)
22
+ .then do |result|
23
+ instance.override_properties(result.properties)
24
+
25
+ instance
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Instance methods.
4
+ module Method
5
+ def self.to_json
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ require 'sdk/helper'
2
+
3
+ module Polyseerio
4
+ module SDK
5
+ # Instance methods.
6
+ module Method
7
+ def self.trigger
8
+ proc do |instance, payload = {}|
9
+ # raise if the instance has not been saved yet...
10
+ uri = Helper.instance_to_uri instance
11
+
12
+ instance.request.post("#{uri}/trigger", payload)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Static methods.
4
+ module Static
5
+ def self.attach
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Static methods.
4
+ module Static
5
+ def self.check
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ require 'helper'
2
+ require 'sdk/helper'
3
+ require 'url_builder'
4
+
5
+ module Polyseerio
6
+ module SDK
7
+ # Static methods.
8
+ module Static
9
+ def self.create
10
+ proc do |request, resource, copts, attributes, options = {}|
11
+ options = Polyseerio::Helper.defaults(options, copts)
12
+
13
+ eid = Helper.resolve_eid options
14
+ uri = URL.get_resource_path(resource, eid: eid)
15
+
16
+ request.post(uri, attributes)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Static methods.
4
+ module Static
5
+ def self.detach
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Polyseerio
2
+ module SDK
3
+ # Static methods.
4
+ module Static
5
+ def self.execute
6
+ proc do ||
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ require 'sdk/helper'
2
+ require 'url_builder'
3
+
4
+ module Polyseerio
5
+ module SDK
6
+ # Static methods.
7
+ module Static
8
+ def self.find
9
+ # TODO; issue with arg arity on curry when all optional
10
+ proc do |request, resource, _copts, _query, options = {}|
11
+ eid = Helper.resolve_eid options
12
+ uri = URL.get_resource_path(resource, eid: eid)
13
+
14
+ # TODO: add query string
15
+ request.get uri
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ require 'helper'
2
+ require 'sdk/helper'
3
+ require 'url_builder'
4
+
5
+ module Polyseerio
6
+ module SDK
7
+ # Static methods.
8
+ module Static
9
+ def self.find_by_id
10
+ proc do |request, resource, copts, id, options = {}|
11
+ options = Polyseerio::Helper.defaults(options, copts)
12
+
13
+ eid = Helper.resolve_eid options
14
+ uri = URL.get_resource_path(resource, eid: eid, id: id)
15
+
16
+ request.get uri
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ require 'enum'
2
+ require 'sdk/helper'
3
+
4
+ module Polyseerio
5
+ module SDK
6
+ # Static methods.
7
+ module Static
8
+ def self.find_by_name
9
+ proc do |request, resource, copts, name, options = {}|
10
+ options = Polyseerio::Helper.defaults(options, copts)
11
+
12
+ name = "/name/#{name}"
13
+ eid = Helper.resolve_eid options
14
+
15
+ uri = URL.get_resource_path(resource, eid: eid)
16
+
17
+ uri = if resource == Polyseerio::Enum::Resource::ENVIRONMENT
18
+ "/environments#{name}"
19
+ else
20
+ "#{uri}#{name}"
21
+ end
22
+
23
+ request.get uri
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end