@cryptotaxi247 / netdata-1 / commits / e36c0b690

python.d.plugin: "default_run" option for python.d.conf added

Ilya committed Mar 18, 2017 at 22:45 UTC e36c0b6900e34878c7beb49e4af453f1b90669e3
1 file changed +31 -14
plugins.d/python.d.plugin
+31 -14
@@ -86,14 +86,16 @@ if ORDERED:
86 def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
87 class OrderedLoader(Loader):
88 pass
89 +
90 def construct_mapping(loader, node):
90 - loader.flatten_mapping(node)
91 - return object_pairs_hook(loader.construct_pairs(node))
91 + loader.flatten_mapping(node)
92 + return object_pairs_hook(loader.construct_pairs(node))
93 OrderedLoader.add_constructor(
94 yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
95 construct_mapping)
96 return yaml.load(stream, OrderedLoader)
97
98 +
99 class PythonCharts(object):
100 """
101 Main class used to control every python module.
@@ -103,12 +105,16 @@ class PythonCharts(object):
105 modules=None,
106 modules_path='../python.d/',
107 modules_configs='../conf.d/',
106 - modules_disabled=None):
108 + modules_disabled=None,
109 + modules_enabled=None,
110 + default_run=None):
111 """
112 :param modules: list
113 :param modules_path: str
114 :param modules_configs: str
115 :param modules_disabled: list
116 + :param modules_enabled: list
117 + :param default_run: bool
118 """
119
120 if modules is None:
@@ -121,13 +127,13 @@ class PythonCharts(object):
127 self.configs = modules_configs
128
129 # load modules
124 - loaded_modules = self._load_modules(modules_path, modules, modules_disabled)
130 + loaded_modules = self._load_modules(modules_path, modules, modules_disabled, modules_enabled, default_run)
131
132 # load configuration files
133 configured_modules = self._load_configs(loaded_modules)
134
135 # good economy and prosperity:
130 - self.jobs = self._create_jobs(configured_modules) # type: list
136 + self.jobs = self._create_jobs(configured_modules) # type <list>
137
138 # enable timetable override like `python.d.plugin mysql debug 1`
139 if DEBUG_FLAG and OVERRIDE_UPDATE_EVERY:
@@ -157,7 +163,7 @@ class PythonCharts(object):
163 msg.error("Problem loading", name, str(e))
164 return None
165
160 - def _load_modules(self, path, modules, disabled):
166 + def _load_modules(self, path, modules, disabled, enabled, default_run):
167 """
168 Load modules from 'modules' list or dynamically every file from 'path' (only .chart.py files)
169 :param path: str
@@ -183,7 +189,10 @@ class PythonCharts(object):
189 msg.fatal('no modules found.')
190 else:
191 # scan directory specified in path and load all modules from there
186 - names = os.listdir(path)
192 + if default_run is False:
193 + names = [module for module in os.listdir(path) if module[:-9] in enabled]
194 + else:
195 + names = os.listdir(path)
196 for mod in names:
197 if mod.replace(MODULE_EXTENSION, "") in disabled:
198 msg.error(mod + ": disabled module ", mod.replace(MODULE_EXTENSION, ""))
@@ -369,7 +378,8 @@ class PythonCharts(object):
378 if job.override_name is not None:
379 new_name = job.__module__ + '_' + sub(r'\s+', '_', job.override_name)
380 if new_name in overridden:
372 - msg.info("DROPPED:", job.name, ", job '" + job.override_name + "' is already served by another job.")
381 + msg.info("DROPPED:", job.name, ", job '" + job.override_name +
382 + "' is already served by another job.")
383 self._stop(job)
384 i -= 1
385 else:
@@ -481,7 +491,7 @@ def parse_cmdline(directory, *commands):
491 elif cmd == "trace" or cmd == "all":
492 TRACE_FLAG = True
493 elif os.path.isfile(directory + cmd + ".chart.py") or os.path.isfile(directory + cmd):
484 - #DEBUG_FLAG = True
494 + # DEBUG_FLAG = True
495 mods.append(cmd.replace(".chart.py", ""))
496 else:
497 try:
@@ -507,6 +517,8 @@ def run():
517
518 # read configuration file
519 disabled = ['nginx_log', 'gunicorn_log']
520 + enabled = list()
521 + default_run = True
522 configfile = CONFIG_DIR + "python.d.conf"
523 msg.PROGRAM = PROGRAM
524 msg.info("reading configuration file:", configfile)
@@ -548,12 +560,17 @@ def run():
560 except (KeyError, TypeError):
561 pass
562
563 + default_run = True if ('default_run' not in conf or conf.get('default_run')) else False
564 +
565 for k, v in conf.items():
552 - if k in ("update_every", "debug", "enabled"):
566 + if k in ("update_every", "debug", "enabled", "default_run"):
567 continue
554 - if v is False:
555 - disabled.append(k)
556 -
568 + if default_run:
569 + if v is False:
570 + disabled.append(k)
571 + else:
572 + if v is True:
573 + enabled.append(k)
574 # parse passed command line arguments
575 modules = parse_cmdline(MODULES_DIR, *sys.argv)
576 msg.DEBUG_FLAG = DEBUG_FLAG
@@ -568,7 +585,7 @@ def run():
585 ", ONLY_MODULES=" + str(modules))
586
587 # run plugins
571 - charts = PythonCharts(modules, MODULES_DIR, CONFIG_DIR + "python.d/", disabled)
588 + charts = PythonCharts(modules, MODULES_DIR, CONFIG_DIR + "python.d/", disabled, enabled, default_run)
589 charts.check()
590 charts.create()
591 charts.update()