LCOV - code coverage report
Current view: top level - libs/bsw/cpp2someip/include/someip - StatisticsEvaluator.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 25 25
Test Date: 2026-09-11 12:05:06 Functions: 91.7 % 12 11

            Line data    Source code
       1              : /********************************************************************************
       2              :  * Copyright (c) 2026 Accenture
       3              :  *
       4              :  * This program and the accompanying materials are made available under the
       5              :  * terms of the Apache License Version 2.0 which is available at
       6              :  * https://www.apache.org/licenses/LICENSE-2.0
       7              :  *
       8              :  * SPDX-License-Identifier: Apache-2.0
       9              :  ********************************************************************************/
      10              : 
      11              : #pragma once
      12              : 
      13              : #include "someip/QueryManager.h"
      14              : #include "someip/Statistics.h"
      15              : 
      16              : #include <async/Types.h>
      17              : #include <async/util/Call.h>
      18              : 
      19              : #include <cstdint>
      20              : 
      21              : namespace someip
      22              : {
      23              : class IServiceRegistry;
      24              : class QueryManager;
      25              : } // namespace someip
      26              : 
      27              : namespace someip
      28              : {
      29              : class StatisticsEvaluator
      30              : {
      31              : public:
      32              :     StatisticsEvaluator(
      33              :         ::async::ContextType const ethernetContext,
      34              :         IServiceRegistry& serviceRegistry,
      35              :         QueryManager& queryManager);
      36              : 
      37           10 :     virtual ~StatisticsEvaluator() = default;
      38              : 
      39              :     void init();
      40              :     void shutdown();
      41              : 
      42              :     void reset();
      43              : 
      44              :     void cyclic();
      45              : 
      46              :     uint32_t getNumReceivedMessagesPerSecond() const;
      47              :     uint32_t getNumSentMessagesPerSecond() const;
      48              :     uint32_t getNumReceivedSdMessagesPerSecond() const;
      49              :     uint32_t getNumSentSdMessagesPerSecond() const;
      50              : 
      51              :     uint32_t getNumSentTrainsPerSecond() const;
      52              : 
      53              :     uint32_t getNumTrainsSentBecauseFullPerSecond() const;
      54              : 
      55              :     uint32_t getNumTrainsSentBecauseNoFreeTrainPerSecond() const;
      56              : 
      57              :     uint32_t getNumTrainsSentBecauseDuplicatePduPerSecond() const;
      58              : 
      59              :     uint32_t getNumTrainsSentBecauseTimeoutPerSecond() const;
      60              : 
      61              : private:
      62              :     static uint32_t safeDivide(uint32_t numerator, uint32_t denominator);
      63              : 
      64              :     ::async::ContextType const _ethernetContext;
      65              :     ::async::Function _cyclicFunction;
      66              :     ::async::TimeoutType _cyclicTimeout;
      67              :     IServiceRegistry& _serviceRegistry;
      68              :     QueryManager& _queryManager;
      69              :     uint32_t _secondsExpired;
      70              : };
      71              : 
      72              : /*
      73              :  * inline implementation
      74              :  */
      75            2 : inline uint32_t StatisticsEvaluator::getNumReceivedMessagesPerSecond() const
      76              : {
      77            2 :     return safeDivide(Statistics::getCounter(Statistics::Counter::PDU_RX), _secondsExpired);
      78              : }
      79              : 
      80            2 : inline uint32_t StatisticsEvaluator::getNumSentMessagesPerSecond() const
      81              : {
      82            2 :     return safeDivide(Statistics::getCounter(Statistics::Counter::PDU_TX), _secondsExpired);
      83              : }
      84              : 
      85            2 : inline uint32_t StatisticsEvaluator::getNumReceivedSdMessagesPerSecond() const
      86              : {
      87            2 :     return safeDivide(Statistics::getCounter(Statistics::Counter::SD_FRAME_RX), _secondsExpired);
      88              : }
      89              : 
      90            2 : inline uint32_t StatisticsEvaluator::getNumSentSdMessagesPerSecond() const
      91              : {
      92            2 :     return safeDivide(Statistics::getCounter(Statistics::Counter::SD_FRAME_TX), _secondsExpired);
      93              : }
      94              : 
      95            2 : inline uint32_t StatisticsEvaluator::getNumSentTrainsPerSecond() const
      96              : {
      97            2 :     return safeDivide(Statistics::getNumSentTrains(), _secondsExpired);
      98              : }
      99              : 
     100            2 : inline uint32_t StatisticsEvaluator::getNumTrainsSentBecauseFullPerSecond() const
     101              : {
     102            2 :     return safeDivide(Statistics::getCounter(Statistics::Counter::TRAIN_FULL), _secondsExpired);
     103              : }
     104              : 
     105            2 : inline uint32_t StatisticsEvaluator::getNumTrainsSentBecauseNoFreeTrainPerSecond() const
     106              : {
     107            2 :     return safeDivide(
     108            4 :         Statistics::getCounter(Statistics::Counter::TRAIN_NOT_AVAILABLE), _secondsExpired);
     109              : }
     110              : 
     111            2 : inline uint32_t StatisticsEvaluator::getNumTrainsSentBecauseDuplicatePduPerSecond() const
     112              : {
     113            2 :     return safeDivide(
     114            4 :         Statistics::getCounter(Statistics::Counter::TRAIN_DUPLICATE_PDU), _secondsExpired);
     115              : }
     116              : 
     117            2 : inline uint32_t StatisticsEvaluator::getNumTrainsSentBecauseTimeoutPerSecond() const
     118              : {
     119            2 :     return safeDivide(Statistics::getCounter(Statistics::Counter::TRAIN_TIMEOUT), _secondsExpired);
     120              : }
     121              : 
     122              : // static
     123              : inline uint32_t
     124           18 : StatisticsEvaluator::safeDivide(uint32_t const numerator, uint32_t const denominator)
     125              : {
     126           18 :     if (denominator > 0U)
     127              :     {
     128            9 :         return numerator / denominator;
     129              :     }
     130              : 
     131            9 :     return 0U;
     132              : }
     133              : 
     134              : } // namespace someip
        

Generated by: LCOV version 2.0-1