|
1 | 1 | import os |
2 | | -import time |
3 | 2 | from typing import TYPE_CHECKING |
4 | 3 |
|
5 | 4 | from ddtrace.internal.logger import get_logger |
6 | | -from ddtrace.internal.periodic import PeriodicThread |
| 5 | +from ddtrace.internal.periodic import PeriodicService |
7 | 6 | from ddtrace.internal.remoteconfig.utils import get_poll_interval_seconds |
8 | 7 |
|
9 | 8 |
|
|
19 | 18 | log = get_logger(__name__) |
20 | 19 |
|
21 | 20 |
|
22 | | -class RemoteConfigSubscriber(object): |
23 | | - _th_worker = None |
24 | | - |
| 21 | +class RemoteConfigSubscriber(PeriodicService): |
25 | 22 | def __init__(self, data_connector, callback, name): |
26 | 23 | # type: (PublisherSubscriberConnector, Callable, str) -> None |
| 24 | + super().__init__(get_poll_interval_seconds() / 2) |
| 25 | + |
27 | 26 | self._data_connector = data_connector |
28 | | - self.is_running = False |
29 | 27 | self._callback = callback |
30 | 28 | self._name = name |
31 | | - log.debug("[%s] Subscriber %s init", os.getpid(), self._name) |
32 | | - self.interval = get_poll_interval_seconds() / 2 |
| 29 | + |
| 30 | + log.debug("[PID %d] %s initialized", os.getpid(), self) |
33 | 31 |
|
34 | 32 | def _exec_callback(self, data, test_tracer=None): |
35 | 33 | # type: (SharedDataType, Optional[Tracer]) -> None |
36 | 34 | if data: |
37 | | - log.debug("[%s] Subscriber %s _exec_callback: %s", os.getpid(), self._name, str(data)[:50]) |
| 35 | + log.debug("[PID %d] %s _exec_callback: %s", os.getpid(), self, str(data)[:50]) |
38 | 36 | self._callback(data, test_tracer=test_tracer) |
39 | 37 |
|
40 | 38 | def _get_data_from_connector_and_exec(self, test_tracer=None): |
41 | 39 | # type: (Optional[Tracer]) -> None |
42 | 40 | data = self._data_connector.read() |
43 | 41 | self._exec_callback(data, test_tracer=test_tracer) |
44 | 42 |
|
45 | | - def _worker(self): |
46 | | - self.is_running = True |
| 43 | + def periodic(self): |
47 | 44 | try: |
| 45 | + log.debug("[PID %d | PPID %d] %s is getting data", os.getpid(), os.getppid(), self) |
48 | 46 | self._get_data_from_connector_and_exec() |
| 47 | + log.debug("[PID %d | PPID %d] %s got data", os.getpid(), os.getppid(), self) |
49 | 48 | except Exception: |
50 | | - log.debug("[%s][P: %s] Subscriber %s get an error", os.getpid(), os.getppid(), self._name, exc_info=True) |
51 | | - time.sleep(self.interval) |
52 | | - |
53 | | - def start(self): |
54 | | - if not self.is_running and self._th_worker is None: |
55 | | - log.debug("[%s][P: %s] Subscriber %s starts %s", os.getpid(), os.getppid(), self._name, self.is_running) |
56 | | - self._th_worker = PeriodicThread( |
57 | | - target=self._worker, |
58 | | - interval=self.interval, |
59 | | - on_shutdown=self.stop, |
60 | | - name="%s:%s" % (self.__class__.__module__, self.__class__.__name__), |
61 | | - ) |
62 | | - self._th_worker.start() |
63 | | - else: |
64 | | - is_alive = False |
65 | | - if self._th_worker is not None: |
66 | | - is_alive = self._th_worker.is_alive() |
67 | | - log.debug( |
68 | | - "[%s][P: %s] Subscriber %s is trying to start but the subscriber status is %s " |
69 | | - "and subscriber thread is %s (is alive: %s)", |
70 | | - os.getpid(), |
71 | | - os.getppid(), |
72 | | - self._name, |
73 | | - self.is_running, |
74 | | - self._th_worker, |
75 | | - is_alive, |
76 | | - ) |
| 49 | + log.error("[PID %d | PPID %d] %s while getting data", os.getpid(), os.getppid(), self, exc_info=True) |
77 | 50 |
|
78 | | - def force_restart(self, join): |
79 | | - self.is_running = False |
80 | | - self.stop(join) |
81 | | - log.debug( |
82 | | - "[%s][P: %s] Subscriber %s worker restarts. Status: %s", |
83 | | - os.getpid(), |
84 | | - os.getppid(), |
85 | | - self._name, |
86 | | - self.is_running, |
87 | | - ) |
| 51 | + def force_restart(self, join=False): |
| 52 | + self.stop() |
| 53 | + if join: |
| 54 | + self.join() |
88 | 55 | self.start() |
| 56 | + log.debug("[PID %d | PPID %d] %s restarted", os.getpid(), os.getppid(), self) |
89 | 57 |
|
90 | | - def stop(self, join=False): |
91 | | - # type: (bool) -> None |
92 | | - if self._th_worker: |
93 | | - self.is_running = False |
94 | | - self._th_worker.stop() |
95 | | - if join: |
96 | | - self._th_worker.join() |
97 | | - log.debug("[%s][P: %s] Subscriber %s. Stopped", os.getpid(), os.getppid(), self._name) |
98 | | - self._th_worker = None |
| 58 | + def __str__(self): |
| 59 | + return f"Subscriber {self._name}" |
0 commit comments