minicron 0.1.1 → 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.
- checksums.yaml +4 -4
- data/README.md +96 -43
- data/Rakefile +9 -1
- data/lib/minicron.rb +9 -4
- data/lib/minicron/alert.rb +2 -1
- data/lib/minicron/alert/email.rb +7 -2
- data/lib/minicron/alert/pagerduty.rb +3 -2
- data/lib/minicron/alert/sms.rb +2 -1
- data/lib/minicron/cli.rb +49 -19
- data/lib/minicron/constants.rb +2 -1
- data/lib/minicron/cron.rb +6 -6
- data/lib/minicron/hub/app.rb +8 -8
- data/lib/minicron/hub/assets/app/controllers/executions.js +4 -3
- data/lib/minicron/hub/assets/app/controllers/hosts.js +4 -4
- data/lib/minicron/hub/assets/app/controllers/jobs.js +4 -4
- data/lib/minicron/hub/assets/app/controllers/schedules.js +4 -1
- data/lib/minicron/hub/controllers/api/executions.rb +4 -4
- data/lib/minicron/hub/controllers/api/hosts.rb +18 -5
- data/lib/minicron/hub/controllers/api/job_execution_outputs.rb +2 -2
- data/lib/minicron/hub/controllers/api/jobs.rb +8 -8
- data/lib/minicron/hub/controllers/api/schedule.rb +10 -10
- data/lib/minicron/hub/db/schema.rb +70 -65
- data/lib/minicron/hub/db/schema.sql +53 -25
- data/lib/minicron/hub/models/execution.rb +1 -1
- data/lib/minicron/hub/models/host.rb +10 -1
- data/lib/minicron/hub/models/job.rb +3 -3
- data/lib/minicron/hub/models/schedule.rb +1 -1
- data/lib/minicron/hub/serializers/execution.rb +61 -57
- data/lib/minicron/hub/serializers/host.rb +49 -42
- data/lib/minicron/hub/serializers/job.rb +82 -78
- data/lib/minicron/hub/serializers/job_execution_output.rb +42 -38
- data/lib/minicron/hub/serializers/schedule.rb +56 -52
- data/lib/minicron/hub/views/handlebars/executions.erb +7 -1
- data/lib/minicron/hub/views/handlebars/hosts.erb +2 -2
- data/lib/minicron/hub/views/handlebars/schedules.erb +3 -3
- data/lib/minicron/monitor.rb +4 -4
- data/lib/minicron/transport/client.rb +6 -6
- data/lib/minicron/transport/faye/client.rb +4 -4
- data/lib/minicron/transport/faye/extensions/job_handler.rb +3 -2
- data/lib/minicron/transport/faye/server.rb +1 -0
- data/lib/minicron/transport/server.rb +2 -2
- data/lib/minicron/transport/ssh.rb +6 -8
- data/spec/minicron/cli_spec.rb +4 -4
- data/spec/minicron/transport/client_spec.rb +2 -2
- data/spec/minicron/transport/faye/client_spec.rb +7 -7
- data/spec/minicron/transport/server_spec.rb +1 -1
- data/spec/minicron_spec.rb +2 -1
- data/spec/valid_config.toml +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa2c40fa9887bb6c06b46153ba397a13806ed4f9
|
4
|
+
data.tar.gz: e1fc6d9b267c3e0a21727328f25922ecffeae9e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f8fa7cdcd2a80623bbf1a0c3f266e575f9c3da024325579e96b65a523158212ac879ced4cffa834a11f150c14c3bfce48d921b90004ec380a5629779af89e14
|
7
|
+
data.tar.gz: 3e48387f403abbf3b34d1efd85bb4f3d33aec113a20abfce5336c6e801794d9a49a6f0e00e7844af12e4aa87a298de04632a6a2bffaf13b8686519ae790e34b7
|
data/README.md
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
minicron
|
2
2
|
=======
|
3
3
|
|
4
|
-
[](https://rubygems.org/gems/minicron)
|
5
|
-
|
6
|
-
|
4
|
+
[](https://rubygems.org/gems/minicron)
|
5
|
+
[](http://travis-ci.org/jamesrwhite/minicron)
|
6
|
+
[](https://coveralls.io/r/jamesrwhite/minicron?branch=master)
|
7
|
+
[](https://codeclimate.com/github/jamesrwhite/minicron)
|
8
|
+
[](https://gemnasium.com/jamesrwhite/minicron)
|
9
|
+
[](http://inch-pages.github.io/github/jamesrwhite/minicron)
|
10
|
+
|
11
|
+
minicron aims to complement ````cron```` by making it easier to manage and monitor cron jobs, it can largely be
|
12
|
+
thought of as two components that interact together, the CLI and the Hub. The CLI is what is installed on your
|
13
|
+
server(s) and executes your cron command and reports the status back to the Hub. The Hub is the central point
|
14
|
+
where data from one or many instances of the CLI are is recieved and stored in a database. The Hub also provides
|
15
|
+
a web interface to the data and makes it easy to manage your cron jobs.
|
7
16
|
|
8
17
|
- [Background](https://github.com/jamesrwhite/minicron/blob/master/README.md#background)
|
9
|
-
- [Goals](https://github.com/jamesrwhite/minicron/blob/master/README.md#features)
|
10
18
|
- [Features](https://github.com/jamesrwhite/minicron/blob/master/README.md#goals)
|
11
19
|
- [Requirements](https://github.com/jamesrwhite/minicron/blob/master/README.md#requirements)
|
12
20
|
- [Installation](https://github.com/jamesrwhite/minicron/blob/master/README.md#installation)
|
@@ -20,17 +28,9 @@ minicron aims to complement ````cron```` by making it easier to manage and monit
|
|
20
28
|
Background
|
21
29
|
-----------
|
22
30
|
|
23
|
-
I'm developing minicron as part of my dissertation at university which is due in May but I plan to continue
|
24
|
-
|
25
|
-
|
26
|
-
------
|
27
|
-
|
28
|
-
Some rough goals that minicron is trying to achieve.
|
29
|
-
|
30
|
-
- Remove the need to understand cron syntax
|
31
|
-
- Increase visiblity into cron failures and missed executions
|
32
|
-
- Have minimal external dependencies
|
33
|
-
- Fault tolerance
|
31
|
+
I'm developing minicron as part of my dissertation at university which is due in May but I plan to continue
|
32
|
+
development after that. My inspiration for developing minicron comes from time spent working at
|
33
|
+
[Miniclip](http://www.miniclip.com) where the management and monitoring of cron jobs at times proved to be tricky!
|
34
34
|
|
35
35
|
Features
|
36
36
|
---------
|
@@ -51,10 +51,9 @@ Requirements
|
|
51
51
|
-------------
|
52
52
|
|
53
53
|
#### Ruby
|
54
|
-
- MRI
|
55
|
-
|
56
|
-
-
|
57
|
-
- <del>Travis builds are run on the latest release</del> [*awaiting bug fix*](https://github.com/rubinius/rubinius/issues/2944)
|
54
|
+
- **MRI**: 1.9.3 and above (tested on 1.9.3, 2.0.0, 2.1.0)
|
55
|
+
- <del>**Rubinius**: Travis builds are run on the latest release</del> [*awaiting bug fix*](https://github.com/rubinius/rubinius/issues/2944)
|
56
|
+
- **JRuby:** currently untested but most likely needs some workn
|
58
57
|
|
59
58
|
#### Database
|
60
59
|
|
@@ -63,11 +62,13 @@ Requirements
|
|
63
62
|
|
64
63
|
#### Web Server / Reverse Proxy
|
65
64
|
|
66
|
-
If you want to run minicron behind a web server or proxy it needs to support the web socket protocol.
|
65
|
+
If you want to run minicron behind a web server or proxy it needs to support the web socket protocol.
|
66
|
+
nginx for example supports web sockets from version 1.3.13 and up. I've included an [example config](https://github.com/jamesrwhite/minicron/blob/master/sample.nginx.conf) for nginx.
|
67
67
|
|
68
68
|
#### Browser
|
69
69
|
|
70
|
-
I have been testing the web interface in the latest versions of Chrome, Firefox and Safari.
|
70
|
+
I have been testing the web interface in the latest versions of Chrome, Firefox and Safari.
|
71
|
+
I'm currently unsure of how it functions in the various of Internet Explorer but in theory it should support IE9+
|
71
72
|
|
72
73
|
#### OS
|
73
74
|
|
@@ -76,61 +77,111 @@ Should run on any linux/bsd based OS that the above ruby versions run on.
|
|
76
77
|
Installation
|
77
78
|
-------------
|
78
79
|
|
79
|
-
minicron is currently under heavy development and as such I would not recommend that you use this in production yet
|
80
|
+
minicron is currently under heavy development and as such I would not recommend that you use this in production yet
|
81
|
+
but I encourage you to give it a try in a non critical environment and help me to improve it.
|
82
|
+
|
83
|
+
1. First check you meet the [requirements](https://github.com/jamesrwhite/minicron/blob/master/README.md#requirements)
|
84
|
+
|
85
|
+
2. On some distributions you may need to install the ````ruby-dev```` and ````build-essential```` packages
|
80
86
|
|
81
|
-
To install the latest release (currently 0.
|
87
|
+
3. To install the latest release (currently 0.2) you can ````gem install minicron````, depending on your ruby setup
|
88
|
+
you may need to run this with ````sudo````
|
82
89
|
|
83
|
-
|
90
|
+
4. Set your database configuration options in ````/etc/minicron.toml````, you can use the [default.config.toml](https://github.com/jamesrwhite/minicron/blob/master/default.config.toml) as a guide on what options are configurable
|
84
91
|
|
85
|
-
|
92
|
+
5. Make sure you have created an empty database with the name you set in ````/etc/minicron.toml````
|
86
93
|
|
87
|
-
> **WARNING**
|
94
|
+
> **WARNING**
|
95
|
+
>
|
96
|
+
> the step below will drop any existing tables in the configured database and create new ones i.e:
|
97
|
+
> ````sql
|
98
|
+
> DROP TABLE IF EXISTS jobs; CREATE TABLE jobs ..
|
99
|
+
> ````
|
88
100
|
|
89
|
-
|
101
|
+
6. You can then ````minicron db setup```` to create the database schema, alternatively you can use
|
102
|
+
the [schema dump provided](https://github.com/jamesrwhite/minicron/blob/master/lib/minicron/hub/db/schema.sql)
|
103
|
+
|
104
|
+
7. Done! See the usage section below for more details on how to use minicron now you have it installed
|
90
105
|
|
91
106
|
Usage
|
92
107
|
-----
|
93
108
|
|
94
|
-
minicron is packaged as a gem and can be interacted with from the command line once you have installed it. The current commands are as follows:
|
95
|
-
|
96
109
|
#### Run a command
|
97
110
|
|
98
|
-
````
|
99
|
-
minicron run '
|
111
|
+
````bash
|
112
|
+
minicron run 'mysqldump db > backup.sql'
|
100
113
|
````
|
101
114
|
|
102
|
-
|
115
|
+
The global ````--verbose```` option can also be passed to the ````run```` argument like so
|
103
116
|
|
117
|
+
````bash
|
118
|
+
minicron run --verbose ls
|
104
119
|
````
|
105
|
-
|
120
|
+
|
121
|
+
You can also run a command in 'dry run' mode to test if it works without sending the output to the server.
|
122
|
+
|
123
|
+
````bash
|
124
|
+
minicron run --dry-run 'zip -r backup.zip website'
|
106
125
|
````
|
107
126
|
|
108
|
-
|
127
|
+
for further information see ````minicron help run````.
|
109
128
|
|
110
129
|
#### Get help
|
111
130
|
|
112
|
-
Running ````minicron```` with no arguments is an alias to running ````minicron help````, ````minicron -h```` or ````minicron --help````.
|
131
|
+
Running ````minicron```` with no arguments is an alias to running ````minicron help````, ````minicron -h```` or ````minicron --help````.
|
132
|
+
You can also use the help argument to get information on any command as shown above in the run a command section
|
133
|
+
or alternatively you can pass the ````-h```` or ````--help```` options like so ````minicron run -h````.
|
113
134
|
|
114
135
|
#### Server
|
115
136
|
|
116
|
-
To launch the server (aka the Hub) run
|
137
|
+
To launch the server (aka the Hub) run
|
138
|
+
|
139
|
+
````bash
|
140
|
+
minicron server start
|
141
|
+
````
|
142
|
+
|
143
|
+
by default it will bind to port 9292 on the host 127.0.0.1 but this can be configured by the command line
|
144
|
+
arguments ````--host```` ````--port```` and ````--path```` or in the config file.
|
117
145
|
|
118
|
-
|
146
|
+
By default the server will run as a daemon with its process id stored in ````/tmp/minicron.pid````
|
147
|
+
you can also use the ````stop```` ````restart```` and ````status```` commands to control the server.
|
148
|
+
|
149
|
+
To run the server in debug mode, i.e not as a daemon so you can see its output you can pass the ````--debug````
|
150
|
+
option.
|
151
|
+
|
152
|
+
See [sample.nginx.conf](https://github.com/jamesrwhite/minicron/blob/master/sample.nginx.conf) for an example of
|
153
|
+
how to run minicron behind a reverse proxy.
|
154
|
+
|
155
|
+
#### Connecting to a host via SSH
|
156
|
+
|
157
|
+
To be able to perform CRUD operations on the crontab minicron needs to connect via SSH to the host.
|
158
|
+
When you set up a host minicron automatically creates a public/private key pair for you and stores it
|
159
|
+
in ````~/.ssh```` on the host the minicron server is being run on using the naming schema ````minicron_host_*HOST_ID*_rsa(.pub)````.
|
160
|
+
To be able edit the crontab on a host minicron *needs* to connect to the host as the root user so you will
|
161
|
+
need to to copy the public key to the hosts authorized_keys file e.g ````/root/.ssh/authorized_keys```` on
|
162
|
+
most linux distributions or ````/var/root/.ssh/authorized_keys```` on OSX.
|
119
163
|
|
120
164
|
#### Version
|
121
165
|
|
122
|
-
Like many command line programs minicron will show it's version number when the global options ````-v````
|
166
|
+
Like many command line programs minicron will show it's version number when the global options ````-v````
|
167
|
+
or ````--version```` are passed to the CLI.
|
123
168
|
|
124
169
|
#### Configuration
|
125
170
|
|
126
|
-
Some configuration options can be passed in manually but the recommend way to configure minicron is through the use
|
171
|
+
Some configuration options can be passed in manually but the recommend way to configure minicron is through the use
|
172
|
+
of a config file. You can specify the path to the file using the ````--config```` global option. The file is expected
|
173
|
+
to be in the [toml](https://github.com/mojombo/toml "toml") format. The default options are specified in the
|
174
|
+
[default.config.toml](https://github.com/jamesrwhite/minicron/blob/master/default.config.toml "default.config.toml")
|
175
|
+
file and minicron will parse a config located in ````/etc/minicron.toml```` if it exists. Options specified via
|
176
|
+
the command line will take precedence over those taken from a config file.
|
127
177
|
|
128
178
|
Documentation
|
129
179
|
-------------
|
130
180
|
|
131
|
-
minicron uses [Yard](http://yardoc.org/ "Yard") for it's code documentation, you can either generate it and view
|
181
|
+
minicron uses [Yard](http://yardoc.org/ "Yard") for it's code documentation, you can either generate it and view
|
182
|
+
it locally using the following commands:
|
132
183
|
|
133
|
-
````
|
184
|
+
````bash
|
134
185
|
yard doc
|
135
186
|
yard server
|
136
187
|
````
|
@@ -163,8 +214,10 @@ Areas that I would love some help with:
|
|
163
214
|
- General testing of the system, let me know what you think and create issues for any bugs you find!
|
164
215
|
- Tests!!
|
165
216
|
- Validation and error handling improvements
|
166
|
-
- Documentation improvements. Find something confusing or unexpected, let me know and I'll add or improve
|
167
|
-
|
217
|
+
- Documentation improvements. Find something confusing or unexpected, let me know and I'll add or improve
|
218
|
+
documentation for it!
|
219
|
+
- Look for '[TODO:](https://github.com/jamesrwhite/minicron/search?q=TODO%3A)' notices littered around the code,
|
220
|
+
I'm trying to convert them all to issues but there are a lot..
|
168
221
|
- Code refactoring, I had a reasonably tight deadline to have the main concept done by so some parts are a bit rushed
|
169
222
|
- UI improvements
|
170
223
|
|
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
2
|
require 'rspec/core/rake_task'
|
3
3
|
require 'sinatra/activerecord/rake'
|
4
|
-
require 'minicron'
|
4
|
+
require 'minicron/constants'
|
5
5
|
require 'minicron/hub/app'
|
6
6
|
|
7
7
|
# rspec tests
|
@@ -15,3 +15,11 @@ end
|
|
15
15
|
task :default do
|
16
16
|
puts `rake --tasks`
|
17
17
|
end
|
18
|
+
|
19
|
+
namespace :db do
|
20
|
+
# Tell active record where the db dir is
|
21
|
+
Sinatra::ActiveRecordTasks.db_dir = Minicron::HUB_PATH + '/db'
|
22
|
+
|
23
|
+
# Connect to the DB
|
24
|
+
Minicron::Hub::App.setup_db
|
25
|
+
end
|
data/lib/minicron.rb
CHANGED
@@ -23,7 +23,8 @@ module Minicron
|
|
23
23
|
'server' => {
|
24
24
|
'host' => '127.0.0.1',
|
25
25
|
'port' => 9292,
|
26
|
-
'path' => '/'
|
26
|
+
'path' => '/',
|
27
|
+
'debug' => false
|
27
28
|
},
|
28
29
|
'database' => {
|
29
30
|
'type' => 'mysql',
|
@@ -41,7 +42,12 @@ module Minicron
|
|
41
42
|
'enabled' => false,
|
42
43
|
'smtp' => {
|
43
44
|
'address' => 'localhost',
|
44
|
-
'port' => 25
|
45
|
+
'port' => 25,
|
46
|
+
'domain' => 'localhost.localdomain',
|
47
|
+
'user_name' => nil,
|
48
|
+
'password' => nil,
|
49
|
+
'authentication' => nil,
|
50
|
+
'enable_starttls_auto' => true
|
45
51
|
}
|
46
52
|
},
|
47
53
|
'sms' => {
|
@@ -68,7 +74,7 @@ module Minicron
|
|
68
74
|
rescue Errno::ENOENT
|
69
75
|
# Fail if the file doesn't exist unless it's the default config file
|
70
76
|
if file_path != DEFAULT_CONFIG_FILE
|
71
|
-
|
77
|
+
raise Exception, "Unable to the load the file '#{file_path}', are you sure it exists?"
|
72
78
|
end
|
73
79
|
rescue Errno::EACCES
|
74
80
|
fail Exception, "Unable to the readthe file '#{file_path}', check it has the right permissions."
|
@@ -152,7 +158,6 @@ module Minicron
|
|
152
158
|
filename
|
153
159
|
end
|
154
160
|
|
155
|
-
|
156
161
|
# Used to generate SSH keys for hosts but is completely generic
|
157
162
|
#
|
158
163
|
# @param type [String] the thing that is using the key, this is just here
|
data/lib/minicron/alert.rb
CHANGED
@@ -5,6 +5,7 @@ require 'minicron/hub/models/alert'
|
|
5
5
|
require 'minicron/hub/models/job'
|
6
6
|
|
7
7
|
module Minicron
|
8
|
+
# Allows the sending of alerts via multiple mediums
|
8
9
|
class Alert
|
9
10
|
# Send an alert using all enabled mediums
|
10
11
|
#
|
@@ -50,7 +51,7 @@ module Minicron
|
|
50
51
|
when 'pagerduty'
|
51
52
|
send_pagerduty(options)
|
52
53
|
else
|
53
|
-
|
54
|
+
fail Exception, "The medium '#{options[:medium]}' is not supported!"
|
54
55
|
end
|
55
56
|
|
56
57
|
# Store that we sent the alert
|
data/lib/minicron/alert/email.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'mail'
|
2
2
|
|
3
3
|
module Minicron
|
4
|
+
# Allows the sending of email alerts
|
4
5
|
class Email
|
5
6
|
# Configure the mail client
|
6
7
|
def initialize
|
@@ -8,7 +9,11 @@ module Minicron
|
|
8
9
|
delivery_method(
|
9
10
|
:smtp,
|
10
11
|
:address => Minicron.config['alerts']['email']['smtp']['address'],
|
11
|
-
:port => Minicron.config['alerts']['email']['smtp']['port']
|
12
|
+
:port => Minicron.config['alerts']['email']['smtp']['port'],
|
13
|
+
:domain => Minicron.config['alerts']['email']['smtp']['domain'],
|
14
|
+
:user_name => Minicron.config['alerts']['email']['smtp']['user_name'],
|
15
|
+
:password => Minicron.config['alerts']['email']['smtp']['password'],
|
16
|
+
:enable_starttls_auto => Minicron.config['alerts']['email']['smtp']['enable_starttls_auto']
|
12
17
|
)
|
13
18
|
end
|
14
19
|
end
|
@@ -28,7 +33,7 @@ module Minicron
|
|
28
33
|
when 'fail'
|
29
34
|
"Execution ##{options[:execution_id]} of Job ##{options[:job_id]} '#{options[:job].name}' failed."
|
30
35
|
else
|
31
|
-
|
36
|
+
fail Exception, "The kind '#{options[:kind]} is not supported!"
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pagerduty'
|
2
2
|
|
3
3
|
module Minicron
|
4
|
+
# Allows the sending of pagerduty alerts
|
4
5
|
class PagerDuty
|
5
6
|
# Used to set up on the pagerduty client
|
6
7
|
def initialize
|
@@ -24,7 +25,7 @@ module Minicron
|
|
24
25
|
when 'fail'
|
25
26
|
"Execution ##{options[:execution_id]} of Job ##{options[:job_id]} failed"
|
26
27
|
else
|
27
|
-
|
28
|
+
fail Exception, "The kind '#{options[:kind]} is not supported!"
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
@@ -33,7 +34,7 @@ module Minicron
|
|
33
34
|
# @param title [String]
|
34
35
|
# @param message [String]
|
35
36
|
def send(title, message)
|
36
|
-
@client.trigger(title,
|
37
|
+
@client.trigger(title, :message => message)
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
data/lib/minicron/alert/sms.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'twilio-ruby'
|
2
2
|
|
3
3
|
module Minicron
|
4
|
+
# Allows the sending of SMS alerts via Twilio
|
4
5
|
class SMS
|
5
6
|
# Used to set up on the twilio client
|
6
7
|
def initialize
|
@@ -27,7 +28,7 @@ module Minicron
|
|
27
28
|
when 'fail'
|
28
29
|
"minicron alert - job failed!\nExecution ##{options[:execution_id]} of Job ##{options[:job_id]} failed"
|
29
30
|
else
|
30
|
-
|
31
|
+
fail Exception, "The kind '#{options[:kind]} is not supported!"
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
data/lib/minicron/cli.rb
CHANGED
@@ -2,6 +2,7 @@ require 'pty'
|
|
2
2
|
require 'English'
|
3
3
|
require 'rainbow/ext/string'
|
4
4
|
require 'commander'
|
5
|
+
require 'insidious'
|
5
6
|
require 'minicron/constants'
|
6
7
|
require 'minicron/transport'
|
7
8
|
require 'minicron/transport/client'
|
@@ -11,6 +12,8 @@ require 'minicron/monitor'
|
|
11
12
|
include Commander::UI
|
12
13
|
|
13
14
|
module Minicron
|
15
|
+
# Handles the main CLI interaction of minicron
|
16
|
+
# TODO: this class is probably too complicated and should be refactored a bit
|
14
17
|
class CLI
|
15
18
|
# Function to the parse the config of the options passed to commands
|
16
19
|
#
|
@@ -32,7 +35,8 @@ module Minicron
|
|
32
35
|
'server' => {
|
33
36
|
'host' => opts.host,
|
34
37
|
'port' => opts.port,
|
35
|
-
'path' => opts.path
|
38
|
+
'path' => opts.path,
|
39
|
+
'debug' => opts.debug
|
36
40
|
}
|
37
41
|
)
|
38
42
|
end
|
@@ -128,9 +132,7 @@ module Minicron
|
|
128
132
|
end
|
129
133
|
end
|
130
134
|
rescue Errno::ENOENT
|
131
|
-
|
132
|
-
|
133
|
-
fail Exception, "Running the command `#{command}` failed, are you sure it exists?"
|
135
|
+
raise Exception, "Running the command `#{command}` failed, are you sure it exists?"
|
134
136
|
ensure
|
135
137
|
# Record the time the command finished
|
136
138
|
finish = Time.now.utc - subtract_total
|
@@ -142,7 +144,7 @@ module Minicron
|
|
142
144
|
|
143
145
|
# Output some debug info
|
144
146
|
if options[:verbose]
|
145
|
-
yield structured :verbose, "\n" +
|
147
|
+
yield structured :verbose, "\n" + '[minicron]'.colour(:magenta)
|
146
148
|
yield structured :verbose, ' finished running '.colour(:blue) + "`#{command}`".colour(:yellow) + " at #{start}\n".colour(:blue)
|
147
149
|
yield structured :verbose, '[minicron]'.colour(:magenta)
|
148
150
|
yield structured :verbose, ' running '.colour(:blue) + "`#{command}`".colour(:yellow) + " took #{finish - start}s\n".colour(:blue)
|
@@ -233,11 +235,26 @@ module Minicron
|
|
233
235
|
ids
|
234
236
|
end
|
235
237
|
|
238
|
+
# Start the server and monitor
|
239
|
+
def start_server
|
240
|
+
# Run the execution monitor (this runs in a separate thread)
|
241
|
+
monitor = Minicron::Monitor.new
|
242
|
+
monitor.start!
|
243
|
+
|
244
|
+
# Start the server!
|
245
|
+
server = Minicron::Transport::Server.new
|
246
|
+
server.start!(
|
247
|
+
Minicron.config['server']['host'],
|
248
|
+
Minicron.config['server']['port'],
|
249
|
+
Minicron.config['server']['path']
|
250
|
+
)
|
251
|
+
end
|
252
|
+
|
236
253
|
# Add the `minicron db` command
|
237
254
|
def add_db_cli_command
|
238
255
|
@cli.command :db do |c|
|
239
|
-
c.syntax = 'minicron db [setup
|
240
|
-
c.description = '
|
256
|
+
c.syntax = 'minicron db [setup]'
|
257
|
+
c.description = 'Sets up the minicron database schema.'
|
241
258
|
|
242
259
|
c.action do |args, opts|
|
243
260
|
# Check that exactly one argument has been passed
|
@@ -271,27 +288,40 @@ module Minicron
|
|
271
288
|
# Add the `minicron server` command
|
272
289
|
def add_server_cli_command
|
273
290
|
@cli.command :server do |c|
|
274
|
-
c.syntax = 'minicron server'
|
275
|
-
c.description = '
|
291
|
+
c.syntax = 'minicron server [start|stop|restart|status]'
|
292
|
+
c.description = 'Controls the minicron server.'
|
276
293
|
c.option '--host STRING', String, "The host for the server to listen on. Default: #{Minicron.config['server']['host']}"
|
277
294
|
c.option '--port STRING', Integer, "How port for the server to listed on. Default: #{Minicron.config['server']['port']}"
|
278
295
|
c.option '--path STRING', String, "The path on the host. Default: #{Minicron.config['server']['path']}"
|
296
|
+
c.option '--debug', "Enable debug mode. Default: #{Minicron.config['server']['debug']}"
|
279
297
|
|
280
298
|
c.action do |args, opts|
|
281
299
|
# Parse the file and @cli config options
|
282
300
|
parse_config(opts)
|
283
301
|
|
284
|
-
#
|
285
|
-
|
286
|
-
monitor.start!
|
302
|
+
# If we get no arguments then default the action to start
|
303
|
+
action = args.first.nil? ? 'start' : args.first
|
287
304
|
|
288
|
-
#
|
289
|
-
|
290
|
-
|
291
|
-
Minicron.config['server']['
|
292
|
-
Minicron.config['server']['port'],
|
293
|
-
Minicron.config['server']['path']
|
305
|
+
# Get an instance of insidious and set the pid file
|
306
|
+
insidious = Insidious.new(
|
307
|
+
:pid_file => '/tmp/minicron.pid',
|
308
|
+
:daemonize => Minicron.config['server']['debug'] == false
|
294
309
|
)
|
310
|
+
|
311
|
+
case action
|
312
|
+
when 'start'
|
313
|
+
insidious.start! { start_server }
|
314
|
+
when 'stop'
|
315
|
+
insidious.stop!
|
316
|
+
when 'restart'
|
317
|
+
insidious.restart! { start_server }
|
318
|
+
when 'status'
|
319
|
+
if insidious.running?
|
320
|
+
puts 'minicron is running'
|
321
|
+
else
|
322
|
+
puts 'minicron is not running'
|
323
|
+
end
|
324
|
+
end
|
295
325
|
end
|
296
326
|
end
|
297
327
|
end
|
@@ -352,7 +382,7 @@ module Minicron
|
|
352
382
|
faye.send(:job_id => ids[:job_id], :execution_id => ids[:execution_id], :type => :output, :message => e.message)
|
353
383
|
end
|
354
384
|
|
355
|
-
|
385
|
+
raise e
|
356
386
|
ensure
|
357
387
|
# Ensure that all messages are delivered and that we
|
358
388
|
unless Minicron.config['cli']['dry_run']
|