1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package cloudwatchlogs
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/cloudwatchlogs/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// Lists the specified metric filters. You can list all of the metric filters or
16// filter the results by log name, prefix, metric name, or metric namespace. The
17// results are ASCII-sorted by filter name.
18func (c *Client) DescribeMetricFilters(ctx context.Context, params *DescribeMetricFiltersInput, optFns ...func(*Options)) (*DescribeMetricFiltersOutput, error) {
19	if params == nil {
20		params = &DescribeMetricFiltersInput{}
21	}
22
23	result, metadata, err := c.invokeOperation(ctx, "DescribeMetricFilters", params, optFns, addOperationDescribeMetricFiltersMiddlewares)
24	if err != nil {
25		return nil, err
26	}
27
28	out := result.(*DescribeMetricFiltersOutput)
29	out.ResultMetadata = metadata
30	return out, nil
31}
32
33type DescribeMetricFiltersInput struct {
34
35	// The prefix to match. CloudWatch Logs uses the value you set here only if you
36	// also include the logGroupName parameter in your request.
37	FilterNamePrefix *string
38
39	// The maximum number of items returned. If you don't specify a value, the default
40	// is up to 50 items.
41	Limit *int32
42
43	// The name of the log group.
44	LogGroupName *string
45
46	// Filters results to include only those with the specified metric name. If you
47	// include this parameter in your request, you must also include the
48	// metricNamespace parameter.
49	MetricName *string
50
51	// Filters results to include only those in the specified namespace. If you include
52	// this parameter in your request, you must also include the metricName parameter.
53	MetricNamespace *string
54
55	// The token for the next set of items to return. (You received this token from a
56	// previous call.)
57	NextToken *string
58}
59
60type DescribeMetricFiltersOutput struct {
61
62	// The metric filters.
63	MetricFilters []types.MetricFilter
64
65	// The token for the next set of items to return. The token expires after 24 hours.
66	NextToken *string
67
68	// Metadata pertaining to the operation's result.
69	ResultMetadata middleware.Metadata
70}
71
72func addOperationDescribeMetricFiltersMiddlewares(stack *middleware.Stack, options Options) (err error) {
73	err = stack.Serialize.Add(&awsAwsjson11_serializeOpDescribeMetricFilters{}, middleware.After)
74	if err != nil {
75		return err
76	}
77	err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpDescribeMetricFilters{}, middleware.After)
78	if err != nil {
79		return err
80	}
81	if err = addSetLoggerMiddleware(stack, options); err != nil {
82		return err
83	}
84	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
85		return err
86	}
87	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
88		return err
89	}
90	if err = addResolveEndpointMiddleware(stack, options); err != nil {
91		return err
92	}
93	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
94		return err
95	}
96	if err = addRetryMiddlewares(stack, options); err != nil {
97		return err
98	}
99	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
100		return err
101	}
102	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
103		return err
104	}
105	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
106		return err
107	}
108	if err = addClientUserAgent(stack); err != nil {
109		return err
110	}
111	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
112		return err
113	}
114	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
115		return err
116	}
117	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opDescribeMetricFilters(options.Region), middleware.Before); err != nil {
118		return err
119	}
120	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
121		return err
122	}
123	if err = addResponseErrorMiddleware(stack); err != nil {
124		return err
125	}
126	if err = addRequestResponseLogging(stack, options); err != nil {
127		return err
128	}
129	return nil
130}
131
132// DescribeMetricFiltersAPIClient is a client that implements the
133// DescribeMetricFilters operation.
134type DescribeMetricFiltersAPIClient interface {
135	DescribeMetricFilters(context.Context, *DescribeMetricFiltersInput, ...func(*Options)) (*DescribeMetricFiltersOutput, error)
136}
137
138var _ DescribeMetricFiltersAPIClient = (*Client)(nil)
139
140// DescribeMetricFiltersPaginatorOptions is the paginator options for
141// DescribeMetricFilters
142type DescribeMetricFiltersPaginatorOptions struct {
143	// The maximum number of items returned. If you don't specify a value, the default
144	// is up to 50 items.
145	Limit int32
146
147	// Set to true if pagination should stop if the service returns a pagination token
148	// that matches the most recent token provided to the service.
149	StopOnDuplicateToken bool
150}
151
152// DescribeMetricFiltersPaginator is a paginator for DescribeMetricFilters
153type DescribeMetricFiltersPaginator struct {
154	options   DescribeMetricFiltersPaginatorOptions
155	client    DescribeMetricFiltersAPIClient
156	params    *DescribeMetricFiltersInput
157	nextToken *string
158	firstPage bool
159}
160
161// NewDescribeMetricFiltersPaginator returns a new DescribeMetricFiltersPaginator
162func NewDescribeMetricFiltersPaginator(client DescribeMetricFiltersAPIClient, params *DescribeMetricFiltersInput, optFns ...func(*DescribeMetricFiltersPaginatorOptions)) *DescribeMetricFiltersPaginator {
163	if params == nil {
164		params = &DescribeMetricFiltersInput{}
165	}
166
167	options := DescribeMetricFiltersPaginatorOptions{}
168	if params.Limit != nil {
169		options.Limit = *params.Limit
170	}
171
172	for _, fn := range optFns {
173		fn(&options)
174	}
175
176	return &DescribeMetricFiltersPaginator{
177		options:   options,
178		client:    client,
179		params:    params,
180		firstPage: true,
181	}
182}
183
184// HasMorePages returns a boolean indicating whether more pages are available
185func (p *DescribeMetricFiltersPaginator) HasMorePages() bool {
186	return p.firstPage || p.nextToken != nil
187}
188
189// NextPage retrieves the next DescribeMetricFilters page.
190func (p *DescribeMetricFiltersPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*DescribeMetricFiltersOutput, error) {
191	if !p.HasMorePages() {
192		return nil, fmt.Errorf("no more pages available")
193	}
194
195	params := *p.params
196	params.NextToken = p.nextToken
197
198	var limit *int32
199	if p.options.Limit > 0 {
200		limit = &p.options.Limit
201	}
202	params.Limit = limit
203
204	result, err := p.client.DescribeMetricFilters(ctx, &params, optFns...)
205	if err != nil {
206		return nil, err
207	}
208	p.firstPage = false
209
210	prevToken := p.nextToken
211	p.nextToken = result.NextToken
212
213	if p.options.StopOnDuplicateToken && prevToken != nil && p.nextToken != nil && *prevToken == *p.nextToken {
214		p.nextToken = nil
215	}
216
217	return result, nil
218}
219
220func newServiceMetadataMiddleware_opDescribeMetricFilters(region string) *awsmiddleware.RegisterServiceMetadata {
221	return &awsmiddleware.RegisterServiceMetadata{
222		Region:        region,
223		ServiceID:     ServiceID,
224		SigningName:   "logs",
225		OperationName: "DescribeMetricFilters",
226	}
227}
228