17 #ifndef SQLITEDBLOGSTORAGE_HPP_
18 #define SQLITEDBLOGSTORAGE_HPP_
24 #include <unordered_map>
35 #define KAA_DEFAULT_LOG_DB_STORAGE "logs.db"
39 class IKaaClientContext;
63 const std::string& dbName,
81 void init(
int optimizationMask);
83 void openDBConnection();
84 void closeDBConnection();
87 void applyOptimization(
int mask);
89 void markBucketsAsFree();
93 bool checkBucketOverflow(
const LogRecord& record) {
94 return (currentBucketSize_ + record.
getSize() > maxBucketSize_) ||
95 (currentBucketRecordCount_ + 1 > maxBucketRecordCount_);
98 void markBucketAsInUse(std::int32_t
id);
100 bool truncateIfBucketSizeIncompatible();
103 struct InnerBucketInfo {
104 InnerBucketInfo(std::size_t sizeInBytes, std::size_t sizeInLogs)
105 : sizeInBytes_(sizeInBytes), sizeInLogs_(sizeInLogs) {}
107 std::size_t sizeInBytes_ = 0;
108 std::size_t sizeInLogs_ = 0;
113 const std::string dbName_;
114 sqlite3 *db_ =
nullptr;
116 const std::size_t maxBucketSize_;
117 const std::size_t maxBucketRecordCount_;
119 std::int32_t currentBucketId_ = 0;
120 std::size_t currentBucketSize_ = 0;
121 std::size_t currentBucketRecordCount_ = 0;
123 std::size_t unmarkedRecordCount_ = 0;
124 std::size_t totalRecordCount_ = 0;
126 std::size_t consumedMemory_ = 0;
127 std::unordered_map<std::int32_t, InnerBucketInfo> consumedMemoryStorage_;
129 KAA_MUTEX_DECLARE(sqliteLogStorageGuard_);
131 IKaaClientContext &context_;
SQLiteDBLogStorage(IKaaClientContext &context, std::size_t bucketSize=LogStorageConstants::DEFAULT_MAX_BUCKET_SIZE, std::size_t bucketRecordCount=LogStorageConstants::DEFAULT_MAX_BUCKET_RECORD_COUNT)
The helper class which is used to transfer logs from LogStorage to LogCollector.
virtual std::size_t getRecordsCount()
Returns the number of collected logs.
std::size_t getSize() const
virtual LogBucket getNextBucket()
Returns a new log bucket.
virtual void removeBucket(std::int32_t bucketId)
Tells a log storage to remove a log bucket.
virtual BucketInfo addLogRecord(LogRecord &&record)
Persists a log record.
virtual std::size_t getConsumedVolume()
Returns amount of bytes collected logs are consumed.
virtual ILogStorageStatus & getStatus()
Returns a log storage status.
static const std::size_t DEFAULT_MAX_BUCKET_RECORD_COUNT
static const std::size_t DEFAULT_MAX_BUCKET_SIZE
Describes a unique log bucket.
SQLiteOptimizationOptions
Interface of a log storage.
virtual void rollbackBucket(std::int32_t bucketId)
Tells a log storage to consider a log bucket as unused, i.e. a log bucket will be accessible again vi...
The public interface to represent the current log storage state.