adminix 0.1.23 → 0.1.24

Sign up to get free protection for your applications and to get access to all the features.
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
-