statistics_db.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * Class writing the statistics to the database.
  3. */
  4. #ifndef CPP_PCAPREADER_STATISTICSDB_H
  5. #define CPP_PCAPREADER_STATISTICSDB_H
  6. #include <tins/tins.h>
  7. #include <iostream>
  8. #include <memory>
  9. #include <string>
  10. #include "statistics.h"
  11. #include <pybind11/pybind11.h>
  12. #include <SQLiteCpp/SQLiteCpp.h>
  13. #include <unordered_map>
  14. namespace py = pybind11;
  15. class statistics_db {
  16. public:
  17. /*
  18. * Constructor: Creates new database / Opens existing database
  19. */
  20. statistics_db(std::string database_path, std::string resourcePath);
  21. /*
  22. * Database version: Increment number on every change in the C++ code!
  23. */
  24. static const int DB_VERSION = 27;
  25. /*
  26. * Methods to read from database
  27. */
  28. void getNoneExtraTestsInveralStats(std::vector<double>& intervals);
  29. /*
  30. * Methods for writing values into database
  31. */
  32. void writeStatisticsIP(const std::unordered_map<std::string, entry_ipStat> &ipStatistics);
  33. void writeStatisticsDegree(const std::unordered_map<std::string, entry_ipStat> &ipStatistics);
  34. void writeStatisticsTTL(const std::unordered_map<ipAddress_ttl, int> &ttlDistribution);
  35. void writeStatisticsMSS(const std::unordered_map<ipAddress_mss, int> &mssDistribution);
  36. void writeStatisticsToS(const std::unordered_map<ipAddress_tos, int> &tosDistribution);
  37. void writeStatisticsWin(const std::unordered_map<ipAddress_win, int> &winDistribution);
  38. void writeStatisticsProtocols(const std::unordered_map<ipAddress_protocol, entry_protocolStat> &protocolDistribution);
  39. void writeStatisticsPorts(const std::unordered_map<ipAddress_inOut_port, entry_portStat> &portsStatistics);
  40. void writeStatisticsIpMac(const std::unordered_map<std::string, std::string> &IpMacStatistics);
  41. void writeStatisticsFile(int packetCount, float captureDuration, std::string timestampFirstPkt,
  42. std::string timestampLastPkt, float avgPacketRate, float avgPacketSize,
  43. float avgPacketsSentPerHost, float avgBandwidthIn, float avgBandwidthOut,
  44. bool doExtraTests);
  45. void writeStatisticsConv(std::unordered_map<conv, entry_convStat> &convStatistics);
  46. void writeStatisticsConvExt(std::unordered_map<convWithProt, entry_convStatExt> &conv_statistics_extended);
  47. void writeStatisticsInterval(const std::unordered_map<std::string, entry_intervalStat> &intervalStatistics, std::vector<std::chrono::duration<int, std::micro>> timeInterval, bool del, int defaultInterval, bool extraTests);
  48. void writeDbVersion();
  49. void readPortServicesFromNmap();
  50. void writeStatisticsUnrecognizedPDUs(const std::unordered_map<unrecognized_PDU, unrecognized_PDU_stat> &unrecognized_PDUs);
  51. private:
  52. // Pointer to the SQLite database
  53. std::unique_ptr<SQLite::Database> db;
  54. // Vector which contains all ports and their corresponding services
  55. std::unordered_map<int, std::string> portServices;
  56. std::string resourcePath;
  57. };
  58. #endif //CPP_PCAPREADER_STATISTICSDB_H