def test_get_schedules_no_previous_run(self): current_run = timeutils.isotime() epoch = timeutils.isotime(datetime.datetime(1970, 1, 1)) filter_args = {'next_run_after': epoch, 'next_run_before': current_run} self.client.list_schedules(filter_args=filter_args).AndReturn([]) self.mox.ReplayAll() self.scheduler.get_schedules(current_run=current_run) self.mox.VerifyAll()
def test_get_schedules(self): timeutils.set_time_override() start_time = timeutils.isotime() timeutils.advance_time_seconds(30) end_time = timeutils.isotime() filter_args = {"next_run_after": start_time, "next_run_before": end_time} self.client.list_schedules(filter_args=filter_args).AndReturn([]) self.mox.ReplayAll() self.scheduler.get_schedules(start_time, end_time) self.mox.VerifyAll()
def test_get_schedules(self): timeutils.set_time_override() previous_run = timeutils.isotime() timeutils.advance_time_seconds(30) current_run = timeutils.isotime() filter_args = {'next_run_after': previous_run, 'next_run_before': current_run} self.client.list_schedules(filter_args=filter_args).AndReturn([]) self.mox.ReplayAll() self.scheduler.get_schedules(previous_run, current_run) self.mox.VerifyAll()
def test_get_schedules_no_previous_run(self): end_time = timeutils.isotime() filter_args = {"next_run_before": end_time} self.client.list_schedules(filter_args=filter_args).AndReturn([]) self.mox.ReplayAll() self.scheduler.get_schedules(end_time=end_time) self.mox.VerifyAll()
def get_schedules(self, previous_run=None, current_run=None): filter_args = {'next_run_before': current_run} # TODO(ameade): change api to not require both query params year_one = timeutils.isotime(datetime.datetime(1970, 1, 1)) filter_args['next_run_after'] = previous_run or year_one return self.client.list_schedules(filter_args=filter_args)
def serialize_datetimes(data): """Serializes datetimes to strings in the top level values of a dict.""" for (k, v) in data.iteritems(): if isinstance(v, datetime.datetime): data[k] = timeutils.isotime(v) elif isinstance(v, list): for item in v: serialize_datetimes(item) elif isinstance(v, dict): serialize_datetimes(v)
def test_run_loop(self): self.config(job_schedule_interval=5, group="scheduler") timeutils.set_time_override() current_time = timeutils.isotime() called = {"enqueue_jobs": False} def fake(end_time=None): # assert only end_time kwarg is passed self.assertEqual(end_time, current_time) called["enqueue_jobs"] = True self.stubs.Set(self.scheduler, "enqueue_jobs", fake) fake_sleep = lambda x: None self.stubs.Set(time, "sleep", fake_sleep) self.scheduler.run(run_once=True) self.assertTrue(called["enqueue_jobs"])
def _run_loop(self, run_once=False): next_run = None current_run = None while True: current_run = timeutils.isotime() next_run = time.time() + CONF.scheduler.job_schedule_interval # do work self.enqueue_jobs(end_time=current_run) # do nothing until next run seconds = next_run - time.time() if seconds > 0: time.sleep(seconds) else: LOG.warn(_('Scheduling of jobs took longer than expected.')) if run_once: break
def test_get_heartbeat(self): request = unit_test_utils.get_fake_request(method='GET') response = self.controller.get_heartbeat(request, self.job_1['id']) heartbeat = response.get('heartbeat') self.assertEqual(heartbeat, timeutils.isotime(self.job_1['updated_at']))
def job_heartbeat(self, job_id): body = {'heartbeat': timeutils.isotime()} path = '/v1/jobs/%s/heartbeat' % job_id return self._do_request('PUT', path, body)