-
Notifications
You must be signed in to change notification settings - Fork 600
feat: generate protos for profiles collector #3077
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
lalitb
merged 3 commits into
open-telemetry:main
from
grafana:korniltsev/profiles-collector
Jul 21, 2025
Merged
Changes from 1 commit
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
375 changes: 375 additions & 0 deletions
375
opentelemetry-proto/src/proto/tonic/opentelemetry.proto.collector.profiles.v1development.rs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,375 @@ | ||
| // This file is @generated by prost-build. | ||
| #[cfg_attr(feature = "with-schemars", derive(schemars::JsonSchema))] | ||
| #[cfg_attr(feature = "with-serde", derive(serde::Serialize, serde::Deserialize))] | ||
| #[cfg_attr(feature = "with-serde", serde(rename_all = "camelCase"))] | ||
| #[derive(Clone, PartialEq, ::prost::Message)] | ||
| pub struct ExportProfilesServiceRequest { | ||
| /// An array of ResourceProfiles. | ||
| /// For data coming from a single resource this array will typically contain one | ||
| /// element. Intermediary nodes (such as OpenTelemetry Collector) that receive | ||
| /// data from multiple origins typically batch the data before forwarding further and | ||
| /// in that case this array will contain multiple elements. | ||
| #[prost(message, repeated, tag = "1")] | ||
| pub resource_profiles: ::prost::alloc::vec::Vec< | ||
| super::super::super::profiles::v1development::ResourceProfiles, | ||
| >, | ||
| /// The reference table containing all data shared by profiles across the message being sent. | ||
| #[prost(message, optional, tag = "2")] | ||
| pub dictionary: ::core::option::Option< | ||
| super::super::super::profiles::v1development::ProfilesDictionary, | ||
| >, | ||
| } | ||
| #[cfg_attr(feature = "with-schemars", derive(schemars::JsonSchema))] | ||
| #[cfg_attr(feature = "with-serde", derive(serde::Serialize, serde::Deserialize))] | ||
| #[cfg_attr(feature = "with-serde", serde(rename_all = "camelCase"))] | ||
| #[derive(Clone, PartialEq, ::prost::Message)] | ||
| pub struct ExportProfilesServiceResponse { | ||
| /// The details of a partially successful export request. | ||
| /// | ||
| /// If the request is only partially accepted | ||
| /// (i.e. when the server accepts only parts of the data and rejects the rest) | ||
| /// the server MUST initialize the `partial_success` field and MUST | ||
| /// set the `rejected_<signal>` with the number of items it rejected. | ||
| /// | ||
| /// Servers MAY also make use of the `partial_success` field to convey | ||
| /// warnings/suggestions to senders even when the request was fully accepted. | ||
| /// In such cases, the `rejected_<signal>` MUST have a value of `0` and | ||
| /// the `error_message` MUST be non-empty. | ||
| /// | ||
| /// A `partial_success` message with an empty value (rejected_<signal> = 0 and | ||
| /// `error_message` = "") is equivalent to it not being set/present. Senders | ||
| /// SHOULD interpret it the same way as in the full success case. | ||
| #[prost(message, optional, tag = "1")] | ||
| pub partial_success: ::core::option::Option<ExportProfilesPartialSuccess>, | ||
| } | ||
| #[cfg_attr(feature = "with-schemars", derive(schemars::JsonSchema))] | ||
| #[cfg_attr(feature = "with-serde", derive(serde::Serialize, serde::Deserialize))] | ||
| #[cfg_attr(feature = "with-serde", serde(rename_all = "camelCase"))] | ||
| #[derive(Clone, PartialEq, ::prost::Message)] | ||
| pub struct ExportProfilesPartialSuccess { | ||
| /// The number of rejected profiles. | ||
| /// | ||
| /// A `rejected_<signal>` field holding a `0` value indicates that the | ||
| /// request was fully accepted. | ||
| #[prost(int64, tag = "1")] | ||
| pub rejected_profiles: i64, | ||
| /// A developer-facing human-readable message in English. It should be used | ||
| /// either to explain why the server rejected parts of the data during a partial | ||
| /// success or to convey warnings/suggestions during a full success. The message | ||
| /// should offer guidance on how users can address such issues. | ||
| /// | ||
| /// error_message is an optional field. An error_message with an empty value | ||
| /// is equivalent to it not being set. | ||
| #[prost(string, tag = "2")] | ||
| pub error_message: ::prost::alloc::string::String, | ||
| } | ||
| /// Generated client implementations. | ||
| #[cfg(feature = "gen-tonic")] | ||
| pub mod profiles_service_client { | ||
| #![allow( | ||
| unused_variables, | ||
| dead_code, | ||
| missing_docs, | ||
| clippy::wildcard_imports, | ||
| clippy::let_unit_value, | ||
| )] | ||
| use tonic::codegen::*; | ||
| use tonic::codegen::http::Uri; | ||
| /// Service that can be used to push profiles between one Application instrumented with | ||
| /// OpenTelemetry and a collector, or between a collector and a central collector. | ||
| #[derive(Debug, Clone)] | ||
| pub struct ProfilesServiceClient<T> { | ||
| inner: tonic::client::Grpc<T>, | ||
| } | ||
| impl ProfilesServiceClient<tonic::transport::Channel> { | ||
| /// Attempt to create a new client by connecting to a given endpoint. | ||
| pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error> | ||
| where | ||
| D: TryInto<tonic::transport::Endpoint>, | ||
| D::Error: Into<StdError>, | ||
| { | ||
| let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; | ||
| Ok(Self::new(conn)) | ||
| } | ||
| } | ||
| impl<T> ProfilesServiceClient<T> | ||
| where | ||
| T: tonic::client::GrpcService<tonic::body::Body>, | ||
| T::Error: Into<StdError>, | ||
| T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static, | ||
| <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send, | ||
| { | ||
| pub fn new(inner: T) -> Self { | ||
| let inner = tonic::client::Grpc::new(inner); | ||
| Self { inner } | ||
| } | ||
| pub fn with_origin(inner: T, origin: Uri) -> Self { | ||
| let inner = tonic::client::Grpc::with_origin(inner, origin); | ||
| Self { inner } | ||
| } | ||
| pub fn with_interceptor<F>( | ||
| inner: T, | ||
| interceptor: F, | ||
| ) -> ProfilesServiceClient<InterceptedService<T, F>> | ||
| where | ||
| F: tonic::service::Interceptor, | ||
| T::ResponseBody: Default, | ||
| T: tonic::codegen::Service< | ||
| http::Request<tonic::body::Body>, | ||
| Response = http::Response< | ||
| <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody, | ||
| >, | ||
| >, | ||
| <T as tonic::codegen::Service< | ||
| http::Request<tonic::body::Body>, | ||
| >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, | ||
| { | ||
| ProfilesServiceClient::new(InterceptedService::new(inner, interceptor)) | ||
| } | ||
| /// Compress requests with the given encoding. | ||
| /// | ||
| /// This requires the server to support it otherwise it might respond with an | ||
| /// error. | ||
| #[must_use] | ||
| pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { | ||
| self.inner = self.inner.send_compressed(encoding); | ||
| self | ||
| } | ||
| /// Enable decompressing responses. | ||
| #[must_use] | ||
| pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { | ||
| self.inner = self.inner.accept_compressed(encoding); | ||
| self | ||
| } | ||
| /// Limits the maximum size of a decoded message. | ||
| /// | ||
| /// Default: `4MB` | ||
| #[must_use] | ||
| pub fn max_decoding_message_size(mut self, limit: usize) -> Self { | ||
| self.inner = self.inner.max_decoding_message_size(limit); | ||
| self | ||
| } | ||
| /// Limits the maximum size of an encoded message. | ||
| /// | ||
| /// Default: `usize::MAX` | ||
| #[must_use] | ||
| pub fn max_encoding_message_size(mut self, limit: usize) -> Self { | ||
| self.inner = self.inner.max_encoding_message_size(limit); | ||
| self | ||
| } | ||
| pub async fn export( | ||
| &mut self, | ||
| request: impl tonic::IntoRequest<super::ExportProfilesServiceRequest>, | ||
| ) -> std::result::Result< | ||
| tonic::Response<super::ExportProfilesServiceResponse>, | ||
| tonic::Status, | ||
| > { | ||
| self.inner | ||
| .ready() | ||
| .await | ||
| .map_err(|e| { | ||
| tonic::Status::unknown( | ||
| format!("Service was not ready: {}", e.into()), | ||
| ) | ||
| })?; | ||
| let codec = tonic::codec::ProstCodec::default(); | ||
| let path = http::uri::PathAndQuery::from_static( | ||
| "/opentelemetry.proto.collector.profiles.v1development.ProfilesService/Export", | ||
| ); | ||
| let mut req = request.into_request(); | ||
| req.extensions_mut() | ||
| .insert( | ||
| GrpcMethod::new( | ||
| "opentelemetry.proto.collector.profiles.v1development.ProfilesService", | ||
| "Export", | ||
| ), | ||
| ); | ||
| self.inner.unary(req, path, codec).await | ||
| } | ||
| } | ||
| } | ||
| /// Generated server implementations. | ||
| #[cfg(feature = "gen-tonic")] | ||
| pub mod profiles_service_server { | ||
| #![allow( | ||
| unused_variables, | ||
| dead_code, | ||
| missing_docs, | ||
| clippy::wildcard_imports, | ||
| clippy::let_unit_value, | ||
| )] | ||
| use tonic::codegen::*; | ||
| /// Generated trait containing gRPC methods that should be implemented for use with ProfilesServiceServer. | ||
| #[async_trait] | ||
| pub trait ProfilesService: std::marker::Send + std::marker::Sync + 'static { | ||
| async fn export( | ||
| &self, | ||
| request: tonic::Request<super::ExportProfilesServiceRequest>, | ||
| ) -> std::result::Result< | ||
| tonic::Response<super::ExportProfilesServiceResponse>, | ||
| tonic::Status, | ||
| >; | ||
| } | ||
| /// Service that can be used to push profiles between one Application instrumented with | ||
| /// OpenTelemetry and a collector, or between a collector and a central collector. | ||
| #[derive(Debug)] | ||
| pub struct ProfilesServiceServer<T> { | ||
| inner: Arc<T>, | ||
| accept_compression_encodings: EnabledCompressionEncodings, | ||
| send_compression_encodings: EnabledCompressionEncodings, | ||
| max_decoding_message_size: Option<usize>, | ||
| max_encoding_message_size: Option<usize>, | ||
| } | ||
| impl<T> ProfilesServiceServer<T> { | ||
| pub fn new(inner: T) -> Self { | ||
| Self::from_arc(Arc::new(inner)) | ||
| } | ||
| pub fn from_arc(inner: Arc<T>) -> Self { | ||
| Self { | ||
| inner, | ||
| accept_compression_encodings: Default::default(), | ||
| send_compression_encodings: Default::default(), | ||
| max_decoding_message_size: None, | ||
| max_encoding_message_size: None, | ||
| } | ||
| } | ||
| pub fn with_interceptor<F>( | ||
| inner: T, | ||
| interceptor: F, | ||
| ) -> InterceptedService<Self, F> | ||
| where | ||
| F: tonic::service::Interceptor, | ||
| { | ||
| InterceptedService::new(Self::new(inner), interceptor) | ||
| } | ||
| /// Enable decompressing requests with the given encoding. | ||
| #[must_use] | ||
| pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { | ||
| self.accept_compression_encodings.enable(encoding); | ||
| self | ||
| } | ||
| /// Compress responses with the given encoding, if the client supports it. | ||
| #[must_use] | ||
| pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { | ||
| self.send_compression_encodings.enable(encoding); | ||
| self | ||
| } | ||
| /// Limits the maximum size of a decoded message. | ||
| /// | ||
| /// Default: `4MB` | ||
| #[must_use] | ||
| pub fn max_decoding_message_size(mut self, limit: usize) -> Self { | ||
| self.max_decoding_message_size = Some(limit); | ||
| self | ||
| } | ||
| /// Limits the maximum size of an encoded message. | ||
| /// | ||
| /// Default: `usize::MAX` | ||
| #[must_use] | ||
| pub fn max_encoding_message_size(mut self, limit: usize) -> Self { | ||
| self.max_encoding_message_size = Some(limit); | ||
| self | ||
| } | ||
| } | ||
| impl<T, B> tonic::codegen::Service<http::Request<B>> for ProfilesServiceServer<T> | ||
| where | ||
| T: ProfilesService, | ||
| B: Body + std::marker::Send + 'static, | ||
| B::Error: Into<StdError> + std::marker::Send + 'static, | ||
| { | ||
| type Response = http::Response<tonic::body::Body>; | ||
| type Error = std::convert::Infallible; | ||
| type Future = BoxFuture<Self::Response, Self::Error>; | ||
| fn poll_ready( | ||
| &mut self, | ||
| _cx: &mut Context<'_>, | ||
| ) -> Poll<std::result::Result<(), Self::Error>> { | ||
| Poll::Ready(Ok(())) | ||
| } | ||
| fn call(&mut self, req: http::Request<B>) -> Self::Future { | ||
| match req.uri().path() { | ||
| "/opentelemetry.proto.collector.profiles.v1development.ProfilesService/Export" => { | ||
| #[allow(non_camel_case_types)] | ||
| struct ExportSvc<T: ProfilesService>(pub Arc<T>); | ||
| impl< | ||
| T: ProfilesService, | ||
| > tonic::server::UnaryService<super::ExportProfilesServiceRequest> | ||
| for ExportSvc<T> { | ||
| type Response = super::ExportProfilesServiceResponse; | ||
| type Future = BoxFuture< | ||
| tonic::Response<Self::Response>, | ||
| tonic::Status, | ||
| >; | ||
| fn call( | ||
| &mut self, | ||
| request: tonic::Request<super::ExportProfilesServiceRequest>, | ||
| ) -> Self::Future { | ||
| let inner = Arc::clone(&self.0); | ||
| let fut = async move { | ||
| <T as ProfilesService>::export(&inner, request).await | ||
| }; | ||
| Box::pin(fut) | ||
| } | ||
| } | ||
| let accept_compression_encodings = self.accept_compression_encodings; | ||
| let send_compression_encodings = self.send_compression_encodings; | ||
| let max_decoding_message_size = self.max_decoding_message_size; | ||
| let max_encoding_message_size = self.max_encoding_message_size; | ||
| let inner = self.inner.clone(); | ||
| let fut = async move { | ||
| let method = ExportSvc(inner); | ||
| let codec = tonic::codec::ProstCodec::default(); | ||
| let mut grpc = tonic::server::Grpc::new(codec) | ||
| .apply_compression_config( | ||
| accept_compression_encodings, | ||
| send_compression_encodings, | ||
| ) | ||
| .apply_max_message_size_config( | ||
| max_decoding_message_size, | ||
| max_encoding_message_size, | ||
| ); | ||
| let res = grpc.unary(method, req).await; | ||
| Ok(res) | ||
| }; | ||
| Box::pin(fut) | ||
| } | ||
| _ => { | ||
| Box::pin(async move { | ||
| let mut response = http::Response::new( | ||
| tonic::body::Body::default(), | ||
| ); | ||
| let headers = response.headers_mut(); | ||
| headers | ||
| .insert( | ||
| tonic::Status::GRPC_STATUS, | ||
| (tonic::Code::Unimplemented as i32).into(), | ||
| ); | ||
| headers | ||
| .insert( | ||
| http::header::CONTENT_TYPE, | ||
| tonic::metadata::GRPC_CONTENT_TYPE, | ||
| ); | ||
| Ok(response) | ||
| }) | ||
| } | ||
| } | ||
| } | ||
| } | ||
| impl<T> Clone for ProfilesServiceServer<T> { | ||
| fn clone(&self) -> Self { | ||
| let inner = self.inner.clone(); | ||
| Self { | ||
| inner, | ||
| accept_compression_encodings: self.accept_compression_encodings, | ||
| send_compression_encodings: self.send_compression_encodings, | ||
| max_decoding_message_size: self.max_decoding_message_size, | ||
| max_encoding_message_size: self.max_encoding_message_size, | ||
| } | ||
| } | ||
| } | ||
| /// Generated gRPC service name | ||
| pub const SERVICE_NAME: &str = "opentelemetry.proto.collector.profiles.v1development.ProfilesService"; | ||
| impl<T> tonic::server::NamedService for ProfilesServiceServer<T> { | ||
| const NAME: &'static str = SERVICE_NAME; | ||
| } | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.