Beispiel #1
0
def get_readable_metro_value(pds):
    """
    Récupère et retourne une valeur "lisible" de métrologie, c'est à dire avec
    trois chiffres significatifs et l'ordre de grandeur.

    @param pds: l'indicateur de métrologie
    @type  pds: C{vigilo.models.tables.perfdatasource.PerfDataSource}
    @return: un couple valeur entière, valeur en pourcentage
    @rtype:  C{tuple}
    """
    # doit être chargé après
    from vigilo.turbogears.controllers.proxy import get_through_proxy

    host = pds.host.name
    usage_url = "lastvalue?host=%s&ds=%s" % (
        urllib2.quote(host, ''),
        urllib2.quote(pds.name, ''),
    )
    try:
        usage_req = get_through_proxy("vigirrd", host, usage_url)
    except urllib2.HTTPError:
        logging.warning(_("Failed to get URL: %s"),
                        url("/vigirrd/%s/%s" % (host, usage_url),
                        qualified=True))
        raise
    usage = simplejson.load(usage_req)['lastvalue']
    try:
        usage = float(usage)
        if pds.max is not None:
            percent = int(usage / float(pds.max) * 100)
        else:
            percent = None
        usage = convert_with_unit(usage)
    except (ValueError, TypeError):
        LOGGER.warning(_("Failed to convert DS %(ds)s on %(host)s: "
                         "value was %(value)s (max: %(max)s)"), {
                            'ds': pds.name,
                            'host': host,
                            'value': usage,
                            'max': pds.max,
                         })
        usage = percent = None
    return (usage, percent)