diff --git a/rq/worker.py b/rq/worker.py index 201dfed..a32c6d9 100644 --- a/rq/worker.py +++ b/rq/worker.py @@ -23,7 +23,7 @@ from .queue import get_failed_queue, Queue from .registry import FinishedJobRegistry, StartedJobRegistry from .suspension import is_suspended from .timeouts import UnixSignalDeathPenalty -from .utils import enum, import_attribute, make_colorizer, utcformat, utcnow +from .utils import enum, import_attribute, make_colorizer, utcformat, utcnow, utcparse from .version import VERSION try: @@ -245,6 +245,21 @@ class Worker(object): p.expire(self.key, 60) p.execute() + @property + def birth_date(self): + """Fetches birth date from Redis.""" + birth_timestamp = self.connection.hget(self.key, 'birth') + if birth_timestamp is not None: + return utcparse(as_text(birth_timestamp)) + + @property + def death_date(self): + """Fetches death date from Redis.""" + death_timestamp = self.connection.hget(self.key, 'death') + if death_timestamp is not None: + return utcparse(as_text(death_timestamp)) + + def set_state(self, state, pipeline=None): self._state = state connection = pipeline if pipeline is not None else self.connection diff --git a/tests/test_worker.py b/tests/test_worker.py index c47a62e..6f89f4a 100644 --- a/tests/test_worker.py +++ b/tests/test_worker.py @@ -379,3 +379,25 @@ class TestWorker(RQTestCase): w3 = Worker([q], name="worker1") worker_set = set([w1, w2, w3]) self.assertEquals(len(worker_set), 2) + + def test_worker_sets_birth(self): + """Ensure worker correctly sets worker birth date.""" + q = Queue() + w = Worker([q]) + + w.register_birth() + + birth_date = w.birth_date + self.assertIsNotNone(birth_date) + self.assertEquals(type(birth_date).__name__, 'datetime') + + def test_worker_sets_death(self): + """Ensure worker correctly sets worker death date.""" + q = Queue() + w = Worker([q]) + + w.register_death() + + death_date = w.death_date + self.assertIsNotNone(death_date) + self.assertEquals(type(death_date).__name__, 'datetime')