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
@@ -7,7 +7,7 @@
|
|
7
7
|
#
|
8
8
|
# Host: 127.0.0.1 (MySQL 5.6.16)
|
9
9
|
# Database: minicron
|
10
|
-
# Generation Time: 2014-
|
10
|
+
# Generation Time: 2014-04-01 03:35:39 +0000
|
11
11
|
# ************************************************************
|
12
12
|
|
13
13
|
|
@@ -23,8 +23,10 @@
|
|
23
23
|
# Dump of table alerts
|
24
24
|
# ------------------------------------------------------------
|
25
25
|
|
26
|
+
DROP TABLE IF EXISTS `alerts`;
|
27
|
+
|
26
28
|
CREATE TABLE `alerts` (
|
27
|
-
`id` int(11)
|
29
|
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
28
30
|
`schedule_id` int(11) DEFAULT NULL,
|
29
31
|
`execution_id` int(11) DEFAULT NULL,
|
30
32
|
`kind` varchar(4) NOT NULL DEFAULT '',
|
@@ -32,11 +34,11 @@ CREATE TABLE `alerts` (
|
|
32
34
|
`medium` varchar(9) NOT NULL DEFAULT '',
|
33
35
|
`sent_at` datetime NOT NULL,
|
34
36
|
PRIMARY KEY (`id`),
|
35
|
-
KEY `
|
36
|
-
KEY `
|
37
|
-
KEY `kind` (`kind`),
|
38
|
-
KEY `
|
39
|
-
KEY `
|
37
|
+
KEY `execution_id` (`execution_id`) USING BTREE,
|
38
|
+
KEY `expected_at` (`expected_at`) USING BTREE,
|
39
|
+
KEY `kind` (`kind`) USING BTREE,
|
40
|
+
KEY `medium` (`medium`) USING BTREE,
|
41
|
+
KEY `schedule_id` (`schedule_id`) USING BTREE
|
40
42
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
41
43
|
|
42
44
|
|
@@ -44,6 +46,8 @@ CREATE TABLE `alerts` (
|
|
44
46
|
# Dump of table executions
|
45
47
|
# ------------------------------------------------------------
|
46
48
|
|
49
|
+
DROP TABLE IF EXISTS `executions`;
|
50
|
+
|
47
51
|
CREATE TABLE `executions` (
|
48
52
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
49
53
|
`job_id` int(11) NOT NULL,
|
@@ -52,10 +56,10 @@ CREATE TABLE `executions` (
|
|
52
56
|
`finished_at` datetime DEFAULT NULL,
|
53
57
|
`exit_status` int(11) DEFAULT NULL,
|
54
58
|
PRIMARY KEY (`id`),
|
55
|
-
KEY `created_at` (`created_at`),
|
56
|
-
KEY `finished_at` (`finished_at`),
|
57
|
-
KEY `job_id` (`job_id`),
|
58
|
-
KEY `started_at` (`started_at`)
|
59
|
+
KEY `created_at` (`created_at`) USING BTREE,
|
60
|
+
KEY `finished_at` (`finished_at`) USING BTREE,
|
61
|
+
KEY `job_id` (`job_id`) USING BTREE,
|
62
|
+
KEY `started_at` (`started_at`) USING BTREE
|
59
63
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
60
64
|
|
61
65
|
|
@@ -63,17 +67,19 @@ CREATE TABLE `executions` (
|
|
63
67
|
# Dump of table hosts
|
64
68
|
# ------------------------------------------------------------
|
65
69
|
|
70
|
+
DROP TABLE IF EXISTS `hosts`;
|
71
|
+
|
66
72
|
CREATE TABLE `hosts` (
|
67
73
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
68
74
|
`name` varchar(255) DEFAULT NULL,
|
69
75
|
`fqdn` varchar(255) NOT NULL DEFAULT '',
|
70
76
|
`host` varchar(255) NOT NULL DEFAULT '',
|
71
|
-
`port` int(11) NOT NULL
|
77
|
+
`port` int(11) NOT NULL,
|
72
78
|
`public_key` text,
|
73
79
|
`created_at` datetime NOT NULL,
|
74
80
|
`updated_at` datetime NOT NULL,
|
75
81
|
PRIMARY KEY (`id`),
|
76
|
-
KEY `hostname` (`fqdn`)
|
82
|
+
KEY `hostname` (`fqdn`) USING BTREE
|
77
83
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
78
84
|
|
79
85
|
|
@@ -81,6 +87,8 @@ CREATE TABLE `hosts` (
|
|
81
87
|
# Dump of table job_execution_outputs
|
82
88
|
# ------------------------------------------------------------
|
83
89
|
|
90
|
+
DROP TABLE IF EXISTS `job_execution_outputs`;
|
91
|
+
|
84
92
|
CREATE TABLE `job_execution_outputs` (
|
85
93
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
86
94
|
`execution_id` int(11) NOT NULL,
|
@@ -88,8 +96,8 @@ CREATE TABLE `job_execution_outputs` (
|
|
88
96
|
`output` text NOT NULL,
|
89
97
|
`timestamp` datetime NOT NULL,
|
90
98
|
PRIMARY KEY (`id`),
|
91
|
-
KEY `execution_id` (`execution_id`),
|
92
|
-
KEY `seq` (`seq`)
|
99
|
+
KEY `execution_id` (`execution_id`) USING BTREE,
|
100
|
+
KEY `seq` (`seq`) USING BTREE
|
93
101
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
94
102
|
|
95
103
|
|
@@ -97,6 +105,8 @@ CREATE TABLE `job_execution_outputs` (
|
|
97
105
|
# Dump of table jobs
|
98
106
|
# ------------------------------------------------------------
|
99
107
|
|
108
|
+
DROP TABLE IF EXISTS `jobs`;
|
109
|
+
|
100
110
|
CREATE TABLE `jobs` (
|
101
111
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
102
112
|
`job_hash` varchar(32) NOT NULL DEFAULT '',
|
@@ -106,9 +116,9 @@ CREATE TABLE `jobs` (
|
|
106
116
|
`created_at` datetime NOT NULL,
|
107
117
|
`updated_at` datetime NOT NULL,
|
108
118
|
PRIMARY KEY (`id`),
|
109
|
-
UNIQUE KEY `job_hash` (`job_hash`),
|
110
|
-
KEY `created_at` (`created_at`),
|
111
|
-
KEY `host_id` (`host_id`)
|
119
|
+
UNIQUE KEY `job_hash` (`job_hash`) USING BTREE,
|
120
|
+
KEY `created_at` (`created_at`) USING BTREE,
|
121
|
+
KEY `host_id` (`host_id`) USING BTREE
|
112
122
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
113
123
|
|
114
124
|
|
@@ -116,6 +126,8 @@ CREATE TABLE `jobs` (
|
|
116
126
|
# Dump of table schedules
|
117
127
|
# ------------------------------------------------------------
|
118
128
|
|
129
|
+
DROP TABLE IF EXISTS `schedules`;
|
130
|
+
|
119
131
|
CREATE TABLE `schedules` (
|
120
132
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
121
133
|
`job_id` int(11) NOT NULL,
|
@@ -128,13 +140,13 @@ CREATE TABLE `schedules` (
|
|
128
140
|
`created_at` datetime NOT NULL,
|
129
141
|
`updated_at` datetime NOT NULL,
|
130
142
|
PRIMARY KEY (`id`),
|
131
|
-
KEY `day_of_the_month` (`day_of_the_month`),
|
132
|
-
KEY `day_of_the_week` (`day_of_the_week`),
|
133
|
-
KEY `hour` (`hour`),
|
134
|
-
KEY `job_id` (`job_id`),
|
135
|
-
KEY `minute` (`minute`),
|
136
|
-
KEY `month` (`month`),
|
137
|
-
KEY `special` (`special`)
|
143
|
+
KEY `day_of_the_month` (`day_of_the_month`) USING BTREE,
|
144
|
+
KEY `day_of_the_week` (`day_of_the_week`) USING BTREE,
|
145
|
+
KEY `hour` (`hour`) USING BTREE,
|
146
|
+
KEY `job_id` (`job_id`) USING BTREE,
|
147
|
+
KEY `minute` (`minute`) USING BTREE,
|
148
|
+
KEY `month` (`month`) USING BTREE,
|
149
|
+
KEY `special` (`special`) USING BTREE
|
138
150
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
139
151
|
|
140
152
|
|
@@ -142,6 +154,8 @@ CREATE TABLE `schedules` (
|
|
142
154
|
# Dump of table schema_migrations
|
143
155
|
# ------------------------------------------------------------
|
144
156
|
|
157
|
+
DROP TABLE IF EXISTS `schema_migrations`;
|
158
|
+
|
145
159
|
CREATE TABLE `schema_migrations` (
|
146
160
|
`version` varchar(255) NOT NULL,
|
147
161
|
UNIQUE KEY `unique_schema_migrations` (`version`)
|
@@ -149,6 +163,20 @@ CREATE TABLE `schema_migrations` (
|
|
149
163
|
|
150
164
|
|
151
165
|
|
166
|
+
# Dump of table users
|
167
|
+
# ------------------------------------------------------------
|
168
|
+
|
169
|
+
DROP TABLE IF EXISTS `users`;
|
170
|
+
|
171
|
+
CREATE TABLE `users` (
|
172
|
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
173
|
+
`email` int(11) NOT NULL,
|
174
|
+
`password` int(11) NOT NULL,
|
175
|
+
PRIMARY KEY (`id`)
|
176
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
177
|
+
|
178
|
+
|
179
|
+
|
152
180
|
|
153
181
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
154
182
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
@@ -1,7 +1,16 @@
|
|
1
1
|
module Minicron
|
2
2
|
module Hub
|
3
3
|
class Host < ActiveRecord::Base
|
4
|
-
has_many :jobs, :dependent => :
|
4
|
+
has_many :jobs, :dependent => :destroy
|
5
|
+
|
6
|
+
# Default the name of the host to the fqdn itself if no name is set
|
7
|
+
def name
|
8
|
+
if read_attribute(:name) == '' || read_attribute(:name).nil?
|
9
|
+
read_attribute(:fqdn)
|
10
|
+
else
|
11
|
+
read_attribute(:name)
|
12
|
+
end
|
13
|
+
end
|
5
14
|
end
|
6
15
|
end
|
7
16
|
end
|
@@ -2,12 +2,12 @@ module Minicron
|
|
2
2
|
module Hub
|
3
3
|
class Job < ActiveRecord::Base
|
4
4
|
belongs_to :host
|
5
|
-
has_many :executions, :dependent => :
|
6
|
-
has_many :schedules, :dependent => :
|
5
|
+
has_many :executions, :dependent => :destroy
|
6
|
+
has_many :schedules, :dependent => :destroy
|
7
7
|
|
8
8
|
# Default the name of the command to the command itself if no name is set
|
9
9
|
def name
|
10
|
-
if read_attribute(:name) == '' || read_attribute(:name)
|
10
|
+
if read_attribute(:name) == '' || read_attribute(:name).nil?
|
11
11
|
read_attribute(:command)
|
12
12
|
else
|
13
13
|
read_attribute(:name)
|
@@ -14,7 +14,7 @@ module Minicron
|
|
14
14
|
# @return string
|
15
15
|
def self.format(schedule)
|
16
16
|
# If it's not a 'special' schedule then build up the full schedule string
|
17
|
-
if schedule.special == '' || schedule.special
|
17
|
+
if schedule.special == '' || schedule.special.nil?
|
18
18
|
"#{schedule.minute} #{schedule.hour} #{schedule.day_of_the_month} #{schedule.month} #{schedule.day_of_the_week}"
|
19
19
|
else
|
20
20
|
schedule.special
|
@@ -1,75 +1,79 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Minicron
|
2
|
+
module Hub
|
3
|
+
class ExecutionSerializer
|
4
|
+
def initialize(executions)
|
5
|
+
@executions = executions
|
6
|
+
end
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
def serialize
|
9
|
+
@response = {
|
10
|
+
:executions => [],
|
11
|
+
:jobs => [],
|
12
|
+
:job_execution_outputs => [],
|
13
|
+
:hosts => []
|
14
|
+
}
|
15
|
+
|
16
|
+
if @executions.respond_to? :each
|
17
|
+
@executions.each do |execution|
|
18
|
+
do_serialization(execution)
|
19
|
+
end
|
20
|
+
else
|
21
|
+
do_serialization(@executions)
|
22
|
+
end
|
23
|
+
|
24
|
+
@response
|
17
25
|
end
|
18
|
-
else
|
19
|
-
do_serialization(@executions)
|
20
|
-
end
|
21
26
|
|
22
|
-
|
23
|
-
|
27
|
+
def do_serialization(execution)
|
28
|
+
new_execution = {}
|
24
29
|
|
25
|
-
|
26
|
-
|
30
|
+
# Add all the normal attributes of the execution
|
31
|
+
execution.attributes.each do |key, value|
|
32
|
+
# Remove _id from keys
|
33
|
+
key = key[-3, 3] == '_id' ? key[0..-4] : key
|
27
34
|
|
28
|
-
|
29
|
-
|
30
|
-
# Remove _id from keys
|
31
|
-
key = key[-3, 3] == '_id' ? key[0..-4] : key
|
35
|
+
new_execution[key] = value
|
36
|
+
end
|
32
37
|
|
33
|
-
|
34
|
-
|
38
|
+
# Set up the job execution output ids array
|
39
|
+
new_execution[:job_execution_outputs] = []
|
35
40
|
|
36
|
-
|
37
|
-
|
41
|
+
# Add the job to the sideloaded data
|
42
|
+
new_job = {}
|
43
|
+
execution.job.attributes.each do |key, value|
|
44
|
+
# To make our name method in the model work :/
|
45
|
+
value = execution.job.name if key == 'name'
|
38
46
|
|
39
|
-
|
40
|
-
|
41
|
-
execution.job.attributes.each do |key, value|
|
42
|
-
# To make our name method in the model work :/
|
43
|
-
value = execution.job.name if key == 'name'
|
47
|
+
# Remove _id from keys
|
48
|
+
key = key[-3, 3] == '_id' ? key[0..-4] : key
|
44
49
|
|
45
|
-
|
46
|
-
|
50
|
+
new_job[key] = value
|
51
|
+
end
|
47
52
|
|
48
|
-
|
49
|
-
|
53
|
+
# Append the new job to the @response
|
54
|
+
@response[:jobs].push(new_job)
|
50
55
|
|
51
|
-
|
52
|
-
|
56
|
+
# Append the job host to the @response
|
57
|
+
@response[:hosts].push(execution.job.host)
|
53
58
|
|
54
|
-
|
55
|
-
|
59
|
+
# Add the job execution outputs to the sideloaded data and the ids to
|
60
|
+
# the execution
|
61
|
+
execution.job_execution_outputs.each do |job_execution_output|
|
62
|
+
new_job_execution_output = {}
|
56
63
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
64
|
+
job_execution_output.attributes.each do |key, value|
|
65
|
+
# Remove _id from keys
|
66
|
+
key = key[-3, 3] == '_id' ? key[0..-4] : key
|
67
|
+
new_job_execution_output[key] = value
|
68
|
+
end
|
61
69
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
new_job_execution_output[key] = value
|
66
|
-
end
|
70
|
+
@response[:job_execution_outputs].push(new_job_execution_output)
|
71
|
+
new_execution[:job_execution_outputs].push(job_execution_output.id)
|
72
|
+
end
|
67
73
|
|
68
|
-
|
69
|
-
|
74
|
+
# Append the new execution to the @response
|
75
|
+
@response[:executions].push(new_execution)
|
76
|
+
end
|
70
77
|
end
|
71
|
-
|
72
|
-
# Append the new execution to the @response
|
73
|
-
@response[:executions].push(new_execution)
|
74
78
|
end
|
75
79
|
end
|
@@ -1,57 +1,64 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Minicron
|
2
|
+
module Hub
|
3
|
+
class HostSerializer
|
4
|
+
def initialize(hosts)
|
5
|
+
@hosts = hosts
|
6
|
+
end
|
7
|
+
|
8
|
+
def serialize
|
9
|
+
@response = {
|
10
|
+
:hosts => [],
|
11
|
+
:jobs => []
|
12
|
+
}
|
5
13
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
14
|
+
if @hosts.respond_to? :each
|
15
|
+
@hosts.each do |host|
|
16
|
+
do_serialization(host)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
do_serialization(@hosts)
|
20
|
+
end
|
11
21
|
|
12
|
-
|
13
|
-
@hosts.each do |host|
|
14
|
-
do_serialization(host)
|
22
|
+
@response
|
15
23
|
end
|
16
|
-
else
|
17
|
-
do_serialization(@hosts)
|
18
|
-
end
|
19
24
|
|
20
|
-
|
21
|
-
|
25
|
+
def do_serialization(host)
|
26
|
+
new_host = {}
|
22
27
|
|
23
|
-
|
24
|
-
|
28
|
+
# Add all the normal attributes of the host
|
29
|
+
host.attributes.each do |key, value|
|
30
|
+
# To make our name method in the model work :/
|
31
|
+
value = host.name if key == 'name'
|
25
32
|
|
26
|
-
|
27
|
-
|
28
|
-
new_host[key] = value
|
29
|
-
end
|
33
|
+
new_host[key] = value
|
34
|
+
end
|
30
35
|
|
31
|
-
|
32
|
-
|
36
|
+
# Set up the job host output ids array
|
37
|
+
new_host[:jobs] = []
|
33
38
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
39
|
+
# Add the jobs to the sideloaded data and the ids to
|
40
|
+
# the host
|
41
|
+
host.jobs.each do |job|
|
42
|
+
new_job = {}
|
38
43
|
|
39
|
-
|
40
|
-
|
41
|
-
|
44
|
+
job.attributes.each do |key, value|
|
45
|
+
# To make our name method in the model work :/
|
46
|
+
value = job.name if key == 'name'
|
42
47
|
|
43
|
-
|
44
|
-
|
48
|
+
# Remove _id from keys
|
49
|
+
key = key[-3, 3] == '_id' ? key[0..-4] : key
|
45
50
|
|
46
|
-
|
47
|
-
|
48
|
-
|
51
|
+
# Append the job
|
52
|
+
new_job[key] = value
|
53
|
+
end
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
55
|
+
@response[:jobs].push(new_job)
|
56
|
+
new_host[:jobs].push(job.id)
|
57
|
+
end
|
53
58
|
|
54
|
-
|
55
|
-
|
59
|
+
# Append the new host to the @responseh
|
60
|
+
@response[:hosts].push(new_host)
|
61
|
+
end
|
62
|
+
end
|
56
63
|
end
|
57
64
|
end
|