18
'END\n'
19
20
PENALTY_EVERY = 5
21
+MAX_PENALTY = 10 * 60 # 10 minutes
22
23
24
class RuntimeCounters:
27
:param configuration: <dict>
28
"""
29
self.update_every = int(configuration.pop('update_every'))
29
- self.max_retries = int(configuration.pop('retries'))
30
+ self.do_penalty = configuration.pop('penalty')
31
32
self.start_mono = 0
33
self.start_real = 0
35
self.penalty = 0
36
self.elapsed = 0
37
self.prev_update = 0
38
+
39
self.runs = 1
40
41
def calc_next(self):
51
52
def handle_retries(self):
53
self.retries += 1
52
- if self.retries % PENALTY_EVERY:
53
- return True
54
- self.penalty = self.retries * self.update_every / 2
55
- return self.retries < self.max_retries
54
+ if self.do_penalty and self.retries % PENALTY_EVERY == 0:
55
+ self.penalty = round(min(self.retries * self.update_every / 2, MAX_PENALTY))
56
57
58
class SimpleService(Thread, PythonDLimitedLogger, OldVersionCompatibility, object):
180
:return: None
181
"""
182
job = self._runtime_counters
183
- self.debug('started, update frequency: {freq}, retries: {retries}'.format(
184
- freq=job.update_every,
185
- retries=job.max_retries - job.retries),
186
- )
183
+ self.debug('started, update frequency: {freq}'.format(freq=job.update_every))
184
185
while True:
186
job.sleep_until_next()
198
job.runs += 1
199
200
if not updated:
204
- if not job.handle_retries():
205
- return
201
+ job.handle_retries()
202
else:
203
job.elapsed = int((monotonic() - job.start_mono) * 1e3)
204
job.prev_update = job.start_real
206
safe_print(RUNTIME_CHART_UPDATE.format(job_name=self.name,
207
since_last=since,
208
elapsed=job.elapsed))
213
- self.debug('update => [{status}] (elapsed time: {elapsed}, '
214
- 'retries left: {retries})'.format(status='OK' if updated else 'FAILED',
215
- elapsed=job.elapsed if updated else '-',
216
- retries=job.max_retries - job.retries))
209
+ self.debug('update => [{status}] (elapsed time: {elapsed}, failed retries in a row: {retries})'.format(
210
+ status='OK' if updated else 'FAILED',
211
+ elapsed=job.elapsed if updated else '-',
212
+ retries=job.retries))
213
214
def update(self, interval):
215
"""