File indexing completed on 2024-05-12 05:48:39
0001 /* 0002 SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com> 0003 SPDX-FileCopyrightText: 2015 Vyacheslav Matyushin 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include "journaldAnalyzer.h" 0011 0012 #include <QFutureWatcher> 0013 #include <QSocketNotifier> 0014 0015 #include <systemd/sd-journal.h> 0016 0017 class JournaldLocalAnalyzer : public JournaldAnalyzer 0018 { 0019 Q_OBJECT 0020 0021 public: 0022 explicit JournaldLocalAnalyzer(LogMode *mode, QString filter = QString()); 0023 0024 ~JournaldLocalAnalyzer() override; 0025 0026 void watchLogFiles(bool enabled) override; 0027 0028 QStringList units() const override; 0029 0030 QStringList syslogIdentifiers() const override; 0031 0032 static QStringList unitsStatic(); 0033 0034 static QStringList syslogIdentifiersStatic(); 0035 0036 private Q_SLOTS: 0037 void readJournalInitialFinished(); 0038 void readJournalUpdateFinished(); 0039 void journalDescriptorUpdated(int fd); 0040 0041 private: 0042 using JournalWatcher = QFutureWatcher<QList<JournalEntry>>; 0043 0044 void readJournalFinished(ReadingMode readingMode); 0045 QList<JournalEntry> readJournal(const QStringList &filters); 0046 bool prepareJournalReading(sd_journal *journal, const QStringList &filters); 0047 JournalEntry readJournalEntry(sd_journal *journal) const; 0048 0049 static QStringList getUniqueFieldValues(const QString &id, int flags = 0); 0050 0051 QStringList mFilters; 0052 QString mFilterName; 0053 sd_journal *mJournal = nullptr; 0054 int mJournalFlags = 0; 0055 QString mCurrentBootID; 0056 0057 char *mCursor = nullptr; 0058 QMutex mWorkerMutex; 0059 QSocketNotifier *mJournalNotifier = nullptr; 0060 0061 bool mForgetWatchers = true; 0062 QList<JournalWatcher *> mJournalWatchers; 0063 };