Modifications to accommodate for python 2.6

Change-Id: If959b8a9c7073cbbc97a9712945754116f026c5c
This commit is contained in:
Michael James Hoppal 2015-02-06 10:05:43 -07:00
parent 5e20bac393
commit a8929debda
7 changed files with 35 additions and 13 deletions

View File

@ -413,8 +413,8 @@ class IO(check.Check):
measurements = [] measurements = []
timestamp = time.time() timestamp = time.time()
for dev_name, stats in filtered_io.iteritems(): for dev_name, stats in filtered_io.iteritems():
filtered_stats = {stat: stats[stat] filtered_stats = dict((stat, stats[stat])
for stat in stats.iterkeys() if stat not in self.stat_blacklist} for stat in stats.iterkeys() if stat not in self.stat_blacklist)
m_list = [metrics.Measurement(key, m_list = [metrics.Measurement(key,
timestamp, timestamp,
value, value,

View File

@ -66,7 +66,7 @@ class Config(object):
'''Read in the config file.''' '''Read in the config file.'''
file_config = parser.SafeConfigParser() file_config = parser.SafeConfigParser()
log.debug("Loading config file from {}".format(self._configFile)) log.debug("Loading config file from {0}".format(self._configFile))
file_config.readfp(self._skip_leading_wsp(open(self._configFile))) file_config.readfp(self._skip_leading_wsp(open(self._configFile)))
self._config = self._retrieve_sections(file_config) self._config = self._retrieve_sections(file_config)
@ -157,7 +157,7 @@ class Config(object):
dimensions = {} dimensions = {}
try: try:
dim_list = [dim.split(':') for dim in self._config['Main']['dimensions'].split(',')] dim_list = [dim.split(':') for dim in self._config['Main']['dimensions'].split(',')]
dimensions.update({key.strip(): value.strip() for key, value in dim_list}) dimensions.update(dict((key.strip(), value.strip()) for key, value in dim_list))
except ValueError: except ValueError:
log.info("Unable to process dimensions.") log.info("Unable to process dimensions.")
dimensions = {} dimensions = {}

View File

@ -468,8 +468,8 @@ def cast_metric_val(val):
def is_valid_hostname(hostname): def is_valid_hostname(hostname):
if hostname.lower() in {'localhost', 'localhost.localdomain', if hostname.lower() in ('localhost', 'localhost.localdomain',
'localhost6.localdomain6', 'ip6-localhost'}: 'localhost6.localdomain6', 'ip6-localhost'):
log.warning("Hostname: %s is local" % hostname) log.warning("Hostname: %s is local" % hostname)
return False return False
if len(hostname) > MAX_HOSTNAME_LEN: if len(hostname) > MAX_HOSTNAME_LEN:

View File

@ -1,9 +1,10 @@
import logging import logging
import re import re
from subprocess import CalledProcessError, check_output from subprocess import CalledProcessError
from monasca_setup.detection import Plugin, find_process_cmdline, watch_process from monasca_setup.detection import Plugin, find_process_cmdline, watch_process
from monasca_setup.detection.utils import find_addr_listening_on_port from monasca_setup.detection.utils import find_addr_listening_on_port
from monasca_setup.detection.utils import check_output
from monasca_setup import agent_config from monasca_setup import agent_config
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -45,8 +46,8 @@ class Kafka(Plugin):
consumers = {} consumers = {}
# Find consumers and topics # Find consumers and topics
for consumer in self._ls_zookeeper('/consumers'): for consumer in self._ls_zookeeper('/consumers'):
consumers[consumer] = {topic: kafka.topic_partitions[topic] consumers[consumer] = dict((topic, kafka.topic_partitions[topic])
for topic in self._ls_zookeeper('/consumers/%s/offsets' % consumer)} for topic in self._ls_zookeeper('/consumers/%s/offsets' % consumer))
log.info("\tInstalling kafka_consumer plugin.") log.info("\tInstalling kafka_consumer plugin.")
self.config['kafka_consumer'] = {'init_config': None, self.config['kafka_consumer'] = {'init_config': None,

View File

@ -1,9 +1,28 @@
""" Util functions to assist in detection. """ Util functions to assist in detection.
""" """
import psutil import psutil
import subprocess
from monasca_setup import agent_config from monasca_setup import agent_config
from subprocess import Popen, PIPE, CalledProcessError
# check_output was introduced in python 2.7, function added
# to accommodate python 2.6
try:
check_output = subprocess.check_output
except AttributeError:
def check_output(*popenargs, **kwargs):
if 'stdout' in kwargs:
raise ValueError('stdout argument not allowed, it will be overridden.')
process = Popen(stdout=PIPE, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
raise CalledProcessError(retcode, cmd)
return output
def find_process_cmdline(search_string): def find_process_cmdline(search_string):
"""Simple function to search running process for one with cmdline containing. """Simple function to search running process for one with cmdline containing.

View File

@ -30,6 +30,8 @@ import detection.plugins.swift as swift
import detection.plugins.zookeeper as zookeeper import detection.plugins.zookeeper as zookeeper
import service.sysv as sysv import service.sysv as sysv
from detection.utils import check_output
# List of all detection plugins to run # List of all detection plugins to run
DETECTION_PLUGINS = [apache.Apache, ceilometer.Ceilometer, cinder.Cinder, DETECTION_PLUGINS = [apache.Apache, ceilometer.Ceilometer, cinder.Cinder,
glance.Glance, kafka_consumer.Kafka, keystone.Keystone, glance.Glance, kafka_consumer.Kafka, keystone.Keystone,
@ -93,12 +95,12 @@ def main(argv=None):
for package in ['coreutils', 'sysstat']: for package in ['coreutils', 'sysstat']:
#Check for required dependencies for system checks #Check for required dependencies for system checks
try: try:
output = subprocess.check_output('dpkg -s {}'.format(package), output = check_output('dpkg -s {0}'.format(package),
stderr=subprocess.STDOUT, stderr=subprocess.STDOUT,
shell=True) shell=True)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
log.warn("*** {} package is not installed! ***".format(package) + log.warn("*** {0} package is not installed! ***".format(package) +
"\nNOTE: If you do not install the {} ".format(package) + "\nNOTE: If you do not install the {0} ".format(package) +
"package, you will not receive all of the standard " + "package, you will not receive all of the standard " +
"operating system type metrics!") "operating system type metrics!")
else: else:

View File

@ -1,5 +1,5 @@
[tox] [tox]
envlist = py27,pep8 envlist = py26,py27,pep8
minversion = 1.6 minversion = 1.6
skipsdist = True skipsdist = True