1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- require 'rufus-scheduler'
- module Agents
- class SchedulerAgent < Agent
- include AgentControllerConcern
- cannot_be_scheduled!
- cannot_receive_events!
- cannot_create_events!
- description <<-MD
- This agent periodically triggers a run of each target Agent according to a user-defined schedule.
- Select target Agents and set a cron-style schedule to `schedule`.
- In the traditional cron format, a schedule part consists of these five columns: `minute hour day-of-month month day-of-week`.
- * `0 22 * * 1-5`: every day of the week at 22:00 (10pm)
- In this variant, you can also specify seconds:
- * `30 0 22 * * 1-5`: every day of the week at 22:00:30
- And timezones:
- * `0 22 * * 1-5 Europe/Paris`: every day of the week when it's 22:00 in Paris
- * `0 22 * * 1-5 Etc/GMT+2`: every day of the week when it's 22:00 in GMT+2
- There's also a way to specify "last day of month":
- * `0 22 L * *`: every month on the last day at 22:00
- And "monthdays":
- * `0 22 * * sun#1,sun#2`: every first and second sunday of the month, at 22:00
- * `0 22 * * sun#L1`: every last sunday of the month, at 22:00
- MD
- def default_options
- super.update({
- 'schedule' => '0 * * * *',
- })
- end
- def working?
- true
- end
- def check!
- control_targets!
- end
- def validate_options
- if (spec = options['schedule']).present?
- begin
- Rufus::Scheduler::CronLine.new(spec)
- rescue ArgumentError
- errors.add(:base, "invalid schedule")
- end
- else
- errors.add(:base, "schedule is missing")
- end
- end
- before_save do
- self.memory.delete('scheduled_at') if self.options_changed?
- end
- end
- end
|