Program Listing for File SimOneDataStat.h

Return to documentation for file ( api\Cpp_API_Reference\SimOneDataStat.h )

#pragma once

#include <string>
#include <chrono>
#include <fstream>
#include "cybertron/DefinesCore.hpp"
#include "cybertron/core/UtilPath.hpp"
#include "cybertron/core/UtilFile.hpp"
#include "cybertron/core/UtilDirectory.hpp"
#include "cybertron/core/UtilTime.hpp"

/*
    这个类专门进行业务的性能统计用的,主要统计
    1:传感器节点从自身发送到BridgeIO的时间消耗,BridgeIO到API层的消耗
    2:热区数据从自身发送到BridgeIO的时间消耗,BridgeIO到API层的消耗
    本类只计算,内部业务节点往外发的数据发送的性能统计
*/
using namespace cybertron;
class SimOneDataStat {
public:
    static SimOneDataStat * GetInstance()
    {
        static SimOneDataStat instance;
        return &instance;
    }

    enum statType { stat_hotarea, stat_sensor};


    struct DataStat
    {
        //当前总共接收了多少包
        std::uint64_t totalCount;
        //当前总共接收多少字节
        std::uint64_t totalPacketSize;
        //总共消耗了多少时间
        std::uint64_t totalTimeMs[3];
        //平均的时间消耗是多少
        std::uint64_t AvgTimeMS[3];
        //最大时间消耗是多少
        std::uint64_t MaxTimeMS[3];
        //最小时间消耗是多少
        std::uint64_t MinTimeMS[3];
        //有多少包超过阈值
        std::uint64_t thresholdCount[3];
    };
    struct DataContent
    {
        std::uint64_t nodeCreateTime;
        std::uint64_t BridgeIORecvTime;
        std::uint64_t BridgeIOSendTime;
        std::uint64_t APIRecvTime;
        std::uint64_t packageSize;
        int frame;
        int sensorType;
    };
    SimOneDataStat();
    ~SimOneDataStat();
    void Init(std::string caseName);
    void setLogFilePath(std::string logPath) {
        mLogFilePath = logPath;
    }
    void addPacketStat(statType type, DataContent* pDataContent);
    void updateStat(statType type, DataStat* pStat, std::uint64_t* t, int tCount, std::uint64_t packageSize,int frame, int sensorType);
    void CreatePerformanceFile();
    void setIsOpen(bool isOpen){ mbIsOpen = isOpen; };
    bool getIsOpen() {return mbIsOpen ;};
    void setFilePath(char *filePath) { mLogFilePath = filePath; };
    void setOutputInterval(int intervalPacketCount) { mIntervalPacketCount = intervalPacketCount; }
private:
    //当前总共的运行时间
    std::uint64_t mStartTimeStamp;
    std::uint64_t mTotalTimeSec;
    int mIndex;

    //定时多少秒输出
    int mOutPutTimeSec;

    DataStat        mHotAreaStat;
    DataStat        mAPISensorStat;

    std::uint64_t   mThresholdMS;

    bool mbIsOpen;
    std::string mLogFilePath;
    std::string mCaseName;
    int mIntervalPacketCount;
    std::fstream mOutputStream;
    std::vector<std::string> mColList;
};