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