⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.c

📁 Linux内核监控工具。 Linux内核监控工具。 Linux内核监控工具。
💻 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 + -