]> WPIA git - cassiopeia.git/commitdiff
chg: write future logs to database
authorFelix Dörre <felix@dogcraft.de>
Wed, 8 Nov 2017 14:38:45 +0000 (15:38 +0100)
committerFelix Dörre <felix@dogcraft.de>
Mon, 13 Nov 2017 20:53:09 +0000 (21:53 +0100)
Change-Id: I6f768c6a5c0961ba1c3ff3309827b1964cf95026

src/apps/client.cpp
src/db/database.h
src/db/psql.cpp

index 4f2d81af6ec81f0747b7f5822fa783188e60d4d7..80422b3bc0e13046ee40dee913a5e7f3648b7aa3 100644 (file)
@@ -213,12 +213,10 @@ int main( int argc, const char *argv[] ) {
                 continue;
             }
 
-            std::shared_ptr<std::ofstream> 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 {
index e457196077f2c32b4ceb18dab2ebd37a90e57bae..b378e92495625384dae46c312f30c408ac299359 100644 (file)
@@ -3,14 +3,16 @@
 #include <string>
 #include <memory>
 #include <vector>
+#include <sstream>
 
 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 {
index 8ddc7f1c449b0b2f584f524b7bb0ad8c5c7c39c5..cdbce22393a253c00734008feb4e75dde5742c8a 100644 (file)
@@ -24,7 +24,7 @@ PostgresJobProvider::PostgresJobProvider( const std::string& server, const std::
 
 
 std::shared_ptr<Job> 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<Job> PostgresJobProvider::fetchJob() {
     job->task = result[0]["task"].as<std::string>();
     job->from = result[0]["\"executeFrom\""].as<std::string>( "" );
     job->to = result[0]["\"executeTo\""].as<std::string>( "" );
-    job->warning = result[0]["warning"].as<std::string>();
-
-    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<std::string>();
 
+    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> 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> 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();
 }