Metric history + Live metrics

This commit is contained in:
mdecimus
2024-08-23 16:21:35 +02:00
parent 0aaf493f94
commit dcc31e8b3e
34 changed files with 1256 additions and 512 deletions

View File

@@ -13,13 +13,13 @@ use crate::{
SUBSPACE_BLOB_RESERVE, SUBSPACE_COUNTER, SUBSPACE_DIRECTORY, SUBSPACE_FTS_INDEX,
SUBSPACE_FTS_QUEUE, SUBSPACE_INDEXES, SUBSPACE_LOGS, SUBSPACE_LOOKUP_VALUE, SUBSPACE_PROPERTY,
SUBSPACE_QUEUE_EVENT, SUBSPACE_QUEUE_MESSAGE, SUBSPACE_QUOTA, SUBSPACE_REPORT_IN,
SUBSPACE_REPORT_OUT, SUBSPACE_SETTINGS, SUBSPACE_TRACE, SUBSPACE_TRACE_INDEX, U32_LEN, U64_LEN,
WITH_SUBSPACE,
SUBSPACE_REPORT_OUT, SUBSPACE_SETTINGS, SUBSPACE_TELEMETRY_INDEX, SUBSPACE_TELEMETRY_METRIC,
SUBSPACE_TELEMETRY_SPAN, U32_LEN, U64_LEN, WITH_SUBSPACE,
};
use super::{
AnyKey, AssignedIds, BitmapClass, BlobOp, DirectoryClass, LookupClass, QueueClass, ReportClass,
ReportEvent, ResolveId, TagValue, TraceClass, ValueClass,
ReportEvent, ResolveId, TagValue, TelemetryClass, ValueClass,
};
pub struct KeySerializer {
@@ -366,11 +366,19 @@ impl<T: ResolveId> ValueClass<T> {
serializer.write(2u8).write(*expires).write(*id)
}
},
ValueClass::Trace(trace) => match trace {
TraceClass::Span { span_id } => serializer.write(*span_id),
TraceClass::Index { span_id, value } => {
ValueClass::Telemetry(telemetry) => match telemetry {
TelemetryClass::Span { span_id } => serializer.write(*span_id),
TelemetryClass::Index { span_id, value } => {
serializer.write(value.as_slice()).write(*span_id)
}
TelemetryClass::Metric {
timestamp,
metric_id,
node_id,
} => serializer
.write(*timestamp)
.write_leb128(*metric_id)
.write_leb128(*node_id),
},
ValueClass::Any(any) => serializer.write(any.key.as_slice()),
}
@@ -550,9 +558,10 @@ impl<T> ValueClass<T> {
QueueClass::QuotaCount(v) | QueueClass::QuotaSize(v) => v.len(),
},
ValueClass::Report(_) => U64_LEN * 2 + 1,
ValueClass::Trace(trace) => match trace {
TraceClass::Span { .. } => U64_LEN + 1,
TraceClass::Index { value, .. } => U64_LEN + value.len() + 1,
ValueClass::Telemetry(telemetry) => match telemetry {
TelemetryClass::Span { .. } => U64_LEN + 1,
TelemetryClass::Index { value, .. } => U64_LEN + value.len() + 1,
TelemetryClass::Metric { .. } => U64_LEN * 2 + 1,
},
ValueClass::Any(v) => v.key.len(),
}
@@ -595,9 +604,10 @@ impl<T> ValueClass<T> {
QueueClass::QuotaCount(_) | QueueClass::QuotaSize(_) => SUBSPACE_QUOTA,
},
ValueClass::Report(_) => SUBSPACE_REPORT_IN,
ValueClass::Trace(trace) => match trace {
TraceClass::Span { .. } => SUBSPACE_TRACE,
TraceClass::Index { .. } => SUBSPACE_TRACE_INDEX,
ValueClass::Telemetry(telemetry) => match telemetry {
TelemetryClass::Span { .. } => SUBSPACE_TELEMETRY_SPAN,
TelemetryClass::Index { .. } => SUBSPACE_TELEMETRY_INDEX,
TelemetryClass::Metric { .. } => SUBSPACE_TELEMETRY_METRIC,
},
ValueClass::Any(any) => any.subspace,
}

View File

@@ -153,7 +153,7 @@ pub enum ValueClass<T> {
Config(Vec<u8>),
Queue(QueueClass),
Report(ReportClass),
Trace(TraceClass),
Telemetry(TelemetryClass),
Any(AnyClass),
}
@@ -206,9 +206,19 @@ pub enum ReportClass {
}
#[derive(Debug, PartialEq, Clone, Eq, Hash)]
pub enum TraceClass {
Span { span_id: u64 },
Index { span_id: u64, value: Vec<u8> },
pub enum TelemetryClass {
Span {
span_id: u64,
},
Metric {
timestamp: u64,
metric_id: u64,
node_id: u64,
},
Index {
span_id: u64,
value: Vec<u8>,
},
}
#[derive(Debug, PartialEq, Clone, Eq, Hash)]