do not push "obsolete" chart to netdata if chart was not created
lgz committed
Nov 5, 2017 at 01:26 UTC
14b59754e2688d517f12cb7d0ff4c9697685fb38
2 files changed
+41
-46
python.d/python_modules/bases/FrameworkServices/SimpleService.py
+8
-5
@@ -208,20 +208,23 @@ class SimpleService(Thread, PythonDLimitedLogger, OldVersionCompatibility, objec
208
209
for chart in self.charts:
210
211
- if chart.flags.OBSOLETE:
211
+ if chart.flags.obsoleted:
212
continue
213
- elif chart.cleanup and chart.penalty > chart.cleanup:
214
- chart.push_obsolete()
213
+ elif self.charts.cleanup and chart.penalty >= self.charts.cleanup:
214
+ chart.obsolete()
215
self.error("chart '{0}' was removed due to non updating".format(chart.name))
216
continue
217
218
- since_last = 0 if chart.flags.NEW else interval
218
+ since_last = 0 if chart.flags.new else interval
219
ok = chart.update(data, since_last)
220
if ok:
221
+ chart.penalty = 0
222
updated = True
223
+ else:
224
+ chart.penalty += 1
225
226
if not updated:
224
- self.debug('none of the charts have been updated')
227
+ self.debug('none of the charts has been updated')
228
229
return updated
230
python.d/python_modules/bases/charts.py
+33
-41
@@ -123,7 +123,6 @@ class Charts:
123
124
new_chart.params['update_every'] = self.get_update_every()
125
new_chart.params['priority'] = self.priority
126
- new_chart.cleanup = self.cleanup
126
127
self.priority += 1
128
self.charts[new_chart.id] = new_chart
@@ -131,7 +130,7 @@ class Charts:
130
return new_chart
131
132
def active_charts(self):
134
- return [chart.id for chart in self if not chart.flags.OBSOLETE]
133
+ return [chart.id for chart in self if not chart.flags.obsoleted]
134
135
136
class Chart:
@@ -203,59 +202,40 @@ class Chart:
202
chart = CHART_CREATE.format(**self.params)
203
dimensions = ''.join([dimension.create() for dimension in self.dimensions])
204
variables = ''.join([var.set(var.value) for var in self.variables if var])
205
+ self.flags.new = False
206
+ self.flags.create = False
207
207
- return chart + dimensions + variables
208
-
209
- def push_obsolete(self):
210
- self.flags.OBSOLETE = True
211
- safe_print(CHART_OBSOLETE.format(**self.params))
208
+ safe_print(chart + dimensions + variables)
209
210
def update(self, data, since_last):
211
updated_dimensions, updated_variables = str(), str()
212
216
- for dimension in self.dimensions:
217
- try:
218
- value = int(data[dimension.id])
219
- except (KeyError, TypeError):
220
- continue
221
- else:
222
- updated_dimensions += dimension.set(value)
213
+ for dim in self.dimensions:
214
+ updated_dimensions += dim.set(dim.get_value(data))
215
216
for var in self.variables:
225
- try:
226
- value = int(data[var.id])
227
- except (KeyError, TypeError):
228
- continue
229
- else:
230
- updated_variables += var.set(value)
217
+ updated_variables += var.set(var.get_value(data))
218
219
if updated_dimensions:
233
- if self.flags.PUSH:
234
- self.push_created()
220
+ if self.flags.create:
221
+ self.create()
222
223
chart_begin = CHART_BEGIN.format(type=self.type, id=self.id, since_last=since_last)
237
- self.push_updates(chart_begin, updated_dimensions, updated_variables, 'END\n')
238
- else:
239
- self.penalty += 1
224
+ safe_print(chart_begin, updated_dimensions, updated_variables, 'END\n')
225
226
return bool(updated_dimensions)
227
243
- def push_created(self):
244
- self.penalty = 0
245
- self.flags.PUSH = False
246
- self.flags.NEW = False
247
- safe_print(self.create())
248
-
249
- @staticmethod
250
- def push_updates(*data):
251
- safe_print(''.join(data))
228
+ def obsolete(self):
229
+ self.flags.obsoleted = True
230
+ if not self.flags.new:
231
+ safe_print(CHART_OBSOLETE.format(**self.params))
232
233
def refresh(self):
234
self.penalty = 0
255
- self.flags.PUSH = True
256
- if self.flags.OBSOLETE:
257
- self.flags.NEW = True
258
- self.flags.OBSOLETE = False
235
+ self.flags.create = True
236
+ if self.flags.obsoleted:
237
+ self.flags.new = True
238
+ self.flags.obsoleted = False
239
240
241
class Dimension:
@@ -304,6 +284,12 @@ class Dimension:
284
return DIMENSION_SET.format(id=self.id,
285
value=value)
286
287
+ def get_value(self, data):
288
+ try:
289
+ return int(data[self.id])
290
+ except (KeyError, TypeError):
291
+ return ''
292
+
293
294
class ChartVariable:
295
"""Represent a chart variable"""
@@ -350,9 +336,15 @@ class ChartVariable:
336
return CHART_VARIABLE_SET.format(id=self.id,
337
value=value)
338
339
+ def get_value(self, data):
340
+ try:
341
+ return int(data[self.id])
342
+ except (KeyError, TypeError):
343
+ return ''
344
+
345
346
class ChartFlags:
347
def __init__(self):
356
- self.NEW = True
357
- self.OBSOLETE = False
358
- self.PUSH = True
348
+ self.new = True
349
+ self.create = True
350
+ self.obsoleted = False