static bool prvCollectDeviceMetrics()

in source/demo-tasks/defender_demo.c [535:641]


static bool prvCollectDeviceMetrics( void )
{
    bool xStatus = false;
    eMetricsCollectorStatus eMetricsCollectorStatus;
    uint32_t ulNumOpenTcpPorts = 0UL, ulNumOpenUdpPorts = 0UL, ulNumEstablishedConnections = 0UL, i;
    UBaseType_t uxTasksWritten = { 0 };
    TaskStatus_t pxTaskStatus = { 0 };

    /* Collect bytes and packets sent and received. */
    eMetricsCollectorStatus = eGetNetworkStats( &( xNetworkStats ) );

    if( eMetricsCollectorStatus != eMetricsCollectorSuccess )
    {
        LogError( ( "xGetNetworkStats failed. Status: %d.",
                    eMetricsCollectorStatus ) );
    }

    /* Collect a list of open TCP ports. */
    if( eMetricsCollectorStatus == eMetricsCollectorSuccess )
    {
        eMetricsCollectorStatus = eGetOpenTcpPorts( &( pusOpenTcpPorts[ 0 ] ),
                                                    defenderexampleOPEN_TCP_PORTS_ARRAY_SIZE,
                                                    &( ulNumOpenTcpPorts ) );

        if( eMetricsCollectorStatus != eMetricsCollectorSuccess )
        {
            LogError( ( "xGetOpenTcpPorts failed. Status: %d.",
                        eMetricsCollectorStatus ) );
        }
    }

    /* Collect a list of open UDP ports. */
    if( eMetricsCollectorStatus == eMetricsCollectorSuccess )
    {
        eMetricsCollectorStatus = eGetOpenUdpPorts( &( pusOpenUdpPorts[ 0 ] ),
                                                    defenderexampleOPEN_UDP_PORTS_ARRAY_SIZE,
                                                    &( ulNumOpenUdpPorts ) );

        if( eMetricsCollectorStatus != eMetricsCollectorSuccess )
        {
            LogError( ( "xGetOpenUdpPorts failed. Status: %d.",
                        eMetricsCollectorStatus ) );
        }
    }

    /* Collect a list of established connections. */
    if( eMetricsCollectorStatus == eMetricsCollectorSuccess )
    {
        eMetricsCollectorStatus = eGetEstablishedConnections( &( pxEstablishedConnections[ 0 ] ),
                                                              defenderexampleESTABLISHED_CONNECTIONS_ARRAY_SIZE,
                                                              &( ulNumEstablishedConnections ) );

        if( eMetricsCollectorStatus != eMetricsCollectorSuccess )
        {
            LogError( ( "GetEstablishedConnections failed. Status: %d.",
                        eMetricsCollectorStatus ) );
        }
    }

    /* Collect custom metrics. This demo sends this tasks stack high water mark
     * as a number type custom metric and the current task ids as a list of
     * numbers type custom metric. */
    if( eMetricsCollectorStatus == eMetricsCollectorSuccess )
    {
        vTaskGetInfo(
            /* Query this task. */
            NULL,
            &pxTaskStatus,
            /* Include the stack high water mark value. */
            pdTRUE,
            /* Don't include the task state in the TaskStatus_t structure. */
            0 );
        uxTasksWritten = uxTaskGetSystemState( pxTaskList, defenderexampleCUSTOM_METRICS_TASKS_ARRAY_SIZE, NULL );

        if( uxTasksWritten == 0 )
        {
            eMetricsCollectorStatus = eMetricsCollectorCollectionFailed;
            LogError( ( "Failed to collect system state. uxTaskGetSystemState() failed due to insufficient buffer space.",
                        eMetricsCollectorStatus ) );
        }
        else
        {
            for( i = 0; i < uxTasksWritten; i++ )
            {
                pulCustomMetricsTaskNumbers[ i ] = pxTaskList[ i ].xTaskNumber;
            }
        }
    }

    /* Populate device metrics. */
    if( eMetricsCollectorStatus == eMetricsCollectorSuccess )
    {
        xStatus = true;
        xDeviceMetrics.pxNetworkStats = &( xNetworkStats );
        xDeviceMetrics.pusOpenTcpPortsArray = &( pusOpenTcpPorts[ 0 ] );
        xDeviceMetrics.ulOpenTcpPortsArrayLength = ulNumOpenTcpPorts;
        xDeviceMetrics.pusOpenUdpPortsArray = &( pusOpenUdpPorts[ 0 ] );
        xDeviceMetrics.ulOpenUdpPortsArrayLength = ulNumOpenUdpPorts;
        xDeviceMetrics.pxEstablishedConnectionsArray = &( pxEstablishedConnections[ 0 ] );
        xDeviceMetrics.ulEstablishedConnectionsArrayLength = ulNumEstablishedConnections;
        xDeviceMetrics.ulStackHighWaterMark = pxTaskStatus.usStackHighWaterMark;
        xDeviceMetrics.pulTaskIdsArray = pulCustomMetricsTaskNumbers;
        xDeviceMetrics.ulTaskIdsArrayLength = uxTasksWritten;
    }

    return xStatus;
}