1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package ssmincidents
4
5import (
6	"context"
7	"fmt"
8	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
9	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
10	"github.com/aws/aws-sdk-go-v2/service/ssmincidents/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// Used to start an incident from CloudWatch alarms, EventBridge events, or
16// manually.
17func (c *Client) StartIncident(ctx context.Context, params *StartIncidentInput, optFns ...func(*Options)) (*StartIncidentOutput, error) {
18	if params == nil {
19		params = &StartIncidentInput{}
20	}
21
22	result, metadata, err := c.invokeOperation(ctx, "StartIncident", params, optFns, c.addOperationStartIncidentMiddlewares)
23	if err != nil {
24		return nil, err
25	}
26
27	out := result.(*StartIncidentOutput)
28	out.ResultMetadata = metadata
29	return out, nil
30}
31
32type StartIncidentInput struct {
33
34	// The Amazon Resource Name (ARN) of the response plan that pre-defines summary,
35	// chat channels, SNS topics, runbooks, title, and impact of the incident.
36	//
37	// This member is required.
38	ResponsePlanArn *string
39
40	// A token ensuring that the action is called only once with the specified details.
41	ClientToken *string
42
43	// Defines the impact to the customers. Providing an impact overwrites the impact
44	// provided by a response plan. Possible impacts:
45	//
46	// * 1 - Critical impact, this
47	// typically relates to full application failure that impacts many to all
48	// customers.
49	//
50	// * 2 - High impact, partial application failure with impact to many
51	// customers.
52	//
53	// * 3 - Medium impact, the application is providing reduced service to
54	// customers.
55	//
56	// * 4 - Low impact, customer might aren't impacted by the problem
57	// yet.
58	//
59	// * 5 - No impact, customers aren't currently impacted but urgent action is
60	// needed to avoid impact.
61	Impact *int32
62
63	// Add related items to the incident for other responders to use. Related items are
64	// AWS resources, external links, or files uploaded to an S3 bucket.
65	RelatedItems []types.RelatedItem
66
67	// Provide a title for the incident. Providing a title overwrites the title
68	// provided by the response plan.
69	Title *string
70
71	// Details of what created the incident record in Incident Manager.
72	TriggerDetails *types.TriggerDetails
73
74	noSmithyDocumentSerde
75}
76
77type StartIncidentOutput struct {
78
79	// The ARN of the newly created incident record.
80	//
81	// This member is required.
82	IncidentRecordArn *string
83
84	// Metadata pertaining to the operation's result.
85	ResultMetadata middleware.Metadata
86
87	noSmithyDocumentSerde
88}
89
90func (c *Client) addOperationStartIncidentMiddlewares(stack *middleware.Stack, options Options) (err error) {
91	err = stack.Serialize.Add(&awsRestjson1_serializeOpStartIncident{}, middleware.After)
92	if err != nil {
93		return err
94	}
95	err = stack.Deserialize.Add(&awsRestjson1_deserializeOpStartIncident{}, middleware.After)
96	if err != nil {
97		return err
98	}
99	if err = addSetLoggerMiddleware(stack, options); err != nil {
100		return err
101	}
102	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
103		return err
104	}
105	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
106		return err
107	}
108	if err = addResolveEndpointMiddleware(stack, options); err != nil {
109		return err
110	}
111	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
112		return err
113	}
114	if err = addRetryMiddlewares(stack, options); err != nil {
115		return err
116	}
117	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
118		return err
119	}
120	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
121		return err
122	}
123	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
124		return err
125	}
126	if err = addClientUserAgent(stack); err != nil {
127		return err
128	}
129	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
130		return err
131	}
132	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
133		return err
134	}
135	if err = addIdempotencyToken_opStartIncidentMiddleware(stack, options); err != nil {
136		return err
137	}
138	if err = addOpStartIncidentValidationMiddleware(stack); err != nil {
139		return err
140	}
141	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opStartIncident(options.Region), middleware.Before); err != nil {
142		return err
143	}
144	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
145		return err
146	}
147	if err = addResponseErrorMiddleware(stack); err != nil {
148		return err
149	}
150	if err = addRequestResponseLogging(stack, options); err != nil {
151		return err
152	}
153	return nil
154}
155
156type idempotencyToken_initializeOpStartIncident struct {
157	tokenProvider IdempotencyTokenProvider
158}
159
160func (*idempotencyToken_initializeOpStartIncident) ID() string {
161	return "OperationIdempotencyTokenAutoFill"
162}
163
164func (m *idempotencyToken_initializeOpStartIncident) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
165	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
166) {
167	if m.tokenProvider == nil {
168		return next.HandleInitialize(ctx, in)
169	}
170
171	input, ok := in.Parameters.(*StartIncidentInput)
172	if !ok {
173		return out, metadata, fmt.Errorf("expected middleware input to be of type *StartIncidentInput ")
174	}
175
176	if input.ClientToken == nil {
177		t, err := m.tokenProvider.GetIdempotencyToken()
178		if err != nil {
179			return out, metadata, err
180		}
181		input.ClientToken = &t
182	}
183	return next.HandleInitialize(ctx, in)
184}
185func addIdempotencyToken_opStartIncidentMiddleware(stack *middleware.Stack, cfg Options) error {
186	return stack.Initialize.Add(&idempotencyToken_initializeOpStartIncident{tokenProvider: cfg.IdempotencyTokenProvider}, middleware.Before)
187}
188
189func newServiceMetadataMiddleware_opStartIncident(region string) *awsmiddleware.RegisterServiceMetadata {
190	return &awsmiddleware.RegisterServiceMetadata{
191		Region:        region,
192		ServiceID:     ServiceID,
193		SigningName:   "ssm-incidents",
194		OperationName: "StartIncident",
195	}
196}
197