Mercurial > prosody-hg
comparison util/openmetrics.lua @ 11600:a02c277eb97a
util.openmetrics: Use pack from util.table, detect appropriate unpack for Lua 5.1 (thanks sups)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 14 Jun 2021 11:19:42 +0100 |
| parents | 0db763f3f3be |
| children | 85d51bfcf56b |
comparison
equal
deleted
inserted
replaced
| 11599:ed405b6357a8 | 11600:a02c277eb97a |
|---|---|
| 23 local select = select; | 23 local select = select; |
| 24 local array = require "util.array"; | 24 local array = require "util.array"; |
| 25 local log = require "util.logger".init("util.openmetrics"); | 25 local log = require "util.logger".init("util.openmetrics"); |
| 26 local new_multitable = require "util.multitable".new; | 26 local new_multitable = require "util.multitable".new; |
| 27 local iter_multitable = require "util.multitable".iter; | 27 local iter_multitable = require "util.multitable".iter; |
| 28 local t_pack, t_unpack = require "util.table".pack, table.unpack or unpack; --luacheck: ignore 113/unpack | |
| 28 | 29 |
| 29 -- BEGIN of Utility: "metric proxy" | 30 -- BEGIN of Utility: "metric proxy" |
| 30 -- This allows to wrap a MetricFamily in a proxy which only provides the | 31 -- This allows to wrap a MetricFamily in a proxy which only provides the |
| 31 -- `with_labels` and `with_partial_label` methods. This allows to pre-set one | 32 -- `with_labels` and `with_partial_label` methods. This allows to pre-set one |
| 32 -- or more labels on a metric family. This is used in particular via | 33 -- or more labels on a metric family. This is used in particular via |
| 127 if count == 0 then | 128 if count == 0 then |
| 128 return self.data | 129 return self.data |
| 129 end | 130 end |
| 130 local metric = self.data:get(...) | 131 local metric = self.data:get(...) |
| 131 if not metric then | 132 if not metric then |
| 132 local values = table.pack(...) | 133 local values = t_pack(...) |
| 133 metric = self:new_metric(values) | 134 metric = self:new_metric(values) |
| 134 values[values.n+1] = metric | 135 values[values.n+1] = metric |
| 135 self.data:set(table.unpack(values, 1, values.n+1)) | 136 self.data:set(t_unpack(values, 1, values.n+1)) |
| 136 end | 137 end |
| 137 return metric | 138 return metric |
| 138 end | 139 end |
| 139 | 140 |
| 140 function metric_family_mt:with_partial_label(label) | 141 function metric_family_mt:with_partial_label(label) |
| 157 local searchkeys = {}; | 158 local searchkeys = {}; |
| 158 local nlabels = #self.label_keys | 159 local nlabels = #self.label_keys |
| 159 for i=1,nlabels do | 160 for i=1,nlabels do |
| 160 searchkeys[i] = nil; | 161 searchkeys[i] = nil; |
| 161 end | 162 end |
| 162 local it, state = iter_multitable(self.data, table.unpack(searchkeys, 1, nlabels)) | 163 local it, state = iter_multitable(self.data, t_unpack(searchkeys, 1, nlabels)) |
| 163 return function(_s) | 164 return function(_s) |
| 164 local label_values = table.pack(it(_s)) | 165 local label_values = t_pack(it(_s)) |
| 165 if label_values.n == 0 then | 166 if label_values.n == 0 then |
| 166 return nil, nil | 167 return nil, nil |
| 167 end | 168 end |
| 168 local metric = label_values[label_values.n] | 169 local metric = label_values[label_values.n] |
| 169 label_values[label_values.n] = nil | 170 label_values[label_values.n] = nil |
