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()