Module: Legion::API::Routes::Schedules

Defined in:
lib/legion/api/schedules.rb

Class Method Summary collapse

Class Method Details

.register_list_and_create(app) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/legion/api/schedules.rb', line 13

def self.register_list_and_create(app)
  app.get '/api/schedules' do
    require_scheduler!
    dataset = Legion::Extensions::Scheduler::Data::Model::Schedule.order(:id)
    dataset = dataset.where(active: true) if params[:active] == 'true'
    json_collection(dataset)
  end

  app.post '/api/schedules' do
    Legion::Logging.debug "API: POST /api/schedules params=#{params.keys}"
    require_scheduler!
    body = parse_request_body

    unless body[:function_id]
      Legion::Logging.warn 'API POST /api/schedules returned 422: function_id is required'
      halt 422, json_error('missing_field', 'function_id is required', status_code: 422)
    end
    unless body[:cron] || body[:interval]
      Legion::Logging.warn 'API POST /api/schedules returned 422: cron or interval is required'
      halt 422, json_error('missing_field', 'cron or interval is required', status_code: 422)
    end

    attrs = build_schedule_attrs(body)
    id = Legion::Extensions::Scheduler::Data::Model::Schedule.insert(attrs)
    schedule = Legion::Extensions::Scheduler::Data::Model::Schedule[id]
    Legion::Logging.info "API: created schedule #{id}"
    json_response(schedule.values, status_code: 201)
  end
end

.register_logs(app) ⇒ Object



71
72
73
74
75
76
77
78
79
80
# File 'lib/legion/api/schedules.rb', line 71

def self.register_logs(app)
  app.get '/api/schedules/:id/logs' do
    require_scheduler!
    find_or_halt(Legion::Extensions::Scheduler::Data::Model::Schedule, params[:id])
    logs = Legion::Extensions::Scheduler::Data::Model::ScheduleLog
           .where(schedule_id: params[:id].to_i)
           .order(Sequel.desc(:id))
    json_collection(logs)
  end
end

.register_show_update_delete(app) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/legion/api/schedules.rb', line 43

def self.register_show_update_delete(app)
  app.get '/api/schedules/:id' do
    require_scheduler!
    schedule = find_or_halt(Legion::Extensions::Scheduler::Data::Model::Schedule, params[:id])
    json_response(schedule.values)
  end

  app.put '/api/schedules/:id' do
    require_scheduler!
    schedule = find_or_halt(Legion::Extensions::Scheduler::Data::Model::Schedule, params[:id])
    body = parse_request_body

    updates = build_schedule_updates(body)
    schedule.update(updates) unless updates.empty?
    schedule.refresh
    Legion::Logging.info "API: updated schedule #{params[:id]}"
    json_response(schedule.values)
  end

  app.delete '/api/schedules/:id' do
    require_scheduler!
    schedule = find_or_halt(Legion::Extensions::Scheduler::Data::Model::Schedule, params[:id])
    schedule.delete
    Legion::Logging.info "API: deleted schedule #{params[:id]}"
    json_response({ deleted: true })
  end
end

.registered(app) ⇒ Object



7
8
9
10
11
# File 'lib/legion/api/schedules.rb', line 7

def self.registered(app)
  register_list_and_create(app)
  register_show_update_delete(app)
  register_logs(app)
end