diff --git a/analytic_engine/src/sst/parquet/async_reader.rs b/analytic_engine/src/sst/parquet/async_reader.rs index 5988dd14b4..674f69914a 100644 --- a/analytic_engine/src/sst/parquet/async_reader.rs +++ b/analytic_engine/src/sst/parquet/async_reader.rs @@ -375,8 +375,7 @@ impl<'a> Reader<'a> { file_path: self.path.to_string(), })?; - //TODO: unstore origin value - MetaData::try_new(&parquet_meta_data, true) + MetaData::try_new(&parquet_meta_data, ignore_sst_filter) .box_err() .context(DecodeSstMeta) } diff --git a/components/trace_metric_derive/src/builder.rs b/components/trace_metric_derive/src/builder.rs index 72269ca018..abaf7ac8d0 100644 --- a/components/trace_metric_derive/src/builder.rs +++ b/components/trace_metric_derive/src/builder.rs @@ -1,6 +1,7 @@ // Copyright 2022 CeresDB Project Authors. Licensed under Apache-2.0. use proc_macro::TokenStream; +use proc_macro2::Span; use quote::{quote, ToTokens, TokenStreamExt}; use syn::{DeriveInput, Field, Generics, Ident}; @@ -16,16 +17,26 @@ enum MetricOp { impl ToTokens for MetricOp { fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { - tokens.append_all(format!("{self:?}").as_bytes()); + tokens.append_all(&[Ident::new(format!("{self:?}").as_str(), Span::call_site())]); } } +#[derive(Debug)] enum MetricType { Number, Duration, Boolean, } +impl ToTokens for MetricType { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.append_all(&[Ident::new( + format!("{self:?}").to_lowercase().as_str(), + Span::call_site(), + )]); + } +} + struct MetricMetadata { typ: MetricType, op: Option, @@ -33,7 +44,7 @@ struct MetricMetadata { impl MetricMetadata { fn parse_op(s: &str) -> Option { - match s { + match s.to_lowercase().as_str() { "add" => Some(MetricOp::Add), _ => None, } @@ -170,29 +181,21 @@ impl Builder { let mut collect_statements = Vec::with_capacity(self.metric_fields.len()); for metric_field in self.metric_fields.iter() { let field_name = &metric_field.field_name; - let md = &metric_field.metric_metadata; - let op = &md.op; - let metric = match md.typ { - MetricType::Number => { - quote! { ::trace_metric::Metric::number(stringify!(#field_name).to_string(), - self.#field_name, - ::trace_metric::Metric::MetricOp::stringify!(#op)) - } + let metadata = &metric_field.metric_metadata; + let metric_op = &metadata.op; + let metric_type = &metadata.typ; + let metric = if let Some(op) = metric_op { + quote! { ::trace_metric::Metric::#metric_type(stringify!(#field_name).to_string(), + self.#field_name, + Some(::trace_metric::metric::MetricOp::#op)) } - MetricType::Duration => { - quote! { ::trace_metric::Metric::duration(stringify!(#field_name).to_string(), - self.#field_name, - ::trace_metric::Metric::MetricOp::stringify!(#op)) - } - } - MetricType::Boolean => { - quote! { ::trace_metric::Metric::boolean(stringify!(#field_name).to_string(), - self.#field_name, - ::trace_metric::Metric::MetricOp::stringify!(#op)) - - } + } else { + quote! { ::trace_metric::Metric::#metric_type(stringify!(#field_name).to_string(), + self.#field_name, + None) } }; + let statement = quote! { collector.collect(#metric); }; diff --git a/components/trace_metric_derive_tests/src/lib.rs b/components/trace_metric_derive_tests/src/lib.rs index 5b1a15ade6..8d9964d3b1 100644 --- a/components/trace_metric_derive_tests/src/lib.rs +++ b/components/trace_metric_derive_tests/src/lib.rs @@ -6,7 +6,7 @@ use trace_metric::{MetricsCollector, TraceMetricWhenDrop}; #[derive(Debug, Clone, TraceMetricWhenDrop)] pub struct ExampleMetrics { - #[metric(number)] + #[metric(number, add)] pub counter: usize, #[metric(duration)] pub elapsed: Duration,