mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
Add new module to run munin plugins
This commit is contained in:
parent
3e6a0535d1
commit
6020788f6c
88
salt/modules/munin.py
Normal file
88
salt/modules/munin.py
Normal file
@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env python
|
||||
'''
|
||||
Run munin plugins/checks from salt and format the output as data.
|
||||
'''
|
||||
|
||||
# Import python libs
|
||||
import os
|
||||
import stat
|
||||
|
||||
# Import salt libs
|
||||
import salt.utils
|
||||
from salt.exceptions import SaltException
|
||||
|
||||
PLUGINDIR = '/etc/munin/plugins/'
|
||||
|
||||
def __virtual__():
|
||||
'''
|
||||
Only load the module if munin-node is installed
|
||||
'''
|
||||
if os.path.exists('/etc/munin/munin-node.conf'):
|
||||
return 'munin'
|
||||
return False
|
||||
|
||||
def _get_conf(fname='/etc/munin/munin-node.cfg'):
|
||||
fp = salt.utils.fopen(fname, 'r')
|
||||
return fp.read()
|
||||
|
||||
def run(plugin):
|
||||
'''
|
||||
Run a named munin plugin
|
||||
|
||||
CLI Example::
|
||||
|
||||
salt '*' munin.run uptime
|
||||
'''
|
||||
plugins = list_plugins()
|
||||
if plugin in plugins:
|
||||
muninout = __salt__['cmd.run']('munin-run ' + plugin)
|
||||
data = {
|
||||
plugin: {}
|
||||
}
|
||||
for line in muninout.split('\n'):
|
||||
if 'value' in line: # This skips multigraph lines, etc
|
||||
key, val = line.split(' ')
|
||||
key = key.split('.')[0]
|
||||
try:
|
||||
# We only want numbers
|
||||
val = float(val)
|
||||
data[plugin][key] = val
|
||||
except ValueError:
|
||||
pass
|
||||
return data
|
||||
else:
|
||||
return 'Munin plugin with name "%s" not found' %plugin
|
||||
|
||||
def run_all():
|
||||
'''
|
||||
Run all the munin plugins
|
||||
|
||||
CLI Example::
|
||||
|
||||
salt '*' munin.run_all
|
||||
'''
|
||||
plugins = list_plugins()
|
||||
ret = {}
|
||||
for plugin in plugins:
|
||||
ret[plugin] = run(plugin)
|
||||
return ret
|
||||
|
||||
def list_plugins():
|
||||
'''
|
||||
List all the munin plugins
|
||||
|
||||
CLI Example::
|
||||
|
||||
salt '*' munin.list_plugins
|
||||
'''
|
||||
pluginlist = os.listdir(PLUGINDIR)
|
||||
ret = []
|
||||
for plugin in pluginlist:
|
||||
# Check if execute bit
|
||||
statf = os.path.join(PLUGINDIR, plugin)
|
||||
executebit = stat.S_IXUSR & os.stat(statf)[stat.ST_MODE]
|
||||
if executebit:
|
||||
ret.append(plugin)
|
||||
return ret
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user