Move telemetry opaques out of OpaqueVal.h

This commit is contained in:
Tim Wojtulewicz 2024-03-22 12:52:10 -07:00
parent 2267de21e6
commit ec3e68928f
6 changed files with 117 additions and 100 deletions

View file

@ -1092,46 +1092,4 @@ ValPtr ParaglobVal::DoClone(CloneState* state) {
} }
} }
std::optional<BrokerData> TelemetryVal::DoSerializeData() const { return std::nullopt; }
bool TelemetryVal::DoUnserializeData(BrokerDataView) { return false; }
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntCounter>) : OpaqueVal(int_counter_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntCounterFamily>) : OpaqueVal(int_counter_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblCounter>) : OpaqueVal(dbl_counter_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblCounterFamily>) : OpaqueVal(dbl_counter_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntGauge>) : OpaqueVal(int_gauge_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntGaugeFamily>) : OpaqueVal(int_gauge_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblGauge>) : OpaqueVal(dbl_gauge_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblGaugeFamily>) : OpaqueVal(dbl_gauge_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntHistogram>) : OpaqueVal(int_histogram_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntHistogramFamily>)
: OpaqueVal(int_histogram_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblHistogram>) : OpaqueVal(dbl_histogram_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblHistogramFamily>)
: OpaqueVal(dbl_histogram_metric_family_type) {}
IMPLEMENT_OPAQUE_VALUE(IntCounterMetricVal)
IMPLEMENT_OPAQUE_VALUE(IntCounterMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(DblCounterMetricVal)
IMPLEMENT_OPAQUE_VALUE(DblCounterMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(IntGaugeMetricVal)
IMPLEMENT_OPAQUE_VALUE(IntGaugeMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(DblGaugeMetricVal)
IMPLEMENT_OPAQUE_VALUE(DblGaugeMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(IntHistogramMetricVal)
IMPLEMENT_OPAQUE_VALUE(IntHistogramMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(DblHistogramMetricVal)
IMPLEMENT_OPAQUE_VALUE(DblHistogramMetricFamilyVal)
} // namespace zeek } // namespace zeek

View file

@ -443,62 +443,4 @@ private:
std::unique_ptr<paraglob::Paraglob> internal_paraglob; std::unique_ptr<paraglob::Paraglob> internal_paraglob;
}; };
/**
* Base class for metric handles. Handle types are not serializable.
*/
class TelemetryVal : public OpaqueVal {
protected:
explicit TelemetryVal(std::shared_ptr<telemetry::IntCounter>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntCounterFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblCounter>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblCounterFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntGauge>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntGaugeFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblGauge>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblGaugeFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntHistogram>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntHistogramFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblHistogram>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblHistogramFamily>);
std::optional<BrokerData> DoSerializeData() const override;
bool DoUnserializeData(BrokerDataView data) override;
};
template<class Handle>
class TelemetryValImpl : public TelemetryVal {
public:
using HandleType = std::shared_ptr<Handle>;
explicit TelemetryValImpl(HandleType hdl) : TelemetryVal(hdl), hdl(hdl) {}
HandleType GetHandle() const noexcept { return hdl; }
static zeek::OpaqueValPtr OpaqueInstantiate() {
reporter->Error("TelemetryValImpl::OpaqueInstantiate is unsupported");
return nullptr;
}
protected:
ValPtr DoClone(CloneState*) override { return make_intrusive<TelemetryValImpl>(hdl); }
const char* OpaqueName() const override { return Handle::OpaqueName; }
private:
HandleType hdl;
};
using IntCounterMetricVal = TelemetryValImpl<telemetry::IntCounter>;
using IntCounterMetricFamilyVal = TelemetryValImpl<telemetry::IntCounterFamily>;
using DblCounterMetricVal = TelemetryValImpl<telemetry::DblCounter>;
using DblCounterMetricFamilyVal = TelemetryValImpl<telemetry::DblCounterFamily>;
using IntGaugeMetricVal = TelemetryValImpl<telemetry::IntGauge>;
using IntGaugeMetricFamilyVal = TelemetryValImpl<telemetry::IntGaugeFamily>;
using DblGaugeMetricVal = TelemetryValImpl<telemetry::DblGauge>;
using DblGaugeMetricFamilyVal = TelemetryValImpl<telemetry::DblGaugeFamily>;
using IntHistogramMetricVal = TelemetryValImpl<telemetry::IntHistogram>;
using IntHistogramMetricFamilyVal = TelemetryValImpl<telemetry::IntHistogramFamily>;
using DblHistogramMetricVal = TelemetryValImpl<telemetry::DblHistogram>;
using DblHistogramMetricFamilyVal = TelemetryValImpl<telemetry::DblHistogramFamily>;
} // namespace zeek } // namespace zeek

View file

@ -3,6 +3,7 @@ zeek_add_subdir_library(
SOURCES SOURCES
Manager.cc Manager.cc
MetricFamily.cc MetricFamily.cc
Opaques.cc
ProcessStats.cc ProcessStats.cc
BIFS BIFS
telemetry.bif) telemetry.bif)

44
src/telemetry/Opaques.cc Normal file
View file

@ -0,0 +1,44 @@
#include "Opaques.h"
using namespace zeek;
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntCounter>) : OpaqueVal(int_counter_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntCounterFamily>) : OpaqueVal(int_counter_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblCounter>) : OpaqueVal(dbl_counter_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblCounterFamily>) : OpaqueVal(dbl_counter_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntGauge>) : OpaqueVal(int_gauge_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntGaugeFamily>) : OpaqueVal(int_gauge_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblGauge>) : OpaqueVal(dbl_gauge_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblGaugeFamily>) : OpaqueVal(dbl_gauge_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntHistogram>) : OpaqueVal(int_histogram_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::IntHistogramFamily>)
: OpaqueVal(int_histogram_metric_family_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblHistogram>) : OpaqueVal(dbl_histogram_metric_type) {}
TelemetryVal::TelemetryVal(std::shared_ptr<telemetry::DblHistogramFamily>)
: OpaqueVal(dbl_histogram_metric_family_type) {}
// TelemetryVal::TelemetryVal(prometheus::Counter&) : OpaqueVal(
IMPLEMENT_OPAQUE_VALUE(IntCounterMetricVal)
IMPLEMENT_OPAQUE_VALUE(IntCounterMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(DblCounterMetricVal)
IMPLEMENT_OPAQUE_VALUE(DblCounterMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(IntGaugeMetricVal)
IMPLEMENT_OPAQUE_VALUE(IntGaugeMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(DblGaugeMetricVal)
IMPLEMENT_OPAQUE_VALUE(DblGaugeMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(IntHistogramMetricVal)
IMPLEMENT_OPAQUE_VALUE(IntHistogramMetricFamilyVal)
IMPLEMENT_OPAQUE_VALUE(DblHistogramMetricVal)
IMPLEMENT_OPAQUE_VALUE(DblHistogramMetricFamilyVal)

71
src/telemetry/Opaques.h Normal file
View file

@ -0,0 +1,71 @@
// See the file "COPYING" in the main distribution directory for copyright.
#pragma once
#include "zeek/OpaqueVal.h"
#include "zeek/broker/Data.h"
#include "prometheus/counter.h"
#include "prometheus/family.h"
namespace zeek {
/**
* Base class for metric handles. Handle types are not serializable.
*/
class TelemetryVal : public OpaqueVal {
protected:
explicit TelemetryVal(std::shared_ptr<telemetry::IntCounter>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntCounterFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblCounter>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblCounterFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntGauge>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntGaugeFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblGauge>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblGaugeFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntHistogram>);
explicit TelemetryVal(std::shared_ptr<telemetry::IntHistogramFamily>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblHistogram>);
explicit TelemetryVal(std::shared_ptr<telemetry::DblHistogramFamily>);
std::optional<BrokerData> DoSerializeData() const override { return std::nullopt; }
bool DoUnserializeData(BrokerDataView data) override { return false; }
};
template<class Handle>
class TelemetryValImpl : public TelemetryVal {
public:
using HandleType = std::shared_ptr<Handle>;
explicit TelemetryValImpl(HandleType hdl) : TelemetryVal(hdl), hdl(hdl) {}
HandleType GetHandle() const noexcept { return hdl; }
static zeek::OpaqueValPtr OpaqueInstantiate() {
reporter->Error("TelemetryValImpl::OpaqueInstantiate is unsupported");
return nullptr;
}
protected:
ValPtr DoClone(CloneState*) override { return make_intrusive<TelemetryValImpl>(hdl); }
const char* OpaqueName() const override { return Handle::OpaqueName; }
private:
HandleType hdl;
};
using IntCounterMetricVal = TelemetryValImpl<telemetry::IntCounter>;
using IntCounterMetricFamilyVal = TelemetryValImpl<telemetry::IntCounterFamily>;
using DblCounterMetricVal = TelemetryValImpl<telemetry::DblCounter>;
using DblCounterMetricFamilyVal = TelemetryValImpl<telemetry::DblCounterFamily>;
using IntGaugeMetricVal = TelemetryValImpl<telemetry::IntGauge>;
using IntGaugeMetricFamilyVal = TelemetryValImpl<telemetry::IntGaugeFamily>;
using DblGaugeMetricVal = TelemetryValImpl<telemetry::DblGauge>;
using DblGaugeMetricFamilyVal = TelemetryValImpl<telemetry::DblGaugeFamily>;
using IntHistogramMetricVal = TelemetryValImpl<telemetry::IntHistogram>;
using IntHistogramMetricFamilyVal = TelemetryValImpl<telemetry::IntHistogramFamily>;
using DblHistogramMetricVal = TelemetryValImpl<telemetry::DblHistogram>;
using DblHistogramMetricFamilyVal = TelemetryValImpl<telemetry::DblHistogramFamily>;
} // namespace zeek

View file

@ -17,6 +17,7 @@ enum MetricType %{
#include "zeek/telemetry/Gauge.h" #include "zeek/telemetry/Gauge.h"
#include "zeek/telemetry/Histogram.h" #include "zeek/telemetry/Histogram.h"
#include "zeek/telemetry/Manager.h" #include "zeek/telemetry/Manager.h"
#include "zeek/telemetry/Opaques.h"
namespace { namespace {