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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -43
  3. data/Rakefile +9 -1
  4. data/lib/minicron.rb +9 -4
  5. data/lib/minicron/alert.rb +2 -1
  6. data/lib/minicron/alert/email.rb +7 -2
  7. data/lib/minicron/alert/pagerduty.rb +3 -2
  8. data/lib/minicron/alert/sms.rb +2 -1
  9. data/lib/minicron/cli.rb +49 -19
  10. data/lib/minicron/constants.rb +2 -1
  11. data/lib/minicron/cron.rb +6 -6
  12. data/lib/minicron/hub/app.rb +8 -8
  13. data/lib/minicron/hub/assets/app/controllers/executions.js +4 -3
  14. data/lib/minicron/hub/assets/app/controllers/hosts.js +4 -4
  15. data/lib/minicron/hub/assets/app/controllers/jobs.js +4 -4
  16. data/lib/minicron/hub/assets/app/controllers/schedules.js +4 -1
  17. data/lib/minicron/hub/controllers/api/executions.rb +4 -4
  18. data/lib/minicron/hub/controllers/api/hosts.rb +18 -5
  19. data/lib/minicron/hub/controllers/api/job_execution_outputs.rb +2 -2
  20. data/lib/minicron/hub/controllers/api/jobs.rb +8 -8
  21. data/lib/minicron/hub/controllers/api/schedule.rb +10 -10
  22. data/lib/minicron/hub/db/schema.rb +70 -65
  23. data/lib/minicron/hub/db/schema.sql +53 -25
  24. data/lib/minicron/hub/models/execution.rb +1 -1
  25. data/lib/minicron/hub/models/host.rb +10 -1
  26. data/lib/minicron/hub/models/job.rb +3 -3
  27. data/lib/minicron/hub/models/schedule.rb +1 -1
  28. data/lib/minicron/hub/serializers/execution.rb +61 -57
  29. data/lib/minicron/hub/serializers/host.rb +49 -42
  30. data/lib/minicron/hub/serializers/job.rb +82 -78
  31. data/lib/minicron/hub/serializers/job_execution_output.rb +42 -38
  32. data/lib/minicron/hub/serializers/schedule.rb +56 -52
  33. data/lib/minicron/hub/views/handlebars/executions.erb +7 -1
  34. data/lib/minicron/hub/views/handlebars/hosts.erb +2 -2
  35. data/lib/minicron/hub/views/handlebars/schedules.erb +3 -3
  36. data/lib/minicron/monitor.rb +4 -4
  37. data/lib/minicron/transport/client.rb +6 -6
  38. data/lib/minicron/transport/faye/client.rb +4 -4
  39. data/lib/minicron/transport/faye/extensions/job_handler.rb +3 -2
  40. data/lib/minicron/transport/faye/server.rb +1 -0
  41. data/lib/minicron/transport/server.rb +2 -2
  42. data/lib/minicron/transport/ssh.rb +6 -8
  43. data/spec/minicron/cli_spec.rb +4 -4
  44. data/spec/minicron/transport/client_spec.rb +2 -2
  45. data/spec/minicron/transport/faye/client_spec.rb +7 -7
  46. data/spec/minicron/transport/server_spec.rb +1 -1
  47. data/spec/minicron_spec.rb +2 -1
  48. data/spec/valid_config.toml +1 -0
  49. metadata +16 -2
@@ -1,5 +1,6 @@
1
+ # The minicron module
1
2
  module Minicron
2
- VERSION = '0.1.1'
3
+ VERSION = '0.2'
3
4
  DEFAULT_CONFIG_FILE = '/etc/minicron.toml'
4
5
  BASE_PATH = File.expand_path('../../../', __FILE__)
5
6
  LIB_PATH = File.expand_path('../../', __FILE__)
@@ -57,7 +57,7 @@ module Minicron
57
57
 
58
58
  # Throw an exception if it failed
59
59
  if update != 'y'
60
- raise Exception, "Unable to replace '#{find}' with '#{replace}' in the crontab"
60
+ fail Exception, "Unable to replace '#{find}' with '#{replace}' in the crontab"
61
61
  end
62
62
 
63
63
  # If it's a delete
@@ -67,7 +67,7 @@ module Minicron
67
67
 
68
68
  # Throw an exception if we can't see our new line at the end of the file
69
69
  if grep != replace
70
- raise Exception, "Expected to find nothing when grepping crontab but found #{grep}"
70
+ fail Exception, "Expected to find nothing when grepping crontab but found #{grep}"
71
71
  end
72
72
  else
73
73
  # Check the updated line is there
@@ -75,7 +75,7 @@ module Minicron
75
75
 
76
76
  # Throw an exception if we can't see our new line at the end of the file
77
77
  if grep != replace
78
- raise Exception, "Expected to find '#{replace}' when grepping crontab but found #{grep}"
78
+ fail Exception, "Expected to find '#{replace}' when grepping crontab but found #{grep}"
79
79
  end
80
80
  end
81
81
 
@@ -83,7 +83,7 @@ module Minicron
83
83
  move = conn.exec!("mv /etc/crontab.tmp /etc/crontab && echo 'y' || echo 'n'").to_s.strip
84
84
 
85
85
  if move != 'y'
86
- raise Exception, 'Unable to move tmp crontab with updated crontab'
86
+ fail Exception, 'Unable to move tmp crontab with updated crontab'
87
87
  end
88
88
  end
89
89
 
@@ -105,7 +105,7 @@ module Minicron
105
105
 
106
106
  # Throw an exception if it failed
107
107
  if write != 'y'
108
- raise Exception, "Unable to write '#{line}' to the crontab"
108
+ fail Exception, "Unable to write '#{line}' to the crontab"
109
109
  end
110
110
 
111
111
  # Check the line is there
@@ -113,7 +113,7 @@ module Minicron
113
113
 
114
114
  # Throw an exception if we can't see our new line at the end of the file
115
115
  if tail != line
116
- raise Exception, "Expected to find '#{line}' at eof but found '#{tail}'"
116
+ fail Exception, "Expected to find '#{line}' at eof but found '#{tail}'"
117
117
  end
118
118
  end
119
119
 
@@ -84,15 +84,15 @@ module Minicron::Hub
84
84
  # Configure the database
85
85
  case Minicron.config['database']['type']
86
86
  when 'mysql'
87
- set :database, {
88
- :adapter => 'mysql2',
89
- :host => Minicron.config['database']['host'],
90
- :database => Minicron.config['database']['database'],
91
- :username => Minicron.config['database']['username'],
92
- :password => Minicron.config['database']['password']
93
- }
87
+ set :database,
88
+ :adapter => 'mysql2',
89
+ :host => Minicron.config['database']['host'],
90
+ :database => Minicron.config['database']['database'],
91
+ :username => Minicron.config['database']['username'],
92
+ :password => Minicron.config['database']['password']
93
+
94
94
  else
95
- raise Exception, "The database #{Minicron.config['database']['type']} is not supported"
95
+ fail Exception, "The database #{Minicron.config['database']['type']} is not supported"
96
96
  end
97
97
  end
98
98
  end
@@ -5,12 +5,13 @@
5
5
  var confirmation = "Are you sure want to delete this execution?";
6
6
 
7
7
  if (window.confirm(confirmation)) {
8
- // TODO: Do the same cascading delete that happens on the backend
9
- // i.e deleting this execution also deletes the job execution output
10
8
  execution.deleteRecord();
11
9
 
12
10
  execution.save().then(function() {
13
- self.transitionToRoute('executions');
11
+ // This is needed to reload all the relationships correctly after a delete
12
+ // TODO: do this in a nicer way
13
+ window.location.hash = '/executions';
14
+ window.location.reload();
14
15
  }, function(response) {
15
16
  execution.rollback();
16
17
  console.log(response);
@@ -6,13 +6,13 @@
6
6
  confirmation += 'All associated data i.e jobs on this host and the jobs in this hosts crontab will be REMOVED!';
7
7
 
8
8
  if (window.confirm(confirmation)) {
9
- // TODO: Do the same cascading delete that happens on the backend
10
- // i.e deleting jobs -> executions -> job_execution_outputs linked
11
- // to this host
12
9
  host.deleteRecord();
13
10
 
14
11
  host.save().then(function() {
15
- self.transitionToRoute('hosts');
12
+ // This is needed to reload all the relationships correctly after a delete
13
+ // TODO: do this in a nicer way
14
+ window.location.hash = '/hosts';
15
+ window.location.reload();
16
16
  }, function(response) {
17
17
  host.rollback();
18
18
  console.log(response);
@@ -6,13 +6,13 @@
6
6
  confirmation += 'All associated data will be deleted and it will be REMOVED from the host!';
7
7
 
8
8
  if (window.confirm(confirmation)) {
9
- // TODO: Do the same cascading delete that happens on the backend
10
- // i.e deleting jobs -> executions -> job_execution_outputs linked
11
- // to this job
12
9
  job.deleteRecord();
13
10
 
14
11
  job.save().then(function() {
15
- self.transitionToRoute('jobs');
12
+ // This is needed to reload all the relationships correctly after a delete
13
+ // TODO: do this in a nicer way
14
+ window.location.hash = '/jobs';
15
+ window.location.reload();
16
16
  }, function(response) {
17
17
  job.rollback();
18
18
  console.log(response);
@@ -8,7 +8,10 @@
8
8
  schedule.deleteRecord();
9
9
 
10
10
  schedule.save().then(function() {
11
- self.transitionToRoute('job', job_id);
11
+ // This is needed to reload all the relationships correctly after a delete
12
+ // TODO: do this in a nicer way
13
+ window.location.hash = '/jobs/' + job_id;
14
+ window.location.reload();
12
15
  }, function(response) {
13
16
  schedule.rollback();
14
17
  console.log(response);
@@ -4,16 +4,16 @@ class Minicron::Hub::App
4
4
  get '/api/executions' do
5
5
  content_type :json
6
6
  executions = Minicron::Hub::Execution.all.order(:created_at => :desc, :started_at => :desc)
7
- .includes({:job => :host}, :job_execution_outputs)
8
- ExecutionSerializer.new(executions).serialize.to_json
7
+ .includes({ :job => :host }, :job_execution_outputs)
8
+ Minicron::Hub::ExecutionSerializer.new(executions).serialize.to_json
9
9
  end
10
10
 
11
11
  # Get a single job execution by its ID
12
12
  get '/api/executions/:id' do
13
13
  content_type :json
14
- execution = Minicron::Hub::Execution.includes({:job => :host}, :job_execution_outputs)
14
+ execution = Minicron::Hub::Execution.includes({ :job => :host }, :job_execution_outputs)
15
15
  .find(params[:id])
16
- ExecutionSerializer.new(execution).serialize.to_json
16
+ Minicron::Hub::ExecutionSerializer.new(execution).serialize.to_json
17
17
  end
18
18
 
19
19
  # Delete an existing execution
@@ -1,3 +1,4 @@
1
+ require 'minicron'
1
2
  require 'minicron/transport/ssh'
2
3
 
3
4
  class Minicron::Hub::App
@@ -6,14 +7,14 @@ class Minicron::Hub::App
6
7
  get '/api/hosts' do
7
8
  content_type :json
8
9
  hosts = Minicron::Hub::Host.all.includes(:jobs).order(:id => :asc)
9
- HostSerializer.new(hosts).serialize.to_json
10
+ Minicron::Hub::HostSerializer.new(hosts).serialize.to_json
10
11
  end
11
12
 
12
13
  # Get a single host by its ID
13
14
  get '/api/hosts/:id' do
14
15
  content_type :json
15
16
  host = Minicron::Hub::Host.includes(:jobs).find(params[:id])
16
- HostSerializer.new(host).serialize.to_json
17
+ Minicron::Hub::HostSerializer.new(host).serialize.to_json
17
18
  end
18
19
 
19
20
  # Create a new host
@@ -23,6 +24,9 @@ class Minicron::Hub::App
23
24
  # Load the JSON body
24
25
  request_body = Oj.load(request.body)
25
26
 
27
+ # Default the value of the port
28
+ request_body['host']['port'] ||= 22
29
+
26
30
  # Try and save the new host
27
31
  host = Minicron::Hub::Host.create(
28
32
  :name => request_body['host']['name'],
@@ -39,7 +43,7 @@ class Minicron::Hub::App
39
43
  host.save!
40
44
 
41
45
  # Return the new host
42
- HostSerializer.new(host).serialize.to_json
46
+ Minicron::Hub::HostSerializer.new(host).serialize.to_json
43
47
  # TODO: nicer error handling here with proper validation before hand
44
48
  rescue Exception => e
45
49
  status 422
@@ -57,6 +61,9 @@ class Minicron::Hub::App
57
61
  # Find the host
58
62
  host = Minicron::Hub::Host.includes(:jobs).find(params[:id])
59
63
 
64
+ # Default the value of the port
65
+ request_body['host']['port'] ||= 22
66
+
60
67
  # Update its data
61
68
  host.name = request_body['host']['name']
62
69
  host.fqdn = request_body['host']['fqdn']
@@ -66,7 +73,7 @@ class Minicron::Hub::App
66
73
  host.save!
67
74
 
68
75
  # Return the new host
69
- HostSerializer.new(host).serialize.to_json
76
+ Minicron::Hub::HostSerializer.new(host).serialize.to_json
70
77
  # TODO: nicer error handling here with proper validation before hand
71
78
  rescue Exception => e
72
79
  status 422
@@ -80,7 +87,7 @@ class Minicron::Hub::App
80
87
  begin
81
88
  Minicron::Hub::Host.transaction do
82
89
  # Look up the host
83
- host = Minicron::Hub::Host.includes({ :jobs => :schedules }).find(params[:id])
90
+ host = Minicron::Hub::Host.includes(:jobs => :schedules).find(params[:id])
84
91
 
85
92
  # Try and delete the host
86
93
  Minicron::Hub::Host.destroy(params[:id])
@@ -101,6 +108,12 @@ class Minicron::Hub::App
101
108
  # Tidy up
102
109
  ssh.close
103
110
 
111
+ # Delete the pub/priv key pair
112
+ private_key_path = Minicron.sanitize_filename(File.expand_path("~/.ssh/minicron_host_#{host.id}_rsa"))
113
+ public_key_path = Minicron.sanitize_filename(File.expand_path("~/.ssh/minicron_host_#{host.id}_rsa.pub"))
114
+ File.delete(private_key_path)
115
+ File.delete(public_key_path)
116
+
104
117
  # This is what ember expects as the response
105
118
  status 204
106
119
  end
@@ -16,7 +16,7 @@ class Minicron::Hub::App
16
16
  output = Minicron::Hub::JobExecutionOutput.all.order(:id => :asc)
17
17
  end
18
18
 
19
- JobExecutionOutputSerializer.new(output).serialize.to_json
19
+ Minicron::Hub::JobExecutionOutputSerializer.new(output).serialize.to_json
20
20
  end
21
21
 
22
22
  # Get a single job execution output by it ID
@@ -25,6 +25,6 @@ class Minicron::Hub::App
25
25
  output = Minicron::Hub::JobExecutionOutput.includes(:execution)
26
26
  .order(:id => :asc)
27
27
  .find(params[:id])
28
- JobExecutionOutputSerializer.new(output).serialize.to_json
28
+ Minicron::Hub::JobExecutionOutputSerializer.new(output).serialize.to_json
29
29
  end
30
30
  end
@@ -7,22 +7,22 @@ class Minicron::Hub::App
7
7
  content_type :json
8
8
 
9
9
  if params[:job_hash]
10
- jobs = Minicron::Hub::Job.includes(:host, :schedules, { :executions => :job_execution_outputs })
10
+ jobs = Minicron::Hub::Job.includes(:host, :schedules, :executions => :job_execution_outputs)
11
11
  .where(:job_hash => params[:job_hash])
12
12
  else
13
13
  jobs = Minicron::Hub::Job.all.order(:created_at => :desc)
14
- .includes(:host, :schedules, { :executions => :job_execution_outputs })
14
+ .includes(:host, :schedules, :executions => :job_execution_outputs)
15
15
  end
16
16
 
17
- JobSerializer.new(jobs).serialize.to_json
17
+ Minicron::Hub::JobSerializer.new(jobs).serialize.to_json
18
18
  end
19
19
 
20
20
  # Get a single job by it ID
21
21
  get '/api/jobs/:id' do
22
22
  content_type :json
23
- job = Minicron::Hub::Job.includes(:host, :schedules, { :executions => :job_execution_outputs })
23
+ job = Minicron::Hub::Job.includes(:host, :schedules, :executions => :job_execution_outputs)
24
24
  .find(params[:id])
25
- JobSerializer.new(job).serialize.to_json
25
+ Minicron::Hub::JobSerializer.new(job).serialize.to_json
26
26
  end
27
27
 
28
28
  # Create a new job
@@ -46,7 +46,7 @@ class Minicron::Hub::App
46
46
  job.save!
47
47
 
48
48
  # Return the new job
49
- JobSerializer.new(job).serialize.to_json
49
+ Minicron::Hub::JobSerializer.new(job).serialize.to_json
50
50
  # TODO: nicer error handling here with proper validation before hand
51
51
  rescue Exception => e
52
52
  status 422
@@ -62,7 +62,7 @@ class Minicron::Hub::App
62
62
  request_body = Oj.load(request.body)
63
63
 
64
64
  # Find the job
65
- job = Minicron::Hub::Job.includes(:host, :schedules, { :executions => :job_execution_outputs })
65
+ job = Minicron::Hub::Job.includes(:host, :schedules, :executions => :job_execution_outputs)
66
66
  .find(params[:id])
67
67
 
68
68
  # Update the name
@@ -71,7 +71,7 @@ class Minicron::Hub::App
71
71
  job.save!
72
72
 
73
73
  # Return the new job
74
- JobSerializer.new(job).serialize.to_json
74
+ Minicron::Hub::JobSerializer.new(job).serialize.to_json
75
75
  # TODO: nicer error handling here with proper validation before hand
76
76
  rescue Exception => e
77
77
  status 422
@@ -10,20 +10,20 @@ class Minicron::Hub::App
10
10
  if params[:ids]
11
11
  schedules = Minicron::Hub::Schedule.where(:id => params[:ids])
12
12
  .order(:id => :asc)
13
- .includes({ :job => [:executions, :schedules] })
13
+ .includes(:job => [:executions, :schedules])
14
14
  else
15
15
  schedules = Minicron::Hub::Schedule.all.order(:id => :asc)
16
- .includes({ :job => [:executions, :schedules] })
16
+ .includes(:job => [:executions, :schedules])
17
17
  end
18
18
 
19
- ScheduleSerializer.new(schedules).serialize.to_json
19
+ Minicron::Hub::ScheduleSerializer.new(schedules).serialize.to_json
20
20
  end
21
21
 
22
22
  # Get a single schedule by it ID
23
23
  get '/api/schedules/:id' do
24
24
  content_type :json
25
- schedule = Minicron::Hub::Schedule.includes({ :job => [:executions, :schedules] }).find(params[:id])
26
- ScheduleSerializer.new(schedule).serialize.to_json
25
+ schedule = Minicron::Hub::Schedule.includes(:job => [:executions, :schedules]).find(params[:id])
26
+ Minicron::Hub::ScheduleSerializer.new(schedule).serialize.to_json
27
27
  end
28
28
 
29
29
  # Create a new schedule
@@ -45,7 +45,7 @@ class Minicron::Hub::App
45
45
  )
46
46
 
47
47
  if exists
48
- raise Exception, "That schedule already exists for this job"
48
+ fail Exception, 'That schedule already exists for this job'
49
49
  end
50
50
 
51
51
  Minicron::Hub::Schedule.transaction do
@@ -83,7 +83,7 @@ class Minicron::Hub::App
83
83
  schedule.save!
84
84
 
85
85
  # Return the new schedule
86
- ScheduleSerializer.new(schedule).serialize.to_json
86
+ Minicron::Hub::ScheduleSerializer.new(schedule).serialize.to_json
87
87
  end
88
88
  # TODO: nicer error handling here with proper validation before hand
89
89
  rescue Exception => e
@@ -101,7 +101,7 @@ class Minicron::Hub::App
101
101
 
102
102
  Minicron::Hub::Schedule.transaction do
103
103
  # Find the schedule
104
- schedule = Minicron::Hub::Schedule.includes({ :job => [:executions, :schedules] }).find(params[:id])
104
+ schedule = Minicron::Hub::Schedule.includes(:job => [:executions, :schedules]).find(params[:id])
105
105
  old_schedule = schedule.formatted
106
106
 
107
107
  # Get an ssh instance
@@ -136,7 +136,7 @@ class Minicron::Hub::App
136
136
  schedule.save!
137
137
 
138
138
  # Return the new schedule
139
- ScheduleSerializer.new(schedule).serialize.to_json
139
+ Minicron::Hub::ScheduleSerializer.new(schedule).serialize.to_json
140
140
  end
141
141
  # TODO: nicer error handling here with proper validation before hand
142
142
  rescue Exception => e
@@ -151,7 +151,7 @@ class Minicron::Hub::App
151
151
  begin
152
152
  Minicron::Hub::Schedule.transaction do
153
153
  # Find the schedule
154
- schedule = Minicron::Hub::Schedule.includes({ :job => :host }).find(params[:id])
154
+ schedule = Minicron::Hub::Schedule.includes(:job => :host).find(params[:id])
155
155
 
156
156
  # Try and delete the schedule
157
157
  Minicron::Hub::Schedule.destroy(params[:id])
@@ -12,87 +12,92 @@
12
12
 
13
13
  ActiveRecord::Schema.define(version: 0) do
14
14
 
15
- create_table "alerts", force: true do |t|
16
- t.integer "schedule_id"
17
- t.integer "execution_id"
18
- t.string "kind", limit: 4, default: "", null: false
19
- t.datetime "expected_at"
20
- t.string "medium", limit: 9, default: "", null: false
21
- t.datetime "sent_at", null: false
15
+ create_table 'alerts', force: true do |t|
16
+ t.integer 'schedule_id'
17
+ t.integer 'execution_id'
18
+ t.string 'kind', limit: 4, default: '', null: false
19
+ t.datetime 'expected_at'
20
+ t.string 'medium', limit: 9, default: '', null: false
21
+ t.datetime 'sent_at', null: false
22
22
  end
23
23
 
24
- add_index "alerts", ["execution_id"], name: "execution_id", using: :btree
25
- add_index "alerts", ["expected_at"], name: "expected_at", using: :btree
26
- add_index "alerts", ["kind"], name: "kind", using: :btree
27
- add_index "alerts", ["medium"], name: "medium", using: :btree
28
- add_index "alerts", ["schedule_id"], name: "schedule_id", using: :btree
24
+ add_index 'alerts', ['execution_id'], name: 'execution_id', using: :btree
25
+ add_index 'alerts', ['expected_at'], name: 'expected_at', using: :btree
26
+ add_index 'alerts', ['kind'], name: 'kind', using: :btree
27
+ add_index 'alerts', ['medium'], name: 'medium', using: :btree
28
+ add_index 'alerts', ['schedule_id'], name: 'schedule_id', using: :btree
29
29
 
30
- create_table "executions", force: true do |t|
31
- t.integer "job_id", null: false
32
- t.datetime "created_at", null: false
33
- t.datetime "started_at"
34
- t.datetime "finished_at"
35
- t.integer "exit_status"
30
+ create_table 'executions', force: true do |t|
31
+ t.integer 'job_id', null: false
32
+ t.datetime 'created_at', null: false
33
+ t.datetime 'started_at'
34
+ t.datetime 'finished_at'
35
+ t.integer 'exit_status'
36
36
  end
37
37
 
38
- add_index "executions", ["created_at"], name: "created_at", using: :btree
39
- add_index "executions", ["finished_at"], name: "finished_at", using: :btree
40
- add_index "executions", ["job_id"], name: "job_id", using: :btree
41
- add_index "executions", ["started_at"], name: "started_at", using: :btree
38
+ add_index 'executions', ['created_at'], name: 'created_at', using: :btree
39
+ add_index 'executions', ['finished_at'], name: 'finished_at', using: :btree
40
+ add_index 'executions', ['job_id'], name: 'job_id', using: :btree
41
+ add_index 'executions', ['started_at'], name: 'started_at', using: :btree
42
42
 
43
- create_table "hosts", force: true do |t|
44
- t.string "name"
45
- t.string "fqdn", default: "", null: false
46
- t.string "host", default: "", null: false
47
- t.integer "port", default: 22, null: false
48
- t.text "public_key"
49
- t.datetime "created_at", null: false
50
- t.datetime "updated_at", null: false
43
+ create_table 'hosts', force: true do |t|
44
+ t.string 'name'
45
+ t.string 'fqdn', default: '', null: false
46
+ t.string 'host', default: '', null: false
47
+ t.integer 'port', null: false
48
+ t.text 'public_key'
49
+ t.datetime 'created_at', null: false
50
+ t.datetime 'updated_at', null: false
51
51
  end
52
52
 
53
- add_index "hosts", ["fqdn"], name: "hostname", using: :btree
53
+ add_index 'hosts', ['fqdn'], name: 'hostname', using: :btree
54
54
 
55
- create_table "job_execution_outputs", force: true do |t|
56
- t.integer "execution_id", null: false
57
- t.integer "seq", null: false
58
- t.text "output", null: false
59
- t.datetime "timestamp", null: false
55
+ create_table 'job_execution_outputs', force: true do |t|
56
+ t.integer 'execution_id', null: false
57
+ t.integer 'seq', null: false
58
+ t.text 'output', null: false
59
+ t.datetime 'timestamp', null: false
60
60
  end
61
61
 
62
- add_index "job_execution_outputs", ["execution_id"], name: "execution_id", using: :btree
63
- add_index "job_execution_outputs", ["seq"], name: "seq", using: :btree
62
+ add_index 'job_execution_outputs', ['execution_id'], name: 'execution_id', using: :btree
63
+ add_index 'job_execution_outputs', ['seq'], name: 'seq', using: :btree
64
64
 
65
- create_table "jobs", force: true do |t|
66
- t.string "job_hash", limit: 32, default: "", null: false
67
- t.string "name"
68
- t.text "command", null: false
69
- t.integer "host_id", null: false
70
- t.datetime "created_at", null: false
71
- t.datetime "updated_at", null: false
65
+ create_table 'jobs', force: true do |t|
66
+ t.string 'job_hash', limit: 32, default: '', null: false
67
+ t.string 'name'
68
+ t.text 'command', null: false
69
+ t.integer 'host_id', null: false
70
+ t.datetime 'created_at', null: false
71
+ t.datetime 'updated_at', null: false
72
72
  end
73
73
 
74
- add_index "jobs", ["created_at"], name: "created_at", using: :btree
75
- add_index "jobs", ["host_id"], name: "host_id", using: :btree
76
- add_index "jobs", ["job_hash"], name: "job_hash", unique: true, using: :btree
74
+ add_index 'jobs', ['created_at'], name: 'created_at', using: :btree
75
+ add_index 'jobs', ['host_id'], name: 'host_id', using: :btree
76
+ add_index 'jobs', ['job_hash'], name: 'job_hash', unique: true, using: :btree
77
77
 
78
- create_table "schedules", force: true do |t|
79
- t.integer "job_id", null: false
80
- t.string "minute", limit: 179
81
- t.string "hour", limit: 71
82
- t.string "day_of_the_month", limit: 92
83
- t.string "month", limit: 25
84
- t.string "day_of_the_week", limit: 20
85
- t.string "special", limit: 9
86
- t.datetime "created_at", null: false
87
- t.datetime "updated_at", null: false
78
+ create_table 'schedules', force: true do |t|
79
+ t.integer 'job_id', null: false
80
+ t.string 'minute', limit: 179
81
+ t.string 'hour', limit: 71
82
+ t.string 'day_of_the_month', limit: 92
83
+ t.string 'month', limit: 25
84
+ t.string 'day_of_the_week', limit: 20
85
+ t.string 'special', limit: 9
86
+ t.datetime 'created_at', null: false
87
+ t.datetime 'updated_at', null: false
88
88
  end
89
89
 
90
- add_index "schedules", ["day_of_the_month"], name: "day_of_the_month", using: :btree
91
- add_index "schedules", ["day_of_the_week"], name: "day_of_the_week", using: :btree
92
- add_index "schedules", ["hour"], name: "hour", using: :btree
93
- add_index "schedules", ["job_id"], name: "job_id", using: :btree
94
- add_index "schedules", ["minute"], name: "minute", using: :btree
95
- add_index "schedules", ["month"], name: "month", using: :btree
96
- add_index "schedules", ["special"], name: "special", using: :btree
90
+ add_index 'schedules', ['day_of_the_month'], name: 'day_of_the_month', using: :btree
91
+ add_index 'schedules', ['day_of_the_week'], name: 'day_of_the_week', using: :btree
92
+ add_index 'schedules', ['hour'], name: 'hour', using: :btree
93
+ add_index 'schedules', ['job_id'], name: 'job_id', using: :btree
94
+ add_index 'schedules', ['minute'], name: 'minute', using: :btree
95
+ add_index 'schedules', ['month'], name: 'month', using: :btree
96
+ add_index 'schedules', ['special'], name: 'special', using: :btree
97
+
98
+ create_table 'users', force: true do |t|
99
+ t.integer 'email', null: false
100
+ t.integer 'password', null: false
101
+ end
97
102
 
98
103
  end