diff --git a/src/OpaqueVal.cc b/src/OpaqueVal.cc index bce619fd5d..4c36084091 100644 --- a/src/OpaqueVal.cc +++ b/src/OpaqueVal.cc @@ -1092,46 +1092,4 @@ ValPtr ParaglobVal::DoClone(CloneState* state) { } } -std::optional TelemetryVal::DoSerializeData() const { return std::nullopt; } - -bool TelemetryVal::DoUnserializeData(BrokerDataView) { return false; } - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_counter_metric_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_counter_metric_family_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_counter_metric_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_counter_metric_family_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_gauge_metric_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_gauge_metric_family_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_gauge_metric_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_gauge_metric_family_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_histogram_metric_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) - : OpaqueVal(int_histogram_metric_family_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_histogram_metric_type) {} - -TelemetryVal::TelemetryVal(std::shared_ptr) - : 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 diff --git a/src/OpaqueVal.h b/src/OpaqueVal.h index 7e94cbcc2c..371e5fad57 100644 --- a/src/OpaqueVal.h +++ b/src/OpaqueVal.h @@ -443,62 +443,4 @@ private: std::unique_ptr internal_paraglob; }; -/** - * Base class for metric handles. Handle types are not serializable. - */ -class TelemetryVal : public OpaqueVal { -protected: - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - explicit TelemetryVal(std::shared_ptr); - - std::optional DoSerializeData() const override; - bool DoUnserializeData(BrokerDataView data) override; -}; - -template -class TelemetryValImpl : public TelemetryVal { -public: - using HandleType = std::shared_ptr; - - 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(hdl); } - - const char* OpaqueName() const override { return Handle::OpaqueName; } - -private: - HandleType hdl; -}; - -using IntCounterMetricVal = TelemetryValImpl; -using IntCounterMetricFamilyVal = TelemetryValImpl; -using DblCounterMetricVal = TelemetryValImpl; -using DblCounterMetricFamilyVal = TelemetryValImpl; -using IntGaugeMetricVal = TelemetryValImpl; -using IntGaugeMetricFamilyVal = TelemetryValImpl; -using DblGaugeMetricVal = TelemetryValImpl; -using DblGaugeMetricFamilyVal = TelemetryValImpl; -using IntHistogramMetricVal = TelemetryValImpl; -using IntHistogramMetricFamilyVal = TelemetryValImpl; -using DblHistogramMetricVal = TelemetryValImpl; -using DblHistogramMetricFamilyVal = TelemetryValImpl; - } // namespace zeek diff --git a/src/telemetry/CMakeLists.txt b/src/telemetry/CMakeLists.txt index 76f3da9e38..cb6e1b73f9 100644 --- a/src/telemetry/CMakeLists.txt +++ b/src/telemetry/CMakeLists.txt @@ -3,6 +3,7 @@ zeek_add_subdir_library( SOURCES Manager.cc MetricFamily.cc + Opaques.cc ProcessStats.cc BIFS telemetry.bif) diff --git a/src/telemetry/Opaques.cc b/src/telemetry/Opaques.cc new file mode 100644 index 0000000000..d5a7af9e55 --- /dev/null +++ b/src/telemetry/Opaques.cc @@ -0,0 +1,44 @@ +#include "Opaques.h" + +using namespace zeek; + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_counter_metric_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_counter_metric_family_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_counter_metric_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_counter_metric_family_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_gauge_metric_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_gauge_metric_family_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_gauge_metric_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_gauge_metric_family_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(int_histogram_metric_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) + : OpaqueVal(int_histogram_metric_family_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) : OpaqueVal(dbl_histogram_metric_type) {} + +TelemetryVal::TelemetryVal(std::shared_ptr) + : 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) diff --git a/src/telemetry/Opaques.h b/src/telemetry/Opaques.h new file mode 100644 index 0000000000..5540012838 --- /dev/null +++ b/src/telemetry/Opaques.h @@ -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); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + explicit TelemetryVal(std::shared_ptr); + + std::optional DoSerializeData() const override { return std::nullopt; } + bool DoUnserializeData(BrokerDataView data) override { return false; } +}; + +template +class TelemetryValImpl : public TelemetryVal { +public: + using HandleType = std::shared_ptr; + + 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(hdl); } + + const char* OpaqueName() const override { return Handle::OpaqueName; } + +private: + HandleType hdl; +}; + +using IntCounterMetricVal = TelemetryValImpl; +using IntCounterMetricFamilyVal = TelemetryValImpl; +using DblCounterMetricVal = TelemetryValImpl; +using DblCounterMetricFamilyVal = TelemetryValImpl; +using IntGaugeMetricVal = TelemetryValImpl; +using IntGaugeMetricFamilyVal = TelemetryValImpl; +using DblGaugeMetricVal = TelemetryValImpl; +using DblGaugeMetricFamilyVal = TelemetryValImpl; +using IntHistogramMetricVal = TelemetryValImpl; +using IntHistogramMetricFamilyVal = TelemetryValImpl; +using DblHistogramMetricVal = TelemetryValImpl; +using DblHistogramMetricFamilyVal = TelemetryValImpl; + +} // namespace zeek diff --git a/src/telemetry/telemetry.bif b/src/telemetry/telemetry.bif index 01d67b4ec4..d294cae270 100644 --- a/src/telemetry/telemetry.bif +++ b/src/telemetry/telemetry.bif @@ -17,6 +17,7 @@ enum MetricType %{ #include "zeek/telemetry/Gauge.h" #include "zeek/telemetry/Histogram.h" #include "zeek/telemetry/Manager.h" +#include "zeek/telemetry/Opaques.h" namespace {