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;
}