создание марлевой метрики из списка питонов - PullRequest
0 голосов
/ 02 февраля 2019

Работа над списком питонов.Ниже приведен пример

result=[{'time': '00:00'}, {'app': 'dgn'}, {'avg': '7717'}, {'time': '00:00'}, {'app': 'pds'}, {'avg': '75.40223463687151'}] 

. Я создаю метрику на основе приведенных выше данныхПопробовал следующее, чтобы получить показатель из данных выше:

class EventMetricCollector(object):
def avg_response_time_metric(self):


    metric = GaugeMetricFamily(
        'avg_response_time_ms',
        'average response time',
        labels=["time","app","avg"])

    for time, app, avg in result:
        metric.add_metric([time],[app],[avg])

    return metric

def collect(self):
    yield self_avg_response_time_metric()

Однако я получаю эту ошибку при выполнении

for time, app, avg in result:

ValueError: not enough values to unpack (expected 3, got 1) 

Мой ожидаемый вывод:

avg_response_time_metric{time="0",app=:"dgn",avg="7717"}

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Объединение предложения Алекса с вашим фрагментом кода:

class EventMetricCollector(object):
   def avg_response_time_metric(self):

       metric = GaugeMetricFamily(
           'avg_response_time_ms',
           'average response time',
           labels=["time","app","avg"])

       for time, app, avg in zip(result[::3], result[1::3], result[2::3]):
           metric.add_metric([time],[app],[avg])

       return metric

    def collect(self):
      yield self_avg_response_time_metric()
0 голосов
/ 02 февраля 2019

Python ожидает, что из списка будут распакованы три значения, но распаковано только одно.

Вам необходимо zip() просмотреть список.Попробуйте заменить на этот for цикл:

for time, app, avg in zip(result[::3], result[1::3], result[2::3]):

Это zip s через три смежных элемента списка одновременно.

...