예제 #1
0
    def test_good_source_good_metrics(self):
        desc = descriptions.get_metric_description(
            'header', 'baremetal_last_payload_timestamp_seconds')

        expected = 'Timestamp of the last received payload'

        self.assertEqual(expected, desc)
예제 #2
0
def category_registry(node_message, metrics_registry):
    """Parse Redfish metrics and submit them to Prometheus

    :param node_message: Oslo notification message
    :param metrics_registry: Prometheus registry
    """
    metrics = build_temperature_metrics(node_message)
    metrics.update(build_power_metrics(node_message))
    metrics.update(build_fan_metrics(node_message))
    metrics.update(build_drive_metrics(node_message))

    for metric, details in metrics.items():

        LOG.debug('Creating metric %s', metric)
        LOG.debug('Details of the metric: %s', details)
        # details is a list of tuples that contains 2 elements (value, labels)
        # let's get the first tuple and the dict of labels to extract the
        # list of labels necessary for the Gauge
        metric_labels = details[0][1]
        desc = descriptions.get_metric_description('redfish', metric)
        gauge = Gauge(metric,
                      desc,
                      labelnames=list(metric_labels),
                      registry=metrics_registry)

        for value, labels in details:
            valid_labels = ipe_utils.update_instance_uuid(labels)
            gauge.labels(**valid_labels).set(value)
예제 #3
0
def prometheus_format(category_info, ipmi_metric_registry, available_metrics):
    for metric in available_metrics:
        entries = available_metrics[metric]
        labels = extract_labels(entries, category_info)
        values = extract_values(entries, category_info)
        if all(v is None for v in values.values()):
            continue
        desc = descriptions.get_metric_description('ipmi', metric)
        g = Gauge(metric,
                  desc,
                  labelnames=list(labels.get(entries[0])),
                  registry=ipmi_metric_registry)
        for e in entries:
            if values[e] is None:
                continue
            valid_labels = ipe_utils.update_instance_uuid(labels[e])
            g.labels(**valid_labels).set(values[e])
예제 #4
0
def timestamp_registry(node_information, metric_registry):
    metric = 'baremetal_last_payload_timestamp_seconds'
    labels = {'node_uuid': node_information['node_uuid'],
              'instance_uuid': node_information['instance_uuid']}
    if node_information['node_name']:
        labels['node_name'] = node_information['node_name']
    dt_1970 = datetime(1970, 1, 1, 0, 0, 0)
    dt_timestamp = datetime.strptime(node_information['timestamp'],
                                     '%Y-%m-%dT%H:%M:%S.%f')
    value = int((dt_timestamp - dt_1970).total_seconds())

    desc = descriptions.get_metric_description('header', metric)

    g = Gauge(
        metric, desc, labelnames=labels,
        registry=metric_registry)

    valid_labels = ipe_utils.update_instance_uuid(labels)
    g.labels(**valid_labels).set(value)
예제 #5
0
    def test_bad_source_bad_metrics(self):
        desc = descriptions.get_metric_description('bad_source', 'bad_metrics')

        expected = ''

        self.assertEqual(expected, desc)