%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/beacons/ |
Current File : //usr/lib/python2.7/site-packages/salt/beacons/ps.py |
# -*- coding: utf-8 -*- ''' Send events covering process status ''' # Import Python Libs from __future__ import absolute_import, unicode_literals import logging # Import third party libs # pylint: disable=import-error try: import salt.utils.psutil_compat as psutil HAS_PSUTIL = True except ImportError: HAS_PSUTIL = False from salt.ext.six.moves import map # pylint: enable=import-error log = logging.getLogger(__name__) # pylint: disable=invalid-name __virtualname__ = 'ps' def __virtual__(): if not HAS_PSUTIL: return (False, 'cannot load ps beacon: psutil not available') return __virtualname__ def validate(config): ''' Validate the beacon configuration ''' # Configuration for ps beacon should be a list of dicts if not isinstance(config, list): return False, ('Configuration for ps beacon must be a list.') else: _config = {} list(map(_config.update, config)) if 'processes' not in _config: return False, ('Configuration for ps beacon requires processes.') else: if not isinstance(_config['processes'], dict): return False, ('Processes for ps beacon must be a dictionary.') return True, 'Valid beacon configuration' def beacon(config): ''' Scan for processes and fire events Example Config .. code-block:: yaml beacons: ps: - processes: salt-master: running mysql: stopped The config above sets up beacons to check that processes are running or stopped. ''' ret = [] procs = [] for proc in psutil.process_iter(): _name = proc.name() if _name not in procs: procs.append(_name) _config = {} list(map(_config.update, config)) for process in _config.get('processes', {}): ret_dict = {} if _config['processes'][process] == 'running': if process in procs: ret_dict[process] = 'Running' ret.append(ret_dict) elif _config['processes'][process] == 'stopped': if process not in procs: ret_dict[process] = 'Stopped' ret.append(ret_dict) else: if process not in procs: ret_dict[process] = False ret.append(ret_dict) return ret