From 89ac41e5e9719c782b17ecfd81d9c7a276552312 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Wed, 8 Nov 2017 15:38:45 +0100 Subject: [PATCH] chg: write future logs to database Change-Id: I6f768c6a5c0961ba1c3ff3309827b1964cf95026 --- src/apps/client.cpp | 15 ++++----------- src/db/database.h | 4 +++- src/db/psql.cpp | 15 ++++++++++----- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/apps/client.cpp b/src/apps/client.cpp index 4f2d81a..80422b3 100644 --- a/src/apps/client.cpp +++ b/src/apps/client.cpp @@ -213,12 +213,10 @@ int main( int argc, const char *argv[] ) { continue; } - std::shared_ptr logPtr = openLogfile( std::string( "logs/" ) + job->id + std::string( "_" ) + job->warning + std::string( ".log" ) ); - - logger::logger_set log_set( {logger::log_target( *logPtr, logger::level::debug )}, logger::auto_register::on ); + logger::logger_set log_set( {logger::log_target( job->log, logger::level::debug )}, logger::auto_register::on ); logger::note( "TASK ID: ", job->id ); - logger::note( "TRY: ", job->warning ); + logger::note( "TRY: ", job->attempt ); logger::note( "TARGET: ", job->target ); logger::note( "TASK: ", job->task ); @@ -264,15 +262,8 @@ int main( int argc, const char *argv[] ) { if( DAEMON ) { jp->finishJob( job ); } - - continue; } catch( std::exception& c ) { - logger::error( "ERROR: ", c.what() ); - } - - try { jp->failJob( job ); - } catch( std::exception& c ) { logger::error( "ERROR: ", c.what() ); } } else if( job->task == "revoke" ) { @@ -289,7 +280,9 @@ int main( int argc, const char *argv[] ) { jp->writeBackRevocation( job, timeToString( time ) ); jp->finishJob( job ); + continue; } catch( const std::exception& c ) { + jp->failJob( job ); logger::error( "Exception: ", c.what() ); } } else { diff --git a/src/db/database.h b/src/db/database.h index e457196..b378e92 100644 --- a/src/db/database.h +++ b/src/db/database.h @@ -3,14 +3,16 @@ #include #include #include +#include struct Job { std::string id; - std::string warning; + std::string attempt; std::string target; std::string task; std::string from; std::string to; + std::stringstream log; }; struct SAN { diff --git a/src/db/psql.cpp b/src/db/psql.cpp index 8ddc7f1..cdbce22 100644 --- a/src/db/psql.cpp +++ b/src/db/psql.cpp @@ -24,7 +24,7 @@ PostgresJobProvider::PostgresJobProvider( const std::string& server, const std:: std::shared_ptr PostgresJobProvider::fetchJob() { - std::string q = "SELECT id, \"targetId\", task, \"executeFrom\", \"executeTo\", warning FROM jobs WHERE state='open' AND warning < 3"; + std::string q = "SELECT id, \"targetId\", task, \"executeFrom\", \"executeTo\", attempt FROM jobs WHERE state='open' AND attempt < 3"; pqxx::work txn( c ); pqxx::result result = txn.exec( q ); @@ -40,10 +40,9 @@ std::shared_ptr PostgresJobProvider::fetchJob() { job->task = result[0]["task"].as(); job->from = result[0]["\"executeFrom\""].as( "" ); job->to = result[0]["\"executeTo\""].as( "" ); - job->warning = result[0]["warning"].as(); - - logger::notef( "Got a job: (id=%s, target=%s, task=%s, from=%s, to=%s, warnings=%s)", job->id, job->target, job->task, job->from, job->to, job->warning ); + job->attempt = result[0]["attempt"].as(); + logger::notef( "Got a job: (id=%s, target=%s, task=%s, from=%s, to=%s, attempts=%s)", job->id, job->target, job->task, job->from, job->to, job->attempt ); return job; } @@ -57,19 +56,25 @@ void PostgresJobProvider::finishJob( std::shared_ptr job ) { throw std::runtime_error( "No database entry found." ); } + c.prepare( "insertLog", "INSERT INTO \"jobLog\"(\"jobid\", \"attempt\", \"content\") VALUES($1,$2,$3)" ); + txn.prepared( "insertCrt" )( job->id )( job->attempt )( job->log.str() ).exec(); + txn.commit(); } void PostgresJobProvider::failJob( std::shared_ptr job ) { pqxx::work txn( c ); - std::string q = "UPDATE jobs SET warning = warning + 1 WHERE id=" + txn.quote( job->id ); + std::string q = "UPDATE jobs SET attempt = attempt + 1 WHERE id=" + txn.quote( job->id ); pqxx::result r = txn.exec( q ); if( r.affected_rows() != 1 ) { throw std::runtime_error( "No database entry found." ); } + c.prepare( "insertLog", "INSERT INTO \"jobLog\"(\"jobid\", \"attempt\", \"content\") VALUES($1,$2,$3)" ); + txn.prepared( "insertCrt" )( job->id )( job->attempt )( job->log.str() ).exec(); + txn.commit(); } -- 2.39.5