From f108d1a040c69b0c2896467734b4d3a8fa200941 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Wed, 27 Aug 2025 16:37:56 +0000 Subject: [PATCH] Regenerate client from commit 6d9663b of spec repo --- .generated-info | 4 +- .generator/schemas/v2/openapi.yaml | 97 +++++++++++ .../frozen.json | 1 + .../recording.har | 67 ++++++++ .../frozen.json | 1 + .../recording.har | 157 ++++++++++++++++++ .../frozen.json | 1 + .../recording.har | 157 ++++++++++++++++++ .../frozen.json | 1 + .../recording.har | 67 ++++++++ .../frozen.json | 1 + .../recording.har | 157 ++++++++++++++++++ .../frozen.json | 1 + .../recording.har | 67 ++++++++ features/v2/service_scorecards.feature | 54 +++++- features/v2/undo.json | 6 + .../src/support/scenarios_model_mapping.ts | 7 + .../src/v2/ServiceScorecardsApi.ts | 141 ++++++++++++++++ services/service_scorecards/src/v2/index.ts | 6 + .../src/v2/models/RuleAttributes.ts | 9 + .../src/v2/models/TypingInfo.ts | 9 + .../models/UpdateOutcomesAsyncAttributes.ts | 46 +++++ .../v2/models/UpdateOutcomesAsyncRequest.ts | 46 +++++ .../models/UpdateOutcomesAsyncRequestData.ts | 55 ++++++ .../models/UpdateOutcomesAsyncRequestItem.ts | 73 ++++++++ .../src/v2/models/UpdateOutcomesAsyncType.ts | 7 + 26 files changed, 1233 insertions(+), 5 deletions(-) create mode 100644 cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/frozen.json create mode 100644 cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/recording.har create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/frozen.json create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/recording.har create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/frozen.json create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/recording.har create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/frozen.json create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/recording.har create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/frozen.json create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/recording.har create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/frozen.json create mode 100644 cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/recording.har create mode 100644 services/service_scorecards/src/v2/models/UpdateOutcomesAsyncAttributes.ts create mode 100644 services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequest.ts create mode 100644 services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestData.ts create mode 100644 services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestItem.ts create mode 100644 services/service_scorecards/src/v2/models/UpdateOutcomesAsyncType.ts diff --git a/.generated-info b/.generated-info index 73e082610de5..f95eae7cf007 100644 --- a/.generated-info +++ b/.generated-info @@ -1,4 +1,4 @@ { - "spec_repo_commit": "62a19e4", - "generated": "2025-08-27 15:01:11.584" + "spec_repo_commit": "6d9663b", + "generated": "2025-08-27 16:37:55.902" } diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index e09c94804791..19e228a115b2 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -14485,6 +14485,10 @@ components: description: Entity definition in raw JSON or YAML representation. example: "apiVersion: v3\nkind: service\nmetadata:\n name: myservice\n" type: string + EntityReference: + description: The unique reference for an IDP entity. + example: service:my-service + type: string EntityRelationships: description: Entity relationships. properties: @@ -34444,6 +34448,8 @@ components: description: If enabled, the rule is calculated as part of the score. example: true type: boolean + level: + $ref: '#/components/schemas/RuleLevel' modified_at: description: Time of the last rule outcome modification. format: date-time @@ -34464,6 +34470,13 @@ components: description: The unique ID for a scorecard rule. example: q8MQxk8TCqrHnWkx type: string + RuleLevel: + description: The maturity level of the rule (1, 2, or 3). + example: 2 + format: int32 + maximum: 3 + minimum: 1 + type: integer RuleName: description: Name of the notification rule. example: Rule 1 @@ -43835,6 +43848,57 @@ components: id: $ref: '#/components/schemas/ApiID' type: object + UpdateOutcomesAsyncAttributes: + description: The JSON:API attributes for a batched set of scorecard outcomes. + properties: + results: + description: Set of scorecard outcomes to update asynchronously. + items: + $ref: '#/components/schemas/UpdateOutcomesAsyncRequestItem' + type: array + type: object + UpdateOutcomesAsyncRequest: + description: Scorecard outcomes batch request. + properties: + data: + $ref: '#/components/schemas/UpdateOutcomesAsyncRequestData' + type: object + UpdateOutcomesAsyncRequestData: + description: Scorecard outcomes batch request data. + properties: + attributes: + $ref: '#/components/schemas/UpdateOutcomesAsyncAttributes' + type: + $ref: '#/components/schemas/UpdateOutcomesAsyncType' + type: object + UpdateOutcomesAsyncRequestItem: + description: Scorecard outcome for a single entity and rule. + properties: + entity_reference: + $ref: '#/components/schemas/EntityReference' + remarks: + description: Any remarks regarding the scorecard rule's evaluation. Supports + HTML hyperlinks. + example: 'See: Services' + type: string + rule_id: + $ref: '#/components/schemas/RuleId' + state: + $ref: '#/components/schemas/State' + required: + - rule_id + - entity_reference + - state + type: object + UpdateOutcomesAsyncType: + default: batched-outcome + description: The JSON:API type for scorecard outcomes. + enum: + - batched-outcome + example: batched-outcome + type: string + x-enum-varnames: + - BATCHED_OUTCOME UpdateResourceEvaluationFiltersRequest: description: Request object to update a resource filter. properties: @@ -61882,6 +61946,39 @@ paths: resultsPath: data x-unstable: '**Note**: This endpoint is in public beta. + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' + post: + description: Updates multiple scorecard rule outcomes in a single batched request. + operationId: UpdateScorecardOutcomesAsync + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateOutcomesAsyncRequest' + description: Set of scorecard outcomes. + required: true + responses: + '202': + description: Accepted + '400': + $ref: '#/components/responses/BadRequestResponse' + '403': + $ref: '#/components/responses/ForbiddenResponse' + '409': + $ref: '#/components/responses/ConflictResponse' + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - apm_service_catalog_write + summary: Update Scorecard outcomes asynchronously + tags: + - Service Scorecards + x-codegen-request-body-name: body + x-unstable: '**Note**: This endpoint is in public beta. + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' /api/v2/scorecard/outcomes/batch: post: diff --git a/cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/frozen.json b/cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/frozen.json new file mode 100644 index 000000000000..8ad2b3908973 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/frozen.json @@ -0,0 +1 @@ +"2025-08-26T15:48:59.496Z" diff --git a/cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/recording.har b/cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/recording.har new file mode 100644 index 000000000000..abb864f62ce5 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Create-a-new-rule-returns-Bad-Request-response_4112202994/recording.har @@ -0,0 +1,67 @@ +{ + "log": { + "_recordingName": "Service Scorecards/Create a new rule returns \"Bad Request\" response", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.5" + }, + "entries": [ + { + "_id": "b2e95b97872e2f96cb33d4f7200dd3ef", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "application/json" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"enabled\":true,\"level\":2,\"name\":\"Team Defined\",\"scorecard_id\":\"NOT.FOUND\"},\"type\":\"rule\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules" + }, + "response": { + "bodySize": 113, + "content": { + "mimeType": "application/vnd.api+json", + "size": 113, + "text": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"scorecard_id\\\" failed scorecard lookup\"}]}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 525, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-08-26T15:49:00.140Z", + "time": 176 + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/frozen.json b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/frozen.json new file mode 100644 index 000000000000..8fbfeae326f7 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/frozen.json @@ -0,0 +1 @@ +"2025-08-26T14:46:17.790Z" diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/recording.har b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/recording.har new file mode 100644 index 000000000000..6cd2d3fd2f9a --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Accepted-response_3550004421/recording.har @@ -0,0 +1,157 @@ +{ + "log": { + "_recordingName": "Service Scorecards/Update Scorecard outcomes asynchronously returns \"Accepted\" response", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.5" + }, + "entries": [ + { + "_id": "1cc039d39eb6a261af31b4dda78ab025", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 216, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "application/json" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 569, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"enabled\":true,\"name\":\"Test-Update_Scorecard_outcomes_asynchronously_returns_Accepted_response-1756219577\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"type\":\"rule\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules" + }, + "response": { + "bodySize": 483, + "content": { + "mimeType": "application/vnd.api+json", + "size": 483, + "text": "{\"data\":{\"id\":\"5e3dexz6x_4f_4pa\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2025-08-26T14:46:18.889883535Z\",\"custom\":true,\"enabled\":true,\"level\":3,\"modified_at\":\"2025-08-26T14:46:18.889883535Z\",\"name\":\"Test-Update_Scorecard_outcomes_asynchronously_returns_Accepted_response-1756219577\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 525, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 201, + "statusText": "Created" + }, + "startedDateTime": "2025-08-26T14:46:18.712Z", + "time": 208 + }, + { + "_id": "faaea36ab63f01dc893083a9dd852044", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 225, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "*/*" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"results\":[{\"entity_reference\":\"service:my-service\",\"remarks\":\"See: Services\",\"rule_id\":\"5e3dexz6x_4f_4pa\",\"state\":\"pass\"}]},\"type\":\"batched-outcome\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/outcomes" + }, + "response": { + "bodySize": 90, + "content": { + "mimeType": "application/vnd.api+json", + "size": 90, + "text": "{\"data\":{\"id\":\"4iexte5r8prsrlrtzzxpy\",\"type\":\"async-request\"},\"meta\":{\"total_received\":1}}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 524, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 202, + "statusText": "Accepted" + }, + "startedDateTime": "2025-08-26T14:46:18.939Z", + "time": 78 + }, + { + "_id": "80d13e081f26b75c5802110b933738bc", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "*/*" + } + ], + "headersSize": 522, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules/5e3dexz6x_4f_4pa" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [], + "headersSize": 464, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 204, + "statusText": "No Content" + }, + "startedDateTime": "2025-08-26T14:46:19.023Z", + "time": 511 + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/frozen.json b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/frozen.json new file mode 100644 index 000000000000..5740c28d7b61 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/frozen.json @@ -0,0 +1 @@ +"2025-08-26T14:46:19.541Z" diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/recording.har b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/recording.har new file mode 100644 index 000000000000..c3c9470d945f --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Bad-Request-response_3858316768/recording.har @@ -0,0 +1,157 @@ +{ + "log": { + "_recordingName": "Service Scorecards/Update Scorecard outcomes asynchronously returns \"Bad Request\" response", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.5" + }, + "entries": [ + { + "_id": "098b052dbe3cee8ea58183a7581884e5", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 219, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "application/json" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"enabled\":true,\"name\":\"Test-Update_Scorecard_outcomes_asynchronously_returns_Bad_Request_response-1756219579\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"type\":\"rule\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules" + }, + "response": { + "bodySize": 486, + "content": { + "mimeType": "application/vnd.api+json", + "size": 486, + "text": "{\"data\":{\"id\":\"cyysw9dtqcu8zemc\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2025-08-26T14:46:19.594805953Z\",\"custom\":true,\"enabled\":true,\"level\":3,\"modified_at\":\"2025-08-26T14:46:19.594805953Z\",\"name\":\"Test-Update_Scorecard_outcomes_asynchronously_returns_Bad_Request_response-1756219579\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 525, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 201, + "statusText": "Created" + }, + "startedDateTime": "2025-08-26T14:46:19.544Z", + "time": 79 + }, + { + "_id": "80191f8feb57f2b981b525f9d805fd6d", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 151, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "*/*" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 567, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"results\":[{\"entity_reference\":\"service:my-service\",\"rule_id\":\"cyysw9dtqcu8zemc\",\"state\":\"INVALID\"}]},\"type\":\"batched-outcome\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/outcomes" + }, + "response": { + "bodySize": 116, + "content": { + "mimeType": "application/vnd.api+json", + "size": 116, + "text": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"state\\\" must be one of \\\"pass fail skip\\\"\"}]}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 525, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-08-26T14:46:19.628Z", + "time": 41 + }, + { + "_id": "45a36f57c6a6dbf2e4ad16596a20d9a7", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "*/*" + } + ], + "headersSize": 521, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules/cyysw9dtqcu8zemc" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [], + "headersSize": 464, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 204, + "statusText": "No Content" + }, + "startedDateTime": "2025-08-26T14:46:19.676Z", + "time": 479 + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/frozen.json b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/frozen.json new file mode 100644 index 000000000000..86dfb613b7bc --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/frozen.json @@ -0,0 +1 @@ +"2025-08-26T14:46:20.159Z" diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/recording.har b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/recording.har new file mode 100644 index 000000000000..cdd06ff9b139 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-Scorecard-outcomes-asynchronously-returns-Conflict-response_2488160814/recording.har @@ -0,0 +1,67 @@ +{ + "log": { + "_recordingName": "Service Scorecards/Update Scorecard outcomes asynchronously returns \"Conflict\" response", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.5" + }, + "entries": [ + { + "_id": "f2bb7f55a1bb19b82dcea587d7e71bac", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 224, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "*/*" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"results\":[{\"entity_reference\":\"service:my-service\",\"remarks\":\"See: Services\",\"rule_id\":\"INVALID.RULE_ID\",\"state\":\"pass\"}]},\"type\":\"batched-outcome\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/outcomes" + }, + "response": { + "bodySize": 55, + "content": { + "mimeType": "application/vnd.api+json", + "size": 55, + "text": "{\"errors\":[{\"status\":\"409\",\"title\":\"Invalid rule_id\"}]}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 524, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-08-26T14:46:20.162Z", + "time": 65 + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/frozen.json b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/frozen.json new file mode 100644 index 000000000000..2241306d14c8 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/frozen.json @@ -0,0 +1 @@ +"2025-08-26T19:33:28.111Z" diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/recording.har b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/recording.har new file mode 100644 index 000000000000..ea3f2dadc903 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Bad-Request-response_3943964706/recording.har @@ -0,0 +1,157 @@ +{ + "log": { + "_recordingName": "Service Scorecards/Update an existing scorecard rule returns \"Bad Request\" response", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.5" + }, + "entries": [ + { + "_id": "b0e8505a96ccfd4750b15390f60e29e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 212, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "application/json" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 569, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"enabled\":true,\"name\":\"Test-Update_an_existing_scorecard_rule_returns_Bad_Request_response-1756236808\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"type\":\"rule\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules" + }, + "response": { + "bodySize": 477, + "content": { + "mimeType": "application/vnd.api+json", + "size": 477, + "text": "{\"data\":{\"id\":\"z661h8n2bpc5q0kx\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2025-08-26T19:32:32.06573621Z\",\"custom\":true,\"enabled\":true,\"level\":3,\"modified_at\":\"2025-08-26T19:32:32.06573621Z\",\"name\":\"Test-Update_an_existing_scorecard_rule_returns_Bad_Request_response-1756236808\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 525, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 201, + "statusText": "Created" + }, + "startedDateTime": "2025-08-26T19:33:28.114Z", + "time": 138 + }, + { + "_id": "27c7abc9a287a4035f6d8da47cb48eee", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "application/json" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 585, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"enabled\":true,\"level\":2,\"name\":\"Team Defined\",\"scorecard_id\":\"NOT.FOUND\"},\"type\":\"rule\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules/z661h8n2bpc5q0kx" + }, + "response": { + "bodySize": 113, + "content": { + "mimeType": "application/vnd.api+json", + "size": 113, + "text": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"scorecard_id\\\" failed scorecard lookup\"}]}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 525, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-08-26T19:33:28.257Z", + "time": 128 + }, + { + "_id": "0d45ba54e9262c727a8ca105fcffa339", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "*/*" + } + ], + "headersSize": 522, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules/z661h8n2bpc5q0kx" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [], + "headers": [], + "headersSize": 464, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 204, + "statusText": "No Content" + }, + "startedDateTime": "2025-08-26T19:33:28.395Z", + "time": 557 + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/frozen.json b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/frozen.json new file mode 100644 index 000000000000..244646b464a7 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/frozen.json @@ -0,0 +1 @@ +"2025-08-26T19:33:28.966Z" diff --git a/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/recording.har b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/recording.har new file mode 100644 index 000000000000..6e6d4ae4ae37 --- /dev/null +++ b/cassettes/v2/Service-Scorecards_320411317/Update-an-existing-scorecard-rule-returns-Not-Found-response_955343473/recording.har @@ -0,0 +1,67 @@ +{ + "log": { + "_recordingName": "Service Scorecards/Update an existing scorecard rule returns \"Not Found\" response", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.5" + }, + "entries": [ + { + "_id": "49cbb9b342d500f72b79a8fb13534ba0", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 149, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "application/json" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 579, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"enabled\":true,\"level\":2,\"name\":\"Team Defined\",\"scorecard_name\":\"Deployments automated via Deployment Trains\"},\"type\":\"rule\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/scorecard/rules/REPLACE.ME" + }, + "response": { + "bodySize": 87, + "content": { + "mimeType": "application/vnd.api+json", + "size": 87, + "text": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule not found: REPLACE.ME\"}]}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/vnd.api+json" + } + ], + "headersSize": 524, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 404, + "statusText": "Not Found" + }, + "startedDateTime": "2025-08-26T19:33:28.973Z", + "time": 73 + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/features/v2/service_scorecards.feature b/features/v2/service_scorecards.feature index 11d2c7f43287..387f04cf7113 100644 --- a/features/v2/service_scorecards.feature +++ b/features/v2/service_scorecards.feature @@ -10,11 +10,11 @@ Feature: Service Scorecards And a valid "appKeyAuth" key in the system And an instance of "ServiceScorecards" API - @generated @skip @team:DataDog/service-catalog + @team:DataDog/service-catalog Scenario: Create a new rule returns "Bad Request" response Given operation "CreateScorecardRule" enabled And new "CreateScorecardRule" request - And body with value {"data": {"attributes": {"enabled": true, "name": "Team Defined", "scorecard_name": "Deployments automated via Deployment Trains"}, "type": "rule"}} + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scorecard_id": "NOT.FOUND"}, "type": "rule"}} When the request is sent Then the response status is 400 Bad Request @@ -121,12 +121,41 @@ Feature: Service Scorecards Then the response status is 200 OK And the response has 4 items + @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes asynchronously returns "Accepted" response + Given operation "UpdateScorecardOutcomesAsync" enabled + And there is a valid "create_scorecard_rule" in the system + And new "UpdateScorecardOutcomesAsync" request + And body with value {"data": {"attributes": {"results": [{"rule_id": "{{create_scorecard_rule.data.id}}", "entity_reference": "service:my-service", "remarks": "See: Services", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 202 Accepted + + @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes asynchronously returns "Bad Request" response + Given operation "UpdateScorecardOutcomesAsync" enabled + And there is a valid "create_scorecard_rule" in the system + And new "UpdateScorecardOutcomesAsync" request + And body with value {"data": {"attributes": {"results": [{"rule_id": "{{create_scorecard_rule.data.id}}", "entity_reference": "service:my-service", "state": "INVALID"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0]" has field "detail" + + @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes asynchronously returns "Conflict" response + Given operation "UpdateScorecardOutcomesAsync" enabled + And new "UpdateScorecardOutcomesAsync" request + And body with value {"data": {"attributes": {"results": [{"rule_id": "INVALID.RULE_ID", "entity_reference": "service:my-service", "remarks": "See: Services", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 409 Conflict + And the response "errors" has length 1 + @generated @skip @team:DataDog/service-catalog Scenario: Update an existing rule returns "Bad Request" response Given operation "UpdateScorecardRule" enabled And new "UpdateScorecardRule" request And request contains "rule_id" parameter from "REPLACE.ME" - And body with value {"data": {"attributes": {"enabled": true, "name": "Team Defined", "scorecard_name": "Deployments automated via Deployment Trains"}, "type": "rule"}} + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scorecard_name": "Deployments automated via Deployment Trains"}, "type": "rule"}} When the request is sent Then the response status is 400 Bad Request @@ -139,3 +168,22 @@ Feature: Service Scorecards And body with value {"data": { "attributes" : {"enabled": true, "name": "{{create_scorecard_rule.data.attributes.name}}", "scorecard_name": "{{create_scorecard_rule.data.attributes.scorecard_name}}", "description": "Updated description via test"}}} When the request is sent Then the response status is 200 Rule updated successfully + + @team:DataDog/service-catalog + Scenario: Update an existing scorecard rule returns "Bad Request" response + Given operation "UpdateScorecardRule" enabled + And there is a valid "create_scorecard_rule" in the system + And new "UpdateScorecardRule" request + And request contains "rule_id" parameter from "create_scorecard_rule.data.id" + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scorecard_id": "NOT.FOUND"}, "type": "rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: Update an existing scorecard rule returns "Not Found" response + Given operation "UpdateScorecardRule" enabled + And new "UpdateScorecardRule" request + And request contains "rule_id" parameter with value "REPLACE.ME" + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scorecard_name": "Deployments automated via Deployment Trains"}, "type": "rule"}} + When the request is sent + Then the response status is 404 Not Found diff --git a/features/v2/undo.json b/features/v2/undo.json index 9878d7a46785..444ec9d07dcc 100644 --- a/features/v2/undo.json +++ b/features/v2/undo.json @@ -2742,6 +2742,12 @@ "type": "safe" } }, + "UpdateScorecardOutcomesAsync": { + "tag": "Service Scorecards", + "undo": { + "type": "idempotent" + } + }, "CreateScorecardOutcomesBatch": { "tag": "Service Scorecards", "undo": { diff --git a/private/bdd_runner/src/support/scenarios_model_mapping.ts b/private/bdd_runner/src/support/scenarios_model_mapping.ts index f3029488d450..1625d42fb5b7 100644 --- a/private/bdd_runner/src/support/scenarios_model_mapping.ts +++ b/private/bdd_runner/src/support/scenarios_model_mapping.ts @@ -7128,6 +7128,13 @@ export const ScenariosModelMappings: { [key: string]: OperationMapping } = { }, operationResponseType: "OutcomesResponse", }, + "ServiceScorecardsApi.V2.UpdateScorecardOutcomesAsync": { + body: { + type: "UpdateOutcomesAsyncRequest", + format: "", + }, + operationResponseType: "{}", + }, "ServiceScorecardsApi.V2.CreateScorecardOutcomesBatch": { body: { type: "OutcomesBatchRequest", diff --git a/services/service_scorecards/src/v2/ServiceScorecardsApi.ts b/services/service_scorecards/src/v2/ServiceScorecardsApi.ts index a608d0ad017f..6dc0ed945ffa 100644 --- a/services/service_scorecards/src/v2/ServiceScorecardsApi.ts +++ b/services/service_scorecards/src/v2/ServiceScorecardsApi.ts @@ -31,6 +31,7 @@ import { OutcomesBatchRequest } from "./models/OutcomesBatchRequest"; import { OutcomesBatchResponse } from "./models/OutcomesBatchResponse"; import { OutcomesResponse } from "./models/OutcomesResponse"; import { OutcomesResponseDataItem } from "./models/OutcomesResponseDataItem"; +import { UpdateOutcomesAsyncRequest } from "./models/UpdateOutcomesAsyncRequest"; import { UpdateRuleRequest } from "./models/UpdateRuleRequest"; import { UpdateRuleResponse } from "./models/UpdateRuleResponse"; import { version } from "../version"; @@ -471,6 +472,67 @@ export class ServiceScorecardsApiRequestFactory extends BaseAPIRequestFactory { return requestContext; } + public async updateScorecardOutcomesAsync( + body: UpdateOutcomesAsyncRequest, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + if ( + !_config.unstableOperations[ + "ServiceScorecardsApi.v2.updateScorecardOutcomesAsync" + ] + ) { + throw new Error( + "Unstable operation 'updateScorecardOutcomesAsync' is disabled. Enable it by setting `configuration.unstableOperations['ServiceScorecardsApi.v2.updateScorecardOutcomesAsync'] = true`", + ); + } + + // verify required parameter 'body' is not null or undefined + if (body === null || body === undefined) { + throw new RequiredError("body", "updateScorecardOutcomesAsync"); + } + + // Path Params + const localVarPath = "/api/v2/scorecard/outcomes"; + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "ServiceScorecardsApi.v2.updateScorecardOutcomesAsync", + ServiceScorecardsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.POST, + overrides, + ); + requestContext.setHeaderParam("Accept", "*/*"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Body Params + const contentType = getPreferredMediaType(["application/json"]); + requestContext.setHeaderParam("Content-Type", contentType); + const serializedBody = stringify( + serialize(body, TypingInfo, "UpdateOutcomesAsyncRequest", ""), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + "AuthZ", + ]); + + return requestContext; + } + public async updateScorecardRule( ruleId: string, body: UpdateRuleRequest, @@ -829,6 +891,56 @@ export class ServiceScorecardsApiResponseProcessor { ); } + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to updateScorecardOutcomesAsync + * @throws ApiException if the response code was not in [200, 299] + */ + public async updateScorecardOutcomesAsync( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 202) { + return; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 409 || + response.httpStatusCode === 429 + ) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + return; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + /** * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects @@ -1020,6 +1132,14 @@ export interface ServiceScorecardsApiListScorecardRulesRequest { fieldsScorecard?: string; } +export interface ServiceScorecardsApiUpdateScorecardOutcomesAsyncRequest { + /** + * Set of scorecard outcomes. + * @type UpdateOutcomesAsyncRequest + */ + body: UpdateOutcomesAsyncRequest; +} + export interface ServiceScorecardsApiUpdateScorecardRuleRequest { /** * The ID of the rule. @@ -1276,6 +1396,27 @@ export class ServiceScorecardsApi { } } + /** + * Updates multiple scorecard rule outcomes in a single batched request. + * @param param The request object + */ + public updateScorecardOutcomesAsync( + param: ServiceScorecardsApiUpdateScorecardOutcomesAsyncRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = + this.requestFactory.updateScorecardOutcomesAsync(param.body, options); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.updateScorecardOutcomesAsync( + responseContext, + ); + }); + }); + } + /** * Updates an existing rule. * @param param The request object diff --git a/services/service_scorecards/src/v2/index.ts b/services/service_scorecards/src/v2/index.ts index 5938c9fd8250..b5ef03e9f8c6 100644 --- a/services/service_scorecards/src/v2/index.ts +++ b/services/service_scorecards/src/v2/index.ts @@ -4,6 +4,7 @@ export { ServiceScorecardsApiDeleteScorecardRuleRequest, ServiceScorecardsApiListScorecardOutcomesRequest, ServiceScorecardsApiListScorecardRulesRequest, + ServiceScorecardsApiUpdateScorecardOutcomesAsyncRequest, ServiceScorecardsApiUpdateScorecardRuleRequest, ServiceScorecardsApi, } from "./ServiceScorecardsApi"; @@ -40,6 +41,11 @@ export { RuleOutcomeRelationships } from "./models/RuleOutcomeRelationships"; export { RuleType } from "./models/RuleType"; export { ScorecardType } from "./models/ScorecardType"; export { State } from "./models/State"; +export { UpdateOutcomesAsyncAttributes } from "./models/UpdateOutcomesAsyncAttributes"; +export { UpdateOutcomesAsyncRequest } from "./models/UpdateOutcomesAsyncRequest"; +export { UpdateOutcomesAsyncRequestData } from "./models/UpdateOutcomesAsyncRequestData"; +export { UpdateOutcomesAsyncRequestItem } from "./models/UpdateOutcomesAsyncRequestItem"; +export { UpdateOutcomesAsyncType } from "./models/UpdateOutcomesAsyncType"; export { UpdateRuleRequest } from "./models/UpdateRuleRequest"; export { UpdateRuleRequestData } from "./models/UpdateRuleRequestData"; export { UpdateRuleResponse } from "./models/UpdateRuleResponse"; diff --git a/services/service_scorecards/src/v2/models/RuleAttributes.ts b/services/service_scorecards/src/v2/models/RuleAttributes.ts index 60f78791d300..8f1835eceb3d 100644 --- a/services/service_scorecards/src/v2/models/RuleAttributes.ts +++ b/services/service_scorecards/src/v2/models/RuleAttributes.ts @@ -24,6 +24,10 @@ export class RuleAttributes { * If enabled, the rule is calculated as part of the score. */ "enabled"?: boolean; + /** + * The maturity level of the rule (1, 2, or 3). + */ + "level"?: number; /** * Time of the last rule outcome modification. */ @@ -76,6 +80,11 @@ export class RuleAttributes { baseName: "enabled", type: "boolean", }, + level: { + baseName: "level", + type: "number", + format: "int32", + }, modifiedAt: { baseName: "modified_at", type: "Date", diff --git a/services/service_scorecards/src/v2/models/TypingInfo.ts b/services/service_scorecards/src/v2/models/TypingInfo.ts index 4d78f72c506b..35fd57717a50 100644 --- a/services/service_scorecards/src/v2/models/TypingInfo.ts +++ b/services/service_scorecards/src/v2/models/TypingInfo.ts @@ -27,6 +27,10 @@ import { RelationshipToRuleData } from "./RelationshipToRuleData"; import { RelationshipToRuleDataObject } from "./RelationshipToRuleDataObject"; import { RuleAttributes } from "./RuleAttributes"; import { RuleOutcomeRelationships } from "./RuleOutcomeRelationships"; +import { UpdateOutcomesAsyncAttributes } from "./UpdateOutcomesAsyncAttributes"; +import { UpdateOutcomesAsyncRequest } from "./UpdateOutcomesAsyncRequest"; +import { UpdateOutcomesAsyncRequestData } from "./UpdateOutcomesAsyncRequestData"; +import { UpdateOutcomesAsyncRequestItem } from "./UpdateOutcomesAsyncRequestItem"; import { UpdateRuleRequest } from "./UpdateRuleRequest"; import { UpdateRuleRequestData } from "./UpdateRuleRequestData"; import { UpdateRuleResponse } from "./UpdateRuleResponse"; @@ -39,6 +43,7 @@ export const TypingInfo: ModelTypingInfo = { RuleType: ["rule"], ScorecardType: ["scorecard"], State: ["pass", "fail", "skip"], + UpdateOutcomesAsyncType: ["batched-outcome"], }, oneOfMap: {}, typeMap: { @@ -70,6 +75,10 @@ export const TypingInfo: ModelTypingInfo = { RelationshipToRuleDataObject: RelationshipToRuleDataObject, RuleAttributes: RuleAttributes, RuleOutcomeRelationships: RuleOutcomeRelationships, + UpdateOutcomesAsyncAttributes: UpdateOutcomesAsyncAttributes, + UpdateOutcomesAsyncRequest: UpdateOutcomesAsyncRequest, + UpdateOutcomesAsyncRequestData: UpdateOutcomesAsyncRequestData, + UpdateOutcomesAsyncRequestItem: UpdateOutcomesAsyncRequestItem, UpdateRuleRequest: UpdateRuleRequest, UpdateRuleRequestData: UpdateRuleRequestData, UpdateRuleResponse: UpdateRuleResponse, diff --git a/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncAttributes.ts b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncAttributes.ts new file mode 100644 index 000000000000..b69b39828635 --- /dev/null +++ b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncAttributes.ts @@ -0,0 +1,46 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { UpdateOutcomesAsyncRequestItem } from "./UpdateOutcomesAsyncRequestItem"; + +/** + * The JSON:API attributes for a batched set of scorecard outcomes. + */ +export class UpdateOutcomesAsyncAttributes { + /** + * Set of scorecard outcomes to update asynchronously. + */ + "results"?: Array; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + results: { + baseName: "results", + type: "Array", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return UpdateOutcomesAsyncAttributes.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequest.ts b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequest.ts new file mode 100644 index 000000000000..da9801766827 --- /dev/null +++ b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequest.ts @@ -0,0 +1,46 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { UpdateOutcomesAsyncRequestData } from "./UpdateOutcomesAsyncRequestData"; + +/** + * Scorecard outcomes batch request. + */ +export class UpdateOutcomesAsyncRequest { + /** + * Scorecard outcomes batch request data. + */ + "data"?: UpdateOutcomesAsyncRequestData; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + data: { + baseName: "data", + type: "UpdateOutcomesAsyncRequestData", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return UpdateOutcomesAsyncRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestData.ts b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestData.ts new file mode 100644 index 000000000000..c05605b2d06e --- /dev/null +++ b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestData.ts @@ -0,0 +1,55 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { UpdateOutcomesAsyncAttributes } from "./UpdateOutcomesAsyncAttributes"; +import { UpdateOutcomesAsyncType } from "./UpdateOutcomesAsyncType"; + +/** + * Scorecard outcomes batch request data. + */ +export class UpdateOutcomesAsyncRequestData { + /** + * The JSON:API attributes for a batched set of scorecard outcomes. + */ + "attributes"?: UpdateOutcomesAsyncAttributes; + /** + * The JSON:API type for scorecard outcomes. + */ + "type"?: UpdateOutcomesAsyncType; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + attributes: { + baseName: "attributes", + type: "UpdateOutcomesAsyncAttributes", + }, + type: { + baseName: "type", + type: "UpdateOutcomesAsyncType", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return UpdateOutcomesAsyncRequestData.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestItem.ts b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestItem.ts new file mode 100644 index 000000000000..aac46fcc90f3 --- /dev/null +++ b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncRequestItem.ts @@ -0,0 +1,73 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { State } from "./State"; + +/** + * Scorecard outcome for a single entity and rule. + */ +export class UpdateOutcomesAsyncRequestItem { + /** + * The unique reference for an IDP entity. + */ + "entityReference": string; + /** + * Any remarks regarding the scorecard rule's evaluation. Supports HTML hyperlinks. + */ + "remarks"?: string; + /** + * The unique ID for a scorecard rule. + */ + "ruleId": string; + /** + * The state of the rule evaluation. + */ + "state": State; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + entityReference: { + baseName: "entity_reference", + type: "string", + required: true, + }, + remarks: { + baseName: "remarks", + type: "string", + }, + ruleId: { + baseName: "rule_id", + type: "string", + required: true, + }, + state: { + baseName: "state", + type: "State", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return UpdateOutcomesAsyncRequestItem.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncType.ts b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncType.ts new file mode 100644 index 000000000000..45b55a91f0fe --- /dev/null +++ b/services/service_scorecards/src/v2/models/UpdateOutcomesAsyncType.ts @@ -0,0 +1,7 @@ +import { UnparsedObject } from "@datadog/datadog-api-client"; + +/** + * The JSON:API type for scorecard outcomes. + */ +export type UpdateOutcomesAsyncType = typeof BATCHED_OUTCOME | UnparsedObject; +export const BATCHED_OUTCOME = "batched-outcome";