Skip to content

Commit 3cdc62e

Browse files
adriangbcijothomas
andauthored
feat: add generated proto models for profiles signal (#2979)
Co-authored-by: Cijo Thomas <cijo.thomas@gmail.com>
1 parent f04e9ec commit 3cdc62e

File tree

7 files changed

+537
-1
lines changed

7 files changed

+537
-1
lines changed

opentelemetry-proto/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## vNext
44

5+
- **Feature**: Added Rust code generation for profiles protos. [#2979](https://github.com/open-telemetry/opentelemetry-rust/pull/2979)
56
- Update `tonic` dependency version to 0.13
67
- - Update proto definitions to v1.6.0.
78

opentelemetry-proto/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ trace = ["opentelemetry/trace", "opentelemetry_sdk/trace"]
4343
metrics = ["opentelemetry/metrics", "opentelemetry_sdk/metrics"]
4444
logs = ["opentelemetry/logs", "opentelemetry_sdk/logs"]
4545
zpages = ["trace"]
46+
profiles = []
4647
testing = ["opentelemetry/testing"]
4748

4849
# add ons

opentelemetry-proto/src/proto.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ pub(crate) mod serializers {
66
use crate::tonic::common::v1::any_value::{self, Value};
77
use crate::tonic::common::v1::AnyValue;
88
use serde::de::{self, MapAccess, Visitor};
9-
use serde::ser::{SerializeMap, SerializeStruct};
9+
use serde::ser::{SerializeMap, SerializeSeq, SerializeStruct};
1010
use serde::{Deserialize, Deserializer, Serialize, Serializer};
1111
use std::fmt;
1212

@@ -174,6 +174,30 @@ pub(crate) mod serializers {
174174
s.parse::<u64>().map_err(de::Error::custom)
175175
}
176176

177+
pub fn serialize_vec_u64_to_string<S>(value: &[u64], serializer: S) -> Result<S::Ok, S::Error>
178+
where
179+
S: Serializer,
180+
{
181+
let s = value.iter()
182+
.map(|v| v.to_string())
183+
.collect::<Vec<_>>();
184+
let mut sq = serializer.serialize_seq(Some(s.len()))?;
185+
for v in value {
186+
sq.serialize_element(&v.to_string())?;
187+
}
188+
sq.end()
189+
}
190+
191+
pub fn deserialize_vec_string_to_vec_u64<'de, D>(deserializer: D) -> Result<Vec<u64>, D::Error>
192+
where
193+
D: Deserializer<'de>,
194+
{
195+
let s: Vec<String> = Deserialize::deserialize(deserializer)?;
196+
s.into_iter()
197+
.map(|v| v.parse::<u64>().map_err(de::Error::custom))
198+
.collect()
199+
}
200+
177201
pub fn serialize_i64_to_string<S>(value: &i64, serializer: S) -> Result<S::Ok, S::Error>
178202
where
179203
S: Serializer,
@@ -266,5 +290,13 @@ pub mod tonic {
266290
pub mod v1;
267291
}
268292

293+
/// Generated types used in zpages.
294+
#[cfg(feature = "profiles")]
295+
#[path = ""]
296+
pub mod profiles {
297+
#[path = "opentelemetry.proto.profiles.v1development.rs"]
298+
pub mod v1;
299+
}
300+
269301
pub use crate::transform::common::tonic::Attributes;
270302
}

opentelemetry-proto/src/proto/tonic/opentelemetry.proto.profiles.v1development.rs

Lines changed: 487 additions & 0 deletions
Large diffs are not rendered by default.

opentelemetry-proto/src/transform/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ pub mod logs;
1111

1212
#[cfg(feature = "zpages")]
1313
pub mod tracez;
14+
15+
#[cfg(feature = "profiles")]
16+
pub mod profiles;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

opentelemetry-proto/tests/grpc_build.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const TONIC_PROTO_FILES: &[&str] = &[
1212
"src/proto/opentelemetry-proto/opentelemetry/proto/collector/metrics/v1/metrics_service.proto",
1313
"src/proto/opentelemetry-proto/opentelemetry/proto/logs/v1/logs.proto",
1414
"src/proto/opentelemetry-proto/opentelemetry/proto/collector/logs/v1/logs_service.proto",
15+
"src/proto/opentelemetry-proto/opentelemetry/proto/profiles/v1development/profiles.proto",
1516
"src/proto/tracez.proto",
1617
];
1718
const TONIC_INCLUDES: &[&str] = &["src/proto/opentelemetry-proto", "src/proto"];
@@ -66,6 +67,7 @@ fn build_tonic() {
6667
"metrics.v1.Summary",
6768
"metrics.v1.NumberDataPoint",
6869
"metrics.v1.HistogramDataPoint",
70+
"profiles.v1development.Function",
6971
] {
7072
builder = builder.type_attribute(
7173
path,
@@ -87,6 +89,7 @@ fn build_tonic() {
8789
"logs.v1.LogRecord.trace_id",
8890
"metrics.v1.Exemplar.span_id",
8991
"metrics.v1.Exemplar.trace_id",
92+
"profiles.v1development.Profile.profile_id",
9093
] {
9194
builder = builder
9295
.field_attribute(path, "#[cfg_attr(feature = \"with-serde\", serde(serialize_with = \"crate::proto::serializers::serialize_to_hex_string\", deserialize_with = \"crate::proto::serializers::deserialize_from_hex_string\"))]")
@@ -110,6 +113,14 @@ fn build_tonic() {
110113
builder = builder
111114
.field_attribute(path, "#[cfg_attr(feature = \"with-serde\", serde(serialize_with = \"crate::proto::serializers::serialize_u64_to_string\", deserialize_with = \"crate::proto::serializers::deserialize_string_to_u64\"))]")
112115
}
116+
for path in ["profiles.v1development.Profile.time_nanos"] {
117+
builder = builder
118+
.field_attribute(path, "#[cfg_attr(feature = \"with-serde\", serde(serialize_with = \"crate::proto::serializers::serialize_i64_to_string\", deserialize_with = \"crate::proto::serializers::deserialize_string_to_i64\"))]")
119+
}
120+
for path in ["profiles.v1development.Sample.timestamps_unix_nano"] {
121+
builder = builder
122+
.field_attribute(path, "#[cfg_attr(feature = \"with-serde\", serde(serialize_with = \"crate::proto::serializers::serialize_vec_u64_to_string\", deserialize_with = \"crate::proto::serializers::deserialize_vec_string_to_vec_u64\"))]")
123+
}
113124

114125
// special serializer and deserializer for value
115126
// The Value::value field must be hidden

0 commit comments

Comments
 (0)