예제 #1
0
def create_schedules(events):
    schedules = []

    for job in api.get_jobs():
        cmd_sch = croniter(job.interval, job.last_time_run)

        # If we have missed more than one occurrence only run one
        time = cmd_sch.get_next(datetime)
        next_time = cmd_sch.get_next(datetime)
        if next_time <= datetime.now():
            time = next_time
            next_time = cmd_sch.get_next(datetime)

        if (time - datetime.now()) < SCHEDULER_UPDATE_INTERVAL:
            job.last_time_run = time
            api.set_job_time(job)

            next_worker = api.get_next_worker()
            if next_worker is None:
                break

            schedule = api.Schedule(time, job, next_worker)
            schedules.append(schedule)

    api.add_schedules(sort_schedules(schedules))

    delay = SCHEDULER_UPDATE_INTERVAL.total_seconds()
    events.enter(delay, 1, create_schedules, (events,))
예제 #2
0
def create_schedules(events):
    schedules = []

    for job in api.get_jobs():
        cmd_sch = croniter(job.interval, job.last_time_run)

        # If we have missed more than one occurrence only run one
        time = cmd_sch.get_next(datetime)
        next_time = cmd_sch.get_next(datetime)
        if next_time <= datetime.now():
            time = next_time
            next_time = cmd_sch.get_next(datetime)

        if (time - datetime.now()) < SCHEDULER_UPDATE_INTERVAL:
            job.last_time_run = time
            api.set_job_time(job)

            next_worker = api.get_next_worker()
            if next_worker is None:
                break

            schedule = api.Schedule(time, job, next_worker)
            schedules.append(schedule)

    api.add_schedules(sort_schedules(schedules))

    delay = SCHEDULER_UPDATE_INTERVAL.total_seconds()
    events.enter(delay, 1, create_schedules, (events, ))
예제 #3
0
 def test_update_heartbeat_deleted_worker(self):
     test_workers = []
     # Create a temporary worker in the test workers
     to_be_deleted = test_workers.append(api.create_worker())
     # Destroy the only worker in the list
     api.destroy_worker(api.get_next_worker())
     # Verify that we do not update nonexistent workers
     with self.assertRaises(ValueError):
         api.update_heartbeat(to_be_deleted)
예제 #4
0
 def test_update_heartbeat_deleted_worker(self):
     test_workers = []
     # Create a temporary worker in the test workers
     to_be_deleted = test_workers.append(api.create_worker())
     # Destroy the only worker in the list
     api.destroy_worker(api.get_next_worker())
     # Verify that we do not update nonexistent workers
     with self.assertRaises(ValueError):
         api.update_heartbeat(to_be_deleted)
예제 #5
0
def check_worker_heartbeat(events):
    for w in api.get_workers():
        if (datetime.now() - w.heartbeat) > WORKER_HEARTBEAT_TIMEOUT:
            for schedule in api.get_schedules(w):
                schedule.worker = api.get_next_worker()

            api.destroy_worker(w)

    delay = WORKER_HEARTBEAT_TIMEOUT.total_seconds()
    events.enter(delay, 1, check_worker_heartbeat, (events,))
예제 #6
0
def check_worker_heartbeat(events):
    for w in api.get_workers():
        if (datetime.now() - w.heartbeat) > WORKER_HEARTBEAT_TIMEOUT:
            for schedule in api.get_schedules(w):
                schedule.worker = api.get_next_worker()

            api.destroy_worker(w)

    delay = WORKER_HEARTBEAT_TIMEOUT.total_seconds()
    events.enter(delay, 1, check_worker_heartbeat, (events, ))
예제 #7
0
 def test_destroy_worker_one_worker(self):
     test_workers = []
     # Create one worker and add it to a list for bookkeeping
     test_workers.append(api.create_worker())
     # Kill the only worker in the list
     api.destroy_worker(test_workers[0])
     # Try to get a worker from an empty pool
     next_worker = api.get_next_worker()
     # Verify that the next worker does not exist
     self.assertEqual(next_worker, None)
예제 #8
0
 def test_destroy_worker_one_worker(self):
     test_workers = []
     # Create one worker and add it to a list for bookkeeping
     test_workers.append(api.create_worker())
     # Kill the only worker in the list
     api.destroy_worker(test_workers[0])
     # Try to get a worker from an empty pool
     next_worker = api.get_next_worker()
     # Verify that the next worker does not exist
     self.assertEqual(next_worker, None)
예제 #9
0
 def test_get_next_worker_one_worker(self):
     num_of_workers = ONE
     test_workers = []
     # Create one worker and add it to a list for bookkeeping
     test_workers.append(api.create_worker())
     workers_list = []
     workers_list.append(api.get_next_worker())
     # Verify that the workers list contains exactly one worker
     self.assertEqual(len(workers_list), num_of_workers)
     # Verify that the information we get is the same as what was set
     check_worker_fields(self, workers_list, test_workers)
예제 #10
0
 def test_get_next_worker_one_worker(self):
     num_of_workers = ONE
     test_workers = []
     # Create one worker and add it to a list for bookkeeping
     test_workers.append(api.create_worker())
     workers_list = []
     workers_list.append(api.get_next_worker())
     # Verify that the workers list contains exactly one worker
     self.assertEqual(len(workers_list), num_of_workers)
     # Verify that the information we get is the same as what was set
     check_worker_fields(self, workers_list, test_workers)
예제 #11
0
 def test_get_next_worker_one_worker_many_requests(self):
     num_of_workers = ONE
     num_of_requests = MANY
     test_workers = []
     # Create one worker and it to a list for bookkeeping
     test_workers.append(api.create_worker())
     # Verify that the test workers contains exactly one worker
     self.assertEqual(len(test_workers), num_of_workers)
     workers_list = []
     for request in range(num_of_requests):
         # Get workers and add them to a list for
         # comparison with list of test workers
         workers_list.append(api.get_next_worker())
     # Verify that the workers list contains
     # as many workers as there were requests
     self.assertEqual(len(workers_list), num_of_requests)
     # Verify that the information we get is the same as what was set
     check_worker_fields(self, workers_list, test_workers)
예제 #12
0
 def test_get_next_worker_one_worker_many_requests(self):
     num_of_workers = ONE
     num_of_requests = MANY
     test_workers = []
     # Create one worker and it to a list for bookkeeping
     test_workers.append(api.create_worker())
     # Verify that the test workers contains exactly one worker
     self.assertEqual(len(test_workers), num_of_workers)
     workers_list = []
     for request in range(num_of_requests):
         # Get workers and add them to a list for
         # comparison with list of test workers
         workers_list.append(api.get_next_worker())
     # Verify that the workers list contains
     # as many workers as there were requests
     self.assertEqual(len(workers_list), num_of_requests)
     # Verify that the information we get is the same as what was set
     check_worker_fields(self, workers_list, test_workers)
예제 #13
0
 def test_get_next_worker_many_workers_more_requests(self):
     num_of_workers = MANY
     num_of_requests = MORE_THAN_MANY
     test_workers = []
     for worker in range(num_of_workers):
         # Create many workers and add them to a list for bookkeeping
         test_workers.append(api.create_worker())
     # Verify that the test workers contains
     # the correct number of workers
     self.assertEqual(len(test_workers), num_of_workers)
     workers_list = []
     for request in range(num_of_requests):
         # Get more workers than available in the test workers
         # (popped workers are pushed to the end of the queue)
         # and add them to a list for comparison
         workers_list.append(api.get_next_worker())
     # Verify that the workers list contains
     # as many workers as there were requests
     self.assertEqual(len(workers_list), num_of_requests)
     # Verify that the information we get is the same as what was set
     check_worker_fields(self, workers_list, test_workers)
예제 #14
0
 def test_get_next_worker_many_workers_more_requests(self):
     num_of_workers = MANY
     num_of_requests = MORE_THAN_MANY
     test_workers = []
     for worker in range(num_of_workers):
         # Create many workers and add them to a list for bookkeeping
         test_workers.append(api.create_worker())
     # Verify that the test workers contains
     # the correct number of workers
     self.assertEqual(len(test_workers), num_of_workers)
     workers_list = []
     for request in range(num_of_requests):
         # Get more workers than available in the test workers
         # (popped workers are pushed to the end of the queue)
         # and add them to a list for comparison
         workers_list.append(api.get_next_worker())
     # Verify that the workers list contains
     # as many workers as there were requests
     self.assertEqual(len(workers_list), num_of_requests)
     # Verify that the information we get is the same as what was set
     check_worker_fields(self, workers_list, test_workers)
예제 #15
0
 def test_destroy_worker_many_workers(self):
     # Number of workers and floor(requests) + ceiling(requests) are equal
     num_of_workers = MANY
     # Automatic flooring care of Python
     num_of_requests = num_of_workers/2
     test_workers = []
     for worker in range(num_of_workers):
         # Create many workers and add them to a list for bookkeeping
         test_workers.append(api.create_worker())
     # Kill the floor of half of the workers in the list
     for request in range(num_of_requests):
         api.destroy_worker(test_workers.pop())
     workers_list = []
     workers_list = api.get_workers()
     # Verify that the correct workers are still in the list
     check_worker_fields(self, workers_list, test_workers)
     # Remove the rest of the test workers
     while test_workers:
         api.destroy_worker(test_workers.pop())
     # Try to get a worker from an empty pool
     next_worker = api.get_next_worker()
     # Verify that the next worker does not exist
     self.assertEqual(next_worker, None)
예제 #16
0
 def test_destroy_worker_many_workers(self):
     # Number of workers and floor(requests) + ceiling(requests) are equal
     num_of_workers = MANY
     # Automatic flooring care of Python
     num_of_requests = num_of_workers / 2
     test_workers = []
     for worker in range(num_of_workers):
         # Create many workers and add them to a list for bookkeeping
         test_workers.append(api.create_worker())
     # Kill the floor of half of the workers in the list
     for request in range(num_of_requests):
         api.destroy_worker(test_workers.pop())
     workers_list = []
     workers_list = api.get_workers()
     # Verify that the correct workers are still in the list
     check_worker_fields(self, workers_list, test_workers)
     # Remove the rest of the test workers
     while test_workers:
         api.destroy_worker(test_workers.pop())
     # Try to get a worker from an empty pool
     next_worker = api.get_next_worker()
     # Verify that the next worker does not exist
     self.assertEqual(next_worker, None)
예제 #17
0
 def test_get_next_worker_empty_workers(self):
     # Try to get the next worker from an empty pool
     next_worker = api.get_next_worker()
     # Verify that the next worker does not exist
     self.assertEqual(next_worker, None)
예제 #18
0
 def test_get_next_worker_empty_workers(self):
     # Try to get the next worker from an empty pool
     next_worker = api.get_next_worker()
     # Verify that the next worker does not exist
     self.assertEqual(next_worker, None)