@@ -7,6 +7,7 @@ use crate::payload_encoder::otlp_encoder::OtlpEncoder;
77use opentelemetry_proto:: tonic:: logs:: v1:: ResourceLogs ;
88use opentelemetry_proto:: tonic:: trace:: v1:: ResourceSpans ;
99use std:: sync:: Arc ;
10+ use tracing:: { debug, info} ;
1011
1112/// Public batch type (already LZ4 chunked compressed).
1213/// Produced by `OtlpEncoder::encode_log_batch` and returned to callers.
@@ -44,13 +45,27 @@ pub struct GenevaClient {
4445
4546impl GenevaClient {
4647 pub fn new ( cfg : GenevaClientConfig ) -> Result < Self , String > {
48+ info ! (
49+ name: "client.new" ,
50+ target: "geneva-uploader" ,
51+ endpoint = %cfg. endpoint,
52+ namespace = %cfg. namespace,
53+ account = %cfg. account,
54+ "Initializing GenevaClient"
55+ ) ;
56+
4757 // Validate MSI resource presence for managed identity variants
4858 match cfg. auth_method {
4959 AuthMethod :: SystemManagedIdentity
5060 | AuthMethod :: UserManagedIdentity { .. }
5161 | AuthMethod :: UserManagedIdentityByObjectId { .. }
5262 | AuthMethod :: UserManagedIdentityByResourceId { .. } => {
5363 if cfg. msi_resource . is_none ( ) {
64+ debug ! (
65+ name: "client.new.validate_msi_resource" ,
66+ target: "geneva-uploader" ,
67+ "Validation failed: msi_resource must be provided for managed identity auth"
68+ ) ;
5469 return Err (
5570 "msi_resource must be provided for managed identity auth" . to_string ( )
5671 ) ;
@@ -71,10 +86,16 @@ impl GenevaClient {
7186 auth_method : cfg. auth_method ,
7287 msi_resource : cfg. msi_resource ,
7388 } ;
74- let config_client = Arc :: new (
75- GenevaConfigClient :: new ( config_client_config)
76- . map_err ( |e| format ! ( "GenevaConfigClient init failed: {e}" ) ) ?,
77- ) ;
89+ let config_client =
90+ Arc :: new ( GenevaConfigClient :: new ( config_client_config) . map_err ( |e| {
91+ debug ! (
92+ name: "client.new.config_client_init" ,
93+ target: "geneva-uploader" ,
94+ error = %e,
95+ "GenevaConfigClient init failed"
96+ ) ;
97+ format ! ( "GenevaConfigClient init failed: {e}" )
98+ } ) ?) ;
7899
79100 let source_identity = format ! (
80101 "Tenant={}/Role={}/RoleInstance={}" ,
@@ -95,8 +116,22 @@ impl GenevaClient {
95116 config_version : config_version. clone ( ) ,
96117 } ;
97118
98- let uploader = GenevaUploader :: from_config_client ( config_client, uploader_config)
99- . map_err ( |e| format ! ( "GenevaUploader init failed: {e}" ) ) ?;
119+ let uploader =
120+ GenevaUploader :: from_config_client ( config_client, uploader_config) . map_err ( |e| {
121+ debug ! (
122+ name: "client.new.uploader_init" ,
123+ target: "geneva-uploader" ,
124+ error = %e,
125+ "GenevaUploader init failed"
126+ ) ;
127+ format ! ( "GenevaUploader init failed: {e}" )
128+ } ) ?;
129+
130+ info ! (
131+ name: "client.new.complete" ,
132+ target: "geneva-uploader" ,
133+ "GenevaClient initialized successfully"
134+ ) ;
100135
101136 Ok ( Self {
102137 uploader : Arc :: new ( uploader) ,
@@ -110,38 +145,92 @@ impl GenevaClient {
110145 & self ,
111146 logs : & [ ResourceLogs ] ,
112147 ) -> Result < Vec < EncodedBatch > , String > {
148+ debug ! (
149+ name: "client.encode_and_compress_logs" ,
150+ target: "geneva-uploader" ,
151+ resource_logs_count = logs. len( ) ,
152+ "Encoding and compressing resource logs"
153+ ) ;
154+
113155 let log_iter = logs
114156 . iter ( )
115157 . flat_map ( |resource_log| resource_log. scope_logs . iter ( ) )
116158 . flat_map ( |scope_log| scope_log. log_records . iter ( ) ) ;
117159
118160 self . encoder
119161 . encode_log_batch ( log_iter, & self . metadata )
120- . map_err ( |e| format ! ( "Compression failed: {e}" ) )
162+ . map_err ( |e| {
163+ debug ! (
164+ name: "client.encode_and_compress_logs.error" ,
165+ target: "geneva-uploader" ,
166+ error = %e,
167+ "Log compression failed"
168+ ) ;
169+ format ! ( "Compression failed: {e}" )
170+ } )
121171 }
122172
123173 /// Encode OTLP spans into LZ4 chunked compressed batches.
124174 pub fn encode_and_compress_spans (
125175 & self ,
126176 spans : & [ ResourceSpans ] ,
127177 ) -> Result < Vec < EncodedBatch > , String > {
178+ debug ! (
179+ name: "client.encode_and_compress_spans" ,
180+ target: "geneva-uploader" ,
181+ resource_spans_count = spans. len( ) ,
182+ "Encoding and compressing resource spans"
183+ ) ;
184+
128185 let span_iter = spans
129186 . iter ( )
130187 . flat_map ( |resource_span| resource_span. scope_spans . iter ( ) )
131188 . flat_map ( |scope_span| scope_span. spans . iter ( ) ) ;
132189
133190 self . encoder
134191 . encode_span_batch ( span_iter, & self . metadata )
135- . map_err ( |e| format ! ( "Compression failed: {e}" ) )
192+ . map_err ( |e| {
193+ debug ! (
194+ name: "client.encode_and_compress_spans.error" ,
195+ target: "geneva-uploader" ,
196+ error = %e,
197+ "Span compression failed"
198+ ) ;
199+ format ! ( "Compression failed: {e}" )
200+ } )
136201 }
137202
138203 /// Upload a single compressed batch.
139204 /// This allows for granular control over uploads, including custom retry logic for individual batches.
140205 pub async fn upload_batch ( & self , batch : & EncodedBatch ) -> Result < ( ) , String > {
206+ debug ! (
207+ name: "client.upload_batch" ,
208+ target: "geneva-uploader" ,
209+ event_name = %batch. event_name,
210+ size = batch. data. len( ) ,
211+ "Uploading batch"
212+ ) ;
213+
141214 self . uploader
142215 . upload ( batch. data . clone ( ) , & batch. event_name , & batch. metadata )
143216 . await
144- . map ( |_| ( ) )
145- . map_err ( |e| format ! ( "Geneva upload failed: {e} Event: {}" , batch. event_name) )
217+ . map ( |_| {
218+ debug ! (
219+ name: "client.upload_batch.success" ,
220+ target: "geneva-uploader" ,
221+ event_name = %batch. event_name,
222+ "Successfully uploaded batch"
223+ ) ;
224+ } )
225+ . map_err ( |e| {
226+ debug ! (
227+ name: "client.upload_batch.error" ,
228+ target: "geneva-uploader" ,
229+ event_name = %batch. event_name,
230+ error = %e,
231+ "Geneva upload failed"
232+ ) ;
233+ format ! ( "Geneva upload failed: {e} Event: {}" , batch. event_name)
234+ } )
146235 }
147236}
0 commit comments