예제 #1
0
def _add_subject_details(event, metric, varmap):
    obj = lookup(metric)
    if obj:
        try:
            varmap['subject'] = "{table}:{pk}".format(
                table=getattr(obj, '_meta').db_table,
                pk=obj.pk)
        except AttributeError:
            pass  # probably wasn't a Django model object, fuhgeddaboutit

        if isinstance(obj, Netbox):
            event.netbox = obj
        else:
            try:
                event.netbox = obj.netbox
            except AttributeError:
                pass

        try:
            event.device = obj.device
        except AttributeError:
            try:
                event.device = obj.netbox.device
            except AttributeError:
                pass

        if isinstance(obj, Interface):
            varmap['interface'] = obj.ifname
        elif isinstance(obj, Sensor):
            varmap['sensor'] = obj.name
예제 #2
0
파일: graphs.py 프로젝트: Uninett/nav
def get_sensor_meta(metric_path):
    """
    Returns meta information for drawing a Sensor metric graph annotated with
    the correct yUnits, among other things.
    """

    from nav.models.manage import Sensor
    from nav.metrics.lookup import lookup

    sensor = lookup(metric_path)
    if not sensor:
        return dict()
    assert isinstance(sensor, Sensor)

    alias = (
        sensor.human_readable.replace("\n", " ")
        if sensor.human_readable
        else sensor.name
    )
    meta = dict(alias=alias)
    scale = (
        sensor.get_data_scale_display()
        if sensor.data_scale != sensor.SCALE_UNITS
        else None
    ) or ''
    uom = (
        sensor.unit_of_measurement
        if sensor.unit_of_measurement != sensor.UNIT_OTHER
        else None
    ) or ''
    meta['unit'] = scale + uom
    return meta
예제 #3
0
def _add_subject_details(event, metric, varmap):
    obj = lookup(metric)
    if obj:
        varmap['subject'] = "{table}:{pk}".format(
            table=getattr(obj, '_meta').db_table,
            pk=obj.pk)

        if isinstance(obj, Netbox):
            event.netbox = obj
        else:
            try:
                event.netbox = obj.netbox
            except AttributeError:
                pass

        try:
            event.device = obj.device
        except AttributeError:
            try:
                event.device = obj.netbox.device
            except AttributeError:
                pass

        if isinstance(obj, Interface):
            varmap['interface'] = obj.ifname
        elif isinstance(obj, Sensor):
            varmap['sensor'] = obj.name
예제 #4
0
파일: event.py 프로젝트: bj0rns0der/nav
    def __init__(self, event):
        self.event = event
        ruleid, self.metric = event.subid.split(':', 1)
        klass = models.get_model('models', 'ThresholdRule')
        try:
            self.rule = klass.objects.get(pk=ruleid)
        except klass.DoesNotExist:
            self.rule = None

        from nav.metrics.lookup import lookup
        self.subject = lookup(self.metric)
예제 #5
0
def get_metric_maximum(metric):
    """
    Returns the maximum value of a metric, if one can be determined.
    Otherwise returns None.
    """
    obj = lookup(metric)
    if isinstance(obj, Interface):
        counter = metric.split('.')[-1]
        if 'octets' in counter.lower():
            # Making an unsafe assumption that interface traffic
            # numbers are always retrieved in bits/s
            maximum = obj.speed * MEGA
            if maximum:
                return maximum
예제 #6
0
    def __init__(self, event):
        self.event = event
        try:
            ruleid, self.metric = event.subid.split(':', 1)
        except ValueError:
            ruleid = event.subid
            self.metric = None

        klass = models.get_model('models', 'ThresholdRule')
        try:
            self.rule = klass.objects.get(pk=ruleid)
        except (klass.DoesNotExist, ValueError):
            self.rule = None

        if self.metric:
            from nav.metrics.lookup import lookup
            self.subject = lookup(self.metric)
        else:
            self.subject = None
예제 #7
0
def get_sensor_meta(metric_path):
    """
    Returns meta information for drawing a Sensor metric graph annotated with
    the correct yUnits, among other things.
    """

    from nav.models.manage import Sensor
    from nav.metrics.lookup import lookup

    sensor = lookup(metric_path)
    if not sensor:
        return dict()
    assert isinstance(sensor, Sensor)

    meta = dict(alias=sensor.human_readable.replace("\n", " ") or sensor.name)
    scale = (sensor.get_data_scale_display()
             if sensor.data_scale != sensor.SCALE_UNITS else None) or ''
    uom = (sensor.unit_of_measurement
           if sensor.unit_of_measurement != sensor.UNIT_OTHER else None) or ''
    meta['unit'] = scale + uom
    return meta
예제 #8
0
 def get_metric_lookups(self):
     """Return a mapping of metric -> object"""
     return {x: lookup(x) for x in self.get_graph_metrics()}