File indexing completed on 2024-05-19 05:49:15

0001 /*
0002     SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <KLocalizedString>
0010 
0011 #include "syslogAnalyzer.h"
0012 
0013 #include "cronConfiguration.h"
0014 #include "cronLogMode.h"
0015 
0016 class LogMode;
0017 
0018 class CronAnalyzer : public SyslogAnalyzer
0019 {
0020     Q_OBJECT
0021 
0022 public:
0023     explicit CronAnalyzer(LogMode *logMode);
0024     ~CronAnalyzer() override
0025     {
0026     }
0027 
0028     LogViewColumns initColumns() override;
0029 
0030     Analyzer::LogFileSortMode logFileSortMode() override;
0031 
0032     /*
0033      * Cron line example :
0034      * Sep 16 01:3;D (  [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm)
0035      * Sep 16 18:39:05 localhost /usr/sbin/cron[5479]: (CRON) INFO (pidfile fd = 3)
0036      * Sep 16 18:39:05 localhost /usr/sbin/cron[5480]: (CRON) STARTUP (fork ok)
0037      * Sep 16 18:39:05 localhost /usr/sbin/cron[5480]: (CRON) INFO (Running @reboot jobs)
0038      *
0039      */
0040     LogLine *parseMessage(const QString &logLine, const LogFile &originalFile) override;
0041 
0042     inline bool isCronLine(LogLine *syslogLine)
0043     {
0044         auto *cronConfiguration = mLogMode->logModeConfiguration<CronConfiguration *>();
0045         if (cronConfiguration->processFilter().isEmpty()) {
0046             return true;
0047         }
0048 
0049         // If the process line does not match the cron process, then ignore this line
0050         const QStringList list = syslogLine->logItems();
0051         QString processLine = list.at(1);
0052         if (processLine.contains(cronConfiguration->processFilter(), Qt::CaseInsensitive)) {
0053             return true;
0054         }
0055 
0056         return false;
0057     }
0058 };