optic-rails 0.0.2 → 0.0.3

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: 436b23a12e9fffc72997a8908f2d5b1344480d4320948407366a6139270e2de8
4
- data.tar.gz: a762c9f379234a5a8d3f7dede9c5127a02803440332a91e3dace73682242aad8
3
+ metadata.gz: 037a36f5c71f671b7a16453a1607bd13ef93d7eb854ced372d6acf07009012a5
4
+ data.tar.gz: a1ce7fc57558e87b59f9614c1bd76dcb160ff312470423d945a364811c4be121
5
5
  SHA512:
6
- metadata.gz: 5309ef3c52760546e558ce70466e39317524220f8cbbbc0e6213f7160fe95079b0313ffc0a50c1028b18db8c83f75b70adb1221dd69a38c8d7add9bb5bf8b06d
7
- data.tar.gz: 710b2f963094f48b474b9df379437d4e96479c6a5dd0794a92e160a70484acd7a0341a0d74f4fc07fde1bac90b169a4fd6baae9e2c2fc33edc8dcf781f698f26
6
+ metadata.gz: bfa40babcd6bbef3b11661c1f0683b271517c5032f02fa3326a81638eb73a632cd77bc31ebb6afc02174d60541a06116e30c19f1c643a36554beb3c2f1487250
7
+ data.tar.gz: 81b948991bd3fea677fdd4a883bb7fbad0b31859dd1597eb5692b4a8c11110d0be7336d06655902bcf1dee18576e8aaa49efecb2a58d4f1e9903edebbda508af
@@ -1,37 +1,81 @@
1
+ require "action_cable_client"
2
+ require "eventmachine"
3
+
1
4
  module Optic
2
5
  module Rails
3
6
  class Railtie < ::Rails::Railtie
4
7
  initializer "optic_rails.launch_client_thread" do |app|
8
+ # TODO use tagged logger, make it clear which thread log messages are coming from
9
+
10
+ # Get configuration
5
11
  api_key = app.config.optic_api_key # TODO fail gracefully if missing
6
12
  uri = app.config.optic_uri
7
- puts "Launching Optic client thread"
8
- Thread.new do
9
-
10
- EventMachine.run do
11
- puts "connecting"
12
- client = ActionCableClient.new(uri, { channel: "MetricsChannel" }, true, { "Authorization" => "Bearer #{api_key}" })
13
- client.connected do
14
- puts "successfully connected"
15
- end
16
13
 
17
- client.errored { |msg| puts "ERROR: #{msg}" }
18
-
19
- # called whenever a message is received from the server
20
- client.received do |message|
21
- puts "MESSAGE: #{message}"
22
- command = message["message"]["command"]
23
-
24
- case command
25
- when "request_schema"
26
- puts "Schema requested!"
27
- client.perform "schema", message: Optic::Rails.get_entities
28
- when "request_metrics"
29
- puts "Metrics requested!"
30
- client.perform "metrics", message: Optic::Rails.get_metrics(message["message"]["pivot"])
31
- else
32
- puts "unknown command!"
14
+ logger = ::Rails.logger
15
+
16
+ logger.debug "Starting supervisor thread"
17
+ supervisor = Thread.new do
18
+ loop do
19
+ logger.debug "Starting worker thread"
20
+ worker = Thread.new do
21
+ EventMachine.run do
22
+ client = ActionCableClient.new(uri, { channel: "MetricsChannel" }, true, { "Authorization" => "Bearer #{api_key}" })
23
+
24
+ client.connected do
25
+ logger.debug "Optic agent connected"
26
+ end
27
+
28
+ client.disconnected do
29
+ logger.warn "Optic agent disconnected, killing client thread"
30
+ EventMachine.stop
31
+ end
32
+
33
+ client.errored do |msg|
34
+ logger.warn "Optic agent error: #{msg}"
35
+ EventMachine.stop
36
+ # TODO stop worker?
37
+ end
38
+
39
+ client.subscribed do
40
+ logger.debug "Optic agent subscribed"
41
+ end
42
+
43
+ client.pinged do |msg|
44
+ logger.debug "Optic agent pinged: #{msg}"
45
+ end
46
+
47
+ # called whenever a message is received from the server
48
+ client.received do |message|
49
+ logger.debug "Optic agent received: #{message}"
50
+ command = message["message"]["command"]
51
+
52
+ case command
53
+ when "request_schema"
54
+ logger.debug "Optic agent got schema request"
55
+ client.perform "schema", message: Optic::Rails.get_entities
56
+ logger.debug "Optic agent sent schema"
57
+ when "request_metrics"
58
+ logger.debug "Optic agent got metrics request"
59
+ client.perform "metrics", message: Optic::Rails.get_metrics(message["message"]["pivot"])
60
+ logger.debug "Optic agent sent metrics"
61
+ else
62
+ logger.warn "Optic agent got unknown command: #{command}"
63
+ end
64
+ end
33
65
  end
66
+
67
+ logger.warn "Stopping worker thread"
34
68
  end
69
+
70
+ begin
71
+ worker.join
72
+ rescue => e
73
+ logger.error "Worker thread died with error", e
74
+ end
75
+
76
+ logger.warn "Supervisor thread detected dead worker, sleeping"
77
+ sleep 5.0
78
+ logger.debug "Supervisor thread done sleeping"
35
79
  end
36
80
  end
37
81
  end
@@ -1,5 +1,5 @@
1
1
  module Optic
2
2
  module Rails
3
- VERSION = '0.0.2'
3
+ VERSION = '0.0.3'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optic-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Vaynshtok
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-18 00:00:00.000000000 Z
11
+ date: 2018-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: action_cable_client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: eventmachine
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: rails
15
43
  requirement: !ruby/object:Gem::Requirement