ResultCode syncSendEventsToApmServer()

in agent/native/ext/backend_comm.cpp [492:542]


ResultCode syncSendEventsToApmServer( const ConfigSnapshot* config, StringView userAgentHttpHeader, StringView serializedEvents )
{
    char txtOutStreamBuf[ ELASTIC_APM_TEXT_OUTPUT_STREAM_ON_STACK_BUFFER_SIZE ];
    TextOutputStream txtOutStream = ELASTIC_APM_TEXT_OUTPUT_STREAM_FROM_STATIC_BUFFER( txtOutStreamBuf );
    ResultCode resultCode;
    ConnectionData* connectionData = &g_connectionData;

    ELASTIC_APM_ASSERT_VALID_PTR( connectionData );

    ELASTIC_APM_LOG_DEBUG_FUNCTION_ENTRY_MSG(
            "Sending events to APM Server..."
            "; config: { serverUrl: %s, disableSend: %s, serverTimeout: %s }"
            "; userAgentHttpHeader: `%s'"
            "; serializedEvents [length: %" PRIu64 "]:\n%.*s"
            , config->serverUrl
            , boolToString( config->disableSend )
            , streamDuration( config->serverTimeout, &txtOutStream )
            , streamStringView( userAgentHttpHeader, &txtOutStream )
            , (UInt64) serializedEvents.length, (int) serializedEvents.length, serializedEvents.begin );
    textOutputStreamRewind( &txtOutStream );

    if ( config->disableSend )
    {
        ELASTIC_APM_LOG_DEBUG( "disable_send (disableSend) configuration option is set to true - discarding events instead of sending" );
        ELASTIC_APM_SET_RESULT_CODE_TO_SUCCESS_AND_GOTO_FINALLY();
    }

    if ( backendCommBackoff_shouldWait( &connectionData->backoff ) )
    {
        ELASTIC_APM_LOG_DEBUG( "Backoff wait time has not elapsed yet - discarding events instead of sending" );
        ELASTIC_APM_SET_RESULT_CODE_TO_SUCCESS_AND_GOTO_FINALLY();
    }

    if ( connectionData->curlHandle == NULL )
    {
        ELASTIC_APM_CALL_IF_FAILED_GOTO( initConnectionData( config, connectionData, userAgentHttpHeader ) );
    }

    ELASTIC_APM_CALL_IF_FAILED_GOTO( syncSendEventsToApmServerWithConn( config, connectionData, serializedEvents ) );
    backendCommBackoff_onSuccess( &connectionData->backoff );

    resultCode = resultSuccess;
    finally:
    ELASTIC_APM_LOG_DEBUG_RESULT_CODE_FUNCTION_EXIT();
    return resultCode;

    failure:
    backendCommBackoff_onError( &connectionData->backoff );
    cleanupConnectionData( connectionData );
    goto finally;
}