summaryrefslogtreecommitdiffstats
path: root/collectors/python.d.plugin/python_modules/bases
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/python.d.plugin/python_modules/bases')
-rw-r--r--collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py18
-rw-r--r--collectors/python.d.plugin/python_modules/bases/charts.py32
2 files changed, 35 insertions, 15 deletions
diff --git a/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py b/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py
index ed1b2e669..a7acc23b6 100644
--- a/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py
+++ b/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py
@@ -4,14 +4,13 @@
# Author: Ilya Mashchenko (ilyam8)
# SPDX-License-Identifier: GPL-3.0-or-later
-
-from time import sleep, time
-
-from third_party.monotonic import monotonic
+import os
from bases.charts import Charts, ChartError, create_runtime_chart
from bases.collection import safe_print
from bases.loggers import PythonDLimitedLogger
+from third_party.monotonic import monotonic
+from time import sleep, time
RUNTIME_CHART_UPDATE = 'BEGIN netdata.runtime_{job_name} {since_last}\n' \
'SET run_time = {elapsed}\n' \
@@ -20,6 +19,8 @@ RUNTIME_CHART_UPDATE = 'BEGIN netdata.runtime_{job_name} {since_last}\n' \
PENALTY_EVERY = 5
MAX_PENALTY = 10 * 60 # 10 minutes
+ND_INTERNAL_MONITORING_DISABLED = os.getenv("NETDATA_INTERNALS_MONITORING") == "NO"
+
class RuntimeCounters:
def __init__(self, configuration):
@@ -79,11 +80,13 @@ class SimpleService(PythonDLimitedLogger, object):
self.module_name = clean_module_name(self.__module__)
self.job_name = configuration.pop('job_name')
+ self.actual_job_name = self.job_name or self.module_name
self.override_name = configuration.pop('override_name')
self.fake_name = None
self._runtime_counters = RuntimeCounters(configuration=configuration)
self.charts = Charts(job_name=self.actual_name,
+ actual_job_name=self.actual_job_name,
priority=configuration.pop('priority'),
cleanup=configuration.pop('chart_cleanup'),
get_update_every=self.get_update_every,
@@ -208,9 +211,10 @@ class SimpleService(PythonDLimitedLogger, object):
job.elapsed = int((monotonic() - job.start_mono) * 1e3)
job.prev_update = job.start_real
job.retries, job.penalty = 0, 0
- safe_print(RUNTIME_CHART_UPDATE.format(job_name=self.name,
- since_last=since,
- elapsed=job.elapsed))
+ if not ND_INTERNAL_MONITORING_DISABLED:
+ safe_print(RUNTIME_CHART_UPDATE.format(job_name=self.name,
+ since_last=since,
+ elapsed=job.elapsed))
self.debug('update => [{status}] (elapsed time: {elapsed}, failed retries in a row: {retries})'.format(
status='OK' if updated else 'FAILED',
elapsed=job.elapsed if updated else '-',
diff --git a/collectors/python.d.plugin/python_modules/bases/charts.py b/collectors/python.d.plugin/python_modules/bases/charts.py
index 54986a937..203ad1672 100644
--- a/collectors/python.d.plugin/python_modules/bases/charts.py
+++ b/collectors/python.d.plugin/python_modules/bases/charts.py
@@ -3,6 +3,8 @@
# Author: Ilya Mashchenko (ilyam8)
# SPDX-License-Identifier: GPL-3.0-or-later
+import os
+
from bases.collection import safe_print
CHART_PARAMS = ['type', 'id', 'name', 'title', 'units', 'family', 'context', 'chart_type', 'hidden']
@@ -18,15 +20,24 @@ CHART_CREATE = "CHART {type}.{id} '{name}' '{title}' '{units}' '{family}' '{cont
CHART_OBSOLETE = "CHART {type}.{id} '{name}' '{title}' '{units}' '{family}' '{context}' " \
"{chart_type} {priority} {update_every} '{hidden} obsolete'\n"
+CLABEL_COLLECT_JOB = "CLABEL '_collect_job' '{actual_job_name}' '0'\n"
+CLABEL_COMMIT = "CLABEL_COMMIT\n"
+
DIMENSION_CREATE = "DIMENSION '{id}' '{name}' {algorithm} {multiplier} {divisor} '{hidden} {obsolete}'\n"
DIMENSION_SET = "SET '{id}' = {value}\n"
CHART_VARIABLE_SET = "VARIABLE CHART '{id}' = {value}\n"
+# 1 is label source auto
+# https://github.com/netdata/netdata/blob/cc2586de697702f86a3c34e60e23652dd4ddcb42/database/rrd.h#L205
RUNTIME_CHART_CREATE = "CHART netdata.runtime_{job_name} '' 'Execution time' 'ms' 'python.d' " \
"netdata.pythond_runtime line 145000 {update_every} '' 'python.d.plugin' '{module_name}'\n" \
+ "CLABEL '_collect_job' '{actual_job_name}' '1'\n" \
+ "CLABEL_COMMIT\n" \
"DIMENSION run_time 'run time' absolute 1 1\n"
+ND_INTERNAL_MONITORING_DISABLED = os.getenv("NETDATA_INTERNALS_MONITORING") == "NO"
+
def create_runtime_chart(func):
"""
@@ -42,12 +53,14 @@ def create_runtime_chart(func):
def wrapper(*args, **kwargs):
self = args[0]
- chart = RUNTIME_CHART_CREATE.format(
- job_name=self.name,
- update_every=self._runtime_counters.update_every,
- module_name=self.module_name,
- )
- safe_print(chart)
+ if not ND_INTERNAL_MONITORING_DISABLED:
+ chart = RUNTIME_CHART_CREATE.format(
+ job_name=self.name,
+ actual_job_name=self.actual_job_name,
+ update_every=self._runtime_counters.update_every,
+ module_name=self.module_name,
+ )
+ safe_print(chart)
ok = func(*args, **kwargs)
return ok
@@ -77,13 +90,14 @@ class Charts:
Chart is a instance of Chart class.
Charts adding must be done using Charts.add_chart() method only"""
- def __init__(self, job_name, priority, cleanup, get_update_every, module_name):
+ def __init__(self, job_name, actual_job_name, priority, cleanup, get_update_every, module_name):
"""
:param job_name: <bound method>
:param priority: <int>
:param get_update_every: <bound method>
"""
self.job_name = job_name
+ self.actual_job_name = actual_job_name
self.priority = priority
self.cleanup = cleanup
self.get_update_every = get_update_every
@@ -131,6 +145,7 @@ class Charts:
new_chart.params['update_every'] = self.get_update_every()
new_chart.params['priority'] = self.priority
new_chart.params['module_name'] = self.module_name
+ new_chart.params['actual_job_name'] = self.actual_job_name
self.priority += 1
self.charts[new_chart.id] = new_chart
@@ -230,13 +245,14 @@ class Chart:
:return:
"""
chart = CHART_CREATE.format(**self.params)
+ labels = CLABEL_COLLECT_JOB.format(**self.params) + CLABEL_COMMIT
dimensions = ''.join([dimension.create() for dimension in self.dimensions])
variables = ''.join([var.set(var.value) for var in self.variables if var])
self.flags.push = False
self.flags.created = True
- safe_print(chart + dimensions + variables)
+ safe_print(chart + labels + dimensions + variables)
def can_be_updated(self, data):
for dim in self.dimensions: