Skip to content
Snippets Groups Projects
Forked from cs / ds / alarm-handler
153 commits behind the upstream repository.
log_thread.h 2.90 KiB
/*
 * log_thread.h
 *
 * $Author: graziano $
 *
 * $Revision: 1.4 $
 *
 * $Log: log_thread.h,v $
 *
 *
 * copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
 *           Strada Statale 14 - km 163,5 in AREA Science Park
 *           34012 Basovizza, Trieste ITALY
 */

#ifndef LOG_THREAD_H
#define LOG_THREAD_H

#include <omnithread.h>
#include <tango.h>
#include <Alarm.h>
#include <mysql.h>

#define LOG_THREAD_EXIT				"log_thread_exit"
#define LOG_THREAD_EXIT_TIME		1

//############# DB ############
//#define LOG_DB_NAME			"alarm"
//######## ALARM_DESC ########
#define DESC_TABLE_NAME			"description"
#define DESC_COL_ID				"id_description"
#define DESC_COL_NAME			"name"
#define DESC_COL_INSTANCE		"instance"
#define DESC_COL_ACTIVE			"active"
#define DESC_COL_TIME_S			"time_sec"
#define DESC_COL_FORMULA		"formula"
#define DESC_COL_SILENT_TIME	"silent_time"
#define DESC_COL_TIME_THRESHOLD	"time_threshold"
#define DESC_COL_LEVEL			"level"
#define DESC_COL_GRP			"grp"
#define DESC_COL_MSG			"msg"
#define DESC_COL_ACTION			"action"
//######## ALARM_STATUS #######
#define STAT_TABLE_NAME		"alarms"
#define STAT_COL_ID			"id_alarms"
#define STAT_COL_TIME_S		"time_sec"
#define STAT_COL_TIME_U		"time_usec"
#define STAT_COL_STATUS		"status"
#define STAT_COL_ACK		"ack"
#define STAT_COL_DESC_ID	DESC_COL_ID
#define STAT_COL_VALUES		"attr_values"


#define TYPE_LOG_STATUS			1
#define TYPE_LOG_DESC_ADD		2
#define TYPE_LOG_DESC_DIS		3
#define TYPE_LOG_DESC_REM		4
#define TYPE_LOG_DESC_SYNC		5
#define TYPE_LOG_DESC_UPD_OLD	6
#define TYPE_LOG_DESC_UPDATE	7

#define ALARM_ACTIVE		1
#define ALARM_REMOVED		0


typedef struct {
	unsigned int type_log;
	unsigned int time_s;
	unsigned int time_us;
	unsigned int time_threshold;
	int silent_time;
	string name;
	string status;
	string ack;
	string level;
	string grp;
	string msg;
	string formula;
	string action;
	string values;
	vector<string> alm_list;
} alm_log_t;

/*
 * here Alarm insert data to log, log_thread process data
 * and store in db
 */
class alarm_list : public omni_mutex {
	public:
		alarm_list(void): full(this), empty(this) {}
		~alarm_list(void) {}
		void push_back(alm_log_t& a);
		const alm_log_t pop_front(void);
		void clear(void);
		list<alm_log_t> show(void);
	protected:
		list<alm_log_t> l_alarm;
	private:
		omni_condition full,
					empty;
};


class log_thread : public omni_thread/*, public Tango::LogAdapter*/ 
{
	public:
		log_thread(string dbhost, string dbuser, string dbpw, string dbname, int dbport, string instance_name/*, Alarm_ns::Alarm *p*/);
		~log_thread();
		
		void log_alarm_db(alm_log_t& a);
		void get_alarm_list(vector<string> &al_list);		
		
	protected:
		void run(void *);
	private:
		//Alarm_ns::Alarm *p_Alarm;
		MYSQL log_db;
		
		alarm_list al_list;	
		
		string m_dbhost;
		string m_dbuser;
		string m_dbpw;
		string m_dbname;
		int m_dbport;
		string m_instance_name;
		
		void write_db(alm_log_t& a);
};

#endif	/* LOG_THREAD_H */

/* EOF */