Skip to content

Commit e247b68

Browse files
committed
refactor: address review issues
1 parent 289f4a8 commit e247b68

File tree

3 files changed

+82
-30
lines changed

3 files changed

+82
-30
lines changed

src/sinks/greptimedb/batch.rs

+14-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ use vector_core::{
33
stream::batcher::limiter::ItemBatchSize,
44
};
55

6+
use super::request_builder::{
7+
DISTRIBUTION_QUANTILES, DISTRIBUTION_STAT_FIELD_COUNT, SUMMARY_STAT_FIELD_COUNT,
8+
};
9+
10+
const F64_BYTE_SIZE: usize = 8;
11+
const I64_BYTE_SIZE: usize = 8;
12+
613
#[derive(Default)]
714
pub(super) struct GreptimeDBBatchSizer;
815

@@ -20,14 +27,16 @@ impl GreptimeDBBatchSizer {
2027
.sum()
2128
})
2229
.unwrap_or(0)
30+
// timestamp
31+
+ I64_BYTE_SIZE
2332
+
2433
// value size
2534
match item.value() {
26-
MetricValue::Counter { .. } | MetricValue::Gauge { .. } | MetricValue::Set { ..} => 8,
27-
MetricValue::Distribution { .. } => 8 * 10,
28-
MetricValue::AggregatedHistogram { buckets, .. } => 8 * (buckets.len() + 2),
29-
MetricValue::AggregatedSummary { quantiles, .. } => 8 * (quantiles.len() + 2),
30-
MetricValue::Sketch { .. } => 8 * 10,
35+
MetricValue::Counter { .. } | MetricValue::Gauge { .. } | MetricValue::Set { ..} => F64_BYTE_SIZE,
36+
MetricValue::Distribution { .. } => F64_BYTE_SIZE * (DISTRIBUTION_QUANTILES.len() + DISTRIBUTION_STAT_FIELD_COUNT),
37+
MetricValue::AggregatedHistogram { buckets, .. } => F64_BYTE_SIZE * (buckets.len() + SUMMARY_STAT_FIELD_COUNT),
38+
MetricValue::AggregatedSummary { quantiles, .. } => F64_BYTE_SIZE * (quantiles.len() + SUMMARY_STAT_FIELD_COUNT),
39+
MetricValue::Sketch { .. } => F64_BYTE_SIZE * (DISTRIBUTION_QUANTILES.len() + DISTRIBUTION_STAT_FIELD_COUNT),
3140
}
3241
}
3342
}

src/sinks/greptimedb/request_builder.rs

+61-22
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ use vector_core::metrics::AgentDDSketch;
77

88
use crate::sinks::util::statistic::DistributionStatistic;
99

10+
pub(super) const DISTRIBUTION_QUANTILES: [f64; 5] = [0.5, 0.75, 0.90, 0.95, 0.99];
11+
pub(super) const DISTRIBUTION_STAT_FIELD_COUNT: usize = 5;
12+
pub(super) const SUMMARY_STAT_FIELD_COUNT: usize = 2;
13+
1014
fn f64_field(name: &str, value: f64) -> Column {
1115
Column {
1216
column_name: name.to_owned(),
@@ -112,9 +116,7 @@ pub(super) fn metric_to_insert_request(metric: Metric) -> InsertRequest {
112116
}
113117

114118
fn encode_distribution(samples: &[Sample], columns: &mut Vec<Column>) {
115-
if let Some(stats) =
116-
DistributionStatistic::from_samples(samples, &[0.5, 0.75, 0.90, 0.95, 0.99])
117-
{
119+
if let Some(stats) = DistributionStatistic::from_samples(samples, &DISTRIBUTION_QUANTILES) {
118120
columns.push(f64_field("min", stats.min));
119121
columns.push(f64_field("max", stats.max));
120122
columns.push(f64_field("avg", stats.avg));
@@ -159,20 +161,11 @@ fn encode_sketch(sketch: &AgentDDSketch, columns: &mut Vec<Column>) {
159161
columns.push(f64_field("avg", avg));
160162
}
161163

162-
if let Some(quantile) = sketch.quantile(0.5) {
163-
columns.push(f64_field("p50", quantile));
164-
}
165-
if let Some(quantile) = sketch.quantile(0.75) {
166-
columns.push(f64_field("p75", quantile));
167-
}
168-
if let Some(quantile) = sketch.quantile(0.90) {
169-
columns.push(f64_field("p90", quantile));
170-
}
171-
if let Some(quantile) = sketch.quantile(0.95) {
172-
columns.push(f64_field("p95", quantile));
173-
}
174-
if let Some(quantile) = sketch.quantile(0.99) {
175-
columns.push(f64_field("p99", quantile));
164+
for q in DISTRIBUTION_QUANTILES {
165+
if let Some(quantile) = sketch.quantile(q) {
166+
let column_name = format!("p{:02}", q * 100f64);
167+
columns.push(f64_field(&column_name, quantile));
168+
}
176169
}
177170
}
178171

@@ -265,7 +258,10 @@ mod tests {
265258
},
266259
);
267260
let insert = metric_to_insert_request(metric);
268-
assert_eq!(insert.columns.len(), 11);
261+
assert_eq!(
262+
insert.columns.len(),
263+
1 + DISTRIBUTION_STAT_FIELD_COUNT + DISTRIBUTION_QUANTILES.len()
264+
);
269265

270266
assert_eq!(get_column(&insert.columns, "max"), 3.0);
271267
assert_eq!(get_column(&insert.columns, "min"), 1.0);
@@ -281,17 +277,22 @@ mod tests {
281277

282278
#[test]
283279
fn test_histogram() {
280+
let buckets = vector_core::buckets![1.0 => 1, 2.0 => 2, 3.0 => 1];
281+
let buckets_len = buckets.len();
284282
let metric = Metric::new(
285283
"cpu_seconds_total",
286284
MetricKind::Incremental,
287285
MetricValue::AggregatedHistogram {
288-
buckets: vector_core::buckets![1.0 => 1, 2.0 => 2, 3.0 => 1],
286+
buckets,
289287
count: 4,
290288
sum: 8.0,
291289
},
292290
);
293291
let insert = metric_to_insert_request(metric);
294-
assert_eq!(insert.columns.len(), 6);
292+
assert_eq!(
293+
insert.columns.len(),
294+
1 + SUMMARY_STAT_FIELD_COUNT + buckets_len
295+
);
295296

296297
assert_eq!(get_column(&insert.columns, "b1"), 1.0);
297298
assert_eq!(get_column(&insert.columns, "b2"), 2.0);
@@ -302,23 +303,61 @@ mod tests {
302303

303304
#[test]
304305
fn test_summary() {
306+
let quantiles = vector_core::quantiles![0.01 => 1.5, 0.5 => 2.0, 0.99 => 3.0];
307+
let quantiles_len = quantiles.len();
305308
let metric = Metric::new(
306309
"cpu_seconds_total",
307310
MetricKind::Incremental,
308311
MetricValue::AggregatedSummary {
309-
quantiles: vector_core::quantiles![0.01 => 1.5, 0.5 => 2.0, 0.99 => 3.0],
312+
quantiles,
310313
count: 6,
311314
sum: 12.0,
312315
},
313316
);
314317

315318
let insert = metric_to_insert_request(metric);
316-
assert_eq!(insert.columns.len(), 6);
319+
assert_eq!(
320+
insert.columns.len(),
321+
1 + SUMMARY_STAT_FIELD_COUNT + quantiles_len
322+
);
317323

318324
assert_eq!(get_column(&insert.columns, "p01"), 1.5);
319325
assert_eq!(get_column(&insert.columns, "p50"), 2.0);
320326
assert_eq!(get_column(&insert.columns, "p99"), 3.0);
321327
assert_eq!(get_column(&insert.columns, "count"), 6.0);
322328
assert_eq!(get_column(&insert.columns, "sum"), 12.0);
323329
}
330+
331+
#[test]
332+
fn test_sketch() {
333+
let mut sketch = AgentDDSketch::with_agent_defaults();
334+
let samples = 10;
335+
for i in 0..samples {
336+
sketch.insert(i as f64);
337+
}
338+
339+
let metric = Metric::new(
340+
"cpu_seconds_total",
341+
MetricKind::Incremental,
342+
MetricValue::Sketch {
343+
sketch: MetricSketch::AgentDDSketch(sketch),
344+
},
345+
);
346+
347+
let insert = metric_to_insert_request(metric);
348+
assert_eq!(
349+
insert.columns.len(),
350+
1 + DISTRIBUTION_QUANTILES.len() + DISTRIBUTION_STAT_FIELD_COUNT
351+
);
352+
353+
assert!(get_column(&insert.columns, "p50") <= 4.0);
354+
assert!(get_column(&insert.columns, "p95") > 8.0);
355+
assert!(get_column(&insert.columns, "p95") <= 9.0);
356+
assert!(get_column(&insert.columns, "p99") > 8.0);
357+
assert!(get_column(&insert.columns, "p99") <= 9.0);
358+
assert_eq!(get_column(&insert.columns, "count"), samples as f64);
359+
assert_eq!(get_column(&insert.columns, "sum"), 45.0);
360+
assert_eq!(get_column(&insert.columns, "max"), 9.0);
361+
assert_eq!(get_column(&insert.columns, "min"), 0.0);
362+
}
324363
}

src/sinks/greptimedb/service.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,13 @@ impl GreptimeDBService {
143143
.as_ref()
144144
.ok_or(GreptimeDBConfigError::TlsMissingKey)?;
145145

146-
if tls_config.key_pass.is_some() {
146+
if tls_config.key_pass.is_some()
147+
|| tls_config.alpn_protocols.is_some()
148+
|| tls_config.verify_certificate.is_some()
149+
|| tls_config.verify_hostname.is_some()
150+
{
147151
warn!(
148-
message = "TLS key file with password is not supported by greptimedb client at the moment."
152+
message = "TlsConfig: key_pass, alpn_protocols, verify_certificate and verify_hostname are not supported by greptimedb client at the moment."
149153
);
150154
}
151155

@@ -174,7 +178,7 @@ impl Service<GreptimeDBRequest> for GreptimeDBService {
174178
let client = Arc::clone(&self.client);
175179

176180
Box::pin(async move {
177-
let metadata = req.get_metadata().clone();
181+
let metadata = req.metadata;
178182
let result = client.insert(req.items).await?;
179183

180184
Ok(GreptimeDBBatchOutput {

0 commit comments

Comments
 (0)