void MetricsManager::OnResponseReceived()

in Gems/AWSMetrics/Code/Source/MetricsManager.cpp [237:284]


    void MetricsManager::OnResponseReceived(const MetricsQueue& metricsEventsInRequest, const ServiceAPI::PostMetricsEventsResponseEntries& responseEntries)
    {
        MetricsQueue metricsEventsForRetry;
        int numMetricsEventsInRequest = metricsEventsInRequest.GetNumMetrics();
        for (int index = 0; index < numMetricsEventsInRequest; ++index)
        {
            MetricsEvent metricsEvent = metricsEventsInRequest[index];

            if (responseEntries.size() > 0 && responseEntries[index].m_result == AwsMetricsPostMetricsEventsResponseEntrySuccessResult)
            {
                // The metrics event is sent to the backend successfully.
                if (metricsEvent.GetNumFailures() == 0)
                {
                    m_globalStats.m_numEvents++;
                }
                else
                {
                    // Reduce the number of errors when the retry succeeds.
                    m_globalStats.m_numErrors--;
                }

                m_globalStats.m_numSuccesses++;
                m_globalStats.m_sendSizeInBytes += static_cast<uint32_t>(metricsEvent.GetSizeInBytes());
            }
            else
            {
                metricsEvent.MarkFailedSubmission();

                // The metrics event failed to be sent to the backend for the first time.
                if (metricsEvent.GetNumFailures() == 1)
                {
                    m_globalStats.m_numErrors++;
                    m_globalStats.m_numEvents++;
                }

                if (metricsEvent.GetNumFailures() <= m_clientConfiguration->GetMaxNumRetries())
                {
                    metricsEventsForRetry.AddMetrics(metricsEvent);
                }
                else
                {
                    m_globalStats.m_numDropped++;
                }
            }
        }

        PushMetricsForRetry(metricsEventsForRetry);
    }