libdatadog 26.0.0.1.0-aarch64-linux → 28.0.0.1.0-aarch64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/libdatadog/version.rb +1 -1
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/LICENSE-3rdparty.yml +3373 -2915
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/common.h +172 -35
- data/vendor/{libdatadog-26.0.0/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl → libdatadog-28.0.0/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu}/include/datadog/crashtracker.h +55 -1
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/data-pipeline.h +0 -1
- data/vendor/{libdatadog-26.0.0/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl → libdatadog-28.0.0/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu}/include/datadog/profiling.h +127 -11
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so +0 -0
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/lib/pkgconfig/datadog_profiling_with_rpath.pc +1 -1
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/LICENSE-3rdparty.yml +3373 -2915
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/common.h +172 -35
- data/vendor/{libdatadog-26.0.0/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu → libdatadog-28.0.0/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl}/include/datadog/crashtracker.h +55 -1
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/data-pipeline.h +0 -1
- data/vendor/{libdatadog-26.0.0/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu → libdatadog-28.0.0/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl}/include/datadog/profiling.h +127 -11
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/lib/libdatadog_profiling.so +0 -0
- data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/lib/pkgconfig/datadog_profiling_with_rpath.pc +1 -1
- metadata +33 -33
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/LICENSE +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/NOTICE +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/bin/libdatadog-crashtracking-receiver +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/blazesym.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/ddsketch.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/ffe.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/library-config.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/log.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux/libdatadog-aarch64-unknown-linux-gnu/include/datadog/telemetry.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/LICENSE +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/NOTICE +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/bin/libdatadog-crashtracking-receiver +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/blazesym.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/ddsketch.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/ffe.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/library-config.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/log.h +0 -0
- /data/vendor/{libdatadog-26.0.0 → libdatadog-28.0.0}/aarch64-linux-musl/libdatadog-aarch64-alpine-linux-musl/include/datadog/telemetry.h +0 -0
|
@@ -263,6 +263,92 @@ typedef struct ddog_prof_Function2 *ddog_prof_FunctionId2;
|
|
|
263
263
|
|
|
264
264
|
#define ddog_prof_Set_SIZE_HINT (1024 * 1024)
|
|
265
265
|
|
|
266
|
+
/**
|
|
267
|
+
* Sample types supported by Datadog's profilers.
|
|
268
|
+
*
|
|
269
|
+
* Variants are sourced from:
|
|
270
|
+
* - **dd-trace-rb**: `stack_recorder.c` (`all_value_types`)
|
|
271
|
+
* - **dd-trace-py**: `dd_wrapper/include/types.hpp`
|
|
272
|
+
* - **dd-trace-php**: `profiling/src/profiling/samples.rs` (I/O profiling)
|
|
273
|
+
* - **dd-trace-dotnet**: Sample type definitions for allocations, locks, CPU, walltime,
|
|
274
|
+
* exceptions, live objects, HTTP requests
|
|
275
|
+
* - **pprof-nodejs**: `profile-serializer.ts` (value type functions)
|
|
276
|
+
*/
|
|
277
|
+
typedef enum ddog_prof_SampleType {
|
|
278
|
+
DDOG_PROF_SAMPLE_TYPE_ALLOC_SAMPLES,
|
|
279
|
+
DDOG_PROF_SAMPLE_TYPE_ALLOC_SAMPLES_UNSCALED,
|
|
280
|
+
DDOG_PROF_SAMPLE_TYPE_ALLOC_SIZE,
|
|
281
|
+
DDOG_PROF_SAMPLE_TYPE_ALLOC_SPACE,
|
|
282
|
+
DDOG_PROF_SAMPLE_TYPE_CPU_TIME,
|
|
283
|
+
DDOG_PROF_SAMPLE_TYPE_CPU_SAMPLES,
|
|
284
|
+
/**
|
|
285
|
+
* Legacy: Use `CpuTime` instead for consistency with naming scheme
|
|
286
|
+
*/
|
|
287
|
+
DDOG_PROF_SAMPLE_TYPE_CPU_LEGACY,
|
|
288
|
+
/**
|
|
289
|
+
* Legacy: Use `CpuSamples` instead for consistency with naming scheme
|
|
290
|
+
*/
|
|
291
|
+
DDOG_PROF_SAMPLE_TYPE_CPU_SAMPLE_LEGACY,
|
|
292
|
+
DDOG_PROF_SAMPLE_TYPE_EXCEPTION_SAMPLES,
|
|
293
|
+
/**
|
|
294
|
+
* Legacy: Use `ExceptionSamples` instead for consistency with naming scheme
|
|
295
|
+
*/
|
|
296
|
+
DDOG_PROF_SAMPLE_TYPE_EXCEPTION_LEGACY,
|
|
297
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_READ_SIZE,
|
|
298
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_READ_SIZE_SAMPLES,
|
|
299
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_READ_TIME,
|
|
300
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_READ_TIME_SAMPLES,
|
|
301
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_WRITE_SIZE,
|
|
302
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_WRITE_SIZE_SAMPLES,
|
|
303
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_WRITE_TIME,
|
|
304
|
+
DDOG_PROF_SAMPLE_TYPE_FILE_IO_WRITE_TIME_SAMPLES,
|
|
305
|
+
DDOG_PROF_SAMPLE_TYPE_GPU_ALLOC_SAMPLES,
|
|
306
|
+
DDOG_PROF_SAMPLE_TYPE_GPU_FLOPS,
|
|
307
|
+
DDOG_PROF_SAMPLE_TYPE_GPU_FLOPS_SAMPLES,
|
|
308
|
+
DDOG_PROF_SAMPLE_TYPE_GPU_SAMPLES,
|
|
309
|
+
DDOG_PROF_SAMPLE_TYPE_GPU_SPACE,
|
|
310
|
+
DDOG_PROF_SAMPLE_TYPE_GPU_TIME,
|
|
311
|
+
DDOG_PROF_SAMPLE_TYPE_HEAP_LIVE_SAMPLES,
|
|
312
|
+
DDOG_PROF_SAMPLE_TYPE_HEAP_LIVE_SIZE,
|
|
313
|
+
DDOG_PROF_SAMPLE_TYPE_HEAP_SPACE,
|
|
314
|
+
DDOG_PROF_SAMPLE_TYPE_INUSE_OBJECTS,
|
|
315
|
+
DDOG_PROF_SAMPLE_TYPE_INUSE_SPACE,
|
|
316
|
+
DDOG_PROF_SAMPLE_TYPE_LOCK_ACQUIRE,
|
|
317
|
+
DDOG_PROF_SAMPLE_TYPE_LOCK_ACQUIRE_WAIT,
|
|
318
|
+
DDOG_PROF_SAMPLE_TYPE_LOCK_COUNT,
|
|
319
|
+
DDOG_PROF_SAMPLE_TYPE_LOCK_RELEASE,
|
|
320
|
+
DDOG_PROF_SAMPLE_TYPE_LOCK_RELEASE_HOLD,
|
|
321
|
+
DDOG_PROF_SAMPLE_TYPE_LOCK_TIME,
|
|
322
|
+
/**
|
|
323
|
+
* Legacy: Use `InuseObjects` instead for consistency with naming scheme
|
|
324
|
+
*/
|
|
325
|
+
DDOG_PROF_SAMPLE_TYPE_OBJECTS_LEGACY,
|
|
326
|
+
DDOG_PROF_SAMPLE_TYPE_REQUEST_TIME,
|
|
327
|
+
DDOG_PROF_SAMPLE_TYPE_SAMPLE,
|
|
328
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_READ_SIZE,
|
|
329
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_READ_SIZE_SAMPLES,
|
|
330
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_READ_TIME,
|
|
331
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_READ_TIME_SAMPLES,
|
|
332
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_WRITE_SIZE,
|
|
333
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_WRITE_SIZE_SAMPLES,
|
|
334
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_WRITE_TIME,
|
|
335
|
+
DDOG_PROF_SAMPLE_TYPE_SOCKET_WRITE_TIME_SAMPLES,
|
|
336
|
+
/**
|
|
337
|
+
* Legacy: Use specific space variants (`InuseSpace`, `HeapSpace`, `AllocSpace`) instead
|
|
338
|
+
*/
|
|
339
|
+
DDOG_PROF_SAMPLE_TYPE_SPACE_LEGACY,
|
|
340
|
+
DDOG_PROF_SAMPLE_TYPE_TIMELINE,
|
|
341
|
+
DDOG_PROF_SAMPLE_TYPE_WALL_SAMPLES,
|
|
342
|
+
DDOG_PROF_SAMPLE_TYPE_WALL_TIME,
|
|
343
|
+
/**
|
|
344
|
+
* Legacy: Use `WallTime` instead for consistency with naming scheme
|
|
345
|
+
*/
|
|
346
|
+
DDOG_PROF_SAMPLE_TYPE_WALL_LEGACY,
|
|
347
|
+
DDOG_PROF_SAMPLE_TYPE_EXPERIMENTAL_COUNT,
|
|
348
|
+
DDOG_PROF_SAMPLE_TYPE_EXPERIMENTAL_NANOSECONDS,
|
|
349
|
+
DDOG_PROF_SAMPLE_TYPE_EXPERIMENTAL_BYTES,
|
|
350
|
+
} ddog_prof_SampleType;
|
|
351
|
+
|
|
266
352
|
typedef enum ddog_prof_Utf8Option {
|
|
267
353
|
/**
|
|
268
354
|
* The string is assumed to be valid UTF-8. If it's not, the behavior
|
|
@@ -284,6 +370,8 @@ typedef struct ddog_OpaqueCancellationToken ddog_OpaqueCancellationToken;
|
|
|
284
370
|
|
|
285
371
|
typedef struct ddog_prof_EncodedProfile ddog_prof_EncodedProfile;
|
|
286
372
|
|
|
373
|
+
typedef struct ddog_prof_ExporterManager ddog_prof_ExporterManager;
|
|
374
|
+
|
|
287
375
|
typedef struct ddog_prof_Exporter ddog_prof_Exporter;
|
|
288
376
|
|
|
289
377
|
/**
|
|
@@ -344,12 +432,14 @@ typedef enum ddog_prof_Endpoint_Tag {
|
|
|
344
432
|
typedef struct ddog_prof_Endpoint_ddog_prof_Agent_Body {
|
|
345
433
|
ddog_CharSlice _0;
|
|
346
434
|
uint64_t _1;
|
|
435
|
+
bool _2;
|
|
347
436
|
} ddog_prof_Endpoint_ddog_prof_Agent_Body;
|
|
348
437
|
|
|
349
438
|
typedef struct ddog_prof_Endpoint_ddog_prof_Agentless_Body {
|
|
350
439
|
ddog_CharSlice _0;
|
|
351
440
|
ddog_CharSlice _1;
|
|
352
441
|
uint64_t _2;
|
|
442
|
+
bool _3;
|
|
353
443
|
} ddog_prof_Endpoint_ddog_prof_Agentless_Body;
|
|
354
444
|
|
|
355
445
|
typedef struct ddog_prof_Endpoint {
|
|
@@ -435,6 +525,53 @@ typedef struct ddog_CancellationToken {
|
|
|
435
525
|
ddog_prof_TokioCancellationToken *inner;
|
|
436
526
|
} ddog_CancellationToken;
|
|
437
527
|
|
|
528
|
+
/**
|
|
529
|
+
* Represents an object that should only be referred to by its handle.
|
|
530
|
+
* Do not access its member for any reason, only use the C API functions on this struct.
|
|
531
|
+
*/
|
|
532
|
+
typedef struct ddog_prof_Handle_ExporterManager {
|
|
533
|
+
struct ddog_prof_ExporterManager *inner;
|
|
534
|
+
} ddog_prof_Handle_ExporterManager;
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* A generic result type for when an operation may fail,
|
|
538
|
+
* or may return <T> in case of success.
|
|
539
|
+
*/
|
|
540
|
+
typedef enum ddog_prof_Result_HandleExporterManager_Tag {
|
|
541
|
+
DDOG_PROF_RESULT_HANDLE_EXPORTER_MANAGER_OK_HANDLE_EXPORTER_MANAGER,
|
|
542
|
+
DDOG_PROF_RESULT_HANDLE_EXPORTER_MANAGER_ERR_HANDLE_EXPORTER_MANAGER,
|
|
543
|
+
} ddog_prof_Result_HandleExporterManager_Tag;
|
|
544
|
+
|
|
545
|
+
typedef struct ddog_prof_Result_HandleExporterManager {
|
|
546
|
+
ddog_prof_Result_HandleExporterManager_Tag tag;
|
|
547
|
+
union {
|
|
548
|
+
struct {
|
|
549
|
+
struct ddog_prof_Handle_ExporterManager ok;
|
|
550
|
+
};
|
|
551
|
+
struct {
|
|
552
|
+
struct ddog_Error err;
|
|
553
|
+
};
|
|
554
|
+
};
|
|
555
|
+
} ddog_prof_Result_HandleExporterManager;
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* A generic result type for when an operation may fail,
|
|
559
|
+
* but there's nothing to return in the case of success.
|
|
560
|
+
*/
|
|
561
|
+
typedef enum ddog_VoidResult_Tag {
|
|
562
|
+
DDOG_VOID_RESULT_OK,
|
|
563
|
+
DDOG_VOID_RESULT_ERR,
|
|
564
|
+
} ddog_VoidResult_Tag;
|
|
565
|
+
|
|
566
|
+
typedef struct ddog_VoidResult {
|
|
567
|
+
ddog_VoidResult_Tag tag;
|
|
568
|
+
union {
|
|
569
|
+
struct {
|
|
570
|
+
struct ddog_Error err;
|
|
571
|
+
};
|
|
572
|
+
};
|
|
573
|
+
} ddog_VoidResult;
|
|
574
|
+
|
|
438
575
|
/**
|
|
439
576
|
* Represents the result of an operation that either succeeds with no value, or fails with an
|
|
440
577
|
* error message. This is like `Result<(), Cow<'static, CStr>` except its representation is
|
|
@@ -516,27 +653,22 @@ typedef struct ddog_prof_Profile_NewResult {
|
|
|
516
653
|
};
|
|
517
654
|
} ddog_prof_Profile_NewResult;
|
|
518
655
|
|
|
519
|
-
typedef struct
|
|
520
|
-
ddog_CharSlice type_;
|
|
521
|
-
ddog_CharSlice unit;
|
|
522
|
-
} ddog_prof_ValueType;
|
|
523
|
-
|
|
524
|
-
typedef struct ddog_prof_Slice_ValueType {
|
|
656
|
+
typedef struct ddog_prof_Slice_SampleType {
|
|
525
657
|
/**
|
|
526
658
|
* Should be non-null and suitably aligned for the underlying type. It is
|
|
527
659
|
* allowed but not recommended for the pointer to be null when the len is
|
|
528
660
|
* zero.
|
|
529
661
|
*/
|
|
530
|
-
const
|
|
662
|
+
const enum ddog_prof_SampleType *ptr;
|
|
531
663
|
/**
|
|
532
664
|
* The number of elements (not bytes) that `.ptr` points to. Must be less
|
|
533
665
|
* than or equal to [isize::MAX].
|
|
534
666
|
*/
|
|
535
667
|
uintptr_t len;
|
|
536
|
-
}
|
|
668
|
+
} ddog_prof_Slice_SampleType;
|
|
537
669
|
|
|
538
670
|
typedef struct ddog_prof_Period {
|
|
539
|
-
|
|
671
|
+
enum ddog_prof_SampleType sample_type;
|
|
540
672
|
int64_t value;
|
|
541
673
|
} ddog_prof_Period;
|
|
542
674
|
|
|
@@ -786,6 +918,9 @@ typedef struct ddog_prof_Mapping2 {
|
|
|
786
918
|
* performed on; it is not generally guaranteed that ids from one dictionary
|
|
787
919
|
* can be used in another dictionary, even if it happens to work by
|
|
788
920
|
* implementation detail.
|
|
921
|
+
*
|
|
922
|
+
* `Eq`/`Hash` and other comparisons are based on this handle value, and are
|
|
923
|
+
* only intended for ids produced by the same `ProfilesDictionary`.
|
|
789
924
|
*/
|
|
790
925
|
typedef struct ddog_prof_Mapping2 *ddog_prof_MappingId2;
|
|
791
926
|
|
|
@@ -808,9 +943,18 @@ typedef struct ddog_prof_Function2 {
|
|
|
808
943
|
* performed on; it is not generally guaranteed that ids from one dictionary
|
|
809
944
|
* can be used in another dictionary, even if it happens to work by
|
|
810
945
|
* implementation detail.
|
|
946
|
+
*
|
|
947
|
+
* `Eq`/`Hash` and other comparisons are based on this handle value, and are
|
|
948
|
+
* only intended for ids produced by the same `ProfilesDictionary`.
|
|
811
949
|
*/
|
|
812
950
|
typedef struct ddog_prof_Function2 *ddog_prof_FunctionId2;
|
|
813
951
|
|
|
952
|
+
/**
|
|
953
|
+
* A location keyed by `MappingId2`/`FunctionId2` handles.
|
|
954
|
+
*
|
|
955
|
+
* `Eq`/`Hash` comparisons use those handle values, so they are intended for
|
|
956
|
+
* data that comes from the same `ProfilesDictionary`.
|
|
957
|
+
*/
|
|
814
958
|
typedef struct ddog_prof_Location2 {
|
|
815
959
|
ddog_prof_MappingId2 mapping;
|
|
816
960
|
ddog_prof_FunctionId2 function;
|
|
@@ -1145,24 +1289,6 @@ typedef struct ddog_prof_StringId_Result {
|
|
|
1145
1289
|
};
|
|
1146
1290
|
} ddog_prof_StringId_Result;
|
|
1147
1291
|
|
|
1148
|
-
/**
|
|
1149
|
-
* A generic result type for when an operation may fail,
|
|
1150
|
-
* but there's nothing to return in the case of success.
|
|
1151
|
-
*/
|
|
1152
|
-
typedef enum ddog_VoidResult_Tag {
|
|
1153
|
-
DDOG_VOID_RESULT_OK,
|
|
1154
|
-
DDOG_VOID_RESULT_ERR,
|
|
1155
|
-
} ddog_VoidResult_Tag;
|
|
1156
|
-
|
|
1157
|
-
typedef struct ddog_VoidResult {
|
|
1158
|
-
ddog_VoidResult_Tag tag;
|
|
1159
|
-
union {
|
|
1160
|
-
struct {
|
|
1161
|
-
struct ddog_Error err;
|
|
1162
|
-
};
|
|
1163
|
-
};
|
|
1164
|
-
} ddog_VoidResult;
|
|
1165
|
-
|
|
1166
1292
|
typedef struct ddog_prof_Slice_ManagedStringId {
|
|
1167
1293
|
/**
|
|
1168
1294
|
* Should be non-null and suitably aligned for the underlying type. It is
|
|
@@ -2283,6 +2409,14 @@ typedef struct ddog_crasht_Slice_CInt {
|
|
|
2283
2409
|
uintptr_t len;
|
|
2284
2410
|
} ddog_crasht_Slice_CInt;
|
|
2285
2411
|
|
|
2412
|
+
/**
|
|
2413
|
+
* Represents an object that should only be referred to by its handle.
|
|
2414
|
+
* Do not access its member for any reason, only use the C API functions on this struct.
|
|
2415
|
+
*/
|
|
2416
|
+
typedef struct ddog_crasht_Handle_StackTrace {
|
|
2417
|
+
struct ddog_crasht_StackTrace *inner;
|
|
2418
|
+
} ddog_crasht_Handle_StackTrace;
|
|
2419
|
+
|
|
2286
2420
|
/**
|
|
2287
2421
|
* A generic result type for when an operation may fail,
|
|
2288
2422
|
* or may return <T> in case of success.
|
|
@@ -2369,6 +2503,10 @@ typedef struct ddog_crasht_OsInfo {
|
|
|
2369
2503
|
|
|
2370
2504
|
typedef struct ddog_crasht_ProcInfo {
|
|
2371
2505
|
uint32_t pid;
|
|
2506
|
+
/**
|
|
2507
|
+
* Optional crashing thread id; 0 means unset.
|
|
2508
|
+
*/
|
|
2509
|
+
uint32_t tid;
|
|
2372
2510
|
} ddog_crasht_ProcInfo;
|
|
2373
2511
|
|
|
2374
2512
|
typedef struct ddog_crasht_SigInfo {
|
|
@@ -2384,14 +2522,6 @@ typedef struct ddog_crasht_Span {
|
|
|
2384
2522
|
ddog_CharSlice thread_name;
|
|
2385
2523
|
} ddog_crasht_Span;
|
|
2386
2524
|
|
|
2387
|
-
/**
|
|
2388
|
-
* Represents an object that should only be referred to by its handle.
|
|
2389
|
-
* Do not access its member for any reason, only use the C API functions on this struct.
|
|
2390
|
-
*/
|
|
2391
|
-
typedef struct ddog_crasht_Handle_StackTrace {
|
|
2392
|
-
struct ddog_crasht_StackTrace *inner;
|
|
2393
|
-
} ddog_crasht_Handle_StackTrace;
|
|
2394
|
-
|
|
2395
2525
|
typedef struct ddog_crasht_ThreadData {
|
|
2396
2526
|
bool crashed;
|
|
2397
2527
|
ddog_CharSlice name;
|
|
@@ -2591,6 +2721,13 @@ void ddog_endpoint_set_timeout(struct ddog_Endpoint *endpoint, uint64_t millis);
|
|
|
2591
2721
|
|
|
2592
2722
|
void ddog_endpoint_set_test_token(struct ddog_Endpoint *endpoint, ddog_CharSlice token);
|
|
2593
2723
|
|
|
2724
|
+
/**
|
|
2725
|
+
* Set whether to use the system DNS resolver when building the reqwest client.
|
|
2726
|
+
* If false, the default in-process resolver is used.
|
|
2727
|
+
*/
|
|
2728
|
+
void ddog_endpoint_set_use_system_resolver(struct ddog_Endpoint *endpoint,
|
|
2729
|
+
bool use_system_resolver);
|
|
2730
|
+
|
|
2594
2731
|
void ddog_endpoint_drop(struct ddog_Endpoint*);
|
|
2595
2732
|
|
|
2596
2733
|
struct ddog_Option_U32 ddog_Option_U32_some(uint32_t v);
|
|
@@ -131,6 +131,45 @@ struct ddog_VoidResult ddog_crasht_init_without_receiver(struct ddog_crasht_Conf
|
|
|
131
131
|
*/
|
|
132
132
|
struct ddog_crasht_Slice_CInt ddog_crasht_default_signals(void);
|
|
133
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Report an unhandled exception as a crash event.
|
|
136
|
+
*
|
|
137
|
+
* This function sends a crash report for an unhandled exception detected
|
|
138
|
+
* by the runtime. It is intended to be called when the process is in a
|
|
139
|
+
* terminal state due to an unhandled exception.
|
|
140
|
+
*
|
|
141
|
+
* # Parameters
|
|
142
|
+
* - `error_type`: Optional type/class of the exception (e.g. "NullPointerException"). Pass empty
|
|
143
|
+
* CharSlice for unknown.
|
|
144
|
+
* - `error_message`: Optional error message. Pass empty CharSlice for no message.
|
|
145
|
+
* - `runtime_stack`: Stack trace from the runtime. Consumed by this call.
|
|
146
|
+
*
|
|
147
|
+
* If the crash-tracker has not been initialized, this function is a no-op.
|
|
148
|
+
*
|
|
149
|
+
* # Side effects
|
|
150
|
+
* This function disables the signal-based crash handler before performing
|
|
151
|
+
* any work. This means that if the process receives a fatal signal (SIGSEGV)
|
|
152
|
+
* during or after this call, the crashtracker will not produce a
|
|
153
|
+
* second crash report. The previous signal handler (if any) will still be
|
|
154
|
+
* chained.
|
|
155
|
+
*
|
|
156
|
+
* # Failure mode
|
|
157
|
+
* If a fatal signal occurs while this function is in progress, the calling
|
|
158
|
+
* process is in an unrecoverable state; the crashtracker cannot report the
|
|
159
|
+
* secondary fault and the caller's own signal handler (if any) will execute
|
|
160
|
+
* in a potentially corrupted context. Callers should treat this function as a
|
|
161
|
+
* terminal operation and exit shortly after it returns.
|
|
162
|
+
*
|
|
163
|
+
* # Safety
|
|
164
|
+
* Crash-tracking functions are not reentrant.
|
|
165
|
+
* No other crash-handler functions should be called concurrently.
|
|
166
|
+
* The `runtime_stack` handle must be valid and will be consumed.
|
|
167
|
+
*/
|
|
168
|
+
DDOG_CHECK_RETURN
|
|
169
|
+
struct ddog_VoidResult ddog_crasht_report_unhandled_exception(ddog_CharSlice error_type,
|
|
170
|
+
ddog_CharSlice error_message,
|
|
171
|
+
struct ddog_crasht_Handle_StackTrace *runtime_stack);
|
|
172
|
+
|
|
134
173
|
/**
|
|
135
174
|
* Removes all existing additional tags
|
|
136
175
|
* Expected to be used after a fork, to reset the additional tags on the child
|
|
@@ -646,12 +685,27 @@ DDOG_CHECK_RETURN
|
|
|
646
685
|
struct ddog_VoidResult ddog_crasht_CrashInfoBuilder_with_message(struct ddog_crasht_Handle_CrashInfoBuilder *builder,
|
|
647
686
|
ddog_CharSlice message);
|
|
648
687
|
|
|
688
|
+
/**
|
|
689
|
+
* # Safety
|
|
690
|
+
* The `builder` can be null, but if non-null it must point to a Builder made by this module,
|
|
691
|
+
* which has not previously been dropped.
|
|
692
|
+
* The CharSlice must be valid.
|
|
693
|
+
*/
|
|
694
|
+
DDOG_CHECK_RETURN
|
|
695
|
+
struct ddog_VoidResult ddog_crasht_CrashInfoBuilder_with_thread_name(struct ddog_crasht_Handle_CrashInfoBuilder *builder,
|
|
696
|
+
ddog_CharSlice thread_name);
|
|
697
|
+
|
|
649
698
|
/**
|
|
650
699
|
* # Safety
|
|
651
700
|
* The `builder` can be null, but if non-null it must point to a Builder made by this module,
|
|
652
701
|
* which has not previously been dropped.
|
|
653
702
|
* All arguments must be valid.
|
|
654
|
-
* This method requires that the builder has
|
|
703
|
+
* This method requires that the builder has `metadata` and `kind` set
|
|
704
|
+
* Applications can add `message` or `sig_info` to the builder to provide additional context.
|
|
705
|
+
* If set, the data will be used to derive the crash ping message in the order of
|
|
706
|
+
* - an explicit message set with `with_message`
|
|
707
|
+
* - sig_info set with `with_sig_info`
|
|
708
|
+
* - kind set with `with_kind`
|
|
655
709
|
*/
|
|
656
710
|
DDOG_CHECK_RETURN
|
|
657
711
|
struct ddog_VoidResult ddog_crasht_CrashInfoBuilder_upload_ping_to_endpoint(struct ddog_crasht_Handle_CrashInfoBuilder *builder,
|
|
@@ -173,7 +173,6 @@ void ddog_trace_exporter_free(struct ddog_TraceExporter *handle);
|
|
|
173
173
|
*/
|
|
174
174
|
struct ddog_TraceExporterError *ddog_trace_exporter_send(const struct ddog_TraceExporter *handle,
|
|
175
175
|
ddog_ByteSlice trace,
|
|
176
|
-
uintptr_t trace_count,
|
|
177
176
|
struct ddog_TraceExporterResponse **response_out);
|
|
178
177
|
|
|
179
178
|
#ifdef __cplusplus
|
|
@@ -63,8 +63,12 @@ DDOG_CHECK_RETURN struct ddog_prof_Exporter_Slice_File ddog_prof_Exporter_Slice_
|
|
|
63
63
|
* # Arguments
|
|
64
64
|
* * `base_url` - Contains a URL with scheme, host, and port e.g. "https://agent:8126/".
|
|
65
65
|
* * `timeout_ms` - Timeout in milliseconds. Use 0 for default timeout (3000ms).
|
|
66
|
+
* * `use_system_resolver` - If true, use the system DNS resolver (less fork-safe). If false, the
|
|
67
|
+
* default in-process resolver is used (fork-safe).
|
|
66
68
|
*/
|
|
67
|
-
struct ddog_prof_Endpoint ddog_prof_Endpoint_agent(ddog_CharSlice base_url,
|
|
69
|
+
struct ddog_prof_Endpoint ddog_prof_Endpoint_agent(ddog_CharSlice base_url,
|
|
70
|
+
uint64_t timeout_ms,
|
|
71
|
+
bool use_system_resolver);
|
|
68
72
|
|
|
69
73
|
/**
|
|
70
74
|
* Creates an endpoint that uses the Datadog intake directly aka agentless.
|
|
@@ -72,10 +76,13 @@ struct ddog_prof_Endpoint ddog_prof_Endpoint_agent(ddog_CharSlice base_url, uint
|
|
|
72
76
|
* * `site` - Contains a host and port e.g. "datadoghq.com".
|
|
73
77
|
* * `api_key` - Contains the Datadog API key.
|
|
74
78
|
* * `timeout_ms` - Timeout in milliseconds. Use 0 for default timeout (3000ms).
|
|
79
|
+
* * `use_system_resolver` - If true, use the system DNS resolver (less fork-safe). If false, the
|
|
80
|
+
* default in-process resolver is used (fork-safe).
|
|
75
81
|
*/
|
|
76
82
|
struct ddog_prof_Endpoint ddog_prof_Endpoint_agentless(ddog_CharSlice site,
|
|
77
83
|
ddog_CharSlice api_key,
|
|
78
|
-
uint64_t timeout_ms
|
|
84
|
+
uint64_t timeout_ms,
|
|
85
|
+
bool use_system_resolver);
|
|
79
86
|
|
|
80
87
|
/**
|
|
81
88
|
* Creates an endpoint that writes to a file.
|
|
@@ -99,7 +106,8 @@ struct ddog_prof_Endpoint ddog_Endpoint_file(ddog_CharSlice filename);
|
|
|
99
106
|
* * `family` - Profile family, e.g. "ruby"
|
|
100
107
|
* * `tags` - Tags to include with every profile reported by this exporter. It's also possible to
|
|
101
108
|
* include profile-specific tags, see `additional_tags` on `profile_exporter_build`.
|
|
102
|
-
* * `endpoint` - Configuration for reporting data
|
|
109
|
+
* * `endpoint` - Configuration for reporting data (includes use_system_resolver for
|
|
110
|
+
* Agent/Agentless).
|
|
103
111
|
* # Safety
|
|
104
112
|
* All pointers must refer to valid objects of the correct types.
|
|
105
113
|
*/
|
|
@@ -120,9 +128,6 @@ void ddog_prof_Exporter_drop(struct ddog_prof_ProfileExporter *exporter);
|
|
|
120
128
|
|
|
121
129
|
/**
|
|
122
130
|
* Builds a request and sends it, returning the HttpStatus.
|
|
123
|
-
* This is a more efficient version of calling `ddog_prof_Exporter_Request_build`
|
|
124
|
-
* followed by `ddog_prof_Exporter_send`, as it avoids exposing the intermediate
|
|
125
|
-
* `Request` object.
|
|
126
131
|
*
|
|
127
132
|
* # Arguments
|
|
128
133
|
* * `exporter` - Borrows the exporter.
|
|
@@ -196,6 +201,112 @@ bool ddog_CancellationToken_cancel(struct ddog_CancellationToken *cancel);
|
|
|
196
201
|
*/
|
|
197
202
|
void ddog_CancellationToken_drop(struct ddog_CancellationToken *token);
|
|
198
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Creates a new ExporterManager with a background worker thread.
|
|
206
|
+
*
|
|
207
|
+
* The ExporterManager provides asynchronous profle export capabilities through a
|
|
208
|
+
* background worker thread and bounded channel.
|
|
209
|
+
*
|
|
210
|
+
* # Arguments
|
|
211
|
+
* * `exporter` - Takes ownership of the ProfileExporter to use for sending profiles.
|
|
212
|
+
*
|
|
213
|
+
* # Safety
|
|
214
|
+
* The `exporter` must point to a valid ProfileExporter that has not been dropped.
|
|
215
|
+
*/
|
|
216
|
+
DDOG_CHECK_RETURN
|
|
217
|
+
struct ddog_prof_Result_HandleExporterManager ddog_prof_ExporterManager_new(struct ddog_prof_ProfileExporter *exporter);
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Queues a profile to be sent asynchronously by the background worker thread.
|
|
221
|
+
*
|
|
222
|
+
* **Important**: This function resets the profile and queues the *previous* profile data.
|
|
223
|
+
* After calling this, the profile will be empty and ready for new samples.
|
|
224
|
+
*
|
|
225
|
+
* # Arguments
|
|
226
|
+
* * `manager` - Borrows the ExporterManager.
|
|
227
|
+
* * `profile` - Takes ownership of the profile to send.
|
|
228
|
+
* * `files_to_compress_and_export` - Files to compress and attach to the profile.
|
|
229
|
+
* * `optional_additional_tags` - Additional tags to include with this profile.
|
|
230
|
+
* * `optional_process_tags` - Process-level tags as a comma-separated string.
|
|
231
|
+
* * `optional_internal_metadata_json` - Internal metadata as a JSON string.
|
|
232
|
+
* * `optional_info_json` - System info as a JSON string.
|
|
233
|
+
*
|
|
234
|
+
* # Safety
|
|
235
|
+
* All non-null arguments MUST have been created by APIs in this module.
|
|
236
|
+
*/
|
|
237
|
+
DDOG_CHECK_RETURN
|
|
238
|
+
struct ddog_VoidResult ddog_prof_ExporterManager_queue(struct ddog_prof_Handle_ExporterManager *manager,
|
|
239
|
+
struct ddog_prof_EncodedProfile *profile,
|
|
240
|
+
struct ddog_prof_Exporter_Slice_File files_to_compress_and_export,
|
|
241
|
+
const struct ddog_Vec_Tag *optional_additional_tags,
|
|
242
|
+
const ddog_CharSlice *optional_process_tags,
|
|
243
|
+
const ddog_CharSlice *optional_internal_metadata_json,
|
|
244
|
+
const ddog_CharSlice *optional_info_json);
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Aborts the manager, stopping the worker thread and returning inflight requests.
|
|
248
|
+
*
|
|
249
|
+
* **Note**: This consumes the manager - it cannot be used after calling abort.
|
|
250
|
+
*
|
|
251
|
+
* # Arguments
|
|
252
|
+
* * `manager` - Takes ownership of the ExporterManager.
|
|
253
|
+
*
|
|
254
|
+
* # Safety
|
|
255
|
+
* The `manager` must point to a valid ExporterManager that has not been dropped.
|
|
256
|
+
*/
|
|
257
|
+
DDOG_CHECK_RETURN
|
|
258
|
+
struct ddog_VoidResult ddog_prof_ExporterManager_abort(struct ddog_prof_Handle_ExporterManager *manager);
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Suspends the manager before forking (prefork).
|
|
262
|
+
*
|
|
263
|
+
* **Note**: This consumes the manager - it cannot be used after calling prefork.
|
|
264
|
+
*
|
|
265
|
+
* # Arguments
|
|
266
|
+
* * `manager` - Takes ownership of the ExporterManager.
|
|
267
|
+
*
|
|
268
|
+
* # Safety
|
|
269
|
+
* The `manager` must point to a valid ExporterManager that has not been dropped.
|
|
270
|
+
*/
|
|
271
|
+
DDOG_CHECK_RETURN
|
|
272
|
+
struct ddog_VoidResult ddog_prof_ExporterManager_prefork(struct ddog_prof_Handle_ExporterManager *manager);
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Creates a new manager in the child process after forking (postfork_child).
|
|
276
|
+
*
|
|
277
|
+
* Inflight requests from the parent are discarded in the child.
|
|
278
|
+
*
|
|
279
|
+
* # Arguments
|
|
280
|
+
* * `suspended` - Takes ownership of the suspended ExporterManager.
|
|
281
|
+
*
|
|
282
|
+
* # Safety
|
|
283
|
+
* The `suspended` must point to a valid suspended ExporterManager that has not been dropped.
|
|
284
|
+
*/
|
|
285
|
+
DDOG_CHECK_RETURN
|
|
286
|
+
struct ddog_VoidResult ddog_prof_ExporterManager_postfork_child(struct ddog_prof_Handle_ExporterManager *suspended);
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Creates a new manager in the parent process after forking (postfork_parent).
|
|
290
|
+
*
|
|
291
|
+
* Inflight requests from before the fork are re-queued in the new manager.
|
|
292
|
+
*
|
|
293
|
+
* # Arguments
|
|
294
|
+
* * `suspended` - Takes ownership of the suspended ExporterManager.
|
|
295
|
+
*
|
|
296
|
+
* # Safety
|
|
297
|
+
* The `suspended` must point to a valid suspended ExporterManager that has not been dropped.
|
|
298
|
+
*/
|
|
299
|
+
DDOG_CHECK_RETURN
|
|
300
|
+
struct ddog_VoidResult ddog_prof_ExporterManager_postfork_parent(struct ddog_prof_Handle_ExporterManager *suspended);
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* # Safety
|
|
304
|
+
* The `manager` may be null, but if non-null the pointer must point to a
|
|
305
|
+
* valid `ExporterManager` object made by the Rust Global allocator that
|
|
306
|
+
* has not already been dropped.
|
|
307
|
+
*/
|
|
308
|
+
void ddog_prof_ExporterManager_drop(struct ddog_prof_Handle_ExporterManager *manager);
|
|
309
|
+
|
|
199
310
|
/**
|
|
200
311
|
* Frees any error associated with the status, and replaces it with an OK.
|
|
201
312
|
*
|
|
@@ -210,7 +321,7 @@ void ddog_prof_Status_drop(struct ddog_prof_Status *status);
|
|
|
210
321
|
* `ddog_prof_Profile_drop` when you are done with the profile.
|
|
211
322
|
*
|
|
212
323
|
* # Arguments
|
|
213
|
-
* * `sample_types`
|
|
324
|
+
* * `sample_types` - A slice of SampleType enums
|
|
214
325
|
* * `period` - Optional period of the profile. Passing None/null translates to zero values.
|
|
215
326
|
* * `start_time` - Optional time the profile started at. Passing None/null will use the current
|
|
216
327
|
* time.
|
|
@@ -220,7 +331,7 @@ void ddog_prof_Status_drop(struct ddog_prof_Status *status);
|
|
|
220
331
|
* and must have the correct number of elements for the slice.
|
|
221
332
|
*/
|
|
222
333
|
DDOG_CHECK_RETURN
|
|
223
|
-
struct ddog_prof_Profile_NewResult ddog_prof_Profile_new(struct
|
|
334
|
+
struct ddog_prof_Profile_NewResult ddog_prof_Profile_new(struct ddog_prof_Slice_SampleType sample_types,
|
|
224
335
|
const struct ddog_prof_Period *period);
|
|
225
336
|
|
|
226
337
|
/**
|
|
@@ -230,7 +341,7 @@ struct ddog_prof_Profile_NewResult ddog_prof_Profile_new(struct ddog_prof_Slice_
|
|
|
230
341
|
* # Arguments
|
|
231
342
|
* * `out` - a non-null pointer to an uninitialized Profile.
|
|
232
343
|
* * `dict`: a valid reference to a ProfilesDictionary handle.
|
|
233
|
-
* * `sample_types`
|
|
344
|
+
* * `sample_types` - A slice of SampleType enums
|
|
234
345
|
* * `period` - Optional period of the profile. Passing None/null translates to zero values.
|
|
235
346
|
*
|
|
236
347
|
* # Safety
|
|
@@ -246,7 +357,7 @@ struct ddog_prof_Profile_NewResult ddog_prof_Profile_new(struct ddog_prof_Slice_
|
|
|
246
357
|
DDOG_CHECK_RETURN
|
|
247
358
|
struct ddog_prof_Status ddog_prof_Profile_with_dictionary(struct ddog_prof_Profile *out,
|
|
248
359
|
const ddog_prof_ProfilesDictionaryHandle *dict,
|
|
249
|
-
struct
|
|
360
|
+
struct ddog_prof_Slice_SampleType sample_types,
|
|
250
361
|
const struct ddog_prof_Period *period);
|
|
251
362
|
|
|
252
363
|
/**
|
|
@@ -254,7 +365,7 @@ struct ddog_prof_Status ddog_prof_Profile_with_dictionary(struct ddog_prof_Profi
|
|
|
254
365
|
* TODO: @ivoanjo Should this take a `*mut ManagedStringStorage` like Profile APIs do?
|
|
255
366
|
*/
|
|
256
367
|
DDOG_CHECK_RETURN
|
|
257
|
-
struct ddog_prof_Profile_NewResult ddog_prof_Profile_with_string_storage(struct
|
|
368
|
+
struct ddog_prof_Profile_NewResult ddog_prof_Profile_with_string_storage(struct ddog_prof_Slice_SampleType sample_types,
|
|
258
369
|
const struct ddog_prof_Period *period,
|
|
259
370
|
struct ddog_prof_ManagedStringStorage string_storage);
|
|
260
371
|
|
|
@@ -826,6 +937,11 @@ struct ddog_prof_Status ddog_prof_ProfilesDictionary_insert_mapping(ddog_prof_Ma
|
|
|
826
937
|
/**
|
|
827
938
|
* Inserts a UTF-8 string into the dictionary string table.
|
|
828
939
|
*
|
|
940
|
+
* Copies the string into the internal buffer--strings are arena allocated
|
|
941
|
+
* and not individually allocated. On success, the [`StringId2`] written to
|
|
942
|
+
* the `string_id` out parameter is valid as long as this dictionary is alive.
|
|
943
|
+
* It should only be passed back to the dictionary that created it.
|
|
944
|
+
*
|
|
829
945
|
* # Safety
|
|
830
946
|
*
|
|
831
947
|
* - `string_id` must be non-null and valid for writes of `StringId`.
|
|
Binary file
|
|
@@ -8,7 +8,7 @@ includedir=${prefix}/include
|
|
|
8
8
|
|
|
9
9
|
Name: datadog_profiling
|
|
10
10
|
Description: Contains common code used to implement Datadog's Continuous Profilers. (Dynamic linking variant, sets rpath)
|
|
11
|
-
Version:
|
|
11
|
+
Version: 28.0.0
|
|
12
12
|
Requires:
|
|
13
13
|
Libs: -L${libdir} -ldatadog_profiling -Wl,-rpath,${libdir}
|
|
14
14
|
Libs.private:
|