File indexing completed on 2024-04-14 03:48:52

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"