File indexing completed on 2023-05-30 09:06:28
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2011 Dennis Nienhüser <nienhueser@kde.org> 0004 // 0005 0006 #include "logger.h" 0007 0008 #include <QDebug> 0009 #include <QSqlDatabase> 0010 #include <QSqlQuery> 0011 #include <QSqlError> 0012 0013 class LoggerPrivate 0014 { 0015 public: 0016 QSqlDatabase m_database; 0017 0018 LoggerPrivate(); 0019 0020 void initializeDatabase(); 0021 }; 0022 0023 LoggerPrivate::LoggerPrivate() 0024 { 0025 m_database = QSqlDatabase::addDatabase( "QSQLITE" ); 0026 } 0027 0028 void LoggerPrivate::initializeDatabase() 0029 { 0030 QSqlQuery createJobsTable( "CREATE TABLE IF NOT EXISTS jobs (id VARCHAR(255) PRIMARY KEY, name TEXT, status TEXT, description TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP);" ); 0031 if ( createJobsTable.lastError().isValid() ) { 0032 qDebug() << "Error when executing query" << createJobsTable.lastQuery(); 0033 qDebug() << "Sql reports" << createJobsTable.lastError(); 0034 } 0035 } 0036 0037 Logger::Logger(QObject *parent) : 0038 QObject(parent), d(new LoggerPrivate) 0039 { 0040 } 0041 0042 Logger::~Logger() 0043 { 0044 delete d; 0045 } 0046 0047 Logger &Logger::instance() 0048 { 0049 static Logger m_instance; 0050 return m_instance; 0051 } 0052 0053 void Logger::setFilename(const QString &filename) 0054 { 0055 d->m_database.setDatabaseName( filename ); 0056 if ( !d->m_database.open() ) { 0057 qDebug() << "Failed to connect to database " << filename; 0058 } 0059 0060 d->initializeDatabase(); 0061 } 0062 0063 void Logger::setStatus(const QString &id, const QString &name, const QString &status, const QString &message) 0064 { 0065 QSqlQuery deleteJob( QString("DELETE FROM jobs WHERE id='%1';").arg(id) ); 0066 if ( deleteJob.lastError().isValid() ) { 0067 qDebug() << "Error when executing query" << deleteJob.lastQuery(); 0068 qDebug() << "Sql reports" << deleteJob.lastError(); 0069 } else { 0070 QSqlQuery createStatus; 0071 createStatus.prepare("INSERT INTO jobs (id, name, status, description) VALUES (:job, :name, :status, :message);"); 0072 createStatus.bindValue(":job", id); 0073 createStatus.bindValue(":name", name); 0074 createStatus.bindValue(":status", status); 0075 createStatus.bindValue(":message", message); 0076 if ( !createStatus.exec() ) { 0077 qDebug() << "Error when executing query" << createStatus.lastQuery(); 0078 qDebug() << "Sql reports" << createStatus.lastError(); 0079 } 0080 } 0081 } 0082 0083 #include "moc_logger.cpp"