@cryptotaxi247 / netdata-1 / commits / 14b59754e

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