Skip to content

Commit 7d1c563

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Allow to send batches of events in pipelines API (#3319)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent 7969194 commit 7d1c563

12 files changed

Lines changed: 336 additions & 110 deletions

.generator/schemas/v2/openapi.yaml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5994,7 +5994,7 @@ components:
59945994
description: Request object.
59955995
properties:
59965996
data:
5997-
$ref: '#/components/schemas/CIAppCreatePipelineEventRequestData'
5997+
$ref: '#/components/schemas/CIAppCreatePipelineEventRequestDataSingleOrArray'
59985998
type: object
59995999
CIAppCreatePipelineEventRequestAttributes:
60006000
description: Attributes of the pipeline event to create.
@@ -6030,6 +6030,16 @@ components:
60306030
type:
60316031
$ref: '#/components/schemas/CIAppCreatePipelineEventRequestDataType'
60326032
type: object
6033+
CIAppCreatePipelineEventRequestDataArray:
6034+
description: Array of pipeline events to create in batch.
6035+
items:
6036+
$ref: '#/components/schemas/CIAppCreatePipelineEventRequestData'
6037+
type: array
6038+
CIAppCreatePipelineEventRequestDataSingleOrArray:
6039+
description: Data of the pipeline events to create.
6040+
oneOf:
6041+
- $ref: '#/components/schemas/CIAppCreatePipelineEventRequestData'
6042+
- $ref: '#/components/schemas/CIAppCreatePipelineEventRequestDataArray'
60336043
CIAppCreatePipelineEventRequestDataType:
60346044
default: cipipeline_resource_request
60356045
description: Type of the event.
@@ -51718,6 +51728,9 @@ paths:
5171851728
we support, see [Pipeline Data Model And Execution Types](https://docs.datadoghq.com/continuous_integration/guides/pipeline_data_model/).
5171951729

5172051730

51731+
Multiple events can be sent in an array (up to 1000).
51732+
51733+
5172151734
Pipeline events can be submitted with a timestamp that is up to 18 hours in
5172251735
the past.'
5172351736
operationId: CreateCIAppPipelineEvent

api/datadogV2/api_ci_visibility_pipelines.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ func (a *CIVisibilityPipelinesApi) AggregateCIAppPipelineEvents(ctx _context.Con
9999
// CreateCIAppPipelineEvent Send pipeline event.
100100
// Send your pipeline event to your Datadog platform over HTTP. For details about how pipeline executions are modeled and what execution types we support, see [Pipeline Data Model And Execution Types](https://docs.datadoghq.com/continuous_integration/guides/pipeline_data_model/).
101101
//
102+
// Multiple events can be sent in an array (up to 1000).
103+
//
102104
// Pipeline events can be submitted with a timestamp that is up to 18 hours in the past.
103105
func (a *CIVisibilityPipelinesApi) CreateCIAppPipelineEvent(ctx _context.Context, body CIAppCreatePipelineEventRequest) (interface{}, *_nethttp.Response, error) {
104106
var (

api/datadogV2/model_ci_app_create_pipeline_event_request.go

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import (
1010

1111
// CIAppCreatePipelineEventRequest Request object.
1212
type CIAppCreatePipelineEventRequest struct {
13-
// Data of the pipeline event to create.
14-
Data *CIAppCreatePipelineEventRequestData `json:"data,omitempty"`
13+
// Data of the pipeline events to create.
14+
Data *CIAppCreatePipelineEventRequestDataSingleOrArray `json:"data,omitempty"`
1515
// UnparsedObject contains the raw value of the object if there was an error when deserializing into the struct
1616
UnparsedObject map[string]interface{} `json:"-"`
1717
AdditionalProperties map[string]interface{} `json:"-"`
@@ -35,17 +35,17 @@ func NewCIAppCreatePipelineEventRequestWithDefaults() *CIAppCreatePipelineEventR
3535
}
3636

3737
// GetData returns the Data field value if set, zero value otherwise.
38-
func (o *CIAppCreatePipelineEventRequest) GetData() CIAppCreatePipelineEventRequestData {
38+
func (o *CIAppCreatePipelineEventRequest) GetData() CIAppCreatePipelineEventRequestDataSingleOrArray {
3939
if o == nil || o.Data == nil {
40-
var ret CIAppCreatePipelineEventRequestData
40+
var ret CIAppCreatePipelineEventRequestDataSingleOrArray
4141
return ret
4242
}
4343
return *o.Data
4444
}
4545

4646
// GetDataOk returns a tuple with the Data field value if set, nil otherwise
4747
// and a boolean to check if the value has been set.
48-
func (o *CIAppCreatePipelineEventRequest) GetDataOk() (*CIAppCreatePipelineEventRequestData, bool) {
48+
func (o *CIAppCreatePipelineEventRequest) GetDataOk() (*CIAppCreatePipelineEventRequestDataSingleOrArray, bool) {
4949
if o == nil || o.Data == nil {
5050
return nil, false
5151
}
@@ -57,8 +57,8 @@ func (o *CIAppCreatePipelineEventRequest) HasData() bool {
5757
return o != nil && o.Data != nil
5858
}
5959

60-
// SetData gets a reference to the given CIAppCreatePipelineEventRequestData and assigns it to the Data field.
61-
func (o *CIAppCreatePipelineEventRequest) SetData(v CIAppCreatePipelineEventRequestData) {
60+
// SetData gets a reference to the given CIAppCreatePipelineEventRequestDataSingleOrArray and assigns it to the Data field.
61+
func (o *CIAppCreatePipelineEventRequest) SetData(v CIAppCreatePipelineEventRequestDataSingleOrArray) {
6262
o.Data = &v
6363
}
6464

@@ -81,7 +81,7 @@ func (o CIAppCreatePipelineEventRequest) MarshalJSON() ([]byte, error) {
8181
// UnmarshalJSON deserializes the given payload.
8282
func (o *CIAppCreatePipelineEventRequest) UnmarshalJSON(bytes []byte) (err error) {
8383
all := struct {
84-
Data *CIAppCreatePipelineEventRequestData `json:"data,omitempty"`
84+
Data *CIAppCreatePipelineEventRequestDataSingleOrArray `json:"data,omitempty"`
8585
}{}
8686
if err = datadog.Unmarshal(bytes, &all); err != nil {
8787
return datadog.Unmarshal(bytes, &o.UnparsedObject)
@@ -92,20 +92,11 @@ func (o *CIAppCreatePipelineEventRequest) UnmarshalJSON(bytes []byte) (err error
9292
} else {
9393
return err
9494
}
95-
96-
hasInvalidField := false
97-
if all.Data != nil && all.Data.UnparsedObject != nil && o.UnparsedObject == nil {
98-
hasInvalidField = true
99-
}
10095
o.Data = all.Data
10196

10297
if len(additionalProperties) > 0 {
10398
o.AdditionalProperties = additionalProperties
10499
}
105100

106-
if hasInvalidField {
107-
return datadog.Unmarshal(bytes, &o.UnparsedObject)
108-
}
109-
110101
return nil
111102
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
2+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
3+
// Copyright 2019-Present Datadog, Inc.
4+
5+
package datadogV2
6+
7+
import (
8+
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
9+
)
10+
11+
// CIAppCreatePipelineEventRequestDataSingleOrArray - Data of the pipeline events to create.
12+
type CIAppCreatePipelineEventRequestDataSingleOrArray struct {
13+
CIAppCreatePipelineEventRequestData *CIAppCreatePipelineEventRequestData
14+
CIAppCreatePipelineEventRequestDataArray *[]CIAppCreatePipelineEventRequestData
15+
16+
// UnparsedObject contains the raw value of the object if there was an error when deserializing into the struct
17+
UnparsedObject interface{}
18+
}
19+
20+
// CIAppCreatePipelineEventRequestDataAsCIAppCreatePipelineEventRequestDataSingleOrArray is a convenience function that returns CIAppCreatePipelineEventRequestData wrapped in CIAppCreatePipelineEventRequestDataSingleOrArray.
21+
func CIAppCreatePipelineEventRequestDataAsCIAppCreatePipelineEventRequestDataSingleOrArray(v *CIAppCreatePipelineEventRequestData) CIAppCreatePipelineEventRequestDataSingleOrArray {
22+
return CIAppCreatePipelineEventRequestDataSingleOrArray{CIAppCreatePipelineEventRequestData: v}
23+
}
24+
25+
// CIAppCreatePipelineEventRequestDataArrayAsCIAppCreatePipelineEventRequestDataSingleOrArray is a convenience function that returns []CIAppCreatePipelineEventRequestData wrapped in CIAppCreatePipelineEventRequestDataSingleOrArray.
26+
func CIAppCreatePipelineEventRequestDataArrayAsCIAppCreatePipelineEventRequestDataSingleOrArray(v *[]CIAppCreatePipelineEventRequestData) CIAppCreatePipelineEventRequestDataSingleOrArray {
27+
return CIAppCreatePipelineEventRequestDataSingleOrArray{CIAppCreatePipelineEventRequestDataArray: v}
28+
}
29+
30+
// UnmarshalJSON turns data into one of the pointers in the struct.
31+
func (obj *CIAppCreatePipelineEventRequestDataSingleOrArray) UnmarshalJSON(data []byte) error {
32+
var err error
33+
match := 0
34+
// try to unmarshal data into CIAppCreatePipelineEventRequestData
35+
err = datadog.Unmarshal(data, &obj.CIAppCreatePipelineEventRequestData)
36+
if err == nil {
37+
if obj.CIAppCreatePipelineEventRequestData != nil && obj.CIAppCreatePipelineEventRequestData.UnparsedObject == nil {
38+
jsonCIAppCreatePipelineEventRequestData, _ := datadog.Marshal(obj.CIAppCreatePipelineEventRequestData)
39+
if string(jsonCIAppCreatePipelineEventRequestData) == "{}" && string(data) != "{}" { // empty struct
40+
obj.CIAppCreatePipelineEventRequestData = nil
41+
} else {
42+
match++
43+
}
44+
} else {
45+
obj.CIAppCreatePipelineEventRequestData = nil
46+
}
47+
} else {
48+
obj.CIAppCreatePipelineEventRequestData = nil
49+
}
50+
51+
// try to unmarshal data into CIAppCreatePipelineEventRequestDataArray
52+
err = datadog.Unmarshal(data, &obj.CIAppCreatePipelineEventRequestDataArray)
53+
if err == nil {
54+
if obj.CIAppCreatePipelineEventRequestDataArray != nil {
55+
jsonCIAppCreatePipelineEventRequestDataArray, _ := datadog.Marshal(obj.CIAppCreatePipelineEventRequestDataArray)
56+
if string(jsonCIAppCreatePipelineEventRequestDataArray) == "{}" && string(data) != "{}" { // empty struct
57+
obj.CIAppCreatePipelineEventRequestDataArray = nil
58+
} else {
59+
match++
60+
}
61+
} else {
62+
obj.CIAppCreatePipelineEventRequestDataArray = nil
63+
}
64+
} else {
65+
obj.CIAppCreatePipelineEventRequestDataArray = nil
66+
}
67+
68+
if match != 1 { // more than 1 match
69+
// reset to nil
70+
obj.CIAppCreatePipelineEventRequestData = nil
71+
obj.CIAppCreatePipelineEventRequestDataArray = nil
72+
return datadog.Unmarshal(data, &obj.UnparsedObject)
73+
}
74+
return nil // exactly one match
75+
}
76+
77+
// MarshalJSON turns data from the first non-nil pointers in the struct to JSON.
78+
func (obj CIAppCreatePipelineEventRequestDataSingleOrArray) MarshalJSON() ([]byte, error) {
79+
if obj.CIAppCreatePipelineEventRequestData != nil {
80+
return datadog.Marshal(&obj.CIAppCreatePipelineEventRequestData)
81+
}
82+
83+
if obj.CIAppCreatePipelineEventRequestDataArray != nil {
84+
return datadog.Marshal(&obj.CIAppCreatePipelineEventRequestDataArray)
85+
}
86+
87+
if obj.UnparsedObject != nil {
88+
return datadog.Marshal(obj.UnparsedObject)
89+
}
90+
return nil, nil // no data in oneOf schemas
91+
}
92+
93+
// GetActualInstance returns the actual instance.
94+
func (obj *CIAppCreatePipelineEventRequestDataSingleOrArray) GetActualInstance() interface{} {
95+
if obj.CIAppCreatePipelineEventRequestData != nil {
96+
return obj.CIAppCreatePipelineEventRequestData
97+
}
98+
99+
if obj.CIAppCreatePipelineEventRequestDataArray != nil {
100+
return obj.CIAppCreatePipelineEventRequestDataArray
101+
}
102+
103+
// all schemas are nil
104+
return nil
105+
}

examples/v2/ci-visibility-pipelines/CreateCIAppPipelineEvent.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,29 @@ import (
1515

1616
func main() {
1717
body := datadogV2.CIAppCreatePipelineEventRequest{
18-
Data: &datadogV2.CIAppCreatePipelineEventRequestData{
19-
Attributes: &datadogV2.CIAppCreatePipelineEventRequestAttributes{
20-
Resource: datadogV2.CIAppCreatePipelineEventRequestAttributesResource{
21-
CIAppPipelineEventPipeline: &datadogV2.CIAppPipelineEventPipeline{
22-
CIAppPipelineEventFinishedPipeline: &datadogV2.CIAppPipelineEventFinishedPipeline{
23-
Level: datadogV2.CIAPPPIPELINEEVENTPIPELINELEVEL_PIPELINE,
24-
UniqueId: "3eacb6f3-ff04-4e10-8a9c-46e6d054024a",
25-
Name: "Deploy to AWS",
26-
Url: "https://my-ci-provider.example/pipelines/my-pipeline/run/1",
27-
Start: time.Now().Add(time.Second * -120),
28-
End: time.Now().Add(time.Second * -30),
29-
Status: datadogV2.CIAPPPIPELINEEVENTPIPELINESTATUS_SUCCESS,
30-
PartialRetry: false,
31-
Git: *datadogV2.NewNullableCIAppGitInfo(&datadogV2.CIAppGitInfo{
32-
RepositoryUrl: "https://github.com/DataDog/datadog-agent",
33-
Sha: "7f263865994b76066c4612fd1965215e7dcb4cd2",
34-
AuthorEmail: "john.doe@email.com",
35-
}),
36-
}}},
37-
},
38-
Type: datadogV2.CIAPPCREATEPIPELINEEVENTREQUESTDATATYPE_CIPIPELINE_RESOURCE_REQUEST.Ptr(),
39-
},
18+
Data: &datadogV2.CIAppCreatePipelineEventRequestDataSingleOrArray{
19+
CIAppCreatePipelineEventRequestData: &datadogV2.CIAppCreatePipelineEventRequestData{
20+
Attributes: &datadogV2.CIAppCreatePipelineEventRequestAttributes{
21+
Resource: datadogV2.CIAppCreatePipelineEventRequestAttributesResource{
22+
CIAppPipelineEventPipeline: &datadogV2.CIAppPipelineEventPipeline{
23+
CIAppPipelineEventFinishedPipeline: &datadogV2.CIAppPipelineEventFinishedPipeline{
24+
Level: datadogV2.CIAPPPIPELINEEVENTPIPELINELEVEL_PIPELINE,
25+
UniqueId: "3eacb6f3-ff04-4e10-8a9c-46e6d054024a",
26+
Name: "Deploy to AWS",
27+
Url: "https://my-ci-provider.example/pipelines/my-pipeline/run/1",
28+
Start: time.Now().Add(time.Second * -120),
29+
End: time.Now().Add(time.Second * -30),
30+
Status: datadogV2.CIAPPPIPELINEEVENTPIPELINESTATUS_SUCCESS,
31+
PartialRetry: false,
32+
Git: *datadogV2.NewNullableCIAppGitInfo(&datadogV2.CIAppGitInfo{
33+
RepositoryUrl: "https://github.com/DataDog/datadog-agent",
34+
Sha: "7f263865994b76066c4612fd1965215e7dcb4cd2",
35+
AuthorEmail: "john.doe@email.com",
36+
}),
37+
}}},
38+
},
39+
Type: datadogV2.CIAPPCREATEPIPELINEEVENTREQUESTDATATYPE_CIPIPELINE_RESOURCE_REQUEST.Ptr(),
40+
}},
4041
}
4142
ctx := datadog.NewDefaultContext(context.Background())
4243
configuration := datadog.NewConfiguration()

examples/v2/ci-visibility-pipelines/CreateCIAppPipelineEvent_129899466.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,24 @@ import (
1515

1616
func main() {
1717
body := datadogV2.CIAppCreatePipelineEventRequest{
18-
Data: &datadogV2.CIAppCreatePipelineEventRequestData{
19-
Attributes: &datadogV2.CIAppCreatePipelineEventRequestAttributes{
20-
Resource: datadogV2.CIAppCreatePipelineEventRequestAttributesResource{
21-
CIAppPipelineEventJob: &datadogV2.CIAppPipelineEventJob{
22-
Level: datadogV2.CIAPPPIPELINEEVENTJOBLEVEL_JOB,
23-
Id: "cf9456de-8b9e-4c27-aa79-27b1e78c1a33",
24-
Name: "Build image",
25-
PipelineUniqueId: "3eacb6f3-ff04-4e10-8a9c-46e6d054024a",
26-
PipelineName: "Deploy to AWS",
27-
Start: time.Now().Add(time.Second * -120),
28-
End: time.Now().Add(time.Second * -30),
29-
Status: datadogV2.CIAPPPIPELINEEVENTJOBSTATUS_ERROR,
30-
Url: "https://my-ci-provider.example/jobs/my-jobs/run/1",
31-
}},
32-
},
33-
Type: datadogV2.CIAPPCREATEPIPELINEEVENTREQUESTDATATYPE_CIPIPELINE_RESOURCE_REQUEST.Ptr(),
34-
},
18+
Data: &datadogV2.CIAppCreatePipelineEventRequestDataSingleOrArray{
19+
CIAppCreatePipelineEventRequestData: &datadogV2.CIAppCreatePipelineEventRequestData{
20+
Attributes: &datadogV2.CIAppCreatePipelineEventRequestAttributes{
21+
Resource: datadogV2.CIAppCreatePipelineEventRequestAttributesResource{
22+
CIAppPipelineEventJob: &datadogV2.CIAppPipelineEventJob{
23+
Level: datadogV2.CIAPPPIPELINEEVENTJOBLEVEL_JOB,
24+
Id: "cf9456de-8b9e-4c27-aa79-27b1e78c1a33",
25+
Name: "Build image",
26+
PipelineUniqueId: "3eacb6f3-ff04-4e10-8a9c-46e6d054024a",
27+
PipelineName: "Deploy to AWS",
28+
Start: time.Now().Add(time.Second * -120),
29+
End: time.Now().Add(time.Second * -30),
30+
Status: datadogV2.CIAPPPIPELINEEVENTJOBSTATUS_ERROR,
31+
Url: "https://my-ci-provider.example/jobs/my-jobs/run/1",
32+
}},
33+
},
34+
Type: datadogV2.CIAPPCREATEPIPELINEEVENTREQUESTDATATYPE_CIPIPELINE_RESOURCE_REQUEST.Ptr(),
35+
}},
3536
}
3637
ctx := datadog.NewDefaultContext(context.Background())
3738
configuration := datadog.NewConfiguration()

examples/v2/ci-visibility-pipelines/CreateCIAppPipelineEvent_2341150096.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,28 @@ import (
1515

1616
func main() {
1717
body := datadogV2.CIAppCreatePipelineEventRequest{
18-
Data: &datadogV2.CIAppCreatePipelineEventRequestData{
19-
Attributes: &datadogV2.CIAppCreatePipelineEventRequestAttributes{
20-
Resource: datadogV2.CIAppCreatePipelineEventRequestAttributesResource{
21-
CIAppPipelineEventPipeline: &datadogV2.CIAppPipelineEventPipeline{
22-
CIAppPipelineEventInProgressPipeline: &datadogV2.CIAppPipelineEventInProgressPipeline{
23-
Level: datadogV2.CIAPPPIPELINEEVENTPIPELINELEVEL_PIPELINE,
24-
UniqueId: "3eacb6f3-ff04-4e10-8a9c-46e6d054024a",
25-
Name: "Deploy to AWS",
26-
Url: "https://my-ci-provider.example/pipelines/my-pipeline/run/1",
27-
Start: time.Now().Add(time.Second * -120),
28-
Status: datadogV2.CIAPPPIPELINEEVENTPIPELINEINPROGRESSSTATUS_RUNNING,
29-
PartialRetry: false,
30-
Git: *datadogV2.NewNullableCIAppGitInfo(&datadogV2.CIAppGitInfo{
31-
RepositoryUrl: "https://github.com/DataDog/datadog-agent",
32-
Sha: "7f263865994b76066c4612fd1965215e7dcb4cd2",
33-
AuthorEmail: "john.doe@email.com",
34-
}),
35-
}}},
36-
},
37-
Type: datadogV2.CIAPPCREATEPIPELINEEVENTREQUESTDATATYPE_CIPIPELINE_RESOURCE_REQUEST.Ptr(),
38-
},
18+
Data: &datadogV2.CIAppCreatePipelineEventRequestDataSingleOrArray{
19+
CIAppCreatePipelineEventRequestData: &datadogV2.CIAppCreatePipelineEventRequestData{
20+
Attributes: &datadogV2.CIAppCreatePipelineEventRequestAttributes{
21+
Resource: datadogV2.CIAppCreatePipelineEventRequestAttributesResource{
22+
CIAppPipelineEventPipeline: &datadogV2.CIAppPipelineEventPipeline{
23+
CIAppPipelineEventInProgressPipeline: &datadogV2.CIAppPipelineEventInProgressPipeline{
24+
Level: datadogV2.CIAPPPIPELINEEVENTPIPELINELEVEL_PIPELINE,
25+
UniqueId: "3eacb6f3-ff04-4e10-8a9c-46e6d054024a",
26+
Name: "Deploy to AWS",
27+
Url: "https://my-ci-provider.example/pipelines/my-pipeline/run/1",
28+
Start: time.Now().Add(time.Second * -120),
29+
Status: datadogV2.CIAPPPIPELINEEVENTPIPELINEINPROGRESSSTATUS_RUNNING,
30+
PartialRetry: false,
31+
Git: *datadogV2.NewNullableCIAppGitInfo(&datadogV2.CIAppGitInfo{
32+
RepositoryUrl: "https://github.com/DataDog/datadog-agent",
33+
Sha: "7f263865994b76066c4612fd1965215e7dcb4cd2",
34+
AuthorEmail: "john.doe@email.com",
35+
}),
36+
}}},
37+
},
38+
Type: datadogV2.CIAPPCREATEPIPELINEEVENTREQUESTDATATYPE_CIPIPELINE_RESOURCE_REQUEST.Ptr(),
39+
}},
3940
}
4041
ctx := datadog.NewDefaultContext(context.Background())
4142
configuration := datadog.NewConfiguration()

0 commit comments

Comments
 (0)