def ac_queue_metrics()

in sam-app/lambda_functions/sfRealTimeQueueMetrics.py [0:0]


def ac_queue_metrics(queue_id_name_dict,queue_ids, instance_id):
    try:

        logger.info("Start ac_queue_metrics")
        logger.info(f"Queues : {queue_ids}")
        next_token = 'NoToken'

        queuemetics_max_result = os.environ['AMAZON_CONNECT_QUEUEMETRICS_MAX_RESULT']
        current_metrics = [
                    { 'Name': 'AGENTS_ONLINE', 'Unit': 'COUNT' },
                    { 'Name': 'AGENTS_AVAILABLE', 'Unit': 'COUNT' },
                    { 'Name': 'AGENTS_ON_CONTACT', 'Unit': 'COUNT' },
                    { 'Name': 'AGENTS_STAFFED', 'Unit': 'COUNT' },
                    { 'Name': 'AGENTS_AFTER_CONTACT_WORK', 'Unit': 'COUNT' },
                    { 'Name': 'AGENTS_NON_PRODUCTIVE', 'Unit': 'COUNT' },
                    { 'Name': 'AGENTS_ERROR', 'Unit': 'COUNT' },
                    { 'Name': 'CONTACTS_IN_QUEUE', 'Unit': 'COUNT' },
                    { 'Name': 'OLDEST_CONTACT_AGE', 'Unit': 'SECONDS' },
                    { 'Name': 'CONTACTS_SCHEDULED', 'Unit': 'COUNT' },
                ]

        while len(next_token)!=0:
            if next_token == 'NoToken':
                logger.info("Call QueueMetric : without no token")
                currentMetrics_data = connect.get_current_metric_data(InstanceId = instance_id,
                    Filters = {'Channels': ['VOICE', 'CHAT', 'TASK'], 'Queues': queue_ids},
                    Groupings = ['QUEUE'],
                    CurrentMetrics = current_metrics,
                    MaxResults = int(queuemetics_max_result)
                    )
            else:
                logger.info("Call QueueMetric : with token")
                currentMetrics_data = connect.get_current_metric_data(InstanceId = instance_id,
                    Filters = {'Channels': ['VOICE', 'CHAT', 'TASK'], 'Queues': queue_ids},
                    Groupings = ['QUEUE'],
                    CurrentMetrics = current_metrics,
                    MaxResults = int(queuemetics_max_result),
                    NextToken = next_token
                    )
            logger.info(f"currentMetrics_data: {currentMetrics_data}")

            if 'NextToken' in currentMetrics_data.keys():
                next_token = currentMetrics_data['NextToken']
                logger.info(f"NextToken: {next_token}")
            else:
                next_token=''
                logger.info("NextToke key is Not present")

            if 'MetricResults' in currentMetrics_data.keys():
                metricresults_data = currentMetrics_data['MetricResults']
                logger.info(f"metricresults_data: {metricresults_data}")
            else:
                metricresults_data=[]
                logger.info("MetricResults key is Not present")

            i =0


            sf = Salesforce()

            if len(metricresults_data) !=0:
                while i < len(metricresults_data):
                    queue_metics_data_dict ={}
                    data = metricresults_data[i]
                    logger.info('*********')
                    logger.info(f'Data : {i} ***  {data}')
                    if 'Dimensions' in data.keys():
                        dimensions_data = data['Dimensions']
                        if 'Queue' in dimensions_data.keys():
                            queue_data = dimensions_data['Queue']
                            queue_metics_data_dict['queue_id'] = queue_data['Id']
                            queue_metics_data_dict['queue_arn'] = queue_data['Arn']
                            logger.info(f"queue id : {queue_data['Id']}")
                            logger.info(f"queue ARN : {queue_data['Arn']}")
                            logger.info('*********')
                            logger.info('*********')

                    if 'Collections' in data.keys():
                        collections_data = data['Collections']
                        logger.info(f'collections_data : {i} ***  {collections_data}')
                        j = 0
                        while j < len(collections_data):
                            logger.info(f"J : {j}")
                            metrics_data = collections_data[j]
                            logger.info(metrics_data)

                            if 'Metric' in metrics_data.keys():
                                metric_data = metrics_data['Metric']
                                if metric_data['Name'] == 'AGENTS_ONLINE' and 'Value' in metrics_data.keys() :
                                    agent_online = int(metrics_data['Value'])
                                    queue_metics_data_dict['agent_online'] = agent_online
                                elif metric_data['Name'] == 'AGENTS_AVAILABLE' and 'Value' in metrics_data.keys() :
                                    agent_available = int(metrics_data['Value'])
                                    queue_metics_data_dict['agent_available'] = agent_available
                                elif metric_data['Name'] == 'AGENTS_ON_CONTACT' and 'Value' in metrics_data.keys() :
                                    agent_on_call = int(metrics_data['Value'])
                                    queue_metics_data_dict['agent_on_call'] = agent_on_call
                                elif metric_data['Name'] == 'AGENTS_STAFFED' and 'Value' in metrics_data.keys() :
                                    agent_staffed = int(metrics_data['Value'])
                                    queue_metics_data_dict['agent_staffed'] = agent_staffed
                                elif metric_data['Name'] == 'AGENTS_AFTER_CONTACT_WORK' and 'Value' in metrics_data.keys() :
                                    agent_awc = int(metrics_data['Value'])
                                    queue_metics_data_dict['agent_awc'] = agent_awc
                                elif metric_data['Name'] == 'AGENTS_NON_PRODUCTIVE' and 'Value' in metrics_data.keys() :
                                    agent_non_productive = int(metrics_data['Value'])
                                    queue_metics_data_dict['agent_non_productive'] = agent_non_productive
                                elif metric_data['Name'] == 'AGENTS_ERROR' and 'Value' in metrics_data.keys() :
                                    agent_error = int(metrics_data['Value'])
                                    queue_metics_data_dict['agent_error'] = agent_error
                                elif metric_data['Name'] == 'CONTACTS_IN_QUEUE' and 'Value' in metrics_data.keys() :
                                    contacts_in_queue = int(metrics_data['Value'])
                                    queue_metics_data_dict['contacts_in_queue'] = contacts_in_queue
                                elif metric_data['Name'] == 'OLDEST_CONTACT_AGE' and 'Value' in metrics_data.keys() :
                                    oldest_contact_age = int(metrics_data['Value'])
                                    queue_metics_data_dict['oldest_contact_age'] = oldest_contact_age
                                elif metric_data['Name'] == 'CONTACTS_SCHEDULED' and 'Value' in metrics_data.keys() :
                                    contacts_scheduled = int(metrics_data['Value'])
                                    queue_metics_data_dict['contacts_scheduled'] = contacts_scheduled
                            j = j + 1
                        sObjectData = prepare_record(queue_id_name_dict,queue_metics_data_dict)
                        sf.update_by_external(objectnamespace + "AC_QueueMetrics__c", objectnamespace + 'Queue_Id__c',queue_metics_data_dict['queue_id'],sObjectData)
                        i = i + 1

            logger.info("End ac_queue_metrics method")

    except Exception as e:
        raise e