X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=shared%2Fmetrics.cpp;h=91b03e83483e1335d85d747dca730d607ff10438;hb=ed6cb5e4ae64a2f0fc1a08c3ea898a154fc1672d;hp=b2d0bbce5ca0671a3d810bf19c74cd7dda29f1ce;hpb=ed041ec8c0fa1dd31fd3c3ac053da13519c524c3;p=nageru diff --git a/shared/metrics.cpp b/shared/metrics.cpp index b2d0bbc..91b03e8 100644 --- a/shared/metrics.cpp +++ b/shared/metrics.cpp @@ -99,7 +99,24 @@ void Metrics::remove(const string &name, const vector> &lab // If this is the last metric with this name, remove the type as well. if (!((it != metrics.begin() && prev(it)->first.name == name) || - (it != metrics.end() && next(it)->first.name == name))) { + (it != metrics.end() && next(it) != metrics.end() && next(it)->first.name == name))) { + types.erase(name); + } + + metrics.erase(it); +} + +void Metrics::remove_if_exists(const string &name, const vector> &labels) +{ + lock_guard lock(mu); + auto it = metrics.find(MetricKey(name, labels)); + if (it == metrics.end()) { + return; + } + + // If this is the last metric with this name, remove the type as well. + if (!((it != metrics.begin() && prev(it)->first.name == name) || + (it != metrics.end() && next(it) != metrics.end() && next(it)->first.name == name))) { types.erase(name); }