adminix 0.1.49 → 0.2

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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/adminix.gemspec +1 -4
  4. data/app/assets/images/logo.png +0 -0
  5. data/app/assets/javascripts/application.js +50 -0
  6. data/app/assets/javascripts/bootstrap.min.js +7 -0
  7. data/app/assets/javascripts/dataTables.bootstrap4.js +184 -0
  8. data/app/assets/javascripts/jquery.dataTables.js +15243 -0
  9. data/app/assets/javascripts/jquery.min.js +2 -0
  10. data/app/assets/javascripts/sb-admin-2.min.js +6 -0
  11. data/app/assets/stylesheets/bootstrap.min.css +6 -0
  12. data/app/assets/stylesheets/dataTables.bootstrap.css +314 -0
  13. data/app/assets/stylesheets/dataTables.responsive.css +106 -0
  14. data/app/assets/stylesheets/font-awesome.min.css +4 -0
  15. data/app/assets/stylesheets/sb-admin-2.min.css +5 -0
  16. data/app/views/scripts/restart_watcher.sh.erb +9 -0
  17. data/app/views/scripts/run_script.sh.erb +12 -0
  18. data/app/views/scripts/start_process.sh.erb +7 -0
  19. data/app/views/scripts/stop_process.sh.erb +7 -0
  20. data/app/views/scripts/update_process.sh.erb +24 -0
  21. data/app/views/scripts/update_watcher.sh.erb +3 -0
  22. data/app/views/web/dashboard.html.erb +90 -0
  23. data/app/views/web/job.html.erb +46 -0
  24. data/app/views/web/link.html.erb +12 -0
  25. data/app/views/web/loadstamp.html.erb +57 -0
  26. data/app/views/web/log.html.erb +49 -0
  27. data/app/views/web/partials/footer.html.erb +11 -0
  28. data/app/views/web/partials/header.html.erb +50 -0
  29. data/bin/install_adminix +40 -0
  30. data/bin/push +13 -0
  31. data/development.log +0 -0
  32. data/exe/adminix +91 -28
  33. data/lib/adminix.rb +42 -5
  34. data/lib/adminix/config.rb +170 -96
  35. data/lib/adminix/entities.rb +5 -0
  36. data/lib/adminix/entities/job.rb +54 -0
  37. data/lib/adminix/entities/log.rb +21 -0
  38. data/lib/adminix/entities/service.rb +211 -0
  39. data/lib/adminix/entities/sysload_stamp.rb +37 -0
  40. data/lib/adminix/entities/variable.rb +32 -0
  41. data/lib/adminix/helpers.rb +7 -2
  42. data/lib/adminix/helpers/command.rb +73 -0
  43. data/lib/adminix/helpers/files.rb +82 -0
  44. data/lib/adminix/helpers/log_reader.rb +16 -0
  45. data/lib/adminix/helpers/net_http.rb +63 -0
  46. data/lib/adminix/helpers/output.rb +28 -0
  47. data/lib/adminix/helpers/systemctl.rb +54 -0
  48. data/lib/adminix/services.rb +3 -0
  49. data/lib/adminix/services/app_service.rb +143 -0
  50. data/lib/adminix/services/logs_service.rb +13 -0
  51. data/lib/adminix/services/system_load_service.rb +16 -0
  52. data/lib/adminix/version.rb +1 -1
  53. data/lib/adminix/watcher.rb +76 -144
  54. data/lib/adminix/web.rb +4 -0
  55. data/lib/adminix/web/router.rb +98 -0
  56. data/lib/adminix/web/server.rb +60 -0
  57. data/lib/adminix/web/view_helper.rb +14 -0
  58. data/lib/event_machine.rb +2 -0
  59. data/lib/event_machine/http_server.rb +2 -0
  60. data/lib/event_machine/http_server/response.rb +314 -0
  61. data/lib/event_machine/http_server/server.rb +107 -0
  62. data/lib/event_machine/tail.rb +2 -0
  63. data/lib/event_machine/tail/filetail.rb +470 -0
  64. data/lib/event_machine/tail/globwatcher.rb +294 -0
  65. metadata +60 -45
  66. data/lib/adminix/errors.rb +0 -7
  67. data/lib/adminix/helpers/file.rb +0 -13
  68. data/lib/adminix/helpers/http.rb +0 -19
  69. data/lib/adminix/log_watch_handler.rb +0 -23
  70. data/lib/adminix/server_setup.rb +0 -76
  71. data/lib/adminix/service.rb +0 -179
  72. data/lib/adminix/setup.rb +0 -3
  73. data/lib/adminix/setup/routes.rb +0 -113
  74. data/lib/adminix/setup/services.rb +0 -139
  75. data/lib/adminix/setup/views.rb +0 -183
  76. data/lib/adminix/system.rb +0 -106
  77. data/views/daemon_scripts/upstart.conf.erb +0 -23
@@ -1,183 +0,0 @@
1
- module Adminix::Setup
2
- module Views
3
- def self.root_view(_assigns)
4
- layout do
5
- %{
6
- <div class="row">
7
- <div class="col-md-6 col-md-offset-3">
8
- <br/>
9
- <a href="http://adminix.io" title="Adminix website" target="_blank">
10
- <img src="http://www.adminix.io/images/logo_square.jpg" alt="Adminix logo" class="img-responsive center-block" style="width: 130px" />
11
- </a>
12
- <br/>
13
- <p>Thank you for using Adminix image!</p>
14
- <p>Your application is almost deployed, please click on "Continue" button to finish setup process.</p>
15
- <button type="button" class="btn btn-primary" onclick="location.href='/sign-up';">Continue</button>
16
- <br/><br/>
17
- <a href="http://adminix.io" title="Adminix website" target="_blank">Click to visit our website</a>
18
- </div>
19
- </div>
20
- }
21
- end
22
- end
23
-
24
- def self.login_view(assigns)
25
- session = assigns[:session] || {}
26
- errors = assigns[:errors] || []
27
- layout do
28
- panel(title: 'Login') do
29
- %{
30
- <form method="POST" action="/login">
31
- #{form_group('email', type: 'email', name: 'session[email]', label: 'Email', placeholder: 'Please enter your email', value: session[:email])}
32
- #{form_group('password', type: 'password', name: 'session[password]', label: 'Password', placeholder: 'Please enter your password')}
33
- #{errors.count != 0 ? render_errors(errors) : ''}
34
- <button type="submit" class="btn btn-primary">Login</button>
35
- <br/><br/>
36
- <a href="/sign-up" title="Sign up">New to Adminix? Create a FREE account</a>
37
- </form>
38
- }
39
- end
40
- end
41
- end
42
-
43
- def self.sign_up_view(assigns)
44
- user = assigns[:user] || {}
45
- errors = assigns[:errors] || []
46
- layout do
47
- panel(title: 'Create a FREE Adminix account') do
48
- %{
49
- <form method="POST" action="/sign-up">
50
- #{form_group('first_name', type: 'text', name: 'user[first_name]', label: 'First name', placeholder: 'Please enter your first name', value: user[:first_name])}
51
- #{form_group('last_name', type: 'text', name: 'user[last_name]', label: 'Last name', placeholder: 'Please enter your last name', value: user[:last_name])}
52
- #{form_group('email', type: 'email', name: 'user[email]', label: 'Email', placeholder: 'Please enter your email', value: user[:email])}
53
- #{form_group('password', type: 'password', name: 'user[password]', label: 'Password', placeholder: 'Please enter your password')}
54
- #{errors.count != 0 ? render_errors(errors) : ''}
55
- <button type="submit" class="btn btn-primary">Sign up</button>
56
- <br/><br/>
57
- <a href="/login" title="Login">Already have an account? Login</a>
58
- </form>
59
- }
60
- end
61
- end
62
- end
63
-
64
- def self.create_service_view(assigns)
65
- layout do
66
- panel(title: 'Create service') do
67
- %{
68
- <form method="POST" action="/create-service?t=#{assigns[:token]}">
69
- #{form_group('name', type: 'text', name: 'service[name]', label: 'Service name', placeholder: 'Please enter your service name')}
70
- <button type="submit" class="btn btn-primary" onclick="location.href='/complete';">Launch your service</button>
71
- <br/><br/>
72
- #{assigns[:service_exists] ? "<a href=\"/connect-service?t=#{assigns[:token]}\" title=\"Connect service\">Already have an existing service? Choose it</a>" : ''}
73
- </form>
74
- }
75
- end
76
- end
77
- end
78
-
79
- def self.connect_service_view(assigns)
80
- layout do
81
- panel(title: 'Connect existing service') do
82
- %{
83
- <form method="POST" action="/connect-service?t=#{assigns[:token]}">
84
- <div class="form-group">
85
- <label for="service_id">Please select service to connect</label>
86
- <select class="form-control" name="service[id]" id="service_id">
87
- #{(assigns[:services].map { |s| "<option value='#{s['id']}'>#{s['name']}</option>" }).join('')}
88
- </select>
89
- </div>
90
- <button type="submit" class="btn btn-primary">Launch your service</button>
91
- <br/><br/>
92
- <a href="/create-service?t=#{assigns[:token]}" title="Connect service">Want to create a new one? Create service</a>
93
- </form>
94
- }
95
- end
96
- end
97
- end
98
-
99
- def self.complete_view(_assigns)
100
- layout do
101
- panel(title: 'Application setup process completed') do
102
- %{
103
- <p>Your application setup is completed.
104
- }
105
- end
106
- end
107
- end
108
-
109
- def self.error_view(_assigns)
110
- layout do
111
- panel(title: 'Something went wrong') do
112
- %{
113
- <p>Something went wrong please retry a process.</p>
114
- }
115
- end
116
- end
117
- end
118
-
119
- private
120
-
121
- def self.layout
122
- %{
123
- <html>
124
- <head>
125
- <title>Adminix setup</title>
126
- <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
127
- </head>
128
- <body>
129
- <div class="container">
130
- #{yield}
131
- </div>
132
- <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
133
- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
134
- </body>
135
- </html>
136
- }
137
- end
138
-
139
- def self.panel(assigns)
140
- %{
141
- <div class="row">
142
- <div class="col-md-offset-2 col-md-8">
143
- <div class="panel panel-default">
144
- <div class="panel-heading clearfix">
145
- <i class="icon-calendar"></i>
146
- <h3 class="panel-title">#{assigns[:title]}</h3>
147
- </div>
148
- <div class="panel-body">
149
- <div class="row">
150
- <div class="col-md-6 col-md-offset-3">
151
- #{yield}
152
- </div>
153
- </div>
154
- </div>
155
- </div>
156
- </div>
157
- }
158
- end
159
-
160
- def self.render_errors(errors)
161
- flash (errors.map { |k,v| "#{v}<br/>" }).join('<br/>')
162
- text = errors.map do |attr, errors|
163
- (errors.map { |err| "#{attr} #{err}" }).join('<br/>')
164
- end.join('<br/>')
165
-
166
- flash(text)
167
- end
168
-
169
- def self.flash(text, type='danger')
170
- %{<div class="alert alert-#{type}">#{text}</div>}
171
- end
172
-
173
- def self.form_group(id, assigns)
174
- %{
175
- <div class="form-group">
176
- <label for="#{id}">#{assigns[:label]}</label>
177
- <input type="#{assigns[:type]}" name="#{assigns[:name]}" value="#{assigns[:value]}" class="form-control" id="#{id}" placeholder="#{assigns[:placeholder]}">
178
- </div>
179
- }
180
- end
181
- end
182
- end
183
-
@@ -1,106 +0,0 @@
1
- require 'singleton'
2
- require 'erb'
3
-
4
- module Adminix
5
- class System
6
- include Singleton
7
-
8
- def self.windows?
9
- (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
10
- end
11
-
12
- def self.mac?
13
- (/darwin/ =~ RUBY_PLATFORM) != nil
14
- end
15
-
16
- def self.unix?
17
- !self.windows?
18
- end
19
-
20
- def self.linux?
21
- self.unix? and not self.mac?
22
- end
23
-
24
- def self.rvm?
25
- true
26
- end
27
-
28
- attr_reader :os, :processor_load, :memory_load, :username, :home, :adminix_bin, :ruby_version
29
-
30
- def initialize
31
- define_os
32
- parse_system_info
33
- define_adminix_bin
34
- check_system_load
35
- end
36
-
37
- def generate_daemon
38
- template = File.read("#{Adminix::root}/views/daemon_scripts/upstart.conf.erb")
39
- file_content = ERB.new(template).result(binding)
40
-
41
- file_path = `pwd`.split("\n")[0] + '/adminix.conf'
42
- File.delete(file_path) if File.exists?(file_path)
43
- File.open(file_path, 'w') { |file| file.write(file_content) }
44
-
45
- file_path
46
- end
47
-
48
- def eval(cmd)
49
- `#{cmd}`
50
- rescue => e
51
- e.to_s
52
- end
53
-
54
- def sudo?
55
- @username == 'root'
56
- end
57
-
58
- def check_system_load
59
- case @os
60
- when :mac
61
- @processor_load = `ps -A -o %cpu | awk '{s+=$1} END {print s "%"}'`.to_f
62
- @memory_load = 0.1
63
- when :linux, :unix
64
- @processor_load = `grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'`.to_f
65
- @memory_load = `free | grep Mem | awk '{print $3/$2 * 100.0}'`.to_f
66
- end
67
- end
68
-
69
- def log(message)
70
- puts message unless config.daemon
71
- end
72
-
73
- private
74
-
75
- def config
76
- Config.instance
77
- end
78
-
79
- def define_os
80
- @os = if self.class.windows?
81
- :windows
82
- elsif self.class.mac?
83
- :mac
84
- elsif self.class.unix?
85
- :unix
86
- elsif self.class.linux?
87
- :linux
88
- end
89
- end
90
-
91
- def parse_system_info
92
- @username = ENV['USER'] || `whoami`.split("\n")[0]
93
- @home = "/home/#{@username}"
94
- @ruby_version = RUBY_VERSION
95
- end
96
-
97
- def define_adminix_bin
98
- @adminix_bin = if self.class.rvm?
99
- "/home/#{@username}/.rvm/gems/ruby-#{@ruby_version}/wrappers/adminix"
100
- else
101
- "/usr/local/bin/adminix"
102
- end
103
- end
104
- end
105
- end
106
-
@@ -1,23 +0,0 @@
1
- description "Ruby example upstart conf"
2
-
3
- setuid <%= @username %>
4
- setgid <%= @username %>
5
-
6
- <%#start on runlevel [2345]%>
7
- <%#stop on runlevel [06]%>
8
-
9
- respawn
10
- respawn limit 3 30
11
-
12
- # env RAILS_ENV=production
13
-
14
- # pre-start script
15
- # use this for any pre-start stuff
16
- # end script
17
-
18
- script
19
- exec /bin/bash <<EOS
20
- export HOME=<%= @home %>
21
- exec <%= @adminix_bin %> watch
22
- EOS
23
- end script