📄 database.c
字号:
/*************************************************************************** database.c - description ------------------- begin : Thu Oct 23 08:08:03 EET 2001 copyright : (C) 2001-2002 by Petri Turunen email : petri.turunen@pete.fi.eu.org ***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/#include "linux_mond.h"#include <stdio.h>#include <stdlib.h> //for exit#ifdef HAVE_MYSQL_H#include <mysql.h>#endif#ifdef HAVE_POSTGRESQL#include <libpq-fe.h>#endif//Global variablesstruct conf_t server_config; //defined in linux_mond.c#ifdef HAVE_POSTGRESQLvoid exit_nicely(PGconn *conn);void exit_nicely(PGconn *conn){PQfinish(conn);exit(1);}// nro int AUTO_INCREMENT not null primary key, // status varchar(3) not null default 'ACT', // time datetime not null,// machine varchar(50) not null,// Amachine varchar(50) not null,// severity varchar(9) not null,// error MEDIUMTEXT,// comment MEDIUMTEXT,// modby varchar(30),// lastedited datetime,// closetime datetime,// category varchar(15),// priority varchar(7),// actionid varchar(5),// action_status varchar(5),// Sstate varchar(7),// service varchar(10),// custID varchar(20),// prize varchar(16),// billed varchar(6)int data2db(struct msg_t *ipmsg, char *table, int w2db){ char *pgport=""; char *pgoptions=""; char *pgtty=""; char *dbname="linuxmond"; char message[1025]; int len=0; /* FILE *debug; */ PGconn *conn; PGresult *res; /* make a connection to the database */ conn = PQsetdbLogin(server_config.dbhost,pgport,pgoptions,pgtty,dbname,server_config.dbuser,server_config.dbpasswd); /* * check to see that the backend connection was successfully made */ if (PQstatus(conn) == CONNECTION_BAD) { slog(2,"database.c: Connection to database failed."); slog(2,"database.c: %s",PQerrorMessage(conn)); exit_nicely(conn); } /* debug = fopen("/tmp/trace.out","w"); */ /* PQtrace(conn, debug); */ if (w2db == STATUS2DB) snprintf(message,1024,"INSERT INTO %s (status,time,machine,severity,error,Amachine,actionid,Sstate,service) VALUES('ACT','now','%s','%s','%s','%s','%s','%s','%s');",table,ipmsg->machine,ipmsg->status,ipmsg->errordescription,ipmsg->Amachine,ipmsg->actionid,ipmsg->Sstate,ipmsg->service); len = strlen(message); res = PQexec(conn,message); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { slog(2, "database.c: INSERT Failed"); slog(2, "database.c: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } PQclear(res); /* close the connection to the database and cleanup */ PQfinish(conn); /* fclose(debug); */ return 0;}int data2dbpro(struct msg_t *ipmsg, char *table){ char message[1025]; char tmpstring[100]; char tmperror[300]; char *tmpstring2; int len=0; char *pgport=""; char *pgoptions=""; char *pgtty=""; char *dbname="linuxmond"; /* FILE *debug; */ PGconn *conn; PGresult *res; /* make a connection to the database */ conn = PQsetdbLogin(server_config.dbhost,pgport,pgoptions,pgtty,dbname,server_config.dbuser,server_config.dbpasswd); /* * check to see that the backend connection was successfully made */ if (PQstatus(conn) == CONNECTION_BAD) { slog(2,"database.c: Connection to database failed."); slog(2,"database.c: %s",PQerrorMessage(conn)); exit_nicely(conn); } if(strcmp(ipmsg->Sstate,"UP")==0) { snprintf(message,1024,"select time,error from %s where service='%s' and Sstate='DOWN' and Amachine='%s' and status='ACT' order by time asc limit 1;",table,ipmsg->service,ipmsg->Amachine); len = strlen(message); res = PQexec(conn,message); if(PQresultStatus(res)!=PGRES_TUPLES_OK) { slog(2,"database.c: Failed to SELECT from database."); return(1); } len=0; len=PQgetlength(res,0,0); tmpstring2 = PQgetvalue(res,0,0); strcpy(tmpstring,tmpstring2); tmpstring2 = PQgetvalue(res,0,1); strcpy(tmperror,tmpstring2); PQclear(res); snprintf(message,1024,"UPDATE %s SET status='DEL', closetime='now', time='%s',modby='LMON',comment='%s' WHERE service='%s' and Sstate='DOWN' and Amachine='%s' and status='ACT';",table, tmpstring, tmperror, ipmsg->service, ipmsg->Amachine); res = PQexec(conn,message); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { slog(2, "database.c: UPDATE Failed"); slog(2, "database.c: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } PQclear(res); snprintf(message,1024,"INSERT INTO %s (status,time,machine,severity,error,Amachine,actionid,Sstate,service,closetime,modby,comment) VALUES('ACT','%s','%s','%s','%s','%s','%s','%s','%s','now','LMON','%s');",table,tmpstring,ipmsg->machine,ipmsg->status,ipmsg->errordescription,ipmsg->Amachine,ipmsg->actionid,ipmsg->Sstate,ipmsg->service,tmperror); res = PQexec(conn,message); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { slog(2, "database.c: INSERT Failed"); slog(2, "database.c: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } PQclear(res); } else { snprintf(message,1024,"INSERT INTO %s (status,time,machine,severity,error,Amachine,actionid,Sstate,service) VALUES('ACT','now','%s','%s','%s','%s','%s','%s','%s');",table,ipmsg->machine,ipmsg->status,ipmsg->errordescription,ipmsg->Amachine,ipmsg->actionid,ipmsg->Sstate,ipmsg->service); len = strlen(message); res = PQexec(conn,message); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { slog(2, "database.c: INSERT Failed"); slog(2, "database.c: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } len = 0; len = (int) PQcmdTuples(res); if(len==0) slog(2,"database.c: Error while inserting data to PostgreSQL"); PQclear(res); } /* close the connection to the database and cleanup */ PQfinish(conn); return 0;}#endif////// MYSQL////#ifdef HAVE_MYSQLint data2db(struct msg_t *ipmsg, char *table, int w2db){ char message[1025]; int len=0; MYSQL mysql; mysql_init(&mysql); //mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"linux_mond"); if (!mysql_real_connect(&mysql,server_config.dbhost,server_config.dbuser,server_config.dbpasswd,"linuxmond",0,NULL,0)) { slog(2,"Failed to connect to database: Error: %s",mysql_error(&mysql)); return(1); } if(w2db==STATUS2DB) snprintf(message,1024,"INSERT INTO %s (status,time,machine,severity,error,Amachine,actionid,Sstate,service) VALUES('ACT',NOW(),'%s','%s','%s','%s','%s','%s','%s');",table,ipmsg->machine,ipmsg->status,ipmsg->errordescription,ipmsg->Amachine,ipmsg->actionid,ipmsg->Sstate,ipmsg->service); len = strlen(message); mysql_query(&mysql,message); len = 0; len = (int) mysql_affected_rows(&mysql); if(len==0) slog(2,"database.c: Error while inserting data to Mysql"); mysql_close(&mysql);return 0;}//// DATA2DBPRO//int data2dbpro(struct msg_t *ipmsg, char *table){ char message[1025]; char tmpstring[100]; char tmperror[300]; int len=0,state=0; MYSQL mysql; MYSQL_ROW row; MYSQL_RES *result; mysql_init(&mysql); //mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"linux_mond"); if (!mysql_real_connect(&mysql,server_config.dbhost,server_config.dbuser,server_config.dbpasswd,"linuxmond",0,NULL,0)) { slog(2,"Failed to connect to database: Error: %s",mysql_error(&mysql)); return(1); } if(strcmp(ipmsg->Sstate,"UP")==0) { snprintf(message,1024,"select time,error from %s where service='%s' and Sstate='DOWN' and Amachine='%s' and status='ACT' order by time asc limit 1;",table,ipmsg->service,ipmsg->Amachine); len = strlen(message); state = mysql_query(&mysql,message); if(state!=0) { slog(2,"database.c: %s",mysql_error(&mysql)); return(1); } result = mysql_store_result(&mysql); row = mysql_fetch_row(result); snprintf(tmpstring,100,"%s",row[0]); snprintf(tmperror,300,"%s",row[1]); snprintf(message,1024,"UPDATE %s SET status='DEL', closetime=NOW(), time='%s',modby='LMON',comment='%s' WHERE service='%s' and Sstate='DOWN' and Amachine='%s' and status='ACT';",table, tmpstring, tmperror, ipmsg->service, ipmsg->Amachine); state = mysql_query(&mysql,message); if(state!=0) { slog(2,"database.c: %s",mysql_error(&mysql)); return(1); } snprintf(message,1024,"INSERT INTO %s (status,time,machine,severity,error,Amachine,actionid,Sstate,service,closetime,modby,comment) VALUES('ACT','%s','%s','%s','%s','%s','%s','%s','%s',NOW(),'LMON','%s');",table,tmpstring,ipmsg->machine,ipmsg->status,ipmsg->errordescription,ipmsg->Amachine,ipmsg->actionid,ipmsg->Sstate,ipmsg->service,tmperror); state = mysql_query(&mysql,message); if(state!=0) { slog(2,"database.c: %s",mysql_error(&mysql)); return(1); } } else { snprintf(message,1024,"INSERT INTO %s (status,time,machine,severity,error,Amachine,actionid,Sstate,service) VALUES('ACT',NOW(),'%s','%s','%s','%s','%s','%s','%s');",table,ipmsg->machine,ipmsg->status,ipmsg->errordescription,ipmsg->Amachine,ipmsg->actionid,ipmsg->Sstate,ipmsg->service); len = strlen(message); mysql_query(&mysql,message); len = 0; len = (int) mysql_affected_rows(&mysql); if(len==0) slog(2,"database.c: Error while inserting data to Mysql"); } mysql_close(&mysql); return 0;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -