poco/Prometheus/src/Registry.cpp
2024-01-30 09:56:27 +01:00

100 lines
1.6 KiB
C++

//
// Registry.cpp
//
// Library: Prometheus
// Package: Core
// Module: Registry
//
// Copyright (c) 2022, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "Poco/Prometheus/Registry.h"
#include "Poco/Prometheus/Collector.h"
#include "Poco/Exception.h"
using namespace std::string_literals;
namespace Poco {
namespace Prometheus {
void Registry::registerCollector(Collector* pCollector)
{
poco_check_ptr (pCollector);
Poco::FastMutex::ScopedLock lock(_mutex);
const auto it = _collectors.find(pCollector->name());
if (it == _collectors.end())
{
_collectors[pCollector->name()] = pCollector;
}
else
{
throw Poco::ExistsException("collector"s, pCollector->name());
}
}
void Registry::unregisterCollector(Collector* pCollector)
{
poco_check_ptr (pCollector);
unregisterCollector(pCollector->name());
}
void Registry::unregisterCollector(const std::string& collectorName)
{
Poco::FastMutex::ScopedLock lock(_mutex);
_collectors.erase(collectorName);
}
Collector* Registry::findCollector(const std::string& collectorName) const
{
Poco::FastMutex::ScopedLock lock(_mutex);
const auto it = _collectors.find(collectorName);
if (it != _collectors.end())
return it->second;
else
return nullptr;
}
void Registry::clear()
{
Poco::FastMutex::ScopedLock lock(_mutex);
_collectors.clear();
}
void Registry::exportTo(Exporter& exporter) const
{
Poco::FastMutex::ScopedLock lock(_mutex);
for (const auto& p: _collectors)
{
p.second->exportTo(exporter);
}
}
Registry& Registry::defaultRegistry()
{
static Registry r;
return r;
}
} } // namespace Poco::Prometheus