27 Q_PROPERTY(QString sessionId READ sessionId CONSTANT)
30 explicit LogStore(QObject* parent =
nullptr);
33 void open(
const QString& dbPath);
36 bool isOpen()
const {
return _isOpen.load(std::memory_order_relaxed); }
38 QString databasePath()
const;
40 qint64 entryCount()
const {
return _entryCount.load(std::memory_order_relaxed); }
42 QString sessionId()
const {
return _sessionId; }
52 int minLevel = LogEntry::Debug;
59 Q_INVOKABLE QList<LogEntry> query(
const QueryParams& params)
const;
60 Q_INVOKABLE QStringList sessions()
const;
61 Q_INVOKABLE qint64 sessionEntryCount(
const QString& sessionId)
const;
62 Q_INVOKABLE
bool deleteSession(
const QString& sessionId);
63 Q_INVOKABLE
void exportSession(
const QString& sessionId,
const QString& destFile,
int format = 0);
78 static void _bindAndExec(QSqlQuery& q,
const QString& sessionId,
const LogEntry& entry);
80 mutable QMutex _mutex;
81 QWaitCondition _condition;
82 std::vector<LogEntry> _pendingWrites;
85 const QString _sessionId;
86 QThread* _thread =
nullptr;
88 QString _writeConnName;
90 QFuture<void> _exportFuture;
91 std::atomic<bool> _isOpen{
false};
92 std::atomic<bool> _quit{
false};
93 std::atomic<qint64> _entryCount{0};
94 static constexpr int kBatchSize = 500;
95 static constexpr int kFlushIntervalMs = 2000;