2019-09-09 15:43:51 +03:00
/* -------------------------------------------------------------------------- */
2020-04-30 16:00:02 +03:00
/* Copyright 2002-2020, OpenNebula Project, OpenNebula Systems */
2019-09-09 15:43:51 +03:00
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
/* not use this file except in compliance with the License. You may obtain */
/* a copy of the License at */
/* */
/* http://www.apache.org/licenses/LICENSE-2.0 */
/* */
/* Unless required by applicable law or agreed to in writing, software */
/* distributed under the License is distributed on an "AS IS" BASIS, */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
/* See the License for the specific language governing permissions and */
/* limitations under the License. */
/* -------------------------------------------------------------------------- */
# ifndef HOOKLOG_H_
# define HOOKLOG_H_
# include <string>
# include "ActionManager.h"
# include "Attribute.h"
class SqlDB ;
/**
* Thread loop ( timer action to purge the log )
*/
extern " C " void * hlog_action_loop ( void * arg ) ;
/**
* This class represents the execution log of Hooks . It writes / reads execution
* records in the DB .
*/
class HookLog
{
public :
HookLog ( SqlDB * db , const VectorAttribute * hl_conf ) ;
virtual ~ HookLog ( ) = default ;
/**
* Get the execution log for a given hook
* @ param hkid the ID of the hook
* @ param xml_log execution records in XML format
*
* @ return 0 on success
*/
int dump_log ( int hkid , std : : string & xml_log ) ;
/**
* Get the execution log for all hooks
* @ param xml_log execution records in XML format
*
* @ return 0 on success
*/
int dump_log ( std : : string & xml_log ) ;
2019-09-19 16:26:20 +03:00
/**
* Get the execution log using a given where clause
* @ param where_clause where cluase of the SQL query
* @ param xml_log execution records in XML format
*
* @ return 0 on success
*/
int dump_log ( const std : : string & where_clause , std : : string & xml_log ) ;
2019-09-09 15:43:51 +03:00
/**
* Adds a new execution record to the hook
* @ param hkid the ID of the hook
* @ param rc return code of the execution
* @ param xml_result rc , std streams and execution context
*
* @ return 0 on success
*/
int add ( int hkid , int rc , std : : string & xml_result ) ;
/**
* Retries a given execution for a host , using the same execution context
* @ param hkid the ID of the hook
* @ param exeid the execution identifier
* @ param err_msg error message
*
* @ return 0 on success
*/
int retry ( int hkid , int exeid , std : : string & err_msg ) ;
/**
* Bootstraps the database table ( s ) associated to the Hook Log
* @ return 0 on success
*/
static int bootstrap ( SqlDB * _db ) ;
2019-09-20 10:38:16 +03:00
/**
* Drops object from the database
* @ param db pointer to the db
* @ return 0 on success
*/
int drop ( SqlDB * db , const int hook_id ) ;
2019-09-09 15:43:51 +03:00
private :
// ----------------------------------------
// DataBase implementation variables
// ----------------------------------------
static const char * table ;
static const char * db_names ;
static const char * db_bootstrap ;
/**
* Pointer to the database .
*/
SqlDB * db ;
/**
* Number of log records saved for each hook .
*/
int log_retention ;
/**
* Dumps hook log records
* @ param hkid - 1 to dump all records
* @ param exec_id - 1 to dump all records
* @ param xml_log execution results in xml format
*
* @ return 0 on success
*/
int _dump_log ( int hkid , int exec_id , std : : string & xml_log ) ;
} ;
# endif /*HOOKLOG_H_*/