adminix 0.1.23 → 0.1.24

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
  SHA1:
3
- metadata.gz: 1985bdd230259c3aae11486b88bc516ec098b2cb
4
- data.tar.gz: cecd82eb9b1639acfa71c1e370f7df0ffec97bed
3
+ metadata.gz: 323d686c0df911e68419b1d4a094d07517fc1728
4
+ data.tar.gz: b0b3a2c75899feceaa21a2e2cab960475293edbf
5
5
  SHA512:
6
- metadata.gz: 6f3aaba67ebd6e6c9b311e80e85156bc86670a2826034a99ae8d78e0555ea3c7c09a96c221c001e9bc6e9cfd9578ba66adb0d5fc1f829428949cf22e88b7a44d
7
- data.tar.gz: 84e2d76fcfdcf60808c0eae1744af418ed6021d9137fd9137273370f16b230f73c3f57dd23aa18dd7244518ed744edfd28ea4b31936480e772648d45c29fc89d
6
+ metadata.gz: '061087a77def56a10ad4f6c47284d609da99a36783ab271a57e3f488176470ef170dee6ff14f2faf05b5444d37b7f09034c7f132cc3dcdf571e36862a766005a'
7
+ data.tar.gz: 8c803731f17b32992c68714e9675e5611c5d7df6a2e149faf6375add59a8281e455af6f8f2170ab66cb61d08b8af8335e35b391a4dbb7ee883e2e42ac33845ee
data/adminix.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.require_paths = ["lib"]
32
32
 
33
33
  spec.add_dependency "eventmachine", "1.2.3"
34
- spec.add_dependency "em-websocket-client", "0.1.2"
34
+ spec.add_dependency "action_cable_client", "2.0.0"
35
35
  spec.add_dependency "sinatra", "1.4.8"
36
36
 
37
37
  spec.add_development_dependency "bundler", "~> 1.14"
@@ -24,7 +24,7 @@ module Adminix
24
24
  }
25
25
  end
26
26
 
27
- def sync(watcher, data)
27
+ def sync(ws_client, data)
28
28
  @process_id = data['process_id']
29
29
  config.commands = data['commands'] || []
30
30
 
@@ -32,7 +32,7 @@ module Adminix
32
32
  commands_queue.each do |q|
33
33
  if q['status'] != 'processed'
34
34
  res = execute_command(q['command_key'], q['process_id'], q['args'] || {})
35
- watcher.publish_message(:task_completed, res)
35
+ ws_client.perform(:task_completed, res)
36
36
  end
37
37
  end
38
38
  end
@@ -60,7 +60,7 @@ module Adminix
60
60
  end
61
61
 
62
62
  def fetch_options
63
- uri = URI.parse("#{config.host}/v1/services/#{id}/options")
63
+ uri = URI.parse("#{config.host}/api/v1/services/#{id}/options")
64
64
  request = Net::HTTP::Get.new(uri)
65
65
  request["Authorization"] = "Bearer #{config.secret_key}"
66
66
 
@@ -1,3 +1,3 @@
1
1
  module Adminix
2
- VERSION = "0.1.23"
2
+ VERSION = "0.1.24"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  require "eventmachine"
2
- require "em-websocket-client"
2
+ require "action_cable_client"
3
3
 
4
4
  module Adminix
5
5
  class Watcher
@@ -9,51 +9,51 @@ module Adminix
9
9
  if options[:stop_daemon]
10
10
  watcher.stop
11
11
  else
12
- if options[:daemonize]
13
- watcher.start
14
- else
15
- watcher.run!
16
- end
12
+ options[:daemonize] ? watcher.start : watcher.run!
17
13
  end
18
14
  end
19
15
 
20
16
  SYNC_PERIOD = 5.freeze
21
- WEBSOCKET_HOST = 'wss://api.adminix.io/websocket'.freeze
17
+ DEFAULT_WEBSOCKET_HOST = 'wss://api.adminix.io/websocket'.freeze
22
18
  SERVICE_CHANNEL = 'ServiceChannel'.freeze
23
19
 
24
20
  def initialize(opts)
25
- @socket_url = opts[:websocket_host] || ENV['ADMINIX_WEBSOCKET_HOST'] || WEBSOCKET_HOST
26
- @socket_url = "#{@socket_url}?secret_key=#{config.secret_key}"
27
- @service = Service.instance
28
- @client = nil
29
21
  @pid_full = '/tmp/adminix.pid'
22
+ @service = Service.instance
23
+
24
+ @ws_client = nil
25
+ ws_path = opts[:websocket_host] || ENV['ADMINIX_WEBSOCKET_HOST'] || DEFAULT_WEBSOCKET_HOST
26
+ @ws_uri = "#{ws_path}?secret_key=#{config.secret_key}"
27
+ @ws_channel = { channel: 'ServiceChannel', service_id: @service.id }
30
28
  end
31
29
 
32
30
  def run!
33
31
  trap_signal
34
32
 
35
33
  EventMachine.run do
36
- @client = WebsocketClient.new(@socket_url) do
37
- on_disconnect(@client)
34
+ @ws_client = ActionCableClient.new(@ws_uri, @ws_channel)
35
+ @ws_client.connected do |msg|
36
+ puts 'Connection established'
38
37
  end
39
-
40
- @client.connect do |message|
41
- on_message_receive(@client, message)
38
+ @ws_client.disconnected do
39
+ system.log 'Disconnected. Reconnecting...'
40
+ sleep(2)
41
+ @ws_client.connect!
42
+ end
43
+ @ws_client.received do |msg|
44
+ message = msg['message'] || {}
45
+ case message['type']
46
+ when 'restart' then @service.restart!
47
+ when 'sync' then @service.sync(@ws_client, message['data'])
48
+ end
42
49
  end
43
-
50
+
44
51
  EventMachine.add_periodic_timer(SYNC_PERIOD) do
45
- publish_message(:sync, @service.to_cable) if @client.connected
52
+ @ws_client.perform(:sync, @service.to_cable) if @ws_client.subscribed?
46
53
  end
47
54
  end
48
55
  end
49
56
 
50
- def publish_message(action, data)
51
- identifier = { channel: SERVICE_CHANNEL, service_id: @service.id }
52
- data = { action: action, data: data }
53
-
54
- @client.publish(identifier, data)
55
- end
56
-
57
57
  def get_pid
58
58
  if File.exists?(@pid_full)
59
59
  file = File.new(@pid_full, "r")
@@ -106,61 +106,15 @@ module Adminix
106
106
 
107
107
  private
108
108
 
109
- def config
110
- Config.instance
111
- end
112
-
113
- def system
114
- System.instance
115
- end
116
-
117
- def on_message_receive(client, message)
118
- case message['type']
119
- when 'welcome'
120
- system.log 'Connected to channel'
121
- on_success_connect(client)
122
- when 'ping'
123
- #system.log 'ping from server'
124
- # do something
125
- else
126
- # do something
127
- end
128
- end
129
-
130
- def on_disconnect(client)
131
- system.log 'Disconnected. Reconnecting...'
132
- client.connect do |message|
133
- system.log message
134
- on_message_receive(client, message)
135
- end
136
-
137
- #EventMachine.stop_event_loop
138
- end
139
-
140
- def on_success_connect(client)
141
- client.subscribe(channel: SERVICE_CHANNEL, service_id: @service.id) do |message|
142
- type = message['type'] || message['message']['type']
143
- data = message['message']['data'] rescue {}
144
- on_service_message_receive(type, data)
145
- end
146
- end
147
-
148
- def on_service_message_receive(type, data)
149
- case type
150
- when 'confirm_subscription'
151
- when 'restart'
152
- @service.restart!
153
- when 'sync'
154
- @service.sync(self, data)
155
- end
156
- end
157
-
158
109
  def trap_signal
159
110
  Signal.trap("SIGINT") do
160
111
  system.log "Stopping..."
161
112
  EventMachine.stop
162
113
  end
163
114
  end
115
+
116
+ def config() Config.instance end
117
+ def system() System.instance end
164
118
  end
165
119
  end
166
120
 
data/lib/adminix.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'adminix/version'
2
- require 'adminix/websocket_client'
3
2
  require 'adminix/config'
4
3
  require 'adminix/service'
5
4
  require 'adminix/system'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adminix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.23
4
+ version: 0.1.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Dyl
@@ -25,19 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.2.3
27
27
  - !ruby/object:Gem::Dependency
28
- name: em-websocket-client
28
+ name: action_cable_client
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.2
33
+ version: 2.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.2
40
+ version: 2.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sinatra
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -165,7 +165,6 @@ files:
165
165
  - lib/adminix/system.rb
166
166
  - lib/adminix/version.rb
167
167
  - lib/adminix/watcher.rb
168
- - lib/adminix/websocket_client.rb
169
168
  - views/daemon_scripts/upstart.conf.erb
170
169
  homepage: http://adminix.io
171
170
  licenses:
@@ -1,90 +0,0 @@
1
- require 'json'
2
-
3
- module Adminix
4
- class WebsocketClient
5
- attr_accessor :client
6
- attr_accessor :connected
7
- attr_accessor :connection_handler
8
- attr_accessor :channel_handlers
9
- attr_accessor :disconnect_handler
10
- attr_accessor :url
11
-
12
- def initialize(url, &disconnect_handler)
13
- self.url = url
14
- self.disconnect_handler = disconnect_handler
15
- end
16
-
17
- def connect(&block)
18
- self.connection_handler = block
19
- self.channel_handlers = {}
20
- self.client = EventMachine::WebSocketClient.connect(url)
21
- client.callback do
22
- system.log "Connected WebSocket to #{url}."
23
- self.connected = true
24
- end
25
- client.stream do |raw|
26
- message = parse_message(raw.to_s)
27
- if message['identifier']
28
- channel_handlers[message['identifier'].to_json].call(message)
29
- else
30
- connection_handler.call(message)
31
- end
32
- end
33
- client.disconnect do
34
- self.connected = false
35
- disconnect_handler.call
36
- end
37
- end
38
-
39
- def subscribe(identifier, &block)
40
- push(create_subscribe_message(identifier))
41
- channel_handlers[identifier.to_json] = block
42
- end
43
-
44
- def push(msg)
45
- client.send_msg(msg)
46
- end
47
-
48
- def publish(identifier, data)
49
- msg = create_publish_message(identifier, data)
50
- # puts "PUSHING: #{msg}"
51
- push(msg)
52
- end
53
-
54
- def create_publish_message(identifier, data)
55
- message = {
56
- command: 'message',
57
- identifier: identifier
58
- }
59
- message[:data] = data.to_json if data
60
- message[:identifier] = message[:identifier].to_json
61
- message.to_json
62
- end
63
-
64
- def create_subscribe_message(identifier)
65
- message = {
66
- command: 'subscribe',
67
- identifier: identifier.to_json
68
- }
69
- # message[:identifier].merge!(data) if data
70
- # message[:data] = data.to_json if data
71
- # message[:identifier] = message[:identifier].to_json
72
- # puts message
73
- message.to_json
74
- end
75
-
76
- def parse_message(message)
77
- result = JSON.parse(message)
78
- result['identifier'] = JSON.parse(result['identifier']) if result['identifier']
79
- result['data'] = JSON.parse(result['data']) if result['data']
80
- result
81
- end
82
-
83
- private
84
-
85
- def system
86
- System.instance
87
- end
88
- end
89
- end
90
-