service/connect/api_op_GetCurrentMetricData.go (214 lines of code) (raw):
// Code generated by smithy-go-codegen DO NOT EDIT.
package connect
import (
"context"
"fmt"
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
"github.com/aws/aws-sdk-go-v2/service/connect/types"
"github.com/aws/smithy-go/middleware"
smithyhttp "github.com/aws/smithy-go/transport/http"
"time"
)
// Gets the real-time metric data from the specified Amazon Connect instance.
//
// For a description of each metric, see [Metrics definitions] in the Amazon Connect Administrator
// Guide.
//
// [Metrics definitions]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html
func (c *Client) GetCurrentMetricData(ctx context.Context, params *GetCurrentMetricDataInput, optFns ...func(*Options)) (*GetCurrentMetricDataOutput, error) {
if params == nil {
params = &GetCurrentMetricDataInput{}
}
result, metadata, err := c.invokeOperation(ctx, "GetCurrentMetricData", params, optFns, c.addOperationGetCurrentMetricDataMiddlewares)
if err != nil {
return nil, err
}
out := result.(*GetCurrentMetricDataOutput)
out.ResultMetadata = metadata
return out, nil
}
type GetCurrentMetricDataInput struct {
// The metrics to retrieve. Specify the name and unit for each metric. The
// following metrics are available. For a description of all the metrics, see [Metrics definitions]in
// the Amazon Connect Administrator Guide.
//
// AGENTS_AFTER_CONTACT_WORK Unit: COUNT
//
// Name in real-time metrics report: [ACW]
//
// AGENTS_AVAILABLE Unit: COUNT
//
// Name in real-time metrics report: [Available]
//
// AGENTS_ERROR Unit: COUNT
//
// Name in real-time metrics report: [Error]
//
// AGENTS_NON_PRODUCTIVE Unit: COUNT
//
// Name in real-time metrics report: [NPT (Non-Productive Time)]
//
// AGENTS_ON_CALL Unit: COUNT
//
// Name in real-time metrics report: [On contact]
//
// AGENTS_ON_CONTACT Unit: COUNT
//
// Name in real-time metrics report: [On contact]
//
// AGENTS_ONLINE Unit: COUNT
//
// Name in real-time metrics report: [Online]
//
// AGENTS_STAFFED Unit: COUNT
//
// Name in real-time metrics report: [Staffed]
//
// CONTACTS_IN_QUEUE Unit: COUNT
//
// Name in real-time metrics report: [In queue]
//
// CONTACTS_SCHEDULED Unit: COUNT
//
// Name in real-time metrics report: [Scheduled]
//
// OLDEST_CONTACT_AGE Unit: SECONDS
//
// When you use groupings, Unit says SECONDS and the Value is returned in SECONDS.
//
// When you do not use groupings, Unit says SECONDS but the Value is returned in
// MILLISECONDS. For example, if you get a response like this:
//
// { "Metric": { "Name": "OLDEST_CONTACT_AGE", "Unit": "SECONDS" }, "Value":
// 24113.0 }
//
// The actual OLDEST_CONTACT_AGE is 24 seconds.
//
// When the filter RoutingStepExpression is used, this metric is still calculated
// from enqueue time. For example, if a contact that has been queued under for 10
// seconds has expired and becomes active, then OLDEST_CONTACT_AGE for this queue
// will be counted starting from 10, not 0.
//
// Name in real-time metrics report: [Oldest]
//
// SLOTS_ACTIVE Unit: COUNT
//
// Name in real-time metrics report: [Active]
//
// SLOTS_AVAILABLE Unit: COUNT
//
// Name in real-time metrics report: [Availability]
//
// [Availability]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#availability-real-time
// [Staffed]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#staffed-real-time
// [NPT (Non-Productive Time)]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#non-productive-time-real-time
// [Error]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#error-real-time
// [Metrics definitions]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html
// [Scheduled]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#scheduled-real-time
// [Oldest]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#oldest-real-time
// [On contact]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#on-call-real-time
// [Active]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#active-real-time
// [ACW]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#aftercallwork-real-time
// [Available]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#available-real-time
// [In queue]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#in-queue-real-time
// [Online]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#online-real-time
//
// This member is required.
CurrentMetrics []types.CurrentMetric
// The filters to apply to returned metrics. You can filter up to the following
// limits:
//
// - Queues: 100
//
// - Routing profiles: 100
//
// - Channels: 3 (VOICE, CHAT, and TASK channels are supported.)
//
// - RoutingStepExpressions: 50
//
// Metric data is retrieved only for the resources associated with the queues or
// routing profiles, and by any channels included in the filter. (You cannot filter
// by both queue AND routing profile.) You can include both resource IDs and
// resource ARNs in the same request.
//
// When using the RoutingStepExpression filter, you need to pass exactly one
// QueueId . The filter is also case sensitive so when using the
// RoutingStepExpression filter, grouping by ROUTING_STEP_EXPRESSION is required.
//
// Currently tagging is only supported on the resources that are passed in the
// filter.
//
// This member is required.
Filters *types.Filters
// The identifier of the Amazon Connect instance. You can [find the instance ID] in the Amazon Resource
// Name (ARN) of the instance.
//
// [find the instance ID]: https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html
//
// This member is required.
InstanceId *string
// The grouping applied to the metrics returned. For example, when grouped by QUEUE
// , the metrics returned apply to each queue rather than aggregated for all
// queues.
//
// - If you group by CHANNEL , you should include a Channels filter. VOICE, CHAT,
// and TASK channels are supported.
//
// - If you group by ROUTING_PROFILE , you must include either a queue or routing
// profile filter. In addition, a routing profile filter is required for metrics
// CONTACTS_SCHEDULED , CONTACTS_IN_QUEUE , and OLDEST_CONTACT_AGE .
//
// - If no Grouping is included in the request, a summary of metrics is returned.
//
// - When using the RoutingStepExpression filter, group by
// ROUTING_STEP_EXPRESSION is required.
Groupings []types.Grouping
// The maximum number of results to return per page.
MaxResults *int32
// The token for the next set of results. Use the value returned in the previous
// response in the next request to retrieve the next set of results.
//
// The token expires after 5 minutes from the time it is created. Subsequent
// requests that use the token must use the same request parameters as the request
// that generated the token.
NextToken *string
// The way to sort the resulting response based on metrics. You can enter one sort
// criteria. By default resources are sorted based on AGENTS_ONLINE , DESCENDING .
// The metric collection is sorted based on the input metrics.
//
// Note the following:
//
// - Sorting on SLOTS_ACTIVE and SLOTS_AVAILABLE is not supported.
SortCriteria []types.CurrentMetricSortCriteria
noSmithyDocumentSerde
}
type GetCurrentMetricDataOutput struct {
// The total count of the result, regardless of the current page size.
ApproximateTotalCount *int64
// The time at which the metrics were retrieved and cached for pagination.
DataSnapshotTime *time.Time
// Information about the real-time metrics.
MetricResults []types.CurrentMetricResult
// If there are additional results, this is the token for the next set of results.
//
// The token expires after 5 minutes from the time it is created. Subsequent
// requests that use the token must use the same request parameters as the request
// that generated the token.
NextToken *string
// Metadata pertaining to the operation's result.
ResultMetadata middleware.Metadata
noSmithyDocumentSerde
}
func (c *Client) addOperationGetCurrentMetricDataMiddlewares(stack *middleware.Stack, options Options) (err error) {
if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
return err
}
err = stack.Serialize.Add(&awsRestjson1_serializeOpGetCurrentMetricData{}, middleware.After)
if err != nil {
return err
}
err = stack.Deserialize.Add(&awsRestjson1_deserializeOpGetCurrentMetricData{}, middleware.After)
if err != nil {
return err
}
if err := addProtocolFinalizerMiddlewares(stack, options, "GetCurrentMetricData"); err != nil {
return fmt.Errorf("add protocol finalizers: %v", err)
}
if err = addlegacyEndpointContextSetter(stack, options); err != nil {
return err
}
if err = addSetLoggerMiddleware(stack, options); err != nil {
return err
}
if err = addClientRequestID(stack); err != nil {
return err
}
if err = addComputeContentLength(stack); err != nil {
return err
}
if err = addResolveEndpointMiddleware(stack, options); err != nil {
return err
}
if err = addComputePayloadSHA256(stack); err != nil {
return err
}
if err = addRetry(stack, options); err != nil {
return err
}
if err = addRawResponseToMetadata(stack); err != nil {
return err
}
if err = addRecordResponseTiming(stack); err != nil {
return err
}
if err = addSpanRetryLoop(stack, options); err != nil {
return err
}
if err = addClientUserAgent(stack, options); err != nil {
return err
}
if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
return err
}
if err = addTimeOffsetBuild(stack, c); err != nil {
return err
}
if err = addUserAgentRetryMode(stack, options); err != nil {
return err
}
if err = addCredentialSource(stack, options); err != nil {
return err
}
if err = addOpGetCurrentMetricDataValidationMiddleware(stack); err != nil {
return err
}
if err = stack.Initialize.Add(newServiceMetadataMiddleware_opGetCurrentMetricData(options.Region), middleware.Before); err != nil {
return err
}
if err = addRecursionDetection(stack); err != nil {
return err
}
if err = addRequestIDRetrieverMiddleware(stack); err != nil {
return err
}
if err = addResponseErrorMiddleware(stack); err != nil {
return err
}
if err = addRequestResponseLogging(stack, options); err != nil {
return err
}
if err = addDisableHTTPSMiddleware(stack, options); err != nil {
return err
}
if err = addSpanInitializeStart(stack); err != nil {
return err
}
if err = addSpanInitializeEnd(stack); err != nil {
return err
}
if err = addSpanBuildRequestStart(stack); err != nil {
return err
}
if err = addSpanBuildRequestEnd(stack); err != nil {
return err
}
return nil
}
// GetCurrentMetricDataPaginatorOptions is the paginator options for
// GetCurrentMetricData
type GetCurrentMetricDataPaginatorOptions struct {
// The maximum number of results to return per page.
Limit int32
// Set to true if pagination should stop if the service returns a pagination token
// that matches the most recent token provided to the service.
StopOnDuplicateToken bool
}
// GetCurrentMetricDataPaginator is a paginator for GetCurrentMetricData
type GetCurrentMetricDataPaginator struct {
options GetCurrentMetricDataPaginatorOptions
client GetCurrentMetricDataAPIClient
params *GetCurrentMetricDataInput
nextToken *string
firstPage bool
}
// NewGetCurrentMetricDataPaginator returns a new GetCurrentMetricDataPaginator
func NewGetCurrentMetricDataPaginator(client GetCurrentMetricDataAPIClient, params *GetCurrentMetricDataInput, optFns ...func(*GetCurrentMetricDataPaginatorOptions)) *GetCurrentMetricDataPaginator {
if params == nil {
params = &GetCurrentMetricDataInput{}
}
options := GetCurrentMetricDataPaginatorOptions{}
if params.MaxResults != nil {
options.Limit = *params.MaxResults
}
for _, fn := range optFns {
fn(&options)
}
return &GetCurrentMetricDataPaginator{
options: options,
client: client,
params: params,
firstPage: true,
nextToken: params.NextToken,
}
}
// HasMorePages returns a boolean indicating whether more pages are available
func (p *GetCurrentMetricDataPaginator) HasMorePages() bool {
return p.firstPage || (p.nextToken != nil && len(*p.nextToken) != 0)
}
// NextPage retrieves the next GetCurrentMetricData page.
func (p *GetCurrentMetricDataPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*GetCurrentMetricDataOutput, error) {
if !p.HasMorePages() {
return nil, fmt.Errorf("no more pages available")
}
params := *p.params
params.NextToken = p.nextToken
var limit *int32
if p.options.Limit > 0 {
limit = &p.options.Limit
}
params.MaxResults = limit
optFns = append([]func(*Options){
addIsPaginatorUserAgent,
}, optFns...)
result, err := p.client.GetCurrentMetricData(ctx, ¶ms, optFns...)
if err != nil {
return nil, err
}
p.firstPage = false
prevToken := p.nextToken
p.nextToken = result.NextToken
if p.options.StopOnDuplicateToken &&
prevToken != nil &&
p.nextToken != nil &&
*prevToken == *p.nextToken {
p.nextToken = nil
}
return result, nil
}
// GetCurrentMetricDataAPIClient is a client that implements the
// GetCurrentMetricData operation.
type GetCurrentMetricDataAPIClient interface {
GetCurrentMetricData(context.Context, *GetCurrentMetricDataInput, ...func(*Options)) (*GetCurrentMetricDataOutput, error)
}
var _ GetCurrentMetricDataAPIClient = (*Client)(nil)
func newServiceMetadataMiddleware_opGetCurrentMetricData(region string) *awsmiddleware.RegisterServiceMetadata {
return &awsmiddleware.RegisterServiceMetadata{
Region: region,
ServiceID: ServiceID,
OperationName: "GetCurrentMetricData",
}
}