From: Florian G. <re...@us...> - 2008-01-03 22:06:13
|
Update of /cvsroot/perfparse/_perfparse/libpp_mysql In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10160/libpp_mysql Modified Files: Makefile.am Makefile.in del_policy.c del_policy.h Log Message: some refactoring Index: Makefile.in =================================================================== RCS file: /cvsroot/perfparse/_perfparse/libpp_mysql/Makefile.in,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** Makefile.in 18 Dec 2007 15:10:33 -0000 1.22 --- Makefile.in 3 Jan 2008 22:04:44 -0000 1.23 *************** *** 72,75 **** --- 72,78 ---- libpp_mysql_la-db_macro_actions.lo libpp_mysql_la_OBJECTS = $(am_libpp_mysql_la_OBJECTS) + libpp_mysql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libpp_mysql_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp *************** *** 259,262 **** --- 262,266 ---- libpp_mysql_la_CPPFLAGS = '-DSYSCONFDIR="$(sysconfdir)"' '-DPREFIX="$(prefix)"' '-DLOCALEDIR="$(datadir)/locale"' ${MYSQL_CFLAGS} ${GLIB_CFLAGS} -I${top_srcdir}/libpp_common -I${top_srcdir} LDADD = '${MYSQL_LIBS}' + libpp_mysql_la_LDFLAGS = -version-info 1:0:0 all: all-am *************** *** 320,324 **** done libpp_mysql.la: $(libpp_mysql_la_OBJECTS) $(libpp_mysql_la_DEPENDENCIES) ! $(LINK) -rpath $(libdir) $(libpp_mysql_la_OBJECTS) $(libpp_mysql_la_LIBADD) $(LIBS) mostlyclean-compile: --- 324,328 ---- done libpp_mysql.la: $(libpp_mysql_la_OBJECTS) $(libpp_mysql_la_DEPENDENCIES) ! $(libpp_mysql_la_LINK) -rpath $(libdir) $(libpp_mysql_la_OBJECTS) $(libpp_mysql_la_LIBADD) $(LIBS) mostlyclean-compile: Index: Makefile.am =================================================================== RCS file: /cvsroot/perfparse/_perfparse/libpp_mysql/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Makefile.am 12 Aug 2007 00:11:44 -0000 1.2 --- Makefile.am 3 Jan 2008 22:04:44 -0000 1.3 *************** *** 4,6 **** libpp_mysql_la_CPPFLAGS='-DSYSCONFDIR="$(sysconfdir)"' '-DPREFIX="$(prefix)"' '-DLOCALEDIR="$(datadir)/locale"' ${MYSQL_CFLAGS} ${GLIB_CFLAGS} -I${top_srcdir}/libpp_common -I${top_srcdir} LDADD='${MYSQL_LIBS}' ! --- 4,6 ---- libpp_mysql_la_CPPFLAGS='-DSYSCONFDIR="$(sysconfdir)"' '-DPREFIX="$(prefix)"' '-DLOCALEDIR="$(datadir)/locale"' ${MYSQL_CFLAGS} ${GLIB_CFLAGS} -I${top_srcdir}/libpp_common -I${top_srcdir} LDADD='${MYSQL_LIBS}' ! libpp_mysql_la_LDFLAGS = -version-info 1:0:0 Index: del_policy.c =================================================================== RCS file: /cvsroot/perfparse/_perfparse/libpp_mysql/del_policy.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** del_policy.c 17 Dec 2007 20:49:53 -0000 1.8 --- del_policy.c 3 Jan 2008 22:04:44 -0000 1.9 *************** *** 3,7 **** * del_policy.c - Common functions required by PerfParse suit. * ! * Copyright (c) 2004 Ben Clewett (per...@cl...) * $Id$ * --- 3,9 ---- * del_policy.c - Common functions required by PerfParse suit. * ! * Copyright (c) 2004-2008 Ben Clewett (per...@cl...) ! * Florian Gleixner ! * * $Id$ * *************** *** 184,188 **** { pp_log_func; ! g_string_printf(s_SQL, "SELECT delete_policy FROM perfdata_delete_policy WHERE policy_id = %d", i); --- 186,190 ---- { pp_log_func; ! g_string_printf(s_SQL, "SELECT delete_policy_seconds FROM perfdata_delete_policy WHERE policy_id = %d", i); *************** *** 229,238 **** in host, get them from hostgroup setting */ ! void getRawHostPolicy(t_policyinfo *policyinfo) { pp_log_func; ! g_string_printf(s_SQL, "SELECT raw_delete_policy_individual,policy_name,delete_policy_seconds FROM perfdata_host h left join perfdata_delete_policy p on h.raw_delete_policy_id=p.policy_id WHERE host_id = '%d'", policyinfo->iHostId); query(s_SQL->str); --- 231,245 ---- in host, get them from hostgroup setting */ ! void getHostPolicy(t_policyinfo *policyinfo, int ptype) { pp_log_func; ! if(ptype==GET_BIN) { ! g_string_printf(s_SQL, "SELECT bin_delete_policy_individual,policy_name,delete_policy_seconds FROM perfdata_host h left join perfdata_delete_policy p on h.bin_delete_policy_id=p.policy_id WHERE host_id = '%d'", ! policyinfo->iHostId); ! } else { ! g_string_printf(s_SQL, "SELECT raw_delete_policy_individual,policy_name,delete_policy_seconds FROM perfdata_host h left join perfdata_delete_policy p on h.raw_delete_policy_id=p.policy_id WHERE host_id = '%d'", policyinfo->iHostId); + } query(s_SQL->str); *************** *** 246,264 **** policyinfo->iPolicySource=DEL_POLICY_SOURCE_HOST_GROUP; } else { ! getRawGroupPolicy(policyinfo); } } /* get Raw deletion policy info from settings in hostgroup. If there are no settings in hostgroup, get them from default entries. */ ! void getRawGroupPolicy(t_policyinfo *policyinfo) { pp_log_func; ! ! g_string_printf(s_SQL,"SELECT g.raw_delete_policy_individual,policy_name,delete_policy_seconds FROM perfdata_host_groups hg, perfdata_groups g left join perfdata_delete_policy p on g.raw_delete_policy_id=p.policy_id WHERE g.group_id=hg.group_id AND hg.host_id = '%d'", policyinfo->iHostId); query(s_SQL->str); --- 253,289 ---- policyinfo->iPolicySource=DEL_POLICY_SOURCE_HOST_GROUP; } else { ! getGroupPolicy(policyinfo,ptype); } } + void getRawHostPolicy(t_policyinfo *policyinfo) + { + pp_log_func; + getHostPolicy(policyinfo,GET_RAW); + } + + void getBinHostPolicy(t_policyinfo *policyinfo) + { + pp_log_func; + getHostPolicy(policyinfo,GET_BIN); + } + /* get Raw deletion policy info from settings in hostgroup. If there are no settings in hostgroup, get them from default entries. */ ! void getGroupPolicy(t_policyinfo *policyinfo,int ptype) { pp_log_func; ! ! if(ptype==GET_BIN){ ! g_string_printf(s_SQL,"SELECT g.bin_delete_policy_individual,policy_name,delete_policy_seconds FROM perfdata_host_groups hg, perfdata_groups g left join perfdata_delete_policy p on g.bin_delete_policy_id=p.policy_id WHERE g.group_id=hg.group_id AND hg.host_id = '%d'", policyinfo->iHostId); + } else { + g_string_printf(s_SQL,"SELECT g.raw_delete_policy_individual,policy_name,delete_policy_seconds FROM perfdata_host_groups hg, perfdata_groups g left join perfdata_delete_policy p on g.raw_delete_policy_id=p.policy_id WHERE g.group_id=hg.group_id AND hg.host_id = '%d'", + policyinfo->iHostId); + } + query(s_SQL->str); *************** *** 291,295 **** if(policyinfo->iPolicySource==DEL_POLICY_SOURCE_NONE) { ! policyinfo->iPolicySeconds=getDefaultRawPolicy(); policyinfo->iPolicySource=DEL_POLICY_SOURCE_DEFAULT; } --- 316,320 ---- if(policyinfo->iPolicySource==DEL_POLICY_SOURCE_NONE) { ! policyinfo->iPolicySeconds=getDefaultPolicy(ptype); policyinfo->iPolicySource=DEL_POLICY_SOURCE_DEFAULT; } *************** *** 297,309 **** } ! int getBinHostPolicy(char *sHost) { pp_log_func; ! g_string_printf(s_SQL, "SELECT bin_delete_policy FROM perfdata_host WHERE host_name = '%s'", ! sql_escape(sHost,PERCENT_ESCAPE_CHAR)); ! ! return sql2pval(query_char(s_SQL->str)); } TPolicyList *getPolicyList() --- 322,336 ---- } ! void getRawGroupPolicy(t_policyinfo *policyinfo) { pp_log_func; ! getGroupPolicy(policyinfo,GET_RAW); } + void getBinGroupPolicy(t_policyinfo *policyinfo) + { + pp_log_func; + getGroupPolicy(policyinfo,GET_BIN); + } TPolicyList *getPolicyList() *************** *** 346,347 **** --- 373,575 ---- /* [TODO] */ } + + + + void purge_all_deleted_metrics(void) { + pp_log_func; + int *p=NULL; + GSList *tmplist2,*tmplist=NULL; + + // find metric ids to delete completely + g_string_printf(s_SQL, "SELECT metric_id from perfdata_service_metric where is_deleted=1"); + query(s_SQL->str); + + while ((result_row = mysql_fetch_row(query_result))) { + p = (int *)malloc(sizeof(int)); + *p = iData(0); + pp_log(__FILE__,__LINE__,LOG_DEBUG,"metric_id %d is marked for deletion\n",iData(0)); + tmplist=g_slist_append(tmplist,p); + } + + tmplist2=tmplist; + // need a second loop because we only have one mysql connection + while(tmplist2) { + purge_all_metricid_data(*(int *)tmplist2->data); + tmplist2=g_slist_next(tmplist2); + } + + g_slist_free(tmplist); //todo: check if we need to free the content + } + + void purge_all_metricid_data(int iMid) { + pp_log_func; + pp_log(__FILE__,__LINE__,LOG_INFO,"Deleting all data from metric id %d\n",iMid); + g_string_printf(s_SQL,"DELETE from perfdata_service_bin WHERE metric_id=%d",iMid); + query_no_return(s_SQL->str); + } + + void purge_all_deleted_services(void) { + pp_log_func; + int *p=NULL; + GSList *tmplist2,*tmplist=NULL; + // find service ids to delete completely + g_string_printf(s_SQL, "SELECT service_id from perfdata_service where is_deleted=1"); + query(s_SQL->str); + + while ((result_row = mysql_fetch_row(query_result))) { + p = (int *)malloc(sizeof(int)); + *p = iData(0); + pp_log(__FILE__,__LINE__,LOG_DEBUG,"service_id %d is marked for deletion\n",iData(0)); + tmplist=g_slist_append(tmplist,p); + } + + tmplist2=tmplist; + while(tmplist2) { + purge_all_serviceid_data(*(int *)tmplist2->data); + tmplist2=g_slist_next(tmplist2); + } + + g_slist_free(tmplist); + + } + + void purge_all_serviceid_data(int iSid) { + pp_log_func; + pp_log(__FILE__,__LINE__,LOG_INFO,"Deleting all data from service id %d\n",iSid); + g_string_printf(s_SQL,"DELETE from perfdata_service_raw WHERE service_id=%d",iSid); + query_no_return(s_SQL->str); + } + + void purge_raw_by_policy(void) { + pp_log_func; + pp_log_fl(LOG_INFO,_("Purging all raw data by policy settings\n")); + purge_all_by_policy(GET_RAW); + } + + void purge_bin_by_policy(void) { + pp_log_func; + pp_log_fl(LOG_INFO,_("Purging all binary data by policy settings\n")); + purge_all_by_policy(GET_BIN); + } + + /* TODO: really have to rethink if that complicated policy setting is a mess + * i think i'll have to remove the "individual" settings things, as they will + * never of big usage + */ + + void purge_all_by_policy(int ptype) { + pp_log_func; + GSList *tmplist2,*tmplist=NULL; + time_t dps=DEL_POLICY_UNDEFINED; + time_t t=time(NULL); + t_policyinfo *policyinfo=NULL; + + if(ptype==GET_RAW) { + g_string_printf(s_SQL,"SELECT service_id,service_description,host_id,policy_name,delete_policy_seconds,raw_delete_policy_individual FROM perfdata_service s LEFT JOIN perfdata_delete_policy d ON s.raw_delete_policy_id=d.policy_id"); + } else { + g_string_printf(s_SQL,"SELECT metric_id,metric,host_id,policy_name,delete_policy_seconds,bin_delete_policy_individual FROM perfdata_service s, perfdata_service_metric m LEFT JOIN perfdata_delete_policy d ON m.bin_delete_policy_id=d.policy_id where s.service_id=m.service_id"); + } + query(s_SQL->str); + + while ((result_row = mysql_fetch_row(query_result))) { + policyinfo = (t_policyinfo *)malloc(sizeof(t_policyinfo)); + policyinfo->iPolicySource=DEL_POLICY_SOURCE_NONE; + if(ptype==GET_RAW) { + policyinfo->iServiceId = iData(0); + policyinfo->sServiceDesc=strdup(sData(1)); + policyinfo->iMetricId=-1; + policyinfo->sMetric=NULL; + } else { + policyinfo->iMetricId = iData(0); + policyinfo->sMetric=strdup(sData(1)); + policyinfo->iServiceId = -1; + policyinfo->sServiceDesc=NULL; + } + policyinfo->iHostId=iData(2); + policyinfo->sPolicyName=strdup(sData(3)); + policyinfo->iPolicySeconds=DEL_POLICY_UNDEFINED; + + if(!isNull(5)) { + policyinfo->iPolicySeconds=iData(5); + policyinfo->iPolicySource=DEL_POLICY_SOURCE_SERVICE; + } else if (!isNull(4)){ + policyinfo->iPolicySeconds=iData(4); + policyinfo->iPolicySource=DEL_POLICY_SOURCE_SERVICE_GROUP; + } + + tmplist=g_slist_append(tmplist,policyinfo); + } + + tmplist2=tmplist; + + while(tmplist2) { + policyinfo=(t_policyinfo *) tmplist2->data; + if(policyinfo->iPolicySource==DEL_POLICY_SOURCE_NONE) { // get policy info from host or hostgroup + getHostPolicy(policyinfo,ptype); + } + + if(ptype==GET_RAW) { + pp_log(__FILE__,__LINE__,LOG_DEBUG,"service_id %d policy info (ServiceDesc: %s,HostId: %d, PolicyName: %s, PolicySeconds: %d, PolicySource: %d) in temporary list\n" + ,policyinfo->iServiceId,policyinfo->sServiceDesc, + policyinfo->iHostId,policyinfo->sPolicyName, + policyinfo->iPolicySeconds, + policyinfo->iPolicySource); + } else { + pp_log(__FILE__,__LINE__,LOG_DEBUG,"metric_id %d policy info (Metric: %s,HostId: %d, PolicyName: %s, PolicySeconds: %d, PolicySource: %d) in temporary list\n" + ,policyinfo->iMetricId,policyinfo->sMetric, + policyinfo->iHostId,policyinfo->sPolicyName, + policyinfo->iPolicySeconds, + policyinfo->iPolicySource); + } + + //now purge data + + if(policyinfo->iPolicySeconds>1) { + dps=t-policyinfo->iPolicySeconds; + if(ptype==GET_RAW) { + pp_log_fl(LOG_INFO,_("Purging raw data older than %s from service '%s', ServiceId %d due to "), + asctime(localtime(&dps)),policyinfo->sServiceDesc, + policyinfo->iServiceId); + } else { + pp_log_fl(LOG_INFO,_("Purging bin data older than %s from metric '%s', MetricId %d due to "), + asctime(localtime(&dps)),policyinfo->sMetric, + policyinfo->iMetricId); + } + switch(policyinfo->iPolicySource) { + case DEL_POLICY_SOURCE_SERVICE: + pp_log_fl(LOG_INFO,_("individual service setting\n")); + break; + case DEL_POLICY_SOURCE_HOST: + pp_log_fl(LOG_INFO,_("individual host setting\n")); + break; + case DEL_POLICY_SOURCE_HOSTGROUP: + pp_log_fl(LOG_INFO,_("individual hostgroup setting\n")); + break; + case DEL_POLICY_SOURCE_SERVICE_GROUP: + pp_log_fl(LOG_INFO,_("group '%s' setting in service.\n"),policyinfo->sPolicyName); + break; + case DEL_POLICY_SOURCE_HOST_GROUP: + pp_log_fl(LOG_INFO,_("group '%s' setting in host.\n"),policyinfo->sPolicyName); + break; + case DEL_POLICY_SOURCE_HOSTGROUP_GROUP: + pp_log_fl(LOG_INFO,_("group '%s' setting in hostgroup.\n"),policyinfo->sPolicyName); + break; + case DEL_POLICY_SOURCE_DEFAULT: + pp_log_fl(LOG_INFO,_("default setting.\n")); + default: + pp_log_fl(LOG_FATAL,_("This is a error. This line should not be executed.\n")); + } + + + if(ptype==GET_RAW) { + g_string_printf(s_SQL,"DELETE FROM perfdata_service_raw WHERE service_id=%d and ctime < %d", + policyinfo->iServiceId,(int) dps); + } else { + g_string_printf(s_SQL,"DELETE FROM perfdata_service_bin WHERE metric_id=%d and ctime < %d", + policyinfo->iMetricId,(int) dps); + } + query(s_SQL->str); + } + tmplist2=g_slist_next(tmplist2); + } + } Index: del_policy.h =================================================================== RCS file: /cvsroot/perfparse/_perfparse/libpp_mysql/del_policy.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** del_policy.h 17 Dec 2007 20:49:53 -0000 1.6 --- del_policy.h 3 Jan 2008 22:04:44 -0000 1.7 *************** *** 1,2 **** --- 1,30 ---- + /***************************************************************************** + * + * del_policy.h - Common functions required by PerfParse suit. + * + * Copyright (c) 2004-2008 Ben Clewett (per...@cl...) + * Florian Gleixner + * + * $Id$ + * + * License: + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + *****************************************************************************/ + + #ifndef PP_DEL_POLICY_H #define PP_DEL_POLICY_H *************** *** 14,17 **** --- 42,47 ---- #define DEFAULT_RAW_POLICY_ID 1 #define DEFAULT_BIN_POLICY_ID 0 + #define GET_BIN DEFAULT_BIN_POLICY_ID + #define GET_RAW DEFAULT_RAW_POLICY_ID enum { *************** *** 38,41 **** --- 68,73 ---- int iServiceId; char *sServiceDesc; + int iMetricId; // only filled if used with bin data purging + char *sMetric; int iHostId; char *sPolicyName; *************** *** 57,63 **** char *getPolicyDesc(int iPolicy); void getRawHostPolicy(t_policyinfo *policyinfo); void getRawGroupPolicy(t_policyinfo *policyinfo); - int getBinHostPolicy(char *sHost); void validateDefaultDP(); --- 89,101 ---- char *getPolicyDesc(int iPolicy); void getRawHostPolicy(t_policyinfo *policyinfo); + void getBinHostPolicy(t_policyinfo *policyinfo); + void getHostPolicy(t_policyinfo *policyinfo,int ptype); + + + + void getGroupPolicy(t_policyinfo *policyinfo, int ptype); void getRawGroupPolicy(t_policyinfo *policyinfo); + void getBinGroupPolicy(t_policyinfo *policyinfo); void validateDefaultDP(); *************** *** 72,75 **** --- 110,122 ---- + void purge_all_metricid_data(int); + void purge_all_serviceid_data(int); + void purge_all_deleted_metrics(void); + void purge_all_deleted_services(void); + + void purge_raw_by_policy(void); + + void purge_bin_by_policy(void); + void purge_all_by_policy(int ptype); |