python.d.plugin: allow delete dimension in runtime (#5795)
##### Summary Fixes: #5793 add `del_dimension` method to Chart class. method does: - sets dimension `hidden` option - sets dimension `obsolete` option - pushes chart to netdata (write to stdout) - deletes dimension from chart.dimensions ##### Component Name [`/collectors/python.d.plugin/python_modules/bases/charts.py`](https://github.com/netdata/netdata/blob/master/collectors/python.d.plugin/python_modules/bases/charts.py) ##### Additional Information
Ilya Mashchenko committed
Apr 4, 2019 at 11:30 UTC
3cf9ddd9333ec8057a517e5bdd6a8fdee35ea8d9
1 file changed
+18
-6
collectors/python.d.plugin/python_modules/bases/charts.py
+18
-6
@@ -19,7 +19,7 @@ CHART_OBSOLETE = "CHART {type}.{id} '{name}' '{title}' '{units}' '{family}' '{co
19
"{chart_type} {priority} {update_every} '{hidden} obsolete'\n"
20
21
22
-DIMENSION_CREATE = "DIMENSION '{id}' '{name}' {algorithm} {multiplier} {divisor} '{hidden}'\n"
22
+DIMENSION_CREATE = "DIMENSION '{id}' '{name}' {algorithm} {multiplier} {divisor} '{hidden} {obsolete}'\n"
23
DIMENSION_SET = "SET '{id}' = {value}\n"
24
25
CHART_VARIABLE_SET = "VARIABLE CHART '{id}' = {value}\n"
@@ -200,12 +200,23 @@ class Chart:
200
self.dimensions.append(dim)
201
return dim
202
203
+ def del_dimension(self, dimension_id):
204
+ if dimension_id not in self:
205
+ return
206
+ idx = self.dimensions.index(dimension_id)
207
+ dimension = self.dimensions[idx]
208
+ dimension.params['hidden'] = 'hidden'
209
+ dimension.params['obsolete'] = 'obsolete'
210
+ self.create()
211
+ self.dimensions.remove(dimension)
212
+
213
def hide_dimension(self, dimension_id, reverse=False):
204
- if dimension_id in self:
205
- idx = self.dimensions.index(dimension_id)
206
- dimension = self.dimensions[idx]
207
- dimension.params['hidden'] = 'hidden' if not reverse else str()
208
- self.refresh()
214
+ if dimension_id not in self:
215
+ return
216
+ idx = self.dimensions.index(dimension_id)
217
+ dimension = self.dimensions[idx]
218
+ dimension.params['hidden'] = 'hidden' if not reverse else str()
219
+ self.refresh()
220
221
def create(self):
222
"""
@@ -288,6 +299,7 @@ class Dimension:
299
if not isinstance(self.params.get('divisor'), int):
300
self.params['divisor'] = 1
301
self.params.setdefault('hidden', '')
302
+ self.params.setdefault('obsolete', '')
303
304
def __getattr__(self, item):
305
try: