Merge branch 'topic/awelzel/3473-register-telemetry-opaque-vals'

* topic/awelzel/3473-register-telemetry-opaque-vals:
  OpaqueVal: Register TelemetryVals, too
This commit is contained in:
Arne Welzel 2023-11-30 10:16:13 +01:00
commit a59578e018
8 changed files with 63 additions and 1 deletions

View file

@ -1,3 +1,10 @@
6.2.0-dev.200 | 2023-11-30 10:16:13 +0100
* GH-3473: OpaqueVal: Register TelemetryVals, too (Arne Welzel, Corelight)
Even if they are not serializable, OpaqueMgr::TypeID() is called
during BuildJSON() for them and that previously just aborted.
6.2.0-dev.198 | 2023-11-29 11:51:56 +0100 6.2.0-dev.198 | 2023-11-29 11:51:56 +0100
* Update zeekjs submodule (Arne Welzel, Corelight) * Update zeekjs submodule (Arne Welzel, Corelight)

View file

@ -1 +1 @@
6.2.0-dev.198 6.2.0-dev.200

View file

@ -1062,4 +1062,16 @@ TelemetryVal::TelemetryVal(telemetry::DblHistogram) : OpaqueVal(dbl_histogram_me
TelemetryVal::TelemetryVal(telemetry::DblHistogramFamily) : OpaqueVal(dbl_histogram_metric_family_type) {} TelemetryVal::TelemetryVal(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

@ -427,6 +427,11 @@ public:
Handle GetHandle() const noexcept { return hdl; } Handle GetHandle() const noexcept { return hdl; }
static zeek::OpaqueValPtr OpaqueInstantiate() {
reporter->Error("TelemetryValImpl::OpaqueInstantiate is unsupported");
return nullptr;
}
protected: protected:
ValPtr DoClone(CloneState*) override { return make_intrusive<TelemetryValImpl>(hdl); } ValPtr DoClone(CloneState*) override { return make_intrusive<TelemetryValImpl>(hdl); }

View file

@ -0,0 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.

View file

@ -42,3 +42,7 @@ XXXXXXXXXX.XXXXXX
{"10.1.1.1":[1,2],"10.2.2.2":[3,5]} {"10.1.1.1":[1,2],"10.2.2.2":[3,5]}
{"1":{"s":"test"}} {"1":{"s":"test"}}
{"opaque_type":"TopkVal"} {"opaque_type":"TopkVal"}
{"_metric":{"opaque_type":"DblGaugeMetricVal"}}
{"_family":{"opaque_type":"DblGaugeMetricFamilyVal"},"_labels":["dim_1"]}
{"_metric":{"opaque_type":"DblCounterMetricVal"}}
{"_family":{"opaque_type":"DblCounterMetricFamilyVal"},"_labels":["dim_1"]}

View file

@ -0,0 +1,8 @@
# @TEST-DOC: Ensure to_json(global_ids()) does not abort and do not expect any stderr output.
# @TEST-EXEC: unset ZEEK_ALLOW_INIT_ERRORS; zeek %INPUT
# @TEST-EXEC: btest-diff .stderr
event zeek_init()
{
assert |to_json(global_ids())| > 0;
}

View file

@ -5,6 +5,8 @@
# @TEST-EXEC: zeek -b %INPUT >output # @TEST-EXEC: zeek -b %INPUT >output
# @TEST-EXEC: btest-diff output # @TEST-EXEC: btest-diff output
@load base/frameworks/telemetry
type color: enum { Red, White, Blue }; type color: enum { Red, White, Blue };
type myrec1: record { type myrec1: record {
@ -132,4 +134,27 @@ event zeek_init()
# Opaque # Opaque
local o1: opaque of topk = topk_init(5); local o1: opaque of topk = topk_init(5);
print to_json(o1); print to_json(o1);
# Telemetry values wrapping opaque values.
local gauge_family = Telemetry::register_gauge_family([
$prefix="btest",
$name="btest_testing_gauge",
$unit="1",
$help_text="Btest testing",
$labels=vector("dim_1"),
]);
local gauge = Telemetry::gauge_with(gauge_family, vector("dim_1_value"));
print to_json(gauge);
print to_json(gauge_family);
local counter_family = Telemetry::register_counter_family([
$prefix="btest",
$name="btest_testing_counter",
$unit="1",
$help_text="Btest testing",
$labels=vector("dim_1"),
]);
local counter = Telemetry::counter_with(counter_family, vector("dim_1_value"));
print to_json(counter);
print to_json(counter_family);
} }