8
8
using System . Collections . Generic ;
9
9
using System . Globalization ;
10
10
using System . IO ;
11
+ using System . Text ;
11
12
using Datadog . Trace . Configuration ;
12
13
using Datadog . Trace . DuckTyping ;
14
+ using Datadog . Trace . Iast . Aspects . System . Text ;
13
15
using Datadog . Trace . Logging ;
14
16
using Datadog . Trace . Util ;
15
17
using Datadog . Trace . Vendors . Microsoft . OpenApi . Any ;
@@ -83,6 +85,7 @@ internal static void EnrichActiveSpanWith(MessageDescriptorProxy? descriptor, st
83
85
84
86
activeSpan . SetTag ( Tags . SchemaDefinition , schema . JsonDefinition ) ;
85
87
activeSpan . SetTag ( Tags . SchemaId , schema . Hash . ToString ( CultureInfo . InvariantCulture ) ) ;
88
+ activeSpan . SetTag ( "schema.hash_data" , schema . HashData ) ;
86
89
activeSpan . SetTag ( Tags . SchemaWeight , weight . ToString ( CultureInfo . InvariantCulture ) ) ;
87
90
}
88
91
@@ -107,12 +110,15 @@ private Extractor(IDictionary<string, OpenApiSchema> componentsSchemas)
107
110
_schemas = componentsSchemas ;
108
111
}
109
112
113
+ public StringBuilder HashData { get ; set ; } = new ( ) ;
114
+
110
115
public static Schema ExtractSchemas ( MessageDescriptorProxy descriptor )
111
116
{
112
117
var components = new OpenApiComponents ( ) ;
113
- var hash = new Extractor ( components . Schemas ) . FillSchemasWith ( descriptor ) ; // fill the component's schemas
118
+ var ext = new Extractor ( components . Schemas ) ;
119
+ var hash = ext . FillSchemasWith ( descriptor ) ; // fill the component's schemas
114
120
var doc = new OpenApiDocument { Components = components } ;
115
- return new Schema ( doc , hash ) ;
121
+ return new Schema ( doc , hash , ext . HashData . ToString ( ) ) ;
116
122
}
117
123
118
124
/// <summary>
@@ -228,6 +234,8 @@ private Dictionary<string, OpenApiSchema> ExtractFields(MessageDescriptorProxy d
228
234
FillSchemasWith ( field . MessageType , depth + 1 ) ; // Recursively add nested schemas (conditions apply)
229
235
reference = new OpenApiReference { Id = field . MessageType . Name , Type = ReferenceType . Schema } ;
230
236
_computedHash = FnvHash64 . GenerateHash ( reference . Id , FnvHash64 . Version . V1A , _computedHash ) ;
237
+ HashData . Append ( "|" ) ;
238
+ HashData . Append ( reference . Id ) ;
231
239
break ;
232
240
case 11 :
233
241
type = "string" ;
@@ -256,6 +264,8 @@ private Dictionary<string, OpenApiSchema> ExtractFields(MessageDescriptorProxy d
256
264
var enumVal = e . DuckCast < IDescriptorProxy > ( ) ! ;
257
265
enumValues . Add ( new OpenApiString ( enumVal . Name ) ) ;
258
266
_computedHash = FnvHash64 . GenerateHash ( enumVal . Name , FnvHash64 . Version . V1A , _computedHash ) ;
267
+ HashData . Append ( "|" ) ;
268
+ HashData . Append ( enumVal . Name ) ;
259
269
}
260
270
261
271
break ;
@@ -270,6 +280,12 @@ private Dictionary<string, OpenApiSchema> ExtractFields(MessageDescriptorProxy d
270
280
_computedHash = FnvHash64 . GenerateHash ( field . FieldNumber . ToString ( CultureInfo . InvariantCulture ) , FnvHash64 . Version . V1A , _computedHash ) ;
271
281
_computedHash = FnvHash64 . GenerateHash ( field . FieldType . ToString ( CultureInfo . InvariantCulture ) , FnvHash64 . Version . V1A , _computedHash ) ;
272
282
_computedHash = FnvHash64 . GenerateHash ( depth . ToString ( CultureInfo . InvariantCulture ) , FnvHash64 . Version . V1A , _computedHash ) ;
283
+ HashData . Append ( "|" ) ;
284
+ HashData . Append ( field . FieldNumber . ToString ( CultureInfo . InvariantCulture ) ) ;
285
+ HashData . Append ( "|" ) ;
286
+ HashData . Append ( field . FieldType . ToString ( CultureInfo . InvariantCulture ) ) ;
287
+ HashData . Append ( "|" ) ;
288
+ HashData . Append ( depth . ToString ( CultureInfo . InvariantCulture ) ) ;
273
289
274
290
var property = new OpenApiSchema
275
291
{
@@ -297,7 +313,7 @@ private Dictionary<string, OpenApiSchema> ExtractFields(MessageDescriptorProxy d
297
313
298
314
private class Schema
299
315
{
300
- public Schema ( OpenApiDocument openApiDoc , ulong hash )
316
+ public Schema ( OpenApiDocument openApiDoc , ulong hash , string hashData )
301
317
{
302
318
using var writer = new StringWriter ( ) ;
303
319
try
@@ -313,10 +329,13 @@ public Schema(OpenApiDocument openApiDoc, ulong hash)
313
329
}
314
330
315
331
Hash = hash ;
332
+ HashData = hashData ;
316
333
}
317
334
318
335
internal string JsonDefinition { get ; }
319
336
320
337
internal ulong Hash { get ; }
338
+
339
+ internal string HashData { get ; }
321
340
}
322
341
}
0 commit comments