adminix 0.1.13 → 0.1.14

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: a30b4bcf3c0c5ba6f76a6378a4aa79320414c762
4
- data.tar.gz: 60b4e8b3de176c861f46aa5a8fd31fe862c1303a
3
+ metadata.gz: 95a49d190d16c14ccd3cccc09e06732568f0e9cd
4
+ data.tar.gz: 5a2e0e20318f38da17a6e4b118ead094c3ae97a3
5
5
  SHA512:
6
- metadata.gz: b2988e4264ae6105247252199a7b39ebc1749afb01215f58e8b5b979c7aa570b3342a108036cfd38dde6a9ce4459c833cb7b6ad31f69d57067f307bcfd1222b7
7
- data.tar.gz: 2722af01f3606b244f5527e565c4a79ab56dd6cb16d1903eec70a26f0442c033cfe35d7c5349beda2bd7a2bd6f91c93b12d27c10ae998070aedbd29960fd02d8
6
+ metadata.gz: 9452e2d00bfd6e3ac1aafc78a0293d021050e3018f71dfbe183450ce9a169ec701631c7ad43936a9b747952488ae286a11fb99b0f5d51fc523c1850a1514c559
7
+ data.tar.gz: f1731de81b7c47a8ad54b841496e188a86535e66f2f35bd29530c725809a95596911cb4dd31c87bd6a60c3ea3a2d9dfd30e6b5e89fc02c1d9980b3efc51e5d4b
data/.byebug_history CHANGED
@@ -1,4 +1,29 @@
1
1
  q
2
+ options
3
+ options[:action].to_sym
4
+ parsers[options[:action].to_sym]
5
+ q
6
+ parsers[options[:action].to_sym]
7
+ parsers[:watch]
8
+ parsers
9
+ q
10
+ options
11
+ q
12
+ data["id"]
13
+ data
14
+ type
15
+ q
16
+ message['type']
17
+ message
18
+ q
19
+ message
20
+ q
21
+ data["name"]
22
+ data
23
+ q
24
+ response.body
25
+ data
26
+ q
2
27
  System.instance.eval(script)
3
28
  script
4
29
  args['args'].each { |hs| script.gsub!("%{#{hs[0]}}", hs[1]) }
@@ -229,28 +254,3 @@ service_name
229
254
  q
230
255
  service_name
231
256
  self.service_name = hs['service_name']
232
- self.service_name
233
- hs
234
- q
235
- hs['service_name']
236
- hs = JSON.parse(content)
237
- q
238
- generate_fake_config_file
239
- q
240
- generate_fake_config_file
241
- q
242
- rand(1..10000)
243
- 1..10000.rand
244
- (1..10000).rand
245
- Faker::Internet.email(name)
246
- name.sub
247
- name.join('.')
248
- name = Faker::Name.name
249
- name = Faker::Name.namename = Faker::Name.name
250
- name = Faker::Name.name
251
- Faker::Internet.email('chris')
252
- Faker::Internet.email
253
- q
254
- require 'faker'
255
- Faker
256
- q
data/adminix.gemspec CHANGED
@@ -32,7 +32,8 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  #spec.add_dependency "daemons", "~> 1.2.4"
34
34
  #spec.add_dependency "action_cable_client", "~> 1.3", ">= 1.3.4"
35
- spec.add_dependency "eventmachine", "1.2.2"
35
+ spec.add_dependency "eventmachine", "1.2.3"
36
+ spec.add_dependency "em-websocket-client", "0.1.2"
36
37
 
37
38
  spec.add_development_dependency "bundler", "~> 1.14"
38
39
  spec.add_development_dependency "rake", "~> 10.0"
data/exe/adminix CHANGED
@@ -3,7 +3,11 @@
3
3
 
4
4
  require 'optparse'
5
5
 
6
- options = { action: "help" }
6
+ options = {
7
+ action: "help",
8
+ daemonize: false,
9
+ stop_daemon: false
10
+ }
7
11
  parsers = {}
8
12
 
9
13
  parsers[:env] = OptionParser.new do |opts|
@@ -15,21 +19,10 @@ end
15
19
  parsers[:watch] = OptionParser.new do |opts|
16
20
  opts.banner = "Launch Adminix watcher"
17
21
  opts.separator " Usage: adminix watch"
18
- #opts.separator " Usage: adminix watcher [options]"
19
- #opts.separator " Options:"
20
- #opts.on("-d", "--daemonize", "run watcher in background process") { options[:daemonize] = true }
21
- opts.separator ""
22
- end
23
-
24
- parsers[:generate_daemon] = OptionParser.new do |opts|
25
- opts.banner = "Generate upstart script for watcher"
26
- opts.separator " Usage: adminix generate_daemon"
27
- opts.separator ""
28
- end
29
-
30
- parsers[:setup] = OptionParser.new do |opts|
31
- opts.banner = "Generage adminix.json"
32
- opts.separator " Usage: adminix setup"
22
+ opts.separator " Usage: adminix watch [options]"
23
+ opts.separator " Options:"
24
+ opts.on("-d", "--daemonize", "run watcher in background process") { options[:daemonize] = true }
25
+ opts.on("-s", "--stop-daemon", "stop daemon watcher") { options[:stop_daemon] = true }
33
26
  opts.separator ""
34
27
  end
35
28
 
@@ -49,38 +42,6 @@ case options[:action]
49
42
  puts Adminix::Service.instance.options_to_envs
50
43
  when "watch"
51
44
  puts Adminix::Watcher.run!(options)
52
- when "generate_daemon"
53
- path = Adminix::System.instance.generate_daemon
54
- puts "# Daemon has been generated in path #{path}\n" +
55
- "# Please execute this command to copy adminix.conf to /etc/init folder:\n" +
56
- "sudo mv adminix.conf /etc/init/adminix.conf\n"
57
-
58
- when "setup"
59
- approved = true
60
- if Adminix::Config.instance.file_exists?
61
- puts "File \"#{ENV['HOME']}/.adminix.json\" already exists, overwrite config (yes/no):"
62
- approved = ['yes', 'y'].include?($stdin.gets.chomp)
63
- end
64
-
65
- if approved
66
- puts "Enter secret key:"
67
- secret_key = $stdin.gets.chomp
68
-
69
- puts "Enter service id (empty to create a new service)"
70
- service_id = $stdin.gets.chomp
71
-
72
- service_name = ''
73
- if service_id == ''
74
- puts "Enter service name"
75
- service_name = $stdin.gets.chomp
76
- end
77
-
78
- Adminix::Config.setup(
79
- secret_key: secret_key,
80
- service_id: service_id,
81
- service_name: service_name
82
- )
83
- end
84
45
  when "version"
85
46
  puts "adminix version #{Adminix::VERSION}"
86
47
  else
Binary file
@@ -1,5 +1,4 @@
1
1
  require 'singleton'
2
- require 'json'
3
2
 
4
3
  module Adminix
5
4
  class Config
@@ -7,128 +6,13 @@ module Adminix
7
6
 
8
7
  DEFAULT_HOST = 'http://api.adminix.io'.freeze
9
8
 
10
- attr_accessor(
11
- :service_name,
12
- :service_id,
13
- :service_address,
14
- :host,
15
- :secret_key,
16
- :monitor_logs_paths,
17
- :options,
18
- :commands
19
- )
9
+ attr_accessor :service_id, :secret_key, :host
20
10
 
21
- def self.setup(opts)
22
- conf = self.instance
23
-
24
- conf.service_id = opts[:service_id] || ENV['ADMINIX_SERVICE_ID']
25
- conf.service_name = opts[:service_name]
26
- conf.secret_key = opts[:secret_key] || ENV['ADMINIX_SECRET_KEY']
27
-
28
- conf.export
29
- end
30
-
31
- def attributes
32
- {
33
- service_name: service_name,
34
- service_id: service_id,
35
- service_address: service_address,
36
- secret_key: secret_key,
37
- options: options || [],
38
- commands: commands || []
39
- }
40
- end
41
-
42
- def file_exists?
43
- File.exists?("#{ENV['HOME']}/.adminix.json")
44
- end
45
-
46
- def export(path=nil)
47
- file_path = path || "#{ENV['HOME']}/.adminix.json"
48
- file_content = JSON.pretty_generate(attributes)
49
- File.delete(file_path) if File.exists?(file_path)
50
- File.open(file_path, 'w') { |file| file.write(file_content) }
51
- end
52
-
53
- def import
54
- content = File.read(config_file_path)
55
- hs = JSON.parse(content)
56
-
57
- self.service_name = hs['service_name']
58
- self.service_id = hs['service_id'] || ENV['ADMINIX_SERVICE_ID']
59
- self.service_address = hs['service_address']
60
- self.secret_key = hs['secret_key'] || ENV['ADMINIX_SECRET_KEY']
61
- self.host = hs['host'] || ENV['ADMINIX_CONFIG_HOST'] || DEFAULT_HOST
62
- self.options = hs['options'] || []
63
- self.commands = hs['commands'] || []
64
-
65
- valid?
66
- end
67
-
68
- def config_file_path
69
- return @config_path unless @config_path.nil?
70
-
71
- paths = [
72
- "#{ENV['HOME']}/.adminix.json",
73
- '.adminix.json'
74
- ]
75
- paths << ENV['ADMINIX_CONFIG_PATH'] if !ENV['ADMINIX_CONFIG_PATH'].nil?
76
-
77
- config_path = nil
78
-
79
- paths.reverse.each do |path|
80
- if File.exists?(path)
81
- @config_path = path
82
- break
83
- end
84
- end
85
-
86
- @config_path or raise "adminix.json doesn't exists"
87
- end
88
-
89
- def valid?
90
- errors = {}
91
-
92
- if service_name.nil?
93
- errors[:service_name] ||= []
94
- errors[:service_name] << "should't be blank"
95
- end
96
-
97
- if service_id.nil?
98
- errors[:service_id] ||= []
99
- errors[:service_id] << "should't be blank"
100
- end
101
-
102
- if secret_key.nil?
103
- errors[:secret_key] ||= []
104
- errors[:secret_key] << "should't be blank"
105
- end
106
-
107
- unless monitor_logs_paths.nil?
108
- unless monitor_logs_paths.is_a? Array
109
- errors[:monitor_logs_paths] << "should be array"
110
- end
111
- end
112
-
113
- unless options.nil?
114
- unless options.is_a? Array
115
- errors[:options] << "should be array"
116
- end
117
- end
118
-
119
- unless commands.nil?
120
- unless commands.is_a? Array
121
- errors[:commands] << "should be array"
122
- end
123
- end
124
-
125
- @errors = errors
126
-
127
- errors.count == 0
128
- end
129
-
130
- def errors
131
- @errors
11
+ def initialize
12
+ self.service_id = ENV['ADMINIX_SERVICE_ID']
13
+ self.secret_key = ENV['ADMINIX_SECRET_KEY']
14
+ self.host = ENV['ADMINIX_CONFIG_HOST'] || DEFAULT_HOST
132
15
  end
133
16
  end
134
17
  end
18
+
@@ -1,132 +1,38 @@
1
1
  require 'singleton'
2
- require 'json'
3
- require 'net/http'
4
2
 
5
3
  module Adminix
6
4
  class Service
7
5
  include Singleton
8
6
 
9
- attr_accessor :id, :process_id, :name, :address, :completed_commands
7
+ attr_reader :id, :process_id
10
8
 
11
9
  def initialize
12
- config.import
13
-
14
- self.id = config.service_id
15
- self.name = config.service_name
16
- self.address = config.service_address
17
- self.completed_commands = []
10
+ @id = config.service_id
18
11
  end
19
12
 
20
- # Send info about container
21
- def sync
22
- uri = URI.parse("#{config.host}/v1/services/sync")
23
- request = Net::HTTP::Post.new(uri)
24
- request.content_type = "application/json"
25
- request["Authorization"] = "Bearer #{config.secret_key}"
26
-
27
- payload = {
28
- service: {
29
- id: id,
30
- process_id: process_id,
31
- completed_commands: completed_commands
13
+ def to_cable
14
+ {
15
+ id: id,
16
+ process_id: process_id,
17
+ system: {
18
+ processor_load: system.processor_load,
19
+ memory_load: system.memory_load
32
20
  }
33
21
  }
22
+ end
34
23
 
35
- if process_id.nil?
36
- payload[:service][:name] = name
37
- payload[:service][:address] = address
38
- payload[:service][:options] = service_options_payload
39
- payload[:service][:commands] = service_commands_payload
40
- end
41
-
42
- request.body = payload.to_json
43
- req_options = {}
44
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
45
- http.request(request)
46
- end
47
- data = JSON.parse(response.body)['result']
48
-
49
- self.completed_commands = []
50
- self.process_id = data['process_id']
51
-
52
- if id.nil?
53
- self.id = data['id']
54
- config.service_id = id
55
- config.export
56
- end
24
+ def sync(watcher, data)
25
+ @process_id = data['process_id']
57
26
 
58
27
  commands_queue = data['commands_queue'] || []
59
28
  commands_queue.each do |q|
60
29
  if q['status'] != 'processed'
61
- execute_command(q['command_key'], q['process_id'], q['args'] || {})
30
+ res = execute_command(q['command_key'], q['process_id'], q['args'] || {})
31
+ watcher.publish_message(:task_completed, res)
62
32
  end
63
33
  end
64
34
  end
65
35
 
66
- def run_cmd(cmd)
67
- `#{cmd}`
68
- end
69
-
70
- def config
71
- Config.instance
72
- end
73
-
74
- def service_options_payload
75
- config.options.map do |o|
76
- {
77
- key: o['key'],
78
- name: o['name'],
79
- description: o['description'],
80
- value_type: o['type'],
81
- options: o['options'],
82
- validations: o['validations'],
83
- default_value: o['default_value'],
84
- value: o['default_value']
85
- }
86
- end
87
- end
88
-
89
- def service_commands_payload
90
- config.commands.map do |o|
91
- {
92
- key: o['key'],
93
- name: o['name'],
94
- description: o['description'],
95
- #command: o['command'],
96
- arguments: o['arguments']
97
- }
98
- end
99
- end
100
-
101
- def execute_command(key, process_id, args)
102
- command = config.commands.find { |c| c['key'] == key }
103
- script = command['command'].dup
104
-
105
- # TODO frontend fix attribute args
106
- args['args'].each { |hs| script.gsub!("%{#{hs[0]}}", hs[1]) }
107
-
108
- puts System.instance.eval(script)
109
-
110
- #self.completed_commands << process_id
111
-
112
- uri = URI.parse("#{config.host}/v1/services/#{id}")
113
- request = Net::HTTP::Put.new(uri)
114
- request.content_type = "application/json"
115
- request["Authorization"] = "Bearer #{config.secret_key}"
116
-
117
- payload = {
118
- service: {
119
- completed_command_process_id: process_id
120
- }
121
- }
122
- request.body = payload.to_json
123
- req_options = {}
124
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
125
- http.request(request)
126
- end
127
- data = JSON.parse(response.body)['result']
128
- end
129
-
130
36
  def options_to_envs
131
37
  uri = URI.parse("#{config.host}/v1/services/#{id}/options")
132
38
  request = Net::HTTP::Get.new(uri)
@@ -145,10 +51,30 @@ module Adminix
145
51
  "# eval $(adminix env)"
146
52
  end
147
53
 
148
- def start_watcher
149
- loop do
150
- puts 'ok'
151
- end
54
+ private
55
+
56
+ def config
57
+ Config.instance
58
+ end
59
+
60
+ def system
61
+ System.instance
62
+ end
63
+
64
+ def execute_command(key, process_id, args)
65
+ command = config.commands.find { |c| c['key'] == key }
66
+ script = command['command'].dup
67
+
68
+ # TODO frontend fix attribute args
69
+ args['args'].each { |hs| script.gsub!("%{#{hs[0]}}", hs[1]) }
70
+
71
+ output = system.eval(script)
72
+
73
+ {
74
+ id: process_id,
75
+ success: true,
76
+ output: output
77
+ }
152
78
  end
153
79
  end
154
80
  end
@@ -1,3 +1,3 @@
1
1
  module Adminix
2
- VERSION = "0.1.13"
2
+ VERSION = "0.1.14"
3
3
  end
@@ -1,34 +1,156 @@
1
1
  require "eventmachine"
2
+ require "em-websocket-client"
2
3
 
3
4
  module Adminix
4
5
  class Watcher
5
6
  def self.run!(options)
6
- Watcher.new(options).run!
7
- end
7
+ watcher = Watcher.new(options)
8
8
 
9
- DEFAULT_PERIOD = 5
9
+ if options[:stop_daemon]
10
+ watcher.stop
11
+ else
12
+ if options[:daemonize]
13
+ watcher.start
14
+ else
15
+ watcher.run!
16
+ end
17
+ end
18
+ end
10
19
 
11
- attr_reader :period, :service
20
+ SYNC_PERIOD = 5.freeze
21
+ WEBSOCKET_HOST = 'ws://api.adminix.io/websocket'.freeze
22
+ SERVICE_CHANNEL = 'ServiceChannel'.freeze
12
23
 
13
24
  def initialize(opts)
14
- @period = opts[:period] || DEFAULT_PERIOD
25
+ @socket_url = opts[:websocket_host] || ENV['ADMINIX_WEBSOCKET_HOST'] || WEBSOCKET_HOST
26
+ @socket_url = "#{@socket_url}?secret_key=#{config.secret_key}"
15
27
  @service = Service.instance
28
+ @client = nil
29
+ @pid_full = '/tmp/adminix.pid'
16
30
  end
17
31
 
18
32
  def run!
19
33
  trap_signal
20
-
34
+
21
35
  EventMachine.run do
22
- EventMachine.add_periodic_timer(period) do
23
- sync_service
36
+ @client = WebsocketClient.new(@socket_url) do
37
+ on_disconnect(@client)
24
38
  end
39
+
40
+ @client.connect do |message|
41
+ puts message
42
+ on_message_receive(@client, message)
43
+ end
44
+
45
+ EventMachine.add_periodic_timer(SYNC_PERIOD) do
46
+ publish_message(:sync, @service.to_cable) if @client.connected
47
+ end
48
+ end
49
+ end
50
+
51
+ def publish_message(action, data)
52
+ identifier = { channel: SERVICE_CHANNEL, service_id: @service.id }
53
+ data = { action: action, data: data }
54
+
55
+ @client.publish(identifier, data)
56
+ end
57
+
58
+ def get_pid
59
+ if File.exists?(@pid_full)
60
+ file = File.new(@pid_full, "r")
61
+ pid = file.read
62
+ file.close
63
+
64
+ pid
65
+ else
66
+ 0
67
+ end
68
+ end
69
+
70
+ def start
71
+ pid = get_pid
72
+ if pid != 0
73
+ warn "Daemon is already running"
74
+ exit -1
75
+ end
76
+
77
+ pid = fork {
78
+ run!
79
+ }
80
+ begin
81
+ file = File.new(@pid_full, "w")
82
+ file.write(pid)
83
+ file.close
84
+ Process.detach(pid)
85
+ rescue => exc
86
+ Process.kill('TERM', pid)
87
+ warn "Cannot start daemon: #{exc.message}"
25
88
  end
26
89
  end
27
90
 
28
- def sync_service
29
- puts "Syncing service"
30
- #puts @service.run_cmd('whoami')
31
- service.sync
91
+ def stop
92
+ pid = get_pid
93
+ begin
94
+ EM.stop
95
+ rescue
96
+ end
97
+
98
+ if pid != 0
99
+ Process.kill('HUP', pid.to_i)
100
+ File.delete(@pid_full)
101
+ puts "Stopped"
102
+ else
103
+ warn "Daemon is not running"
104
+ exit -1
105
+ end
106
+ end
107
+
108
+ private
109
+
110
+ def config
111
+ Config.instance
112
+ end
113
+
114
+ def on_message_receive(client, message)
115
+ case message['type']
116
+ when 'welcome'
117
+ puts 'connected to server'
118
+ on_success_connect(client)
119
+ when 'ping'
120
+ puts 'ping from server'
121
+ # do something
122
+ else
123
+ # do something
124
+ end
125
+ end
126
+
127
+ def on_disconnect(client)
128
+ puts 'Disconnected. Reconnecting...'
129
+ client.connect do |message|
130
+ puts message
131
+ on_message_receive(client, message)
132
+ end
133
+
134
+ #EventMachine.stop_event_loop
135
+ end
136
+
137
+ def on_success_connect(client)
138
+ client.subscribe(channel: SERVICE_CHANNEL, service_id: @service.id) do |message|
139
+ type = message['type'] || message['message']['type']
140
+ data = message['message']['data'] rescue {}
141
+ on_service_message_receive(type, data)
142
+ end
143
+ end
144
+
145
+ def on_service_message_receive(type, data)
146
+ puts 'on_service_message_receive'
147
+ puts type
148
+ puts data
149
+ case type
150
+ when 'confirm_subscription'
151
+ when 'sync'
152
+ @service.sync(self, data)
153
+ end
32
154
  end
33
155
 
34
156
  def trap_signal
@@ -0,0 +1,84 @@
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
+ puts "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
+ end
83
+ end
84
+
data/lib/adminix.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  require 'adminix/version'
2
+ require 'adminix/websocket_client'
2
3
  require 'adminix/config'
3
4
  require 'adminix/service'
4
5
  require 'adminix/system'
5
6
  require 'adminix/watcher'
6
- require 'adminix/entrypoint'
7
7
 
8
8
  module Adminix
9
9
  def self.root
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adminix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Dyl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-12 00:00:00.000000000 Z
11
+ date: 2017-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.2
19
+ version: 1.2.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2.2
26
+ version: 1.2.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: em-websocket-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.1.2
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -128,12 +142,13 @@ files:
128
142
  - bin/setup
129
143
  - exe/adminix
130
144
  - lib/adminix.rb
145
+ - lib/adminix/.service.rb.swn
131
146
  - lib/adminix/config.rb
132
- - lib/adminix/entrypoint.rb
133
147
  - lib/adminix/service.rb
134
148
  - lib/adminix/system.rb
135
149
  - lib/adminix/version.rb
136
150
  - lib/adminix/watcher.rb
151
+ - lib/adminix/websocket_client.rb
137
152
  - views/daemon_scripts/upstart.conf.erb
138
153
  homepage: http://adminix.io
139
154
  licenses:
@@ -155,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
170
  version: '0'
156
171
  requirements: []
157
172
  rubyforge_project:
158
- rubygems_version: 2.5.1
173
+ rubygems_version: 2.6.10
159
174
  signing_key:
160
175
  specification_version: 4
161
176
  summary: Adminix
@@ -1,68 +0,0 @@
1
- module Adminix
2
- class Entrypoint
3
- def self.execute_action(args)
4
- action = args[0]
5
- case action
6
- when 'help' then action_help
7
- when 'setup' then action_setup
8
- when 'env' then action_env
9
- when 'watcher' then action_watcher
10
- when 'version' then action_version
11
- end
12
- end
13
-
14
- def self.action_help
15
- puts "Usage: adminix COMMAND\n\n" +
16
- "Create and manage Adminix services\n\n" +
17
- "Version: #{VERSION}\n\n" +
18
- "Author:\n" +
19
- " Christian Dyl\n\n" +
20
- "Commands:\n" +
21
- " env Display the commands to define ENV variables\n" +
22
- " watcher Launch Adminix watcher\n" +
23
- " setup Generage adminix.json\n" +
24
- " version Show the Adminix version"
25
- end
26
-
27
- def self.action_setup
28
- if Config.instance.file_exists?
29
- puts "File \"#{ENV['HOME']}/.adminix.json\" already exists, overwrite config (yes/no):"
30
- return unless ['yes', 'y'].include?($stdin.gets.chomp)
31
- end
32
-
33
- puts "Enter secret key:"
34
- secret_key = $stdin.gets.chomp
35
-
36
- puts "Enter service id (empty to create a new service)"
37
- service_id = $stdin.gets.chomp
38
-
39
- service_name = ''
40
- if service_id == ''
41
- puts "Enter service name"
42
- service_name = $stdin.gets.chomp
43
- end
44
-
45
- Config.setup(
46
- secret_key: secret_key,
47
- service_id: service_id,
48
- service_name: service_name
49
- )
50
- end
51
-
52
- def self.action_env
53
- Service.instance.options_to_envs
54
- end
55
-
56
- def self.action_watcher
57
- Service.instance.sync
58
- #watcher = Watcher.new
59
- #watcher.start
60
-
61
- #watcher
62
- end
63
-
64
- def self.action_version
65
- puts "The current version is #{VERSION}"
66
- end
67
- end
68
- end