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