@groundcover/api-client 0.8.0 → 0.10.0

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.
@@ -398,6 +398,58 @@ export type AssetFetchResult = {
398
398
  type?: string;
399
399
  };
400
400
 
401
+ /**
402
+ * AssetFunnel is the wet-mode hierarchical breakdown for one asset type.
403
+ *
404
+ * Unit names what Total counts: monitors are counted whole, dashboards are
405
+ * counted per widget.
406
+ */
407
+ export type AssetFunnel = {
408
+ excluded?: ExcludedBucket;
409
+ not_supported?: NotSupportedBucket;
410
+ supported_converted?: SupportedConvertedBucket;
411
+ supported_not_converted?: SupportedNotConvertedBucket;
412
+ total?: number;
413
+ unit?: string;
414
+ };
415
+
416
+ /**
417
+ * AssetGapDetail describes one unit's gaps, counted once regardless of how many
418
+ * findings produced it.
419
+ */
420
+ export type AssetGapDetail = {
421
+ asset_id?: string;
422
+ asset_name?: string;
423
+ datasources?: Array<string>;
424
+ keys?: Array<string>;
425
+ keys_by_datasource?: {
426
+ [key: string]: Array<string>;
427
+ };
428
+ /**
429
+ * KeysByMetric and KeysByDatasource preserve which owner each missing key
430
+ * belongs to. Without them a unit missing a metric label and a log field
431
+ * reported both keys under the metric *and* under logs.
432
+ */
433
+ keys_by_metric?: {
434
+ [key: string]: Array<string>;
435
+ };
436
+ metrics?: Array<string>;
437
+ queries?: Array<ExecutedQuery>;
438
+ reason?: string;
439
+ /**
440
+ * SomeQueriesReturnedData distinguishes a unit where every query came back
441
+ * empty from one where only some did. Without it, a widget with nine working
442
+ * series and one broken one is indistinguishable from a wholly dead widget.
443
+ */
444
+ some_queries_returned_data?: boolean;
445
+ values?: Array<string>;
446
+ values_by_metric?: {
447
+ [key: string]: Array<string>;
448
+ };
449
+ widget_id?: string;
450
+ widget_title?: string;
451
+ };
452
+
401
453
  export type AssetInstallResult = {
402
454
  /**
403
455
  * Error message if the installation failed.
@@ -1626,6 +1678,14 @@ export type ConvertMonitorResponse = {
1626
1678
  success?: boolean;
1627
1679
  };
1628
1680
 
1681
+ /**
1682
+ * CountPct is a count with percentage of its parent total.
1683
+ */
1684
+ export type CountPct = {
1685
+ count?: number;
1686
+ pct?: number;
1687
+ };
1688
+
1629
1689
  /**
1630
1690
  * CoverageAction defines an actionable step and its estimated query impact.
1631
1691
  */
@@ -2428,11 +2488,34 @@ export type DataScope = {
2428
2488
  simple?: Group;
2429
2489
  };
2430
2490
 
2491
+ /**
2492
+ * DataSetAvailableBucket is converted units whose underlying dataset exists in GC.
2493
+ */
2494
+ export type DataSetAvailableBucket = {
2495
+ /**
2496
+ * Lookback is the widest window actually queried, so the report never claims
2497
+ * a window it did not use.
2498
+ */
2499
+ lookback?: string;
2500
+ no_data?: NoDataBreakdown;
2501
+ returns_data?: CountPct;
2502
+ total?: number;
2503
+ };
2504
+
2431
2505
  /**
2432
2506
  * Datasource identifies the query backend.
2433
2507
  */
2434
2508
  export type Datasource = string;
2435
2509
 
2510
+ /**
2511
+ * DatasourceKeyGap aggregates missing field keys for one search datasource.
2512
+ */
2513
+ export type DatasourceKeyGap = {
2514
+ count?: number;
2515
+ datasource?: string;
2516
+ keys?: Array<string>;
2517
+ };
2518
+
2436
2519
  export type DeleteIngestionKeyRequest = {
2437
2520
  /**
2438
2521
  * Name of the ingestion key to delete
@@ -2772,6 +2855,42 @@ export type EventsSearchTimeSeriesRequest = {
2772
2855
  valueField?: string;
2773
2856
  };
2774
2857
 
2858
+ /**
2859
+ * ExcludedBucket counts units held out of the funnel because their only unmet
2860
+ * dependency is Datadog's own telemetry: a self-observability metric, or one
2861
+ * already inactive in Datadog. Migration quality has no bearing on either —
2862
+ * they were never going to return data — so they are reported separately
2863
+ * rather than weighing on supported/unsupported like a real gap would.
2864
+ */
2865
+ export type ExcludedBucket = {
2866
+ datadog_self_observability?: MetricListBucket;
2867
+ inactive_in_datadog?: MetricListBucket;
2868
+ total?: number;
2869
+ };
2870
+
2871
+ /**
2872
+ * ExecutedQuery is the evidence for a unit's wet outcome: the query that ran,
2873
+ *
2874
+ * the window it ran over, and what came back.
2875
+ */
2876
+ export type ExecutedQuery = {
2877
+ datasource?: string;
2878
+ error?: string;
2879
+ language?: string;
2880
+ /**
2881
+ * Metric names the query's underlying metric, for datasource == "metrics"
2882
+ * only. Without it a metrics query that returned no data cannot be traced
2883
+ * back to which metric was empty without parsing the query text.
2884
+ */
2885
+ metric?: string;
2886
+ original_dd?: string;
2887
+ query?: string;
2888
+ query_id?: string;
2889
+ resolved_query?: string;
2890
+ status?: string;
2891
+ window?: string;
2892
+ };
2893
+
2775
2894
  /**
2776
2895
  * ExecutionPolicy defines model for ExecutionPolicy.
2777
2896
  */
@@ -2959,6 +3078,36 @@ export type Finding = {
2959
3078
  widget_title?: string;
2960
3079
  };
2961
3080
 
3081
+ /**
3082
+ * FunnelAssetEntry maps one asset — or one dashboard widget — to the funnel stage
3083
+ * it reached, with the queries that were executed as evidence.
3084
+ */
3085
+ export type FunnelAssetEntry = {
3086
+ asset_id?: string;
3087
+ asset_name?: string;
3088
+ asset_type?: string;
3089
+ metrics?: Array<string>;
3090
+ missing_keys?: Array<string>;
3091
+ missing_values?: Array<string>;
3092
+ queries?: Array<ExecutedQuery>;
3093
+ reason?: string;
3094
+ stage?: string;
3095
+ widget_id?: string;
3096
+ widget_title?: string;
3097
+ };
3098
+
3099
+ /**
3100
+ * FunnelByAsset is the per-asset view of the funnel: every monitor and every
3101
+ * dashboard widget, with the stage it terminated at.
3102
+ */
3103
+ export type FunnelByAsset = {
3104
+ assets?: Array<FunnelAssetEntry>;
3105
+ by_stage?: {
3106
+ [key: string]: number;
3107
+ };
3108
+ total?: number;
3109
+ };
3110
+
2962
3111
  export type GenericFiltersItem = {
2963
3112
  count?: number;
2964
3113
  name?: string;
@@ -3336,6 +3485,17 @@ export type IntegrationCount = {
3336
3485
  name?: string;
3337
3486
  };
3338
3487
 
3488
+ /**
3489
+ * IntegrationCountBucket counts units per data-source mapping.
3490
+ */
3491
+ export type IntegrationCountBucket = {
3492
+ by_integration?: {
3493
+ [key: string]: number;
3494
+ };
3495
+ count?: number;
3496
+ metrics?: Array<TaggedMetric>;
3497
+ };
3498
+
3339
3499
  export type Integrations = {
3340
3500
  /**
3341
3501
  * Identity is the principal of the backend's own cloud (an AWS role ARN, a GCP
@@ -3503,6 +3663,20 @@ export type KeyMapping = {
3503
3663
  source_key?: string;
3504
3664
  };
3505
3665
 
3666
+ /**
3667
+ * KeyMissingBreakdown groups units with missing keys.
3668
+ *
3669
+ * Metric label gaps and search field gaps are reported separately: a log or event
3670
+ * field gap has no metric to attribute it to, and folding both into a by-metric
3671
+ * view produced a meaningless "unknown" bucket.
3672
+ */
3673
+ export type KeyMissingBreakdown = {
3674
+ assets?: Array<AssetGapDetail>;
3675
+ by_datasource?: Array<DatasourceKeyGap>;
3676
+ by_metric?: Array<MetricKeyGap>;
3677
+ count?: number;
3678
+ };
3679
+
3506
3680
  export type KeysResponse = {
3507
3681
  isLimitReached?: boolean;
3508
3682
  keys?: Array<KeyItem>;
@@ -4119,6 +4293,22 @@ export type LogsInsightsRequestParams = {
4119
4293
  threshold?: number;
4120
4294
  };
4121
4295
 
4296
+ /**
4297
+ * LogsMissingBucket covers units whose log dataset is absent, including the case
4298
+ * where the log source they filter on is not ingested into groundcover at all.
4299
+ */
4300
+ export type LogsMissingBucket = {
4301
+ assets?: Array<AssetGapDetail>;
4302
+ count?: number;
4303
+ known_sources?: Array<string>;
4304
+ missing_sources?: Array<string>;
4305
+ /**
4306
+ * SourceNotIngested counts units filtering on a source:<value> that
4307
+ * groundcover does not ingest, which no lookback widening can fix.
4308
+ */
4309
+ source_not_ingested?: number;
4310
+ };
4311
+
4122
4312
  export type LogsPatternParamDistributionResponse = {
4123
4313
  values?: Array<PatternParamDistributionValue>;
4124
4314
  };
@@ -4482,6 +4672,15 @@ export type Metadata = {
4482
4672
  target?: string;
4483
4673
  };
4484
4674
 
4675
+ /**
4676
+ * MetricKeyGap aggregates missing label keys for one metric across units.
4677
+ */
4678
+ export type MetricKeyGap = {
4679
+ count?: number;
4680
+ keys?: Array<string>;
4681
+ metric?: string;
4682
+ };
4683
+
4485
4684
  export type MetricKeysRequestV2 = {
4486
4685
  end?: string;
4487
4686
  filter?: string;
@@ -4500,11 +4699,28 @@ export type MetricLabels = {
4500
4699
  [key: string]: string;
4501
4700
  };
4502
4701
 
4702
+ /**
4703
+ * MetricListBucket counts units and lists the metrics responsible.
4704
+ */
4705
+ export type MetricListBucket = {
4706
+ count?: number;
4707
+ metrics?: Array<TaggedMetric>;
4708
+ };
4709
+
4503
4710
  export type MetricMapping = {
4504
4711
  groundcover_metric?: string;
4505
4712
  source_metric?: string;
4506
4713
  };
4507
4714
 
4715
+ /**
4716
+ * MetricValueGap aggregates missing label values for one metric.
4717
+ */
4718
+ export type MetricValueGap = {
4719
+ count?: number;
4720
+ metric?: string;
4721
+ values?: Array<string>;
4722
+ };
4723
+
4508
4724
  export type MetricValuesRequestV2 = {
4509
4725
  conditions?: Array<Condition>;
4510
4726
  end?: string;
@@ -4834,6 +5050,34 @@ export type MigrationDetectedIntegration = {
4834
5050
  metricCount: number;
4835
5051
  };
4836
5052
 
5053
+ /**
5054
+ * MissingDataSetBucket covers converted units whose underlying dataset is absent.
5055
+ */
5056
+ export type MissingDataSetBucket = {
5057
+ logs?: LogsMissingBucket;
5058
+ metrics?: MissingMetricsBreakdown;
5059
+ missing_env?: ValueMissingBucket;
5060
+ tail?: TailDataSetBreakdown;
5061
+ total?: number;
5062
+ };
5063
+
5064
+ /**
5065
+ * MissingMetricsBreakdown splits missing metrics into mutually exclusive buckets.
5066
+ *
5067
+ * A metric can qualify for several buckets at once (a datadog.* metric that is
5068
+ * also inactive, say). It is counted in exactly one — chosen by the priority
5069
+ * order in classifyMissingMetric — and carries a tag for every bucket that
5070
+ * applies, so nothing is lost to that choice.
5071
+ */
5072
+ export type MissingMetricsBreakdown = {
5073
+ custom_metrics?: MetricListBucket;
5074
+ datadog_self_observability?: MetricListBucket;
5075
+ inactive_in_datadog?: MetricListBucket;
5076
+ integrations_we_dont_have?: IntegrationCountBucket;
5077
+ integrations_we_have?: IntegrationCountBucket;
5078
+ total?: number;
5079
+ };
5080
+
4837
5081
  /**
4838
5082
  * Model holds the core query/reducer/threshold definitions.
4839
5083
  */
@@ -5011,6 +5255,44 @@ export type MonitorVariable = {
5011
5255
  storage?: string;
5012
5256
  };
5013
5257
 
5258
+ /**
5259
+ * NoDataBreakdown drills into units that did not come back fully working.
5260
+ *
5261
+ * A unit lands here when any of its queries returned no data, or when a static
5262
+ * key/value gap was found. For a multi-query unit — a widget with several series,
5263
+ * a monitor with a formula — that means "not all queries returned data" rather
5264
+ * than "nothing returned data"; SomeQueriesReturnedData on each entry records
5265
+ * which of the two it was.
5266
+ */
5267
+ export type NoDataBreakdown = {
5268
+ count?: number;
5269
+ negative_key_missing?: KeyMissingBreakdown;
5270
+ negative_value_missing?: ValueMissingBucket;
5271
+ pct?: number;
5272
+ positive_all_keys_values_exist?: PositiveNoDataBucket;
5273
+ };
5274
+
5275
+ /**
5276
+ * NoDataNeededBucket counts units that need no query to render.
5277
+ */
5278
+ export type NoDataNeededBucket = {
5279
+ by_type?: {
5280
+ [key: string]: number;
5281
+ };
5282
+ count?: number;
5283
+ };
5284
+
5285
+ /**
5286
+ * NotSupportedBucket covers unsupported types, bucketed by type.
5287
+ */
5288
+ export type NotSupportedBucket = {
5289
+ assets?: Array<AssetGapDetail>;
5290
+ by_type?: {
5291
+ [key: string]: number;
5292
+ };
5293
+ total?: number;
5294
+ };
5295
+
5014
5296
  export type NotificationRouteListItemResponse = {
5015
5297
  /**
5016
5298
  * The creation timestamp
@@ -5360,11 +5642,30 @@ export type PolicyWithEntityCount = Policy & {
5360
5642
  readonly entityCount?: number;
5361
5643
  };
5362
5644
 
5645
+ /**
5646
+ * PositiveNoDataBucket covers units where every dependency resolves yet no data
5647
+ * came back, broken down by the reason we could establish.
5648
+ */
5649
+ export type PositiveNoDataBucket = {
5650
+ assets?: Array<AssetGapDetail>;
5651
+ by_reason?: OrderedReasons;
5652
+ count?: number;
5653
+ pct?: number;
5654
+ };
5655
+
5363
5656
  /**
5364
5657
  * PreflightReport is the top-level structured output of a preflight validation run.
5365
5658
  */
5366
5659
  export type PreflightReport = {
5367
5660
  coverage_plan?: CoveragePlan;
5661
+ funnel_by_asset?: FunnelByAsset;
5662
+ /**
5663
+ * GeneratedAt is when this report was produced, set once right before it is
5664
+ * written out. A report is often diffed against a later rerun after a fix, so
5665
+ * the file needs to say for itself when it was taken without relying on
5666
+ * filesystem mtimes, which a copy or a git checkout does not preserve.
5667
+ */
5668
+ generated_at?: string;
5368
5669
  integrations_summary?: Array<IntegrationCount>;
5369
5670
  raw_findings?: Array<Finding>;
5370
5671
  summary?: UnifiedSummary;
@@ -6430,6 +6731,43 @@ export type SpanLink = {
6430
6731
  traceState?: string;
6431
6732
  };
6432
6733
 
6734
+ export type SpanRecord = {
6735
+ attributes?: {
6736
+ [key: string]: unknown;
6737
+ };
6738
+ client?: string;
6739
+ cluster?: string;
6740
+ end_time?: string;
6741
+ env?: string;
6742
+ is_pii?: boolean;
6743
+ kind?: string;
6744
+ namespace?: string;
6745
+ parent_id?: string;
6746
+ protocol_type?: string;
6747
+ query_parameters?: {
6748
+ [key: string]: unknown;
6749
+ };
6750
+ request_body?: string;
6751
+ request_headers?: {
6752
+ [key: string]: unknown;
6753
+ };
6754
+ response_body?: string;
6755
+ response_headers?: {
6756
+ [key: string]: unknown;
6757
+ };
6758
+ server?: string;
6759
+ source?: string;
6760
+ span_id?: string;
6761
+ span_name?: string;
6762
+ start_time?: string;
6763
+ status?: string;
6764
+ tags?: {
6765
+ [key: string]: string;
6766
+ };
6767
+ trace_id?: string;
6768
+ workload?: string;
6769
+ };
6770
+
6433
6771
  /**
6434
6772
  * SqlPipeline defines a pipeline for search queries.
6435
6773
  *
@@ -6535,11 +6873,51 @@ export type Subject = {
6535
6873
  */
6536
6874
  export type Suggestion = {
6537
6875
  confidence?: number;
6538
- reason?: string;
6876
+ reasons?: Array<SuggestionReason>;
6539
6877
  type?: string;
6540
6878
  value?: string;
6541
6879
  };
6542
6880
 
6881
+ /**
6882
+ * SuggestionReason is one scoring signal that contributed to a Suggestion.
6883
+ *
6884
+ * Weight is the signal's additive contribution within the scorer that produced
6885
+ * it. Name-similarity signals and value-overlap signals are scored
6886
+ * independently, so when both back the same candidate the suggestion carries
6887
+ * reasons from each and Confidence is the higher of the two estimates rather
6888
+ * than their sum — weights add up within a scorer, not across them.
6889
+ *
6890
+ * Detail carries the evidence behind the signal. For value-overlap signals that
6891
+ * means the matched values themselves, which is what makes the difference
6892
+ * between a suggestion worth acting on and one worth eyeballing.
6893
+ */
6894
+ export type SuggestionReason = {
6895
+ code?: string;
6896
+ detail?: string;
6897
+ weight?: number;
6898
+ };
6899
+
6900
+ /**
6901
+ * SupportedConvertedBucket covers units that converted successfully.
6902
+ */
6903
+ export type SupportedConvertedBucket = {
6904
+ data_set_available?: DataSetAvailableBucket;
6905
+ missing_underlying_data_set?: MissingDataSetBucket;
6906
+ no_data_needed?: NoDataNeededBucket;
6907
+ total?: number;
6908
+ };
6909
+
6910
+ /**
6911
+ * SupportedNotConvertedBucket covers supported types that failed conversion.
6912
+ */
6913
+ export type SupportedNotConvertedBucket = {
6914
+ assets?: Array<AssetGapDetail>;
6915
+ by_error?: {
6916
+ [key: string]: number;
6917
+ };
6918
+ total?: number;
6919
+ };
6920
+
6543
6921
  /**
6544
6922
  * SyntheticMonitorConfig represents optional monitor configuration overrides for a synthetic test.
6545
6923
  *
@@ -6666,6 +7044,23 @@ export type SyntheticsCheckInput = {
6666
7044
  interval?: string;
6667
7045
  };
6668
7046
 
7047
+ /**
7048
+ * TaggedMetric names a metric plus every classification that applies to it.
7049
+ */
7050
+ export type TaggedMetric = {
7051
+ metric?: string;
7052
+ tags?: Array<string>;
7053
+ };
7054
+
7055
+ /**
7056
+ * TailDataSetBreakdown covers non-metrics/logs datasets.
7057
+ */
7058
+ export type TailDataSetBreakdown = {
7059
+ events?: number;
7060
+ rum?: number;
7061
+ traces?: number;
7062
+ };
7063
+
6669
7064
  /**
6670
7065
  * +enum
6671
7066
  */
@@ -7427,6 +7822,19 @@ export type TracesSearchTimeSeriesRequest = {
7427
7822
  valueField?: string;
7428
7823
  };
7429
7824
 
7825
+ export type TracesSimulationRequest = {
7826
+ ruleYaml?: string;
7827
+ span?: SpanRecord;
7828
+ };
7829
+
7830
+ export type TracesSimulationResponse = {
7831
+ error?: string;
7832
+ ruleRan?: boolean;
7833
+ ruleValid?: boolean;
7834
+ spanDropped?: boolean;
7835
+ spanRecord?: SpanRecord;
7836
+ };
7837
+
7430
7838
  /**
7431
7839
  * Tracing defines model for Tracing.
7432
7840
  */
@@ -7574,13 +7982,19 @@ export type UnfurlTraceSummary = {
7574
7982
  * UnifiedSummary is the single hierarchical summary included in JSON output.
7575
7983
  */
7576
7984
  export type UnifiedSummary = {
7577
- affected_assets_by_type?: {
7985
+ assets?: AssetsSummary;
7986
+ /**
7987
+ * AssetsByFindingType is the distribution of affected assets per finding
7988
+ * type, keyed by asset type.
7989
+ */
7990
+ assets_by_finding_type?: {
7578
7991
  [key: string]: {
7579
7992
  [key: string]: number;
7580
7993
  };
7581
7994
  };
7582
- assets?: AssetsSummary;
7583
7995
  conversion?: ConversionSummary;
7996
+ dashboards?: AssetFunnel;
7997
+ monitors?: AssetFunnel;
7584
7998
  queries?: QueriesSummary;
7585
7999
  wet_validation?: WetValidationSummary;
7586
8000
  };
@@ -8050,6 +8464,15 @@ export type ValueItem = {
8050
8464
  value?: string;
8051
8465
  };
8052
8466
 
8467
+ /**
8468
+ * ValueMissingBucket lists units whose filter values are absent in groundcover.
8469
+ */
8470
+ export type ValueMissingBucket = {
8471
+ assets?: Array<AssetGapDetail>;
8472
+ by_metric?: Array<MetricValueGap>;
8473
+ count?: number;
8474
+ };
8475
+
8053
8476
  export type ValuesDistributionRequest = {
8054
8477
  conditions?: Array<Condition>;
8055
8478
  /**
@@ -8268,14 +8691,31 @@ export type WetResult = {
8268
8691
  asset_type?: string;
8269
8692
  datasource?: Datasource;
8270
8693
  error?: string;
8694
+ /**
8695
+ * HasFreeText mirrors WetQuery.HasFreeText.
8696
+ */
8697
+ has_free_text?: boolean;
8271
8698
  latency?: Duration;
8699
+ /**
8700
+ * Metric mirrors WetQuery.Metric.
8701
+ */
8702
+ metric?: string;
8272
8703
  original_dd?: string;
8273
8704
  query?: string;
8274
8705
  query_id?: string;
8275
8706
  query_type?: QueryType;
8276
8707
  resolved_query?: string;
8277
8708
  status?: WetStatus;
8709
+ widget_id?: string;
8278
8710
  widget_title?: string;
8711
+ /**
8712
+ * Window is the span actually queried:
8713
+ * "5m" progressive first pass
8714
+ * "30m" dashboard long pass
8715
+ * "7d" monitor long pass (or whatever --wet-monitor-lookback sets)
8716
+ * "instant" instant query answered at a single point in time
8717
+ * "instant→7d" instant query was empty, so it was re-run as a range
8718
+ */
8279
8719
  window?: string;
8280
8720
  };
8281
8721