Software /
code /
prosody
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 |
parent | 11593:0db763f3f3be |
child | 11929: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 |