adminix 0.1.31 → 0.1.35

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: cb85f4bd32b438166c08aceea4263ecce8b9e441
4
- data.tar.gz: 0ce46f5fa2859c4a9e46960bddadc8a0428d5980
3
+ metadata.gz: 394f5bc9d28519303e33da4a2b6291c084e65114
4
+ data.tar.gz: 85c575b7aecf227c88540e294e30ef2f83c5ff95
5
5
  SHA512:
6
- metadata.gz: 32f86bac5cf5ce86406432a34851fab03c40689bc4c51b2ad18f7b7aa6d6466878201d79b4f39408577dfe638edccf0a61c0a00f42661a9694fd6ab323851586
7
- data.tar.gz: cbdbf8fe21af63db4b2c29a2b9c609535411122b0c00fbaa74afff4f121f5101648af8d6e0ecd74081e4f3cbbe3952a102a7764b8dbd83d15f35b5f7ffbc8139
6
+ metadata.gz: 510c728c69e178676d18dad4756faf6c058e5c687bf0bb6b76cd742ea0a6e4da83dec5c4dfbc2b80eae57e5bf5e4a9f1a480929227f81511197b971d364e0a55
7
+ data.tar.gz: ce4777e0982273ab8491ad99e54738169bb7ebbbb4fe7abcef2b1f8d0d9ddeac6f8b08a50f6f041889bf771214505ef06b25690ce8158d5be15f17c6035ec967
data/adminix.gemspec CHANGED
@@ -4,39 +4,41 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'adminix/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "adminix"
7
+ spec.name = 'adminix'
8
8
  spec.version = Adminix::VERSION
9
- spec.authors = ["Christian Dyl"]
10
- spec.email = ["christian.dyl@outlook.com"]
9
+ spec.authors = ['Christian Dyl']
10
+ spec.email = ['christian@adminix.io']
11
11
 
12
- spec.summary = "Adminix"
13
- spec.description = "Adminix"
14
- spec.homepage = "http://adminix.io"
15
- spec.license = "MIT"
12
+ spec.summary = 'Adminix'
13
+ spec.description = 'Adminix'
14
+ spec.homepage = 'https://adminix.io'
15
+ spec.license = 'MIT'
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
18
  # to allow pushing to a single host or delete this section to allow pushing to any host.
19
19
  #if spec.respond_to?(:metadata)
20
- #spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
20
+ #spec.metadata['allowed_push_host'] = 'TODO: Set to 'http://mygemserver.com''
21
21
  #else
22
- #raise "RubyGems 2.0 or newer is required to protect against " \
23
- #"public gem pushes."
22
+ #raise 'RubyGems 2.0 or newer is required to protect against ' \
23
+ #'public gem pushes.'
24
24
  #end
25
25
 
26
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
27
  f.match(%r{^(test|spec|features)/})
28
28
  end
29
- spec.bindir = "exe"
29
+ spec.bindir = 'exe'
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ["lib"]
31
+ spec.require_paths = ['lib']
32
32
 
33
- spec.add_dependency "eventmachine", "1.2.5"
34
- spec.add_dependency "action_cable_client", "2.0.2"
35
- spec.add_dependency "sinatra", "1.4.8"
33
+ spec.add_dependency 'eventmachine', '1.2.5'
34
+ spec.add_dependency 'action_cable_client', '2.0.2'
35
+ spec.add_dependency 'json', '2.1.0'
36
+ spec.add_dependency 'openssl', '2.1.0'
37
+ spec.add_dependency 'airbrake-ruby', '2.8.1'
36
38
 
37
- spec.add_development_dependency "bundler", "~> 1.14"
38
- spec.add_development_dependency "rake", "~> 10.0"
39
- spec.add_development_dependency "rspec", "~> 3.0"
40
- spec.add_development_dependency "byebug", "~> 9.0", ">= 9.0.6"
41
- spec.add_development_dependency "faker", "~> 1.7", ">= 1.7.2"
39
+ spec.add_development_dependency 'bundler', '~> 1.14'
40
+ spec.add_development_dependency 'rake', '~> 10.0'
41
+ spec.add_development_dependency 'rspec', '~> 3.0'
42
+ spec.add_development_dependency 'byebug', '~> 9.0', '>= 9.0.6'
43
+ spec.add_development_dependency 'faker', '~> 1.7', '>= 1.7.2'
42
44
  end
data/exe/adminix CHANGED
@@ -2,6 +2,7 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  require 'optparse'
5
+ require_relative '../lib/adminix'
5
6
 
6
7
  options = {
7
8
  action: "help",
@@ -42,7 +43,6 @@ options[:action] = ARGV[0] || "help"
42
43
  parsers[options[:action].to_sym].parse!(ARGV) rescue nil
43
44
 
44
45
  unless options[:action] == "help"
45
- require'adminix'
46
46
  config = Adminix::Config.instance
47
47
 
48
48
  config.secret_key = options[:secret_key]
@@ -60,7 +60,7 @@ case options[:action]
60
60
  puts Adminix::Watcher.run!(options)
61
61
  else
62
62
  puts 'Credentials are not defined, running setup server'
63
- require 'adminix/setup'
63
+ require 'adminix/server_setup'
64
64
  end
65
65
  when "version"
66
66
  puts "adminix version #{Adminix::VERSION}"
@@ -7,12 +7,13 @@ module Adminix
7
7
 
8
8
  DEFAULT_HOST = 'https://api.adminix.io'.freeze
9
9
  DEFAULT_WEBSOCKET_HOST = 'wss://websocket.adminix.io/cable'.freeze
10
- DEFAULT_SETUP_SERVER_PORT = '8080'
10
+ DEFAULT_SETUP_SERVER_PORT = (ENV['ADMINIX_SETUP_SERVER_PORT'] || '8080').freeze
11
11
  DEFAULT_WATCHER_SYNC_PERIOD = 10.freeze
12
12
  DEFAULT_LOGS_SYNC_PERIOD = 3.freeze
13
13
  DEFAULT_LOGS_ENABLED = true
14
14
 
15
- attr_accessor :service_id, :secret_key, :host, :commands, :daemon, :setup_server_port, :scripts, :watch_log_files, :watcher_sync_period, :logs_sync_period, :logs_enabled, :websocket_path, :mode, :working_dir
15
+ attr_accessor :service_id, :secret_key, :host, :commands, :daemon, :setup_server_port, :scripts, :watch_log_files, :watcher_sync_period, :logs_sync_period, :logs_enabled, :websocket_path, :mode, :working_dir, :iv, :password
16
+ attr_reader :image_sname, :error_notifier_enabled
16
17
 
17
18
  def initialize
18
19
  @host = ENV['ADMINIX_HOST'] || DEFAULT_HOST
@@ -24,6 +25,7 @@ module Adminix
24
25
  @websocket_path = ENV['ADMINIX_WEBSOCKET_HOST'] || DEFAULT_WEBSOCKET_HOST
25
26
  @mode = 'classic'
26
27
  @working_dir = `pwd`.split("\n").first
28
+ @iv = ENV['DECIPHER_IV'] || 'U7yfLthY77Yjtp9z'
27
29
  @scripts = {
28
30
  watcher_start: 'sudo systemctl start adminix.service',
29
31
  watcher_stop: 'sudo systemctl stop adminix.service',
@@ -31,6 +33,7 @@ module Adminix
31
33
  process_stop: 'sudo systemctl stop adminix_process.service'
32
34
  }
33
35
  @watch_log_files = []
36
+ @error_notifier_enabled = ENV['ADMINIX_ERROR_NOTIFIER'].nil? ? true : ENV['ADMINIX_ERROR_NOTIFIER'] == 'true'
34
37
 
35
38
  @config_store_path = "#{ENV['HOME']}/.config"
36
39
  @root_path = "#{@config_store_path}/adminix"
@@ -64,10 +67,14 @@ module Adminix
64
67
  }
65
68
 
66
69
  @watch_log_files = data['watch_logs'] || []
70
+
71
+ @image_sname = data['image']
67
72
  end
68
73
  end
69
74
 
70
75
  def sync_remote_config
76
+ return if service_id.nil? || secret_key.nil?
77
+
71
78
  uri = URI.parse("#{@host}/v1/services/#{@service_id}/watcher_config")
72
79
  request = Net::HTTP::Get.new(uri)
73
80
  request["Authorization"] = "Bearer #{@secret_key}"
@@ -80,6 +87,12 @@ module Adminix
80
87
  data = JSON.parse(response.body)
81
88
  result = data['result'] || {}
82
89
 
90
+ case response.code
91
+ when '401'
92
+ puts 'Incorrect credentials'
93
+ exit
94
+ end
95
+
83
96
  @watcher_sync_period = result['sync_period'] || DEFAULT_WATCHER_SYNC_PERIOD
84
97
  @logs_sync_period = result['logs_sync_period'] || DEFAULT_LOGS_SYNC_PERIOD
85
98
  @logs_enables = result.key?('logs_enabled') ? result['logs_enabled'] == true : DEFAULT_LOGS_ENABLED
@@ -0,0 +1,7 @@
1
+ require 'airbrake-ruby'
2
+
3
+ Airbrake.configure do |c|
4
+ c.host = 'http://ec2-18-217-189-42.us-east-2.compute.amazonaws.com'
5
+ c.project_id = 1 # required, but any positive integer works
6
+ c.project_key = 'efb1c025d1abb9c4ccb828ebaf9ea68f'
7
+ end
@@ -0,0 +1,74 @@
1
+ require 'sinatra/base'
2
+ require 'json'
3
+ require 'securerandom'
4
+ require 'base64'
5
+ require 'openssl'
6
+ # require 'digest'
7
+
8
+ module Adminix
9
+ class ServerSetup < Sinatra::Base
10
+ get '/' do
11
+ %{
12
+ <html>
13
+ <head>
14
+ <title>Adminix start</title>
15
+ </head>
16
+ <body>
17
+ <script type="text/javascript">
18
+ var host = window.location.protocol + '//' + window.location.host;
19
+ var newPath = "https://beta.adminix.io/setup-server/init?host=" + host;
20
+ window.location.href = newPath;
21
+ </script>
22
+ </body>
23
+ </html>
24
+ }
25
+ end
26
+
27
+ get '/ping' do
28
+ 'pong'
29
+ end
30
+
31
+ post '/data' do
32
+ config = Adminix::Config.instance
33
+ config.password = SecureRandom.hex
34
+
35
+ content_type :json
36
+ { password: config.password, image: config.image_sname }.to_json
37
+ end
38
+
39
+ post '/connect' do
40
+ content_type :json
41
+
42
+ data = {}
43
+ config = Adminix::Config.instance
44
+
45
+ begin
46
+ decoded = Base64.decode64 request.body.read.encode('ascii-8bit')
47
+ decipher = OpenSSL::Cipher::AES256.new :CBC
48
+ decipher.decrypt
49
+ decipher.key = config.password
50
+ decipher.iv = config.iv
51
+ decrypted_data = decipher.update(decoded) + decipher.final
52
+ data = JSON.parse(decrypted_data)['server_setup']
53
+ rescue
54
+ { success: false }.to_json
55
+ end
56
+
57
+ config.password = ''
58
+ config.service_id = data['service_id']
59
+ config.secret_key = data['secret_key']
60
+ config.export_credentials
61
+
62
+ Thread.start do
63
+ sleep(2)
64
+ Adminix::Service.instance.restart!
65
+ end
66
+
67
+ { success: true }.to_json
68
+ end
69
+
70
+ set :bind, '0.0.0.0'
71
+ set :port, Adminix::Config::DEFAULT_SETUP_SERVER_PORT
72
+ end
73
+ end
74
+
@@ -1,3 +1,3 @@
1
1
  module Adminix
2
- VERSION = "0.1.31"
2
+ VERSION = '0.1.35'
3
3
  end
@@ -42,33 +42,8 @@ module Adminix
42
42
  Adminix::Service.instance.count_logs_lines
43
43
 
44
44
  EventMachine.run do
45
- @ws_client = ActionCableClient.new(@ws_uri, @ws_channel)
46
- @ws_client.connected do |msg|
47
- puts 'Service connection established'
48
- end
49
- @ws_client.disconnected do
50
- system.log 'Service disconnected. Reconnecting...'
51
- sleep(2)
52
- @ws_client.connect!
53
- end
54
- @ws_client.received do |msg|
55
- message = msg['message'] || {}
56
- case message['type']
57
- when 'restart' then @service.restart!
58
- when 'sync' then @service.sync(@ws_client, message['data'])
59
- end
60
- end
61
-
62
- @ws_logs_client = ActionCableClient.new(@ws_uri, @ws_logs_channel)
63
- @ws_logs_client.connected do |msg|
64
- puts 'Logs connection established'
65
- end
66
- @ws_logs_client.disconnected do
67
- system.log 'Logs disconnected. Reconnecting...'
68
- sleep(2)
69
- @ws_logs_client.connect!
70
- end
71
- @ws_logs_client.received { |msg| }
45
+ initialize_ws
46
+ initialize_ws_logs
72
47
 
73
48
  # Sync watcher
74
49
  EventMachine.add_periodic_timer(config.watcher_sync_period) do
@@ -91,6 +66,47 @@ module Adminix
91
66
  end
92
67
  end
93
68
 
69
+ def initialize_ws
70
+ @ws_client = ActionCableClient.new(@ws_uri, @ws_channel)
71
+ @ws_client.connected do |msg|
72
+ puts 'Service connection established'
73
+ end
74
+ @ws_client.disconnected do
75
+ system.log 'Service disconnected. Reconnecting...'
76
+ sleep(2)
77
+ # @ws_client.connect!
78
+ initialize_ws
79
+ end
80
+ @ws_client.received do |msg|
81
+ message = msg['message'] || {}
82
+ case message['type']
83
+ when 'restart' then @service.restart!
84
+ when 'sync' then @service.sync(@ws_client, message['data'])
85
+ end
86
+ end
87
+
88
+ # @ws_client.pinged do |_data|
89
+ # puts 'ping'
90
+ # end
91
+ end
92
+
93
+ def initialize_ws_logs
94
+ @ws_logs_client = ActionCableClient.new(@ws_uri, @ws_logs_channel)
95
+ @ws_logs_client.connected do |msg|
96
+ puts 'Logs connection established'
97
+ end
98
+ @ws_logs_client.disconnected do
99
+ system.log 'Logs disconnected. Reconnecting...'
100
+ sleep(2)
101
+ # @ws_logs_client.connect!
102
+ initialize_ws_logs
103
+ end
104
+ # @ws_logs_client.pinged do |_data|
105
+ # puts 'logs ping'
106
+ # end
107
+ @ws_logs_client.received { |msg| }
108
+ end
109
+
94
110
  def get_pid
95
111
  if File.exists?(@pid_full)
96
112
  file = File.new(@pid_full, "r")
data/lib/adminix.rb CHANGED
@@ -1,9 +1,10 @@
1
- require 'adminix/version'
2
- require 'adminix/config'
3
- require 'adminix/service'
4
- require 'adminix/system'
5
- require 'adminix/log_watch_handler'
6
- require 'adminix/watcher'
1
+ require_relative 'adminix/version'
2
+ require_relative 'adminix/errors'
3
+ require_relative 'adminix/config'
4
+ require_relative 'adminix/service'
5
+ require_relative 'adminix/system'
6
+ require_relative 'adminix/log_watch_handler'
7
+ require_relative 'adminix/watcher'
7
8
 
8
9
  module Adminix
9
10
  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.31
4
+ version: 0.1.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Dyl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-02 00:00:00.000000000 Z
11
+ date: 2018-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -39,19 +39,47 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.2
41
41
  - !ruby/object:Gem::Dependency
42
- name: sinatra
42
+ name: json
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 1.4.8
47
+ version: 2.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.4.8
54
+ version: 2.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: openssl
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: airbrake-ruby
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 2.8.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 2.8.1
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -136,7 +164,7 @@ dependencies:
136
164
  version: 1.7.2
137
165
  description: Adminix
138
166
  email:
139
- - christian.dyl@outlook.com
167
+ - christian@adminix.io
140
168
  executables:
141
169
  - adminix
142
170
  extensions: []
@@ -157,7 +185,9 @@ files:
157
185
  - lib/adminix.rb
158
186
  - lib/adminix/.service.rb.swn
159
187
  - lib/adminix/config.rb
188
+ - lib/adminix/errors.rb
160
189
  - lib/adminix/log_watch_handler.rb
190
+ - lib/adminix/server_setup.rb
161
191
  - lib/adminix/service.rb
162
192
  - lib/adminix/setup.rb
163
193
  - lib/adminix/setup/routes.rb
@@ -167,7 +197,7 @@ files:
167
197
  - lib/adminix/version.rb
168
198
  - lib/adminix/watcher.rb
169
199
  - views/daemon_scripts/upstart.conf.erb
170
- homepage: http://adminix.io
200
+ homepage: https://adminix.io
171
201
  licenses:
172
202
  - MIT
173
203
  metadata: {}
@@ -187,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
217
  version: '0'
188
218
  requirements: []
189
219
  rubyforge_project:
190
- rubygems_version: 2.6.13
220
+ rubygems_version: 2.6.11
191
221
  signing_key:
192
222
  specification_version: 4
193
223
  summary: Adminix