diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/bartlby.startup.in bartlby-core/bartlby.startup.in --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/bartlby.startup.in 2006-08-05 23:19:27.000000000 +0200 +++ bartlby-core/bartlby.startup.in 2007-01-27 00:20:12.000000000 +0100 @@ -100,6 +100,20 @@ } +function reload_bartlby { + echo "reloading bartlby"; + if [ ! -f $1 ]; then + if [ "${2}x" = "x" ]; + then + echo "PIDFILE $1 does not exists"; + exit 4; + fi; + fi; + BART_PID=`cat $1`; + kill -USR2 $BART_PID + +} + function stop_bartlby { echo "stopping bartlby"; @@ -140,6 +154,8 @@ start_bartlby $PIDNAME;; startwithout) start_bartlby $PIDNAME no;; + reload) + reload_bartlby $PIDNAME;; stop) stop_bartlby $PIDNAME;; diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/include/bartlby.h bartlby-core/include/bartlby.h --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/include/bartlby.h 2007-01-05 02:49:00.000000000 +0100 +++ bartlby-core/include/bartlby.h 2007-03-23 11:22:11.000000000 +0100 @@ -1,7 +1,7 @@ #define PROGNAME "bartlby" -#define REL_NAME "b12" -#define VERSION "1.2.7" +#define REL_NAME "spartan" +#define VERSION "1.2.9" #define EXPECTCORE 1102051 //Module V Check's #define MAX_CCACHE 1024 @@ -167,6 +167,7 @@ int server_flap_seconds; int flap_count; int last_notify_send; + struct service * dead_marker; } xxyz; @@ -177,23 +178,20 @@ int server_id; int last_state; int current_state; - int client_port; + char new_server_text[2048]; char service_name[2048]; - char server_name[2048]; - char client_ip[2048]; + char plugin[2048]; char plugin_arguments[2048]; int check_interval; int check_interval_original; int last_check; + struct timeval lcheck; /*Time stuff*/ - int hour_from; - int min_from; - int hour_to; - int min_to; + char service_exec_plan[2048]; /*Notify things*/ int notify_enabled; @@ -210,7 +208,7 @@ int notify_last_time; int service_check_timeout; - char server_icon[1024]; + int service_ack; @@ -235,6 +233,8 @@ struct server * srv; int srv_place; + int is_server_dead; + }; struct service_sort { @@ -250,7 +250,7 @@ int worker_id; int active; - + char notify_plan[2048]; char password[2048]; int escalation_count; @@ -332,7 +332,7 @@ void sched_write_back_all(char * cfgfile, void * shm_addr, void * SOHandle); void sched_reschedule(struct service * svc); - +int service_is_in_time(char * time_plan); void bartlby_check_service(struct service * svc, void *, void *, char *); void bartlby_check_active(struct service * svc, char * cfgfile); void bartlby_check_local(struct service * svc, char * cfgfile); @@ -393,7 +393,9 @@ void bartlby_pre_init(char * cfgfile); void cfg_init_cache(void); - +char * cfg_add_to_cache(char * k, char * v); +void cfg_fill_with_file(char * f); +void cfg_update_cache(char * k, char * v); void bartlby_ext_init(void * shm_addr, void * data_loader, char * cfg); void bartlby_ext_shutdown(int sched_exit_code); int bartlby_ext_register_callback(int type, void * fcn); diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/mysql.shema bartlby-core/mysql.shema --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/mysql.shema 2006-10-06 02:35:09.000000000 +0200 +++ bartlby-core/mysql.shema 2007-02-07 15:36:33.000000000 +0100 @@ -65,8 +65,7 @@ `service_active` int(2) NOT NULL default '1', `service_current` int(2) NOT NULL default '0', `service_flapping` datetime NOT NULL default '0000-00-00 00:00:00', - `service_time_from` time NOT NULL default '00:00:00', - `service_time_to` time NOT NULL default '00:00:00', + `service_exec_plan` text default '', `service_interval` int(255) NOT NULL default '1', `service_type` int(11) NOT NULL default '1', `service_var` varchar(255) default NULL, @@ -105,6 +104,8 @@ `enabled_triggers` varchar(255) NOT NULL default '|mail.sh|', `escalation_minutes` int(11) NOT NULL default '2', `escalation_limit` int(11) NOT NULL default '50', + `notify_plan` text default '', + PRIMARY KEY (`worker_id`) ) TYPE=MyISAM AUTO_INCREMENT=15 ; diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/nsca-2.7.1-for-bartlby.patch bartlby-core/nsca-2.7.1-for-bartlby.patch --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/nsca-2.7.1-for-bartlby.patch 1970-01-01 01:00:00.000000000 +0100 +++ bartlby-core/nsca-2.7.1-for-bartlby.patch 2007-02-16 21:40:25.000000000 +0100 @@ -0,0 +1,469 @@ +diff -Nur ../nsca-2.7.1/1 ./1 +--- ../nsca-2.7.1/1 1970-01-01 01:00:00.000000000 +0100 ++++ ./1 2007-02-16 17:10:04.000000000 +0100 +@@ -0,0 +1,3 @@ ++test Alive 2 dsadsadsa ++ ++ +diff -Nur ../nsca-2.7.1/include/bartlby.h ./include/bartlby.h +--- ../nsca-2.7.1/include/bartlby.h 1970-01-01 01:00:00.000000000 +0100 ++++ ./include/bartlby.h 2007-02-16 16:50:47.000000000 +0100 +@@ -0,0 +1,167 @@ ++#include ++#include ++#include ++#include ++ ++#define SVC_TYPE_PASSIVE 2 ++ ++ ++struct worker { ++ char name[2048]; ++ char mail[2048]; ++ char icq[2048]; ++ char services[2048]; ++ ++ int worker_id; ++ int active; ++ char notify_plan[2048]; ++ char password[2048]; ++ ++ int escalation_count; ++ int escalation_time; ++ char notify_levels[20]; ++ char enabled_triggers[2048]; ++ char t[500]; ++ int escalation_limit; ++ int escalation_minutes; ++ ++}sa; ++ ++struct downtime { ++ int downtime_id; ++ int downtime_type; ++ int downtime_from; ++ int downtime_to; ++ char downtime_notice[2048]; ++ int service_id; ++ ++}sb; ++ ++struct perf_statistic { ++ long sum; ++ long counter; ++}; ++struct snmpi { ++ char community[512]; ++ int version; ++ char objid[1024]; ++ int warn; ++ int crit; ++ int type; ++}; ++struct sprocess { ++ int start_time; ++ int pid; ++ ++}; ++ ++struct shm_header { ++ int size_of_structs; ++ int thrdcount; ++ int svccount; ++ int wrkcount; ++ int srvcount; ++ int current_running; ++ char version[50]; ++ int do_reload; ++ int last_replication; ++ int startup_time; ++ int dtcount; ++ int sirene_mode; ++ struct perf_statistic pstat; ++ int cur_event_index; ++ ++ ++}; ++ ++struct server { ++ int server_id; ++ char client_ip[2048]; ++ char server_name[2048]; ++ char server_icon[1024]; ++ int server_enabled; ++ int client_port; ++ int server_dead; ++ int server_notify; ++ int server_flap_seconds; ++ int flap_count; ++ int last_notify_send; ++ struct service * dead_marker; ++ ++} xxyz; ++ ++ ++ ++struct service { ++ int service_id; ++ int server_id; ++ int last_state; ++ int current_state; ++ ++ char new_server_text[2048]; ++ char service_name[2048]; ++ ++ char plugin[2048]; ++ char plugin_arguments[2048]; ++ int check_interval; ++ int check_interval_original; ++ int last_check; ++ struct timeval lcheck; ++ ++ /*Time stuff*/ ++ ++ char service_exec_plan[2048]; ++ ++ /*Notify things*/ ++ int notify_enabled; ++ int last_notify_send; ++ int flap_count; ++ ++ int service_active; ++ ++ char service_var[2048]; ++ int service_type; ++ int service_passive_timeout; ++ ++ int notify_last_state; ++ int notify_last_time; ++ int service_check_timeout; ++ ++ ++ ++ int service_ack; ++ ++ int service_retain; ++ int service_retain_current; ++ ++ ++ ++ struct perf_statistic pstat; ++ struct perf_statistic delay_time; ++ ++ int do_force; ++ ++ struct snmpi snmp_info; ++ ++ int recovery_outstanding; //Flag to see if recover is waiting ++ ++ struct sprocess process; ++ ++ int flap_seconds; ++ ++ struct server * srv; ++ int srv_place; ++ ++ int is_server_dead; ++ ++}; ++ ++struct service * bartlby_SHM_ServiceMap(void *); ++struct sched_threads * bartlby_SHM_ThreadMap(void * shm_addr); ++struct downtime * bartlby_SHM_DowntimeMap(void * shm_addr); ++struct shm_header * bartlby_SHM_GetHDR(void *); ++struct worker * bartlby_SHM_WorkerMap(void * shm_addr); ++struct server * bartlby_SHM_ServerMap(void * shm_addr); ++ ++ ++ +diff -Nur ../nsca-2.7.1/nsca_tests/nsca_basic.cfg ./nsca_tests/nsca_basic.cfg +--- ../nsca-2.7.1/nsca_tests/nsca_basic.cfg 2007-01-30 06:53:05.000000000 +0100 ++++ ./nsca_tests/nsca_basic.cfg 2007-02-15 17:00:49.000000000 +0100 +@@ -70,7 +70,7 @@ + # messages are logged to the syslog facility. + # Values: 0 = debugging off, 1 = debugging on + +-debug=0 ++debug=1 + + + +diff -Nur ../nsca-2.7.1/nsca_tests/var/nagios.cmd ./nsca_tests/var/nagios.cmd +--- ../nsca-2.7.1/nsca_tests/var/nagios.cmd 1970-01-01 01:00:00.000000000 +0100 ++++ ./nsca_tests/var/nagios.cmd 2007-02-15 17:01:12.000000000 +0100 +@@ -0,0 +1,18 @@ ++[1171555264] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555264] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555265] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555265] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555266] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555266] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555267] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555267] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555268] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555268] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555269] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555269] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555270] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555270] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555271] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555271] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here ++[1171555272] PROCESS_HOST_CHECK_RESULT;hostname;0;Plugin output ++[1171555272] PROCESS_SERVICE_CHECK_RESULT;host;service;0;A good result here +diff -Nur ../nsca-2.7.1/nsca_tests/var/nsca.pid ./nsca_tests/var/nsca.pid +--- ../nsca-2.7.1/nsca_tests/var/nsca.pid 1970-01-01 01:00:00.000000000 +0100 ++++ ./nsca_tests/var/nsca.pid 2007-02-15 17:01:01.000000000 +0100 +@@ -0,0 +1 @@ ++3561 +diff -Nur ../nsca-2.7.1/src/bartlby_stuff.c ./src/bartlby_stuff.c +--- ../nsca-2.7.1/src/bartlby_stuff.c 1970-01-01 01:00:00.000000000 +0100 ++++ ./src/bartlby_stuff.c 2007-02-16 16:30:30.000000000 +0100 +@@ -0,0 +1,57 @@ ++ ++#include "../include/bartlby.h" ++ ++ ++ ++struct shm_header * bartlby_SHM_GetHDR(void * shm_addr) { ++ return (struct shm_header *)(void *)shm_addr; ++} ++ ++ ++struct server * bartlby_SHM_ServerMap(void * shm_addr) { ++ //Is beyond the 3 integers :-) ++ struct shm_header * hdr; ++ struct service * svcmap; ++ struct downtime * dtmap; ++ ++ hdr=bartlby_SHM_GetHDR(shm_addr); ++ ++ svcmap=bartlby_SHM_ServiceMap(shm_addr); ++ //wrkmap=(struct worker *)(void*)&svcmap[hdr->svccount]+20; ++ dtmap=bartlby_SHM_DowntimeMap(shm_addr); ++ ++ return (struct server *)(void *)&dtmap[hdr->dtcount]+20; ++} ++ ++struct downtime * bartlby_SHM_DowntimeMap(void * shm_addr) { ++ //Is beyond the 3 integers :-) ++ struct shm_header * hdr; ++ struct service * svcmap; ++ struct worker * wrkmap; ++ ++ hdr=bartlby_SHM_GetHDR(shm_addr); ++ ++ svcmap=bartlby_SHM_ServiceMap(shm_addr); ++ //wrkmap=(struct worker *)(void*)&svcmap[hdr->svccount]+20; ++ wrkmap=bartlby_SHM_WorkerMap(shm_addr); ++ ++ return (struct downtime *)(void *)&wrkmap[hdr->wrkcount]+20; ++} ++ ++struct worker * bartlby_SHM_WorkerMap(void * shm_addr) { ++ //Is beyond the 3 integers :-) ++ struct shm_header * hdr; ++ struct service * svcmap; ++ hdr=bartlby_SHM_GetHDR(shm_addr); ++ ++ svcmap=bartlby_SHM_ServiceMap(shm_addr); ++ ++ return (struct worker *)(void*)&svcmap[hdr->svccount]+20; ++} ++ ++struct service * bartlby_SHM_ServiceMap(void * shm_addr) { ++ //Is beyond the 3 integers :-) ++ return (struct service *)(void *)shm_addr+sizeof(struct shm_header); ++} ++ ++ +diff -Nur ../nsca-2.7.1/src/Makefile.in ./src/Makefile.in +--- ../nsca-2.7.1/src/Makefile.in 2003-10-24 03:31:08.000000000 +0200 ++++ ./src/Makefile.in 2007-02-16 16:24:53.000000000 +0100 +@@ -19,8 +19,8 @@ + + all: nsca send_nsca + +-nsca: nsca.c netutils.c utils.c $(SRC_INCLUDE)/netutils.h $(SRC_INCLUDE)/utils.h $(SRC_INCLUDE)/common.h $(SRC_INCLUDE)/config.h +- $(CC) $(CFLAGS) -o $@ nsca.c netutils.c utils.c $(LDFLAGS) $(SOCKETLIBS) $(LIBWRAPLIBS) ++nsca: bartlby_stuff.c nsca.c netutils.c utils.c $(SRC_INCLUDE)/netutils.h $(SRC_INCLUDE)/utils.h $(SRC_INCLUDE)/common.h $(SRC_INCLUDE)/config.h $(SRC_INCLUDE)/bartlby.h ++ $(CC) $(CFLAGS) -o $@ nsca.c bartlby_stuff.c netutils.c utils.c $(LDFLAGS) $(SOCKETLIBS) $(LIBWRAPLIBS) + + send_nsca: send_nsca.c netutils.c utils.c $(SRC_INCLUDE)/netutils.h $(SRC_INCLUDE)/utils.h $(SRC_INCLUDE)/common.h $(SRC_INCLUDE)/config.h + $(CC) $(CFLAGS) -o $@ send_nsca.c netutils.c utils.c $(LDFLAGS) $(SOCKETLIBS) +diff -Nur ../nsca-2.7.1/src/nsca.c ./src/nsca.c +--- ../nsca-2.7.1/src/nsca.c 2007-01-30 06:53:05.000000000 +0100 ++++ ./src/nsca.c 2007-02-16 21:40:18.000000000 +0100 +@@ -20,7 +20,7 @@ + #include "../include/netutils.h" + #include "../include/utils.h" + #include "../include/nsca.h" +- ++#include "../include/bartlby.h" + + static int server_port=DEFAULT_SERVER_PORT; + static char server_address[16]="0.0.0.0"; +@@ -30,6 +30,7 @@ + static char alternate_dump_file[MAX_INPUT_BUFFER]="/dev/null"; + static char command_file[MAX_INPUT_BUFFER]=""; + static char password[MAX_INPUT_BUFFER]=""; ++static char bartlby_shm_key[MAX_INPUT_BUFFER]=""; + + static enum { OPTIONS_ERROR, SINGLE_PROCESS_DAEMON, MULTI_PROCESS_DAEMON, INETD } mode=SINGLE_PROCESS_DAEMON; + static int debug=FALSE; +@@ -53,7 +54,7 @@ + int sigrestart=FALSE; + int sigshutdown=FALSE; + +-static FILE *command_file_fp=NULL; ++void * command_file_fp=NULL; + + struct handler_entry *rhand=NULL; + struct handler_entry *whand=NULL; +@@ -87,8 +88,9 @@ + if(result!=OK) + printf("Incorrect command line arguments supplied\n"); + printf("\n"); +- printf("NSCA - Nagios Service Check Acceptor\n"); +- printf("Copyright (c) 2000-2007 Ethan Galstad (www.nagios.org)\n"); ++ printf("NSCA - Nagios Service Check Acceptor (patched for bartlby.org project)\n"); ++ printf("NSCA: Copyright (c) 2000-2007 Ethan Galstad (www.nagios.org)\n"); ++ printf("Bartlby: by www.bartlby.org and its owners\n"); + printf("Version: %s\n",PROGRAM_VERSION); + printf("Last Modified: %s\n",MODIFICATION_DATE); + printf("License: GPL v2\n"); +@@ -375,6 +377,14 @@ + strncpy(password,varvalue,sizeof(password)-1); + password[sizeof(password)-1]='\0'; + } ++ else if(strstr(input_buffer,"bartlby_shm_key")){ ++ if(strlen(varvalue)>sizeof(bartlby_shm_key)-1){ ++ syslog(LOG_ERR,"bartlby shm key is too long in config file '%s' - Line %d\n",filename,line); ++ return ERROR; ++ } ++ strncpy(bartlby_shm_key,varvalue,sizeof(bartlby_shm_key)-1); ++ password[sizeof(bartlby_shm_key)-1]='\0'; ++ } + else if(strstr(input_buffer,"decryption_method")){ + + decryption_method=atoi(varvalue); +@@ -1086,64 +1096,67 @@ + + /* writes service/host check results to the Nagios command file */ + static int write_check_result(char *host_name, char *svc_description, int return_code, char *plugin_output, time_t check_time){ +- ++ struct shm_header * hdr; ++ struct server * srvmap; ++ struct service * svcmap; ++ ++ int x; ++ int f=-1; ++ + if(aggregate_writes==FALSE){ + if(open_command_file()==ERROR) + return ERROR; + } + +- if(!strcmp(svc_description,"")) +- fprintf(command_file_fp,"[%lu] PROCESS_HOST_CHECK_RESULT;%s;%d;%s\n",(unsigned long)check_time,host_name,return_code,plugin_output); +- else +- fprintf(command_file_fp,"[%lu] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n",(unsigned long)check_time,host_name,svc_description,return_code,plugin_output); +- +- if(aggregate_writes==FALSE) +- close_command_file(); +- else +- /* if we don't fflush() then we're writing in 4k non-CR-terminated blocks, and +- * anything else (eg. pscwatch) which writes to the file will be writing into +- * the middle of our commands. +- */ +- fflush(command_file_fp); +- +- return OK; +- } ++ ++ hdr=bartlby_SHM_GetHDR(command_file_fp); ++ srvmap=bartlby_SHM_ServerMap(command_file_fp); ++ svcmap=bartlby_SHM_ServiceMap(command_file_fp); ++ ++ for(x=0; xsvccount; x++ ) { ++ ++ if(strcmp(srvmap[svcmap[x].srv_place].server_name, host_name) == 0) { ++ if(strcmp(svcmap[x].service_name, svc_description) == 0) { ++ f=1; ++ svcmap[x].current_state=return_code; ++ snprintf(svcmap[x].new_server_text, 2074, "%s", plugin_output); ++ svcmap[x].last_check = check_time; ++ break; ++ } ++ } ++ } ++ if(f < 0) { ++ syslog(LOG_ERR, "bartlby: %s/%s not found", host_name, svc_description); ++ } ++ ++ return OK; ++} + + + + /* opens the command file for writing */ + static int open_command_file(void){ +- struct stat statbuf; ++ ++ int gshm_id; + + /* file is already open */ + if(command_file_fp!=NULL) + return OK; +- +- /* command file doesn't exist - monitoring app probably isn't running... */ +- if(stat(command_file,&statbuf)){ +- +- if(debug==TRUE) +- syslog(LOG_ERR,"Command file '%s' does not exist, attempting to use alternate dump file '%s' for output",command_file,alternate_dump_file); +- +- /* try and write checks to alternate dump file */ +- command_file_fp=fopen(alternate_dump_file,"a"); +- if(command_file_fp==NULL){ +- if(debug==TRUE) +- syslog(LOG_ERR,"Could not open alternate dump file '%s' for appending",alternate_dump_file); +- return ERROR; +- } +- +- return OK; +- } +- +- /* open the command file for writing or appending */ +- command_file_fp=fopen(command_file,(append_to_file==TRUE)?"a":"w"); +- if(command_file_fp==NULL){ +- if(debug==TRUE) +- syslog(LOG_ERR,"Could not open command file '%s' for %s",command_file,(append_to_file==TRUE)?"appending":"writing"); +- return ERROR; +- } +- ++ ++ ++ ++ gshm_id = shmget(ftok(bartlby_shm_key, 32), 0,0777); ++ if(gshm_id < 0) { ++ syslog(LOG_ERR,"bartlby: shm problem: '%s'", bartlby_shm_key); ++ return ERROR; ++ } ++ ++ command_file_fp = shmat(gshm_id,NULL,0); ++ ++ syslog(LOG_NOTICE,"bartlby: shm connected"); ++ ++ ++ + return OK; + } + +@@ -1152,7 +1165,7 @@ + /* closes the command file */ + static void close_command_file(void){ + +- fclose(command_file_fp); ++ shmdt(command_file_fp); + command_file_fp=NULL; + + return; diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/ack.c bartlby-core/src/ack.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/ack.c 2006-02-11 00:54:46.000000000 +0100 +++ bartlby-core/src/ack.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: ack.c,v 1.1 2006/02/10 23:54:46 hjanuschka Exp $ */ +/* $Id: ack.c,v 1.2 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,14 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.1 $ +$Revision: 1.2 $ $Source: /cvsroot/bartlby/bartlby-core/src/ack.c,v $ $Log: ack.c,v $ +Revision 1.2 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.1 2006/02/10 23:54:46 hjanuschka SIRENE mode added @@ -69,12 +72,16 @@ } last_sirene=time(NULL); - sprintf(svc.client_ip, "0.0.0.0"); - sprintf(svc.server_name, "CORE"); + //sprintf(svc.client_ip, "0.0.0.0"); + //sprintf(svc.server_name, "CORE"); + svc.srv=malloc(sizeof(struct server)); + sprintf(svc.srv->client_ip, "0.0.0.0"); + sprintf(svc.srv->server_name, "CORE"); + sprintf(svc.service_name, "SIRENE"); sprintf(svc.new_server_text, "Your system is in sirene mode all checks have been disabled please give the UI a bit attention"); svc.current_state=STATE_SIRENE; - svc.client_port=0; + //svc.client_port=0; svc.last_state=STATE_SIRENE; _log("!!! System is in sirene Mode !!!!"); diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/bartlby.c bartlby-core/src/bartlby.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/bartlby.c 2007-01-05 02:49:00.000000000 +0100 +++ bartlby-core/src/bartlby.c 2007-02-15 21:46:38.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: bartlby.c,v 1.40 2007/01/05 01:49:00 hjanuschka Exp $ */ +/* $Id: bartlby.c,v 1.42 2007/02/15 20:46:38 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,17 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.40 $ +$Revision: 1.42 $ $Source: /cvsroot/bartlby/bartlby-core/src/bartlby.c,v $ $Log: bartlby.c,v $ +Revision 1.42 2007/02/15 20:46:38 hjanuschka +auto commit + +Revision 1.41 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.40 2007/01/05 01:49:00 hjanuschka auto commit @@ -174,6 +180,7 @@ #include #include #include +#include #include @@ -187,115 +194,172 @@ #include +char * gCfgfile; +int gDebug=0; +char * gSOName; //Shared library name +void * gSOHandle; +const char * dlmsg; + +char * gGetAutorStr; +char * gGetVersionStr; +char * gGetNameStr; +char * (*gGetAutor)(); +char * (*gGetVersion)(); +char * (*gGetName)(); +long (*gExpectVersion)(); +int (*gGetServiceMap)(struct service *, char *); +int (*gGetServerMap)(struct server *, char *); +int (*gGetWorkerMap)(struct worker *,char *); +int (*gGetDowntimeMap)(struct downtime *, char *); +struct shm_counter * (*gGetCounter)(char *); +char * gShmtok; +struct service * gsvcmap; +struct worker * gwrkmap; +struct downtime * gdtmap; +struct server * gsrvmap; +int global_startup_time; + +int gshm_id; +void * gBartlby_address; +int gshm_svc_cnt; +int gshm_wrk_cnt; +int gshm_dt_cnt; +int gshm_srv_cnt; +long gSHMSize; + +struct shmid_ds gshm_desc; + +struct shm_header * gshm_hdr; + + +int gReuseSHM=0; + + -int main(int argc, char ** argv, char ** envp) { +void dispHelp(void) { + printf("\n"); + printf(" Bartlby\n"); + printf(" %s Version %s (%s) started. compiled %s/%s\n", PROGNAME, VERSION,REL_NAME, __DATE__, __TIME__); + printf(" Next generation sys monitoring\n"); + printf(" bartlby.org\n"); + printf("\n"); + printf(" Usage: bartlby [OPTIONS] [CONFIGFILE]\n"); + printf(" \n"); + printf(" -d, --debug Runs bartlby in foreground with stdout logging\n"); + printf(" -r, --reuse if SHM is already here reuse it (could be dangorous, handle with care)\n"); + printf(" \n"); + printf(" -h, --help show this help\n"); + printf(" -v, --version version\n"); + printf(" --------------------------------------------------------------------------\n"); + printf(" \n"); + exit(1); +} + + +void bartlby_parse_argv(int argc, char ** argv){ + static struct option longopts[] = { + { "help", 0, NULL, 'h'}, + { "debug", 0, NULL, 'd'}, + { "reuse", 0, NULL, 'r'}, + { "version", 0, NULL, 'v'}, + + { NULL, 0, NULL, 0} + }; + int c; + + if(argc == 1) { + dispHelp(); + } + for (;;) { + c = getopt_long(argc, argv, "hdrv", longopts, (int *) 0); + if (c == -1) + break; + switch (c) { + case 'h': /* --help */ + dispHelp(); + break; + case 'd': + gDebug=1; + + break; + case 'r': + gReuseSHM=1; + break; + case 'v': + printf("%s\n", VERSION); + exit(0); + break; + + default: + dispHelp(); + } + } - /* - DLStuff - */ - char * GetAutorStr; - char * GetVersionStr; - char * GetNameStr; + gCfgfile=argv[optind]; - char * daemon_mode; - char * SOName; //Shared library name - void * SOHandle; - const char * dlmsg; - - - char * (*GetAutor)(); - char * (*GetVersion)(); - char * (*GetName)(); - long (*ExpectVersion)(); - - int global_startup_time; - - int (*GetServiceMap)(struct service *, char *); - int (*GetServerMap)(struct server *, char *); - int (*GetWorkerMap)(struct worker *,char *); - int (*GetDowntimeMap)(struct downtime *, char *); - - - struct shm_counter * (*GetCounter)(char *); - struct shm_counter * shmc; - int suggested_minimum; - - long cfg_shm_size_bytes; - char * cfg_shm_size; - /* - End DL STUFF - - */ - - /* - SHM Stuff - */ - char * shmtok; - int shm_id; - //int * shm_elements; - void * bartlby_address; - int shm_svc_cnt; - int shm_wrk_cnt; - int shm_dt_cnt; - int shm_srv_cnt; - - struct shmid_ds shm_desc; - long SHMSize; - struct shm_header * shm_hdr; - - struct service * svcmap; - struct worker * wrkmap; - struct downtime * dtmap; - struct server * srvmap; - - - /* - END SHM stuff - */ + +} - char * cfg_user; - struct passwd * ui; +void bartlby_load_shm_stuff(char * cfgfile) { - int exi_code; - - if(argc >= 2) { - set_cfg(argv[1]); - } else { - printf("config file missing\n"); + gSOName = getConfigValue("data_library", cfgfile); + if(gSOName == NULL) { + _log("No data_library specified in `%s' config file", cfgfile); exit(1); } + _log("using data lib: `%s'", gSOName); + gSOHandle=dlopen(gSOName, RTLD_LAZY); + + if((dlmsg=dlerror()) != NULL) { + _log("Error: %s", dlmsg); + exit(1); + } + LOAD_SYMBOL(gGetAutor,gSOHandle, "GetAutor"); + LOAD_SYMBOL(gGetVersion,gSOHandle, "GetVersion"); + LOAD_SYMBOL(gGetServiceMap,gSOHandle, "GetServiceMap"); + LOAD_SYMBOL(gGetServerMap,gSOHandle, "GetServerMap"); + LOAD_SYMBOL(gGetWorkerMap,gSOHandle, "GetWorkerMap"); + LOAD_SYMBOL(gGetDowntimeMap,gSOHandle, "GetDowntimeMap"); + LOAD_SYMBOL(gGetName,gSOHandle, "GetName"); + LOAD_SYMBOL(gExpectVersion,gSOHandle, "ExpectVersion"); + LOAD_SYMBOL(gGetCounter,gSOHandle, "GetCounter"); + + gGetAutorStr=gGetAutor(); + gGetVersionStr=gGetVersion(); + gGetNameStr=gGetName(); + + if(gExpectVersion() > EXPECTCORE || EXPECTCORE < gExpectVersion() || EXPECTCORE != gExpectVersion()) { + _log("*****Version check failed Module is compiled for version '%d' of %s", gExpectVersion(), PROGNAME); + _log("*****The Module is compiled under '%d' Version of %s", EXPECTCORE, PROGNAME); + exit(1); + } + + _log("Data Lib (%s) by: '%s' Version: %s", gGetNameStr, gGetAutorStr, gGetVersionStr); + + free(gGetAutorStr); + free(gGetVersionStr); + free(gGetNameStr); - cfg_user = getConfigValue("user", argv[1]); - if(cfg_user == NULL) { - _log("user not set in config file"); - exit(2); - } - ui=getpwnam(cfg_user); - if(ui == NULL) { - _log("User: %s not found cannot setuid running as %d", cfg_user, getuid()); - } else { - setuid(ui->pw_uid); - setgid(ui->pw_gid); - _log("User: %s/%d", ui->pw_name, ui->pw_gid); + gShmtok = getConfigValue("shm_key", cfgfile); + if(gShmtok == NULL) { + _log("Unset variable `shm_key'"); + exit(1); } - global_startup_time=time(NULL); + + - // Parse Config - SOName = getConfigValue("data_library", argv[1]); - if(SOName == NULL) { - _log("No data_library specified in `%s' config file", argv[1]); - exit(1); - } +} +void bartlby_init(void) { _log("%s Version %s (%s) started. compiled %s/%s", PROGNAME, VERSION,REL_NAME, __DATE__, __TIME__); #ifdef SNMP_ADDON @@ -312,70 +376,40 @@ _log("NRPE Support compiled in"); #endif - - daemon_mode=getConfigValue("daemon", argv[1]); - if(daemon_mode == NULL) { - daemon_mode=strdup("false"); - } - if(strcmp(daemon_mode,"true") == 0) { - - bartlby_get_daemon(argv[1]); - } - - bartlby_pre_init(argv[1]); - _log("using data lib: `%s'", SOName); - SOHandle=dlopen(SOName, RTLD_LAZY); - - if((dlmsg=dlerror()) != NULL) { - _log("Error: %s", dlmsg); - exit(1); - } - LOAD_SYMBOL(GetAutor,SOHandle, "GetAutor"); - LOAD_SYMBOL(GetVersion,SOHandle, "GetVersion"); - LOAD_SYMBOL(GetServiceMap,SOHandle, "GetServiceMap"); - LOAD_SYMBOL(GetServerMap,SOHandle, "GetServerMap"); - LOAD_SYMBOL(GetWorkerMap,SOHandle, "GetWorkerMap"); - LOAD_SYMBOL(GetDowntimeMap,SOHandle, "GetDowntimeMap"); - LOAD_SYMBOL(GetName,SOHandle, "GetName"); - LOAD_SYMBOL(ExpectVersion,SOHandle, "ExpectVersion"); - LOAD_SYMBOL(GetCounter,SOHandle, "GetCounter"); - - - - - - - GetAutorStr=GetAutor(); - GetVersionStr=GetVersion(); - GetNameStr=GetName(); - - if(ExpectVersion() > EXPECTCORE || EXPECTCORE < ExpectVersion() || EXPECTCORE != ExpectVersion()) { - _log("*****Version check failed Module is compiled for version '%d' of %s", ExpectVersion(), PROGNAME); - _log("*****The Module is compiled under '%d' Version of %s", EXPECTCORE, PROGNAME); - exit(1); - } - - _log("Data Lib (%s) by: '%s' Version: %s", GetNameStr, GetAutorStr, GetVersionStr); - +} +void bartlby_setuid(void) { + char * cfg_user; + struct passwd * ui; - shmtok = getConfigValue("shm_key", argv[1]); - if(shmtok == NULL) { - _log("Unset variable `shm_key'"); - exit(1); + cfg_user = getConfigValue("user", gCfgfile); + if(cfg_user == NULL) { + _log("user not set in config file"); + exit(2); + } + ui=getpwnam(cfg_user); + if(ui == NULL) { + _log("User: %s not found cannot setuid running as %d", cfg_user, getuid()); + } else { + setuid(ui->pw_uid); + setgid(ui->pw_gid); + _log("User: %s/%d", ui->pw_name, ui->pw_gid); } - free(GetAutorStr); - free(GetVersionStr); - free(GetNameStr); - free(SOName); - - exi_code=0; + free(cfg_user); +} + +void bartlby_shm_fits(char * cfgfile) { + + struct shm_counter * shmc; + int suggested_minimum; + + long cfg_shm_size_bytes; + char * cfg_shm_size; - while(exi_code != 1) { - cfg_shm_size = getConfigValue("shm_size", argv[1]); + cfg_shm_size = getConfigValue("shm_size", cfgfile); if(cfg_shm_size==NULL) { cfg_shm_size_bytes=10; @@ -385,14 +419,14 @@ free(cfg_shm_size); - shmc = GetCounter(argv[1]); + shmc = gGetCounter(cfgfile); if(shmc == NULL) { exit(0); } - SHMSize=cfg_shm_size_bytes*1024*1024; + gSHMSize=cfg_shm_size_bytes*1024*1024; suggested_minimum = (sizeof(struct shm_header) + (sizeof(struct server) * shmc->servers) + (sizeof(struct worker) * shmc->worker) + (sizeof(struct service) * shmc->services) + (sizeof(struct downtime) * shmc->downtimes) + 2000 + (sizeof(struct btl_event)*EVENT_QUEUE_MAX)) * 2; - if(SHMSize <= suggested_minimum) { + if(gSHMSize <= suggested_minimum) { _log("SHM is to small minimum: %d KB ", suggested_minimum/1024); exit(1); } @@ -400,74 +434,82 @@ _log("Size: S=%d, W=%d, D=%d, H=%d, E=%d", sizeof(struct service), sizeof(struct worker), sizeof(struct downtime), sizeof(struct shm_header), sizeof(struct btl_event)); free(shmc); + + +} + +int bartlby_populate_shm(char * cfgfile) { + gshm_id = shmget(ftok(gShmtok, 32), gSHMSize,IPC_CREAT | IPC_EXCL | 0777); + if(gshm_id < 0 && gReuseSHM == 1) { + _log("trying to reuse SHM"); + gshm_id = shmget(ftok(gShmtok, 32), gSHMSize,IPC_CREAT | 0777); + } - - shm_id = shmget(ftok(shmtok, 32), SHMSize,IPC_CREAT | IPC_EXCL | 0777); - - if(shm_id != -1) { - bartlby_address=shmat(shm_id,NULL,0); + if(gshm_id != -1) { + gBartlby_address=shmat(gshm_id,NULL,0); - shm_hdr=(struct shm_header *)(void *)bartlby_address; - svcmap=(struct service *)(void *)bartlby_address+sizeof(struct shm_header); + gshm_hdr=(struct shm_header *)(void *)gBartlby_address; + gsvcmap=(struct service *)(void *)gBartlby_address+sizeof(struct shm_header); - shm_svc_cnt=GetServiceMap(svcmap, argv[1]); + gshm_svc_cnt=gGetServiceMap(gsvcmap, cfgfile); - shm_hdr->svccount=shm_svc_cnt; + gshm_hdr->svccount=gshm_svc_cnt; - svcmap=bartlby_SHM_ServiceMap(bartlby_address); + gsvcmap=bartlby_SHM_ServiceMap(gBartlby_address); - wrkmap=(struct worker *)(void*)&svcmap[shm_svc_cnt]+20; - shm_wrk_cnt=GetWorkerMap(wrkmap, argv[1]); - shm_hdr->wrkcount=shm_wrk_cnt; + gwrkmap=(struct worker *)(void*)&gsvcmap[gshm_svc_cnt]+20; + gshm_wrk_cnt=gGetWorkerMap(gwrkmap, cfgfile); + gshm_hdr->wrkcount=gshm_wrk_cnt; - dtmap=(struct downtime *)(void *)&wrkmap[shm_wrk_cnt]+20; - shm_dt_cnt=GetDowntimeMap(dtmap, argv[1]); - shm_hdr->dtcount=shm_dt_cnt; + gdtmap=(struct downtime *)(void *)&gwrkmap[gshm_wrk_cnt]+20; + gshm_dt_cnt=gGetDowntimeMap(gdtmap, cfgfile); + gshm_hdr->dtcount=gshm_dt_cnt; - srvmap=(struct server *)(void *)&dtmap[shm_dt_cnt]+20; - shm_srv_cnt=GetServerMap(srvmap, argv[1]); + gsrvmap=(struct server *)(void *)&gdtmap[gshm_dt_cnt]+20; + gshm_srv_cnt=gGetServerMap(gsrvmap, cfgfile); - shm_hdr->srvcount=shm_srv_cnt; + gshm_hdr->srvcount=gshm_srv_cnt; //06.04.24 Init EVENT QUEUE - bartlby_event_init(bartlby_address); - cfg_init_cache(); - bartlby_ext_init(bartlby_address, SOHandle, argv[1]); + bartlby_event_init(gBartlby_address); + bartlby_ext_init(gBartlby_address, gSOHandle, cfgfile); - _log("Workers: %d", shm_hdr->wrkcount); - _log("Downtimes: %d", shm_hdr->dtcount); - _log("Servers: %d", shm_hdr->srvcount); - shm_hdr->current_running=0; - sprintf(shm_hdr->version, "%s-%s (%s)", PROGNAME, VERSION, REL_NAME); + _log("Workers: %d", gshm_hdr->wrkcount); + _log("Downtimes: %d", gshm_hdr->dtcount); + _log("Servers: %d", gshm_hdr->srvcount); + gshm_hdr->current_running=0; + sprintf(gshm_hdr->version, "%s-%s (%s)", PROGNAME, VERSION, REL_NAME); - shm_hdr->do_reload=0; - shm_hdr->last_replication=-1; + gshm_hdr->do_reload=0; + gshm_hdr->last_replication=-1; //shm_hdr->startup_time=time(NULL); - shm_hdr->startup_time=global_startup_time; + if(gReuseSHM != 1) { + gshm_hdr->startup_time=global_startup_time; + } - shm_hdr->sirene_mode=0; //Default disable - shm_hdr->size_of_structs=sizeof(struct shm_header)+sizeof(struct worker)+sizeof(struct service)+sizeof(struct downtime)+sizeof(struct server); - shm_hdr->pstat.sum=0; - shm_hdr->pstat.counter=0; + gshm_hdr->sirene_mode=0; //Default disable + gshm_hdr->size_of_structs=sizeof(struct shm_header)+sizeof(struct worker)+sizeof(struct service)+sizeof(struct downtime)+sizeof(struct server); + gshm_hdr->pstat.sum=0; + gshm_hdr->pstat.counter=0; - if(shm_hdr->wrkcount <= 0) { - _log("Found workers are below zero (%d) maybe your datalib config isnt OK or you havent completed the setup", shm_hdr->wrkcount); - shmdt(bartlby_address); - shm_id = shmget(ftok(shmtok, 32), 0, 0600); - shmctl(shm_id, IPC_RMID, &shm_desc); - break; + if(gshm_hdr->wrkcount <= 0) { + _log("Found workers are below zero (%d) maybe your datalib config isnt OK or you havent completed the setup", gshm_hdr->wrkcount); + shmdt(gBartlby_address); + gshm_id = shmget(ftok(gShmtok, 32), 0, 0600); + shmctl(gshm_id, IPC_RMID, &gshm_desc); + return -1; } - bartlby_SHM_link_services_servers(bartlby_address, argv[1]); + bartlby_SHM_link_services_servers(gBartlby_address, cfgfile); } else { @@ -476,31 +518,120 @@ _log("SHM is already exsisting do a `ipcrm shm SHMID' or something like that"); exit(1); } + + return 0; +} + +int bartlby_go(char * cfgfile) { + int exi_code=0; + + while(exi_code != 1) { - exi_code=schedule_loop(argv[1], bartlby_address, SOHandle); + + exi_code=schedule_loop(cfgfile, gBartlby_address, gSOHandle); _log("Scheduler ended with: %d", exi_code); + + + + //Destroy SHM bartlby_ext_shutdown(exi_code); //write back all services - sched_write_back_all(argv[1], bartlby_address, SOHandle); + sched_write_back_all(cfgfile, gBartlby_address, gSOHandle); - shmdt(bartlby_address); - shm_id = shmget(ftok(shmtok, 32), 0, 0600); - shmctl(shm_id, IPC_RMID, &shm_desc); + shmdt(gBartlby_address); + gshm_id = shmget(ftok(gShmtok, 32), 0, 0600); + shmctl(gshm_id, IPC_RMID, &gshm_desc); + + if(exi_code != 1) { + //re populate SHM called reload *fg* + bartlby_shm_fits(gCfgfile); + if(bartlby_populate_shm(gCfgfile) < 0) { + //in case of zero workers + exit(1); + } + } } + + return 1; +} + + +int main(int argc, char ** argv) { + char * daemon_mode; + + + global_startup_time=time(NULL); + + //parse argv + bartlby_parse_argv(argc, argv); + + + set_cfg(gCfgfile); + cfg_init_cache(); + cfg_fill_with_file(gCfgfile); + + + //handle -d flag ;) + if(gDebug == 1) { + cfg_update_cache("daemon", "false"); + cfg_update_cache("logfile", "/dev/stdout"); + } + + + bartlby_init(); + + bartlby_setuid(); + + //set cfg + + - free(shmtok); - dlclose(SOHandle); + + + - _log("%s Ended(Daemon: %s)", PROGNAME, daemon_mode); + + //get deamon if needed + daemon_mode=getConfigValue("daemon", gCfgfile); + if(daemon_mode == NULL) { + daemon_mode=strdup("false"); + } + if(strcmp(daemon_mode,"true") == 0) { + + bartlby_get_daemon(gCfgfile); + } + + bartlby_pre_init(gCfgfile); + //populate shm + + bartlby_load_shm_stuff(gCfgfile); + + bartlby_shm_fits(gCfgfile); + + if(bartlby_populate_shm(gCfgfile) < 0) { + //in case of zero workers + exit(1); + } + + //start it + bartlby_go(gCfgfile); - //remove PidFile - bartlby_end_clean(argv[1]); + + free(gShmtok); + dlclose(gSOHandle); + _log("%s Ended(Daemon: %s)", PROGNAME, daemon_mode); + bartlby_end_clean(gCfgfile); + free(daemon_mode); - free(cfg_user); - return 1; + +return 1; } + + + + diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_active.c bartlby-core/src/check_active.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_active.c 2006-11-25 02:16:00.000000000 +0100 +++ bartlby-core/src/check_active.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: check_active.c,v 1.1 2006/11/25 01:16:00 hjanuschka Exp $ */ +/* $Id: check_active.c,v 1.3 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,17 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.1 $ +$Revision: 1.3 $ $Source: /cvsroot/bartlby/bartlby-core/src/check_active.c,v $ $Log: check_active.c,v $ +Revision 1.3 2007/02/15 16:25:32 hjanuschka +auto commit + +Revision 1.2 2007/01/27 19:52:13 hjanuschka +auto commit + Revision 1.1 2006/11/25 01:16:00 hjanuschka auto commit @@ -76,7 +82,7 @@ connection_timed_out=0; - if((remote_host = gethostbyname(svc->client_ip)) == 0) { + if((remote_host = gethostbyname(svc->srv->client_ip)) == 0) { sprintf(svc->new_server_text, "%s", DNS_ERROR); svc->current_state=STATE_CRITICAL; @@ -87,7 +93,7 @@ remote_side.sin_family=AF_INET; remote_side.sin_addr.s_addr = htonl(INADDR_ANY); remote_side.sin_addr.s_addr = ((struct in_addr *) (remote_host->h_addr))->s_addr; - remote_side.sin_port=htons(svc->client_port); + remote_side.sin_port=htons(svc->srv->client_port); if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) { @@ -162,6 +168,7 @@ return_buffer[return_bytes] = '\0'; strcat(rmessage, return_buffer); sum_rmessage += return_bytes; + } //_log("ALL: '%s'", rmessage); diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_active_v2.c bartlby-core/src/check_active_v2.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_active_v2.c 2006-12-20 22:28:56.000000000 +0100 +++ bartlby-core/src/check_active_v2.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: check_active_v2.c,v 1.7 2006/12/20 21:28:56 hjanuschka Exp $ */ +/* $Id: check_active_v2.c,v 1.8 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -12,11 +12,14 @@ * ----------------------------------------------------------------------- */ /* based on Ethan gelstad's nrpe: http://nagios.cvs.sourceforge.net/nagios/nrpe/src/check_nrpe.c?view=log -$Revision: 1.7 $ +$Revision: 1.8 $ $Source: /cvsroot/bartlby/bartlby-core/src/check_active_v2.c,v $ $Log: check_active_v2.c,v $ +Revision 1.8 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.7 2006/12/20 21:28:56 hjanuschka performance on large @@ -120,7 +123,7 @@ conn_timedout=0; alarm(svc->service_check_timeout); - result=agent_v2_my_tcp_connect(svc->client_ip,svc->client_port,&sd, svc); + result=agent_v2_my_tcp_connect(svc->srv->client_ip,svc->srv->client_port,&sd, svc); if(conn_timedout == 1) { sprintf(svc->new_server_text, "%s", "timed out"); diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check.c bartlby-core/src/check.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check.c 2006-12-20 22:28:56.000000000 +0100 +++ bartlby-core/src/check.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: check.c,v 1.67 2006/12/20 21:28:56 hjanuschka Exp $ */ +/* $Id: check.c,v 1.68 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,14 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.67 $ +$Revision: 1.68 $ $Source: /cvsroot/bartlby/bartlby-core/src/check.c,v $ $Log: check.c,v $ +Revision 1.68 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.67 2006/12/20 21:28:56 hjanuschka performance on large @@ -345,13 +348,13 @@ svc->service_retain_current=0; svc->last_state=svc->current_state; - _log("@LOG@%d|%d|%s:%d/%s|%s", svc->service_id, svc->current_state, svc->server_name, svc->client_port, svc->service_name, svc->new_server_text); - bartlby_push_event(EVENT_STATUS_CHANGED, "Service-Changed;%d;%s:%d/%s;%d;%s", svc->service_id, svc->server_name, svc->client_port, svc->service_name, svc->current_state, svc->new_server_text); + _log("@LOG@%d|%d|%s:%d/%s|%s", svc->service_id, svc->current_state, svc->srv->server_name, svc->srv->client_port, svc->service_name, svc->new_server_text); + bartlby_push_event(EVENT_STATUS_CHANGED, "Service-Changed;%d;%s:%d/%s;%d;%s", svc->service_id, svc->srv->server_name, svc->srv->client_port, svc->service_name, svc->current_state, svc->new_server_text); bartlby_callback(EXTENSION_CALLBACK_STATE_CHANGED, svc); } if(svc->service_retain_current == svc->service_retain && svc->current_state != svc->notify_last_state) { - bartlby_push_event(EVENT_TRIGGER_PUSHED, "Service-Changed;%d;%s:%d/%s;%d;%s", svc->service_id, svc->server_name, svc->client_port, svc->service_name, svc->current_state, svc->new_server_text); + bartlby_push_event(EVENT_TRIGGER_PUSHED, "Service-Changed;%d;%s:%d/%s;%d;%s", svc->service_id, svc->srv->server_name, svc->srv->client_port, svc->service_name, svc->current_state, svc->new_server_text); if(svc->current_state == STATE_CRITICAL && svc->recovery_outstanding == RECOVERY_DONE) { svc->recovery_outstanding = RECOVERY_OUTSTANDING; @@ -404,7 +407,7 @@ setenv("BARTLBY_CONFIG", cfgfile,1); setenv("BARTLBY_CURR_PLUGIN", svc->plugin,1); - setenv("BARTLBY_CURR_HOST", svc->server_name,1); + setenv("BARTLBY_CURR_HOST", svc->srv->server_name,1); setenv("BARTLBY_CURR_SERVICE", svc->service_name,1); if(bartlby_callback(EXTENSION_CALLBACK_PRE_CHECK, svc) != EXTENSION_OK) { diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_group.c bartlby-core/src/check_group.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_group.c 2006-11-25 02:16:00.000000000 +0100 +++ bartlby-core/src/check_group.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: check_group.c,v 1.1 2006/11/25 01:16:00 hjanuschka Exp $ */ +/* $Id: check_group.c,v 1.2 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,14 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.1 $ +$Revision: 1.2 $ $Source: /cvsroot/bartlby/bartlby-core/src/check_group.c,v $ $Log: check_group.c,v $ +Revision 1.2 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.1 2006/11/25 01:16:00 hjanuschka auto commit @@ -88,7 +91,7 @@ if(svg->current_state == state) { //_log("Service: is not %d\n", svg->current_state ); - sprintf(svc->new_server_text, "%s %s:%d/%s - %d", GROUP_CRITICAL, svg->server_name, svg->client_port, svg->service_name, state); + sprintf(svc->new_server_text, "%s %s:%d/%s - %d", GROUP_CRITICAL, svg->srv->server_name, svg->srv->client_port, svg->service_name, state); svc->current_state=STATE_CRITICAL; return; diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_nrpe.c bartlby-core/src/check_nrpe.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/check_nrpe.c 2006-11-27 22:16:28.000000000 +0100 +++ bartlby-core/src/check_nrpe.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: check_nrpe.c,v 1.2 2006/11/27 21:16:28 hjanuschka Exp $ */ +/* $Id: check_nrpe.c,v 1.3 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * BASED upon the original source of CHECK_NRPE package from nagios: ***************************************************************************************** @@ -33,11 +33,14 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.2 $ +$Revision: 1.3 $ $Source: /cvsroot/bartlby/bartlby-core/src/check_nrpe.c,v $ $Log: check_nrpe.c,v $ +Revision 1.3 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.2 2006/11/27 21:16:28 hjanuschka auto commit @@ -220,7 +223,7 @@ conn_timedout=0; alarm(svc->service_check_timeout); - result=my_tcp_connect(svc->client_ip,svc->client_port,&sd, svc); + result=my_tcp_connect(svc->srv->client_ip,svc->srv->client_port,&sd, svc); if(conn_timedout == 1) { sprintf(svc->new_server_text, "%s", "timed out"); diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/config.c bartlby-core/src/config.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/config.c 2007-01-05 02:49:00.000000000 +0100 +++ bartlby-core/src/config.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: config.c,v 1.10 2007/01/05 01:49:00 hjanuschka Exp $ */ +/* $Id: config.c,v 1.11 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,14 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.10 $ +$Revision: 1.11 $ $Source: /cvsroot/bartlby/bartlby-core/src/config.c,v $ $Log: config.c,v $ +Revision 1.11 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.10 2007/01/05 01:49:00 hjanuschka auto commit @@ -75,6 +78,9 @@ static struct cfg_cache ccache[MAX_CCACHE]; static int cur_el=0; + + + void cfg_init_cache(void) { int x; for(x=0; x= MAX_CCACHE) { @@ -98,16 +130,6 @@ return NULL; } -char * cfg_cache_find(char *k) { - int x; - for(x=0; x #include #include - +#include #include @@ -117,11 +135,124 @@ void set_cfg(char * cfg) { + struct stat cStat; + + if(stat(cfg, &cStat) < 0) { + fprintf(stderr, "Configfile '%s' does not exist\n", cfg); + exit(1); + } sprintf(config_file, "%s", cfg); } - +int service_is_in_time(char * time_plan) { + char * tmp; + char * tmp1; + char * token, *token1; + int rt; + char idx[3]; + char * ttok; + time_t tnow; + struct tm *tmnow; + struct tm fromcheck, tocheck; + int fromts, tots; + char in_or_out; + + int min,hour, min1,hour1; + int cur_ts; + + + rt = -1; + + if(strlen(time_plan) < 5) { + return 1; //if no plan?! always check ;) + } + + + + cur_ts = time(&tnow); + tmnow = localtime(&tnow); + + tmp = strdup(time_plan); + token = strtok(tmp, "|"); + while(token != NULL) { + sprintf(idx, "%c", *token); + if(atoi(idx) == tmnow->tm_wday) { + ttok = token+1; + in_or_out = *ttok; + if(in_or_out == '!') { + rt=1; + } else { + rt=-1; + } + + ttok = token+2; + //now check threw the timeranges + tmp1 = strdup(ttok); + token1=strtok(tmp1, ","); + while(token1 != NULL) { + if(sscanf(token1, "%d:%d-%d:%d", &hour,&min, &hour1, &min1) == 4) { + + fromcheck.tm_sec = 0; + fromcheck.tm_min = min; + fromcheck.tm_hour = hour; + fromcheck.tm_mday = tmnow->tm_mday; + fromcheck.tm_mon = tmnow->tm_mon; + fromcheck.tm_year = tmnow->tm_year; + fromcheck.tm_wday = tmnow->tm_wday; + fromts = mktime(&fromcheck); + + tocheck.tm_sec = 0; + tocheck.tm_min = min1; + tocheck.tm_hour = hour1; + tocheck.tm_mday = tmnow->tm_mday; + tocheck.tm_mon = tmnow->tm_mon; + tocheck.tm_year = tmnow->tm_year; + tocheck.tm_wday = tmnow->tm_wday; + tots = mktime(&tocheck); + + + if(cur_ts >= fromts && cur_ts <= tots) { + if(in_or_out == '=') { + rt = 1; + } else { + + rt = -1; + } + + } + + + + + + } + + + + token1 = strtok(NULL, ","); + } + + free(tmp1); + + + } + /* + if(rt > 0) { + //Someone found;) + break; + } + */ + + token = strtok(NULL, "|"); + + } + + free(tmp); + + + return rt; +} char * bartlby_beauty_state(int status) { @@ -166,12 +297,12 @@ void service_mysql_safe(struct service * svc) { str_mysql_safe(svc->new_server_text); str_mysql_safe(svc->service_name); - str_mysql_safe(svc->server_name); - str_mysql_safe(svc->client_ip); + //str_mysql_safe(svc->srv->server_name); + //str_mysql_safe(svc->srv->client_ip); str_mysql_safe(svc->plugin); str_mysql_safe(svc->plugin_arguments); str_mysql_safe(svc->service_var); - str_mysql_safe(svc->server_icon); + str_mysql_safe(svc->snmp_info.community); str_mysql_safe(svc->snmp_info.objid); @@ -266,12 +397,13 @@ } void bartlby_replace_svc_in_str(char * str, struct service * svc, int max) { - char * human_state, * human_state_last, * clport; + char * human_state, * human_state_last; + char * srv; + - clport=malloc(sizeof(char) * 30); human_state=bartlby_beauty_state(svc->current_state); human_state_last=bartlby_beauty_state(svc->last_state); - sprintf(clport, "%d", svc->client_port); + str_replace(str,"$READABLE_STATE", human_state, max); setenv("READABLE_STATE", human_state, 1); @@ -281,20 +413,21 @@ str_replace(str,"$PROGNAME", PROGNAME, max); setenv("VERSION", VERSION, 1); str_replace(str,"$VERSION", VERSION, max); - setenv("SERVER", svc->server_name, 1); - str_replace(str,"$SERVER", svc->server_name, max); + + setenv("SERVICE", svc->service_name, 1); str_replace(str,"$SERVICE", svc->service_name, max); setenv("MESSAGE", svc->new_server_text, 1); str_replace(str,"$MESSAGE", svc->new_server_text, max); - setenv("CLIENT_IP", svc->client_ip, 1); - str_replace(str,"$CLIENT_IP", svc->client_ip, max); - setenv("CLIENT_PORT", clport, 1); - str_replace(str,"$CLIENT_PORT", clport, max); - + + srv=getenv("BARTLBY_CURR_HOST"); + if(srv != NULL) { + setenv("SERVER", srv, 1); + str_replace(str,"$SERVER", srv, max); + } + - free(clport); free(human_state_last); free(human_state); } diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/libs/mysql.c bartlby-core/src/libs/mysql.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/libs/mysql.c 2007-01-05 02:49:00.000000000 +0100 +++ bartlby-core/src/libs/mysql.c 2007-02-15 21:46:38.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: mysql.c,v 1.54 2007/01/05 01:49:00 hjanuschka Exp $ */ +/* $Id: mysql.c,v 1.61 2007/02/15 20:46:38 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,29 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.54 $ +$Revision: 1.61 $ $Source: /cvsroot/bartlby/bartlby-core/src/libs/mysql.c,v $ $Log: mysql.c,v $ +Revision 1.61 2007/02/15 20:46:38 hjanuschka +auto commit + +Revision 1.60 2007/02/15 16:25:32 hjanuschka +auto commit + +Revision 1.59 2007/01/29 04:04:04 hjanuschka +auto commit + +Revision 1.58 2007/01/27 19:52:13 hjanuschka +auto commit + +Revision 1.57 2007/01/27 02:33:32 hjanuschka +auto commit + +Revision 1.55 2007/01/26 23:20:13 hjanuschka +auto commit + Revision 1.54 2007/01/05 01:49:00 hjanuschka auto commit @@ -263,16 +281,16 @@ #define SERVER_MAP_SELECTOR "select server_id, server_ip, server_name, server_ico, server_enabled, server_port, server_dead, server_flap_seconds, server_notify from servers" -#define SELECTOR "select svc.service_id, svc.service_name, svc.service_state, srv.server_name, srv.server_id, srv.server_port, srv.server_ip, svc.service_plugin, svc.service_args, UNIX_TIMESTAMP(svc.service_last_check), svc.service_interval, svc.service_text, HOUR(svc.service_time_from), MINUTE(svc.service_time_from), HOUR(svc.service_time_to), MINUTE(svc.service_time_to), svc.service_notify, svc.service_type, svc.service_var, svc.service_passive_timeout,service_active, svc.service_check_timeout, srv.server_ico, svc.service_ack, svc.service_retain, svc.service_snmp_community, svc.service_snmp_objid, svc.service_snmp_version, svc.service_snmp_warning, svc.service_snmp_critical, svc.service_snmp_type, svc.flap_seconds from services svc, servers srv where svc.server_id=srv.server_id ORDER BY RAND()" -#define WORKER_SELECTOR "select worker_mail, worker_icq, 'removed' ,notify_levels, worker_active, worker_name, worker_id, password, enabled_triggers, escalation_limit, escalation_minutes from workers" +#define SELECTOR "select svc.service_id, svc.service_name, svc.service_state, srv.server_name, srv.server_id, srv.server_port, srv.server_ip, svc.service_plugin, svc.service_args, UNIX_TIMESTAMP(svc.service_last_check), svc.service_interval, svc.service_text, 'a', 'a', 'a','a', svc.service_notify, svc.service_type, svc.service_var, svc.service_passive_timeout,service_active, svc.service_check_timeout, srv.server_ico, svc.service_ack, svc.service_retain, svc.service_snmp_community, svc.service_snmp_objid, svc.service_snmp_version, svc.service_snmp_warning, svc.service_snmp_critical, svc.service_snmp_type, svc.flap_seconds, svc.service_exec_plan from services svc, servers srv where svc.server_id=srv.server_id ORDER BY RAND()" +#define WORKER_SELECTOR "select worker_mail, worker_icq, 'removed' ,notify_levels, worker_active, worker_name, worker_id, password, enabled_triggers, escalation_limit, escalation_minutes, notify_plan from workers" #define SERVICE_UPDATE_TEXT "update services set service_last_check=FROM_UNIXTIME(%d), service_text='%s', service_state=%d where service_id=%d" -#define ADD_SERVER "insert into servers (server_name,server_ip,server_port, server_ico, server_enabled, server_notify, server_flap_seconds) VALUES('%s','%s', '%d', '%s', '%d', '%d', '%d')" +#define ADD_SERVER "insert into servers (server_name,server_ip,server_port, server_ico, server_enabled, server_notify, server_flap_seconds, server_dead) VALUES('%s','%s', '%d', '%s', '%d', '%d', '%d', '%d')" #define DELETE_SERVER "delete from servers where server_id=%d" -#define UPDATE_SERVER "update servers set server_name='%s',server_ip='%s',server_port=%d, server_ico='%s', server_enabled='%d', server_notify='%d', server_flap_seconds='%d' where server_id=%d" -#define SERVER_SELECTOR "select server_name, server_ip, server_port, server_ico, server_enabled, server_notify, server_flap_seconds from servers where server_id=%d" +#define UPDATE_SERVER "update servers set server_name='%s',server_ip='%s',server_port=%d, server_ico='%s', server_enabled='%d', server_notify='%d', server_flap_seconds='%d', server_dead='%d' where server_id=%d" +#define SERVER_SELECTOR "select server_name, server_ip, server_port, server_ico, server_enabled, server_notify, server_flap_seconds, server_dead from servers where server_id=%d" #define SERVER_CHANGE_ID "update servers set server_id=%d where server_id=%d" #define SERVER_CHANGE_SERVICES "update services set server_id=%d where server_id=%d" @@ -280,20 +298,20 @@ #define DELETE_SERVICE_BY_SERVER "delete from services where server_id=%d" -#define ADD_SERVICE "insert into services(server_id, service_plugin, service_name, service_state,service_text, service_args,service_notify, service_active,service_time_from,service_time_to, service_interval, service_type,service_var,service_passive_timeout,service_check_timeout, service_ack, service_retain, service_snmp_community, service_snmp_objid, service_snmp_version, service_snmp_warning, service_snmp_critical, service_snmp_type, flap_seconds) values(%d,'%s','%s',4, 'Newly created', '%s',%d,%d,'%s','%s',%d,%d,'%s',%d, %d, %d, %d, '%s', '%s', %d, %d, %d, %d, %d)" +#define ADD_SERVICE "insert into services(server_id, service_plugin, service_name, service_state,service_text, service_args,service_notify, service_active, service_interval, service_type,service_var,service_passive_timeout,service_check_timeout, service_ack, service_retain, service_snmp_community, service_snmp_objid, service_snmp_version, service_snmp_warning, service_snmp_critical, service_snmp_type, flap_seconds, service_exec_plan) values(%d,'%s','%s',4, 'Newly created', '%s',%d,%d,%d,%d,'%s',%d, %d, %d, %d, '%s', '%s', %d, %d, %d, %d, %d, '%s')" #define DELETE_SERVICE "delete from services where service_id=%d" #define SERVICE_CHANGE_ID "update services set service_id=%d where service_id=%d" -#define UPDATE_SERVICE "update services set service_type=%d,service_name='%s',server_id=%d,service_time_from='%s',service_time_to='%s',service_interval = %d, service_plugin='%s',service_args='%s',service_passive_timeout=%d, service_var='%s',service_check_timeout=%d, service_ack='%d', service_retain='%d', service_snmp_community='%s', service_snmp_objid='%s', service_snmp_version='%d', service_snmp_warning='%d', service_snmp_critical='%d', service_snmp_type='%d', service_notify='%d', service_active='%d', flap_seconds='%d' where service_id=%d" -#define SERVICE_SELECTOR "select svc.service_id, svc.service_name, svc.service_state, srv.server_name, srv.server_id, srv.server_port, srv.server_ip, svc.service_plugin, svc.service_args, UNIX_TIMESTAMP(svc.service_last_check), svc.service_interval, svc.service_text, HOUR(svc.service_time_from), MINUTE(svc.service_time_from), HOUR(svc.service_time_to), MINUTE(svc.service_time_to), svc.service_notify, svc.service_type, svc.service_var, svc.service_passive_timeout, svc.service_active,svc.service_check_timeout, svc.service_ack, svc.service_retain, svc.service_snmp_community, svc.service_snmp_objid, svc.service_snmp_version, svc.service_snmp_warning, svc.service_snmp_critical, svc.service_snmp_type, srv.server_ico, svc.flap_seconds from services svc, servers srv where svc.server_id=srv.server_id and svc.service_id=%d" +#define UPDATE_SERVICE "update services set service_type=%d,service_name='%s',server_id=%d,service_interval = %d, service_plugin='%s',service_args='%s',service_passive_timeout=%d, service_var='%s',service_check_timeout=%d, service_ack='%d', service_retain='%d', service_snmp_community='%s', service_snmp_objid='%s', service_snmp_version='%d', service_snmp_warning='%d', service_snmp_critical='%d', service_snmp_type='%d', service_notify='%d', service_active='%d', flap_seconds='%d', service_exec_plan='%s' where service_id=%d" +#define SERVICE_SELECTOR "select svc.service_id, svc.service_name, svc.service_state, srv.server_name, srv.server_id, srv.server_port, srv.server_ip, svc.service_plugin, svc.service_args, UNIX_TIMESTAMP(svc.service_last_check), svc.service_interval, svc.service_text, 'a', 'a','a', 'a', svc.service_notify, svc.service_type, svc.service_var, svc.service_passive_timeout, svc.service_active,svc.service_check_timeout, svc.service_ack, svc.service_retain, svc.service_snmp_community, svc.service_snmp_objid, svc.service_snmp_version, svc.service_snmp_warning, svc.service_snmp_critical, svc.service_snmp_type, srv.server_ico, svc.flap_seconds, svc.service_exec_plan from services svc, servers srv where svc.server_id=srv.server_id and svc.service_id=%d" -#define ADD_WORKER "INSERT INTO workers(worker_mail, worker_icq, notify_levels, worker_active, worker_name, password,enabled_triggers, escalation_limit, escalation_minutes) VALUES('%s', '%s', '%s', %d, '%s', '%s', '%s', '%d', '%d')" +#define ADD_WORKER "INSERT INTO workers(worker_mail, worker_icq, notify_levels, worker_active, worker_name, password,enabled_triggers, escalation_limit, escalation_minutes, notify_plan) VALUES('%s', '%s', '%s', %d, '%s', '%s', '%s', '%d', '%d', '%s')" #define DELETE_WORKER "delete from workers where worker_id=%d" -#define UPDATE_WORKER "update workers set worker_mail='%s', worker_icq='%s', notify_levels='%s', worker_active=%d, worker_name='%s', password='%s', enabled_triggers='%s', escalation_limit='%d', escalation_minutes='%d' WHERE worker_id=%d" -#define WORKER_SEL "select worker_mail, worker_icq, enabled_services,notify_levels, worker_active, worker_name, worker_id, password, enabled_triggers, escalation_limit, escalation_minutes from workers where worker_id=%d" +#define UPDATE_WORKER "update workers set worker_mail='%s', worker_icq='%s', notify_levels='%s', worker_active=%d, worker_name='%s', password='%s', enabled_triggers='%s', escalation_limit='%d', escalation_minutes='%d', notify_plan='%s' WHERE worker_id=%d" +#define WORKER_SEL "select worker_mail, worker_icq, enabled_services,notify_levels, worker_active, worker_name, worker_id, password, enabled_triggers, escalation_limit, escalation_minutes, notify_plan from workers where worker_id=%d" #define WORKER_CHANGE_ID "update workers set worker_id=%d where worker_id=%d" @@ -942,6 +960,11 @@ } else { svc->escalation_minutes=2; } + if(row[11] != NULL) { + sprintf(svc->notify_plan, "%s", row[11]); + } else { + sprintf(svc->notify_plan, " "); + } tmprc=0; printf("limit: %d, minutes: %d", svc->escalation_limit, svc->escalation_minutes); } else { @@ -985,7 +1008,7 @@ sqlupd=malloc(sizeof(char)*(strlen(UPDATE_WORKER)+sizeof(struct worker)+200)); - sprintf(sqlupd, UPDATE_WORKER, svc->mail, svc->icq, svc->notify_levels, svc->active, svc->name,svc->password,svc->enabled_triggers,svc->escalation_limit, svc->escalation_minutes, svc->worker_id); + sprintf(sqlupd, UPDATE_WORKER, svc->mail, svc->icq, svc->notify_levels, svc->active, svc->name,svc->password,svc->enabled_triggers,svc->escalation_limit, svc->escalation_minutes, svc->notify_plan, svc->worker_id); @@ -1083,7 +1106,7 @@ sqlupd=malloc(sizeof(char)*(strlen(ADD_WORKER)+sizeof(struct worker)+40)); - sprintf(sqlupd, ADD_WORKER, svc->mail, svc->icq, svc->notify_levels, svc->active, svc->name, svc->password, svc->enabled_triggers, svc->escalation_limit, svc->escalation_minutes); + sprintf(sqlupd, ADD_WORKER, svc->mail, svc->icq, svc->notify_levels, svc->active, svc->name, svc->password, svc->enabled_triggers, svc->escalation_limit, svc->escalation_minutes, svc->notify_plan); @@ -1111,6 +1134,7 @@ MYSQL_ROW row; MYSQL_RES *res; char * sqlupd; + struct server * n_srv; int tmprc; @@ -1148,6 +1172,8 @@ svc->last_state=atoi(row[2]); svc->current_state=atoi(row[2]); + n_srv=malloc(sizeof(struct server)); + if(row[1] != NULL) { //svc->service_name=malloc(strlen(row[1])*sizeof(char)+2); sprintf(svc->service_name, "%s", row[1]); @@ -1158,27 +1184,34 @@ } + if(row[3] != NULL) { //svc->server_name=malloc(strlen(row[3])*sizeof(char)+2); - sprintf(svc->server_name, "%s", row[3]); + sprintf(n_srv->server_name, "%s", row[3]); } else { // svc->server_name=NULL; - sprintf(svc->server_name, "(null)"); + sprintf(n_srv->server_name, "(null)"); } if(row[6] != NULL) { //svc->client_ip=malloc(strlen(row[6])*sizeof(char)+2); - sprintf(svc->client_ip, "%s", row[6]); + sprintf(n_srv->client_ip, "%s", row[6]); } else { - sprintf(svc->client_ip, "(null)"); + sprintf(n_srv->client_ip, "(null)"); } + if(row[30] != NULL) { + snprintf(n_srv->server_icon, 1000, "%s", row[30]); + } else { + sprintf(n_srv->server_icon, "(null)"); + } + n_srv->client_port=atoi(row[5]); + svc->srv=n_srv; - svc->client_port=atoi(row[5]); // svc->new_server_text=malloc(strlen(row[11])*sizeof(char)+2); @@ -1207,18 +1240,20 @@ sprintf(svc->plugin_arguments, "(null)"); } - + svc->lcheck.tv_usec=0; + svc->lcheck.tv_sec=atoi(row[9]); svc->last_check=atoi(row[9]); svc->check_interval=atoi(row[10]); - svc->check_interval_original=atoi(row[10]); + + svc->check_interval_original=atoi(row[10])*1000; - svc->hour_from=atoi(row[12]); - svc->min_from=atoi(row[13]); + //svc->hour_from=atoi(row[12]); + //svc->min_from=atoi(row[13]); - svc->hour_to=atoi(row[14]); - svc->min_to=atoi(row[15]); + //svc->hour_to=atoi(row[14]); + //svc->min_to=atoi(row[15]); svc->notify_enabled=atoi(row[16]); //svc->last_notify_send=time(NULL); @@ -1264,13 +1299,15 @@ svc->snmp_info.crit = atoi(row[28]); svc->snmp_info.type = atoi(row[29]); - if(row[30] != NULL) { - snprintf(svc->server_icon, 1000, "%s", row[30]); - } else { - sprintf(svc->server_icon, "(null)"); - } svc->flap_seconds = atoi(row[31]); + if(row[32] != NULL) { + snprintf(svc->service_exec_plan, 2047, "%s", row[32]); + } else { + sprintf(svc->service_exec_plan, " "); + } + + tmprc=0; } else { tmprc=-1; @@ -1301,14 +1338,7 @@ char * sqlupd; - char * SVC_TIME_FROM, * SVC_TIME_TO; - - - SVC_TIME_FROM=malloc(sizeof(char)*strlen("00:00:00 ")); - SVC_TIME_TO=malloc(sizeof(char)*strlen("00:00:00 ")); - sprintf(SVC_TIME_FROM,"%02d:%02d:00", svc->hour_from, svc->min_from); - sprintf(SVC_TIME_TO,"%02d:%02d:00", svc->hour_to, svc->min_to); - + char * mysql_host = getConfigValue("mysql_host", config); char * mysql_user = getConfigValue("mysql_user", config); char * mysql_pw = getConfigValue("mysql_pw", config); @@ -1345,8 +1375,6 @@ svc->service_type, svc->service_name, svc->server_id, - SVC_TIME_FROM, - SVC_TIME_TO, svc->check_interval, svc->plugin, svc->plugin_arguments, @@ -1364,6 +1392,7 @@ svc->notify_enabled, svc->service_active, svc->flap_seconds, + svc->service_exec_plan, svc->service_id ); @@ -1382,8 +1411,7 @@ free(mysql_user); free(mysql_pw); free(mysql_db); - free(SVC_TIME_FROM); - free(SVC_TIME_TO); + return rtc; } @@ -1449,7 +1477,7 @@ int rtc; char * sqlupd; - char * SVC_TIME_FROM, * SVC_TIME_TO; + char * mysql_host = getConfigValue("mysql_host", config); @@ -1460,12 +1488,6 @@ service_mysql_safe(svc); - SVC_TIME_FROM=malloc(sizeof(char)*strlen("00:00:00 ")); - SVC_TIME_TO=malloc(sizeof(char)*strlen("00:00:00 ")); - sprintf(SVC_TIME_FROM,"%d:%d:00", svc->hour_from, svc->min_from); - sprintf(SVC_TIME_TO,"%d:%d:00", svc->hour_to, svc->min_to); - - mysql=mysql_init(NULL); CHK_ERR(mysql); mysql=mysql_real_connect(mysql, mysql_host, mysql_user, mysql_pw, NULL, 0, NULL, 0); @@ -1510,8 +1532,6 @@ svc->plugin_arguments, svc->notify_enabled, svc->service_active, - SVC_TIME_FROM, - SVC_TIME_TO, svc->check_interval, svc->service_type, svc->service_var, @@ -1525,7 +1545,8 @@ svc->snmp_info.warn, svc->snmp_info.crit, svc->snmp_info.type, - svc->flap_seconds + svc->flap_seconds, + svc->service_exec_plan ); //Log("dbg", sqlupd); @@ -1545,8 +1566,7 @@ free(mysql_user); free(mysql_pw); free(mysql_db); - free(SVC_TIME_FROM); - free(SVC_TIME_TO); + return rtc; } @@ -1609,9 +1629,11 @@ } else { sprintf(svc->server_icon, "(null)"); } + svc->server_enabled=atoi(row[4]); svc->server_notify=atoi(row[5]); svc->server_flap_seconds=atoi(row[6]); + svc->server_dead=atoi(row[7]); tmprc=0; } else { @@ -1660,7 +1682,7 @@ sqlupd=malloc(sizeof(char)*(strlen(UPDATE_SERVER)+strlen(svc->server_name)+strlen(svc->client_ip)+20+strlen(svc->server_icon))); - sprintf(sqlupd, UPDATE_SERVER, svc->server_name, svc->client_ip, svc->client_port,svc->server_icon,svc->server_enabled, svc->server_notify, svc->server_flap_seconds, svc->server_id); + sprintf(sqlupd, UPDATE_SERVER, svc->server_name, svc->client_ip, svc->client_port,svc->server_icon,svc->server_enabled, svc->server_notify, svc->server_flap_seconds,svc->server_dead, svc->server_id); //Log("dbg", sqlupd); @@ -1766,7 +1788,7 @@ sqlupd=malloc(sizeof(char)*(strlen(ADD_SERVER)+strlen(svc->server_name)+strlen(svc->client_ip)+20+strlen(svc->server_icon))); - sprintf(sqlupd, ADD_SERVER, svc->server_name, svc->client_ip, svc->client_port, svc->server_icon, svc->server_enabled, svc->server_notify, svc->server_flap_seconds); + sprintf(sqlupd, ADD_SERVER, svc->server_name, svc->client_ip, svc->client_port, svc->server_icon, svc->server_enabled, svc->server_notify, svc->server_flap_seconds, svc->server_dead); //Log("dbg", sqlupd); @@ -1987,6 +2009,12 @@ } else { svcs[i].escalation_minutes = 2; } + if(row[11] != NULL) { + sprintf(svcs[i].notify_plan, "%s", row[11]); + + } else { + sprintf(svcs[i].notify_plan, " "); + } //_log("%d escal", svcs[i].escalation_limit); svcs[i].escalation_count=0; svcs[i].escalation_time=time(NULL); @@ -2061,27 +2089,6 @@ } - if(row[3] != NULL) { - //svcs[i].server_name=malloc(strlen(row[3])*sizeof(char)+2); - sprintf(svcs[i].server_name, "%s", row[3]); - - } else { -// svcs[i].server_name=NULL; - sprintf(svcs[i].server_name, "(null)"); - } - - - if(row[6] != NULL) { - //svcs[i].client_ip=malloc(strlen(row[6])*sizeof(char)+2); - sprintf(svcs[i].client_ip, "%s", row[6]); - - } else { - - sprintf(svcs[i].client_ip, "(null)"); - } - - - svcs[i].client_port=atoi(row[5]); // svcs[i].new_server_text=malloc(strlen(row[11])*sizeof(char)+2); @@ -2112,11 +2119,13 @@ //svcs[i].last_check=time(NULL)+(i*2); - + + svcs[i].lcheck.tv_usec=0; + svcs[i].lcheck.tv_sec=atoi(row[9]); svcs[i].last_check=atoi(row[9]); svcs[i].check_interval=atoi(row[10]); - svcs[i].check_interval_original=atoi(row[10]); + svcs[i].check_interval_original=atoi(row[10])*1000; /*if(i > POS2_QUEUER_THREADS*POS2_QUEUER_THREADS*POS2_QUEUER_THREADS) { ht += 10; @@ -2125,11 +2134,11 @@ }*/ - svcs[i].hour_from=atoi(row[12]); - svcs[i].min_from=atoi(row[13]); + //svcs[i].hour_from=atoi(row[12]); + //svcs[i].min_from=atoi(row[13]); - svcs[i].hour_to=atoi(row[14]); - svcs[i].min_to=atoi(row[15]); + //svcs[i].hour_to=atoi(row[14]); + //svcs[i].min_to=atoi(row[15]); svcs[i].notify_enabled=atoi(row[16]); svcs[i].last_notify_send=time(NULL); @@ -2149,11 +2158,7 @@ svcs[i].service_passive_timeout=atoi(row[19]); svcs[i].service_active=atoi(row[20]); svcs[i].service_check_timeout=atoi(row[21]); - if(row[22] != NULL) { - sprintf(svcs[i].server_icon, "%s", row[22]); - } else { - sprintf(svcs[i].server_icon, "(null)"); - } + if(row[23] != NULL) { svcs[i].service_ack = atoi(row[23]); @@ -2209,6 +2214,12 @@ svcs[i].flap_seconds=atoi(row[31]); + if(row[32] != NULL) { + snprintf(svcs[i].service_exec_plan, 2047, "%s", row[32]); + } else { + sprintf(svcs[i].service_exec_plan, " "); + } + bartlby_replace_svc_in_str(svcs[i].plugin_arguments, &svcs[i], 2048); i++; diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/sched.c bartlby-core/src/sched.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/sched.c 2007-01-05 02:49:00.000000000 +0100 +++ bartlby-core/src/sched.c 2007-02-16 22:50:00.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: sched.c,v 1.65 2007/01/05 01:49:00 hjanuschka Exp $ */ +/* $Id: sched.c,v 1.78 2007/02/16 21:50:00 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,35 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.65 $ +$Revision: 1.78 $ $Source: /cvsroot/bartlby/bartlby-core/src/sched.c,v $ $Log: sched.c,v $ +Revision 1.78 2007/02/16 21:50:00 hjanuschka +auto commit + +Revision 1.76 2007/02/15 20:46:38 hjanuschka +auto commit + +Revision 1.75 2007/02/15 16:25:32 hjanuschka +auto commit + +Revision 1.74 2007/02/02 20:56:10 hjanuschka +auto commit + +Revision 1.73 2007/01/29 16:11:09 hjanuschka +auto commit + +Revision 1.70 2007/01/27 19:52:13 hjanuschka +auto commit + +Revision 1.67 2007/01/26 23:20:13 hjanuschka +auto commit + +Revision 1.66 2007/01/24 10:33:44 hjanuschka +*** empty log message *** + Revision 1.65 2007/01/05 01:49:00 hjanuschka auto commit @@ -278,6 +302,7 @@ char * gConfig; +int g_micros_before_after_check=700; int shortest_intervall; @@ -298,6 +323,16 @@ //signal(SIGINT, catch_signal); } + if(signum == SIGUSR2) { + gshm_hdr->do_reload=1; + sig_pid=getpid(); + if(sig_pid != sched_pid) { + kill(sched_pid, SIGUSR2); //notify scheduler + exit(1); + + } + } + } void sched_write_back_all(char * cfgfile, void * shm_addr, void * SOHandle) { @@ -391,14 +426,14 @@ } else { //_log("@KILL@Killing runaaway process: %s:%d/%s %d (done)",svc->process.pid); - _log("@KILL@%d|%d|%s:%d/%s|Killing process with pid: %d", svc->service_id, svc->current_state, svc->server_name, svc->client_port, svc->service_name, svc->process.pid); + _log("@KILL@%d|%d|%s:%d/%s|Killing process with pid: %d", svc->service_id, svc->current_state, svc->srv->server_name, svc->srv->client_port, svc->service_name, svc->process.pid); } sprintf(svc->new_server_text, "%s", "in-core time out"); svc->current_state=STATE_CRITICAL; rnd_intv=1+(rand() % 10); - svc->check_interval += rnd_intv; + svc->check_interval_original += rnd_intv; _log("bumped intervall: %d", rnd_intv); bartlby_fin_service(svc,SOHandle,shm_addr,cfg); @@ -412,27 +447,70 @@ } +int sched_is_server_dead(struct service * svc) { + int rt; + rt = 1; + struct service * dm, * d1; + int rr; + + if(svc->srv->server_dead != 0) { + dm = svc->srv->dead_marker; + rr = 0; + while(dm != NULL) { + + //if the alive indicator is the service it self break out!! in recursion 1 this means it will be checked + if(dm->service_id == svc->service_id) { + break; + } + + + + //if the current alive-indicator is critical mark as dead and break out + if(dm->current_state == STATE_CRITICAL && dm->service_retain_current >= dm->service_retain) { + //_log(" IS BROKEN"); + rt = -1; + break; + } + + //if the next server has a dead marker and is not itself, fetch next + if(dm->srv->server_dead != 0 && dm->service_id != dm->srv->server_dead) { + d1 = dm->srv->dead_marker; + + } else { + d1 = NULL; + } + + dm=d1; + rr++; + + } + } + + return rt; +} int sched_check_waiting(void * shm_addr, struct service * svc, char * cfg, void * SOHandle, int sched_pause) { int cur_time; int my_diff; int kill_diff; - time_t tnow; - struct tm *tmnow; + struct timeval cur_tv; //just to be sure + usleep(g_micros_before_after_check); cur_time=time(NULL); - - time(&tnow); - tmnow = localtime(&tnow); - my_diff=cur_time - svc->last_check; - - //_log("intervall: %d, my_diff: %d",svc->check_interval, my_diff); - if((svc->check_interval-my_diff) < shortest_intervall && svc->service_active == 1 && svc->service_type != SVC_TYPE_PASSIVE && svc->srv->server_enabled != 0) { - shortest_intervall=(svc->check_interval-my_diff); + gettimeofday(&cur_tv, NULL); + + + my_diff=bartlby_milli_timediff(cur_tv, svc->lcheck); + + + + //_log("intervall: %d, my_diff: %d",svc->check_interval_original, my_diff); + if((svc->check_interval_original-my_diff) < shortest_intervall && svc->service_active == 1 && svc->srv->server_enabled != 0) { + shortest_intervall=(svc->check_interval_original-my_diff); } @@ -440,8 +518,8 @@ if(sched_pause >= 0) { if(svc->do_force == 1) { svc->do_force=0; //dont force again - //_log("Force: %s:%d/%s", svc->server_name, svc->client_port, svc->service_name); - _log("@FORCE@%d|%d|%d|||%s:%d/%s|Force check", svc->service_id, svc->last_state ,svc->current_state, svc->server_name, svc->client_port, svc->service_name); + //_log("Force: %s:%d/%s", svc->srv->server_name, svc->srv->client_port, svc->service_name); + _log("@FORCE@%d|%d|%d|||%s:%d/%s|Force check", svc->service_id, svc->last_state ,svc->current_state, svc->srv->server_name, svc->srv->client_port, svc->service_name); return 1; } } @@ -451,14 +529,19 @@ return -1; //Dont sched this } - if(svc->srv->server_enabled == 0 || svc->srv->server_dead == 1) { + svc->is_server_dead=sched_is_server_dead(svc); + if(svc->is_server_dead < 0) { + return -1; + } + + if(svc->srv->server_enabled == 0) { return -1; } if(svc->service_active == 1) { - if(tmnow->tm_hour >= svc->hour_from && tmnow->tm_hour <= svc->hour_to && tmnow->tm_min >= svc->min_from && tmnow->tm_min <= svc->min_to) { + if(service_is_in_time(svc->service_exec_plan) > 0) { //Time Range matched ;) - if(my_diff >= svc->check_interval) { + if(my_diff >= svc->check_interval_original) { //diff is higher if(bartlby_is_in_downtime(shm_addr, svc) > 0) { //not downtime'd @@ -552,32 +635,7 @@ } -void sched_optimize_intervall(struct service * svc, char * cfgfile) { - //get new intervall ;) - int avg_delay; - int new_delay; - - if(svc->delay_time.counter <= 0 || svc->delay_time.sum <= 0) { - return; - } - avg_delay = svc->delay_time.sum / svc->delay_time.counter; - - //if we would run too fast back to start! - - - if(avg_delay > 0) { - new_delay = svc->check_interval_original + (avg_delay/2); - if(new_delay > 0) { - svc->check_interval=new_delay; - } - } else { - //if delay is zero back to start - svc->check_interval = svc->check_interval_original; - } - - - -} + void sched_do_now(struct service * svc, char * cfgfile , void * shm_addr, void * SOHandle) { @@ -662,8 +720,8 @@ d2 = s2->svc->delay_time.sum / s2->svc->delay_time.counter; */ - d1 = s1->svc->last_check + s1->svc->check_interval; - d2 = s2->svc->last_check + s2->svc->check_interval; + d1 = s1->svc->last_check + s1->svc->check_interval_original/1000; + d2 = s2->svc->last_check + s2->svc->check_interval_original/1000; if(d1 < d2) return -1; @@ -684,6 +742,7 @@ int round_start, round_visitors; char * cfg_sched_pause; + char * cfg_g_micros_before_after_check; int sched_pause; @@ -742,6 +801,7 @@ signal(SIGINT, catch_signal); signal(SIGUSR1, catch_signal); + signal(SIGUSR2, catch_signal); //signal(SIGCHLD, sched_reaper); services=bartlby_SHM_ServiceMap(shm_addr); @@ -761,6 +821,14 @@ _log("info: sched_pause really low should'nt be less than 1 milliseconds defaulting to it: %d", sched_pause); } } + cfg_g_micros_before_after_check = getConfigValue("sched_micros_before_after_check", cfgfile); + if(cfg_g_micros_before_after_check == NULL) { + _log("HINT: to tune performance see 'sched_micros_before_after_check' defaults to 700"); + } else { + g_micros_before_after_check=atoi(cfg_g_micros_before_after_check); + _log("micros_before_after=%d", g_micros_before_after_check); + free(cfg_g_micros_before_after_check); + } //Make a second sortable array for(x=0; xsvccount; x++) { @@ -806,7 +874,7 @@ } - shortest_intervall=3600; + shortest_intervall=10; for(x=0; xsvccount; x++) { @@ -833,9 +901,6 @@ // service check has delayed //_log("ct: %d, e: %d", ct, expt); ssort[x].svc->delay_time.sum += ct - expt; - - - //sched_optimize_intervall(ssort[x].svc, cfgfile); } @@ -845,10 +910,15 @@ //WTF? if(ssort[x].svc->service_type != SVC_TYPE_PASSIVE) { ssort[x].svc->last_check=time(NULL); + gettimeofday(&ssort[x].svc->lcheck, NULL); + } else { + gettimeofday(&ssort[x].svc->lcheck, NULL); } sched_run_check(ssort[x].svc, cfgfile, shm_addr, SOHandle); + usleep(g_micros_before_after_check); + gettimeofday(&run_c_end,NULL); //_log("took: %d ms", bartlby_milli_timediff(run_c_end,run_c_start)); @@ -874,7 +944,7 @@ usleep(sched_pause); if(shortest_intervall > 1) { - sleep(shortest_intervall-1); + usleep((shortest_intervall-1)*1000); } diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/shm.c bartlby-core/src/shm.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/shm.c 2007-01-05 02:49:00.000000000 +0100 +++ bartlby-core/src/shm.c 2007-02-15 21:46:38.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: shm.c,v 1.8 2007/01/05 01:49:00 hjanuschka Exp $ */ +/* $Id: shm.c,v 1.10 2007/02/15 20:46:38 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,17 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.8 $ +$Revision: 1.10 $ $Source: /cvsroot/bartlby/bartlby-core/src/shm.c,v $ $Log: shm.c,v $ +Revision 1.10 2007/02/15 20:46:38 hjanuschka +auto commit + +Revision 1.9 2007/01/29 04:04:04 hjanuschka +auto commit + Revision 1.8 2007/01/05 01:49:00 hjanuschka auto commit @@ -58,6 +64,7 @@ struct service * svcmap; int x; int y; + int marker_found; hdr=bartlby_SHM_GetHDR(shm_addr); @@ -70,10 +77,34 @@ //_log("linking: %s -> %s", svcmap[x].service_name, srvmap[y].server_name); svcmap[x].srv=&srvmap[y]; svcmap[x].srv_place=y; + svcmap[x].check_interval_original += 1+(int) (500.0*rand()/(RAND_MAX+1.0)); + + + } - } } } + for(y=0; ysrvcount; y++) { + marker_found = 0; + srvmap[y].dead_marker = NULL; + if(srvmap[y].server_dead != 0) { + + for(x=0; xsvccount; x++) { + if(svcmap[x].service_id == srvmap[y].server_dead) { + srvmap[y].dead_marker = &svcmap[x]; + marker_found = 1; + } + } + + } + if(marker_found == 0) { + + if(srvmap[y].server_dead != 0) { + _log("Service assigned as a alive-marker not found service_id: %d", srvmap[y].server_dead); + } + } + } + _log("linked services with servers!"); } diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/snmp.c bartlby-core/src/snmp.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/snmp.c 2006-05-24 15:07:39.000000000 +0200 +++ bartlby-core/src/snmp.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: snmp.c,v 1.4 2006/05/24 13:07:39 hjanuschka Exp $ */ +/* $Id: snmp.c,v 1.5 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,14 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.4 $ +$Revision: 1.5 $ $Source: /cvsroot/bartlby/bartlby-core/src/snmp.c,v $ $Log: snmp.c,v $ +Revision 1.5 2007/02/15 16:25:32 hjanuschka +auto commit + Revision 1.4 2006/05/24 13:07:39 hjanuschka NRPE support (--enable-nrpe) @@ -54,7 +57,7 @@ init_snmp("snmpapp"); snmp_sess_init( &session ); - session.peername = strdup(svc->client_ip); + session.peername = strdup(svc->srv->client_ip); if(svc->snmp_info.version == 1) { session.version = SNMP_VERSION_1; } else if(svc->snmp_info.version == 2) { diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/tools/portier.c bartlby-core/src/tools/portier.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/tools/portier.c 2006-12-09 13:05:45.000000000 +0100 +++ bartlby-core/src/tools/portier.c 2007-03-23 18:26:43.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: portier.c,v 1.7 2006/12/09 12:05:45 hjanuschka Exp $ */ +/* $Id: portier.c,v 1.15 2007/03/23 17:26:43 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,29 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.7 $ +$Revision: 1.15 $ $Source: /cvsroot/bartlby/bartlby-core/src/tools/portier.c,v $ $Log: portier.c,v $ +Revision 1.15 2007/03/23 17:26:43 hjanuschka +*** empty log message *** + +Revision 1.14 2007/03/22 01:09:21 hjanuschka +auto commit + +Revision 1.13 2007/02/16 20:40:26 hjanuschka +auto commit + +Revision 1.10 2007/02/15 16:25:32 hjanuschka +auto commit + +Revision 1.9 2007/01/27 19:52:13 hjanuschka +auto commit + +Revision 1.8 2007/01/27 00:37:53 hjanuschka +auto commit + Revision 1.7 2006/12/09 12:05:45 hjanuschka auto commit @@ -85,6 +103,7 @@ */ #include #include +#include #include #include #include @@ -191,6 +210,7 @@ struct shm_header * shm_hdr; struct service * svcmap; + struct server * srvmap; allowed_ip_list=getConfigValue("allowed_ips", argv[0]); @@ -236,6 +256,8 @@ bartlby_address=shmat(shm_id,NULL,0); shm_hdr=bartlby_SHM_GetHDR(bartlby_address); svcmap=bartlby_SHM_ServiceMap(bartlby_address); + srvmap=bartlby_SHM_ServerMap(bartlby_address); + printf("+SVCC: %d WRKC: %d V: %s\n", shm_hdr->svccount, shm_hdr->wrkcount, shm_hdr->version); fflush(stdout); @@ -414,6 +436,7 @@ sprintf(svcmap[x].new_server_text, "%s", passive_text); svcmap[x].last_check=time(NULL); + passive_beauty=bartlby_beauty_state(svcmap[x].current_state); sprintf(svc_out, "+PASSIVOK (%d) %d : %s (%s)\n", x, svcmap[x].service_id, passive_beauty, svcmap[x].new_server_text); free(passive_beauty); @@ -440,7 +463,7 @@ sprintf(svc_out, " "); for(x=0; xsvccount; x++) { - if(strcmp(svcmap[x].server_name, in_server_name) == 0) { + if(strcmp(srvmap[svcmap[x].srv_place].server_name, in_server_name) == 0) { printf("%d", svcmap[x].server_id); } @@ -457,9 +480,11 @@ passive_serverid=atoi(token); sprintf(svc_out, " "); for(x=0; xsvccount; x++) { - if(svcmap[x].server_id == passive_serverid && svcmap[x].service_type == SVC_TYPE_PASSIVE) { - printf("%d", svcmap[x].service_id); - printf(" "); + if(svcmap[x].server_id == passive_serverid && svcmap[x].service_type == SVC_TYPE_PASSIVE && svcmap[x].service_passive_timeout > 0) { + if(service_is_in_time(svcmap[x].service_exec_plan)) { + printf("%d", svcmap[x].service_id); + printf(" "); + } } } printf("\n"); @@ -473,7 +498,7 @@ exit(1); } - printf(svc_out); + printf("%s", svc_out); } shmdt(bartlby_address); diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/trigger.c bartlby-core/src/trigger.c --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/src/trigger.c 2007-01-14 22:43:38.000000000 +0100 +++ bartlby-core/src/trigger.c 2007-02-15 17:25:32.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: trigger.c,v 1.27 2007/01/14 21:43:38 hjanuschka Exp $ */ +/* $Id: trigger.c,v 1.29 2007/02/15 16:25:32 hjanuschka Exp $ */ /* ----------------------------------------------------------------------- * * * Copyright 2005 Helmut Januschka - All Rights Reserved @@ -11,11 +11,17 @@ * * ----------------------------------------------------------------------- */ /* -$Revision: 1.27 $ +$Revision: 1.29 $ $Source: /cvsroot/bartlby/bartlby-core/src/trigger.c,v $ $Log: trigger.c,v $ +Revision 1.29 2007/02/15 16:25:32 hjanuschka +auto commit + +Revision 1.28 2007/01/27 19:52:13 hjanuschka +auto commit + Revision 1.27 2007/01/14 21:43:38 hjanuschka auto commit @@ -206,7 +212,7 @@ return TR; } else { if(w->escalation_count > w->escalation_limit) { - _log("@NOT-EXT@%d|%d|%d|%s||%s:%d/%s|'(escalation %d/%d)'", svc->service_id, svc->last_state ,svc->current_state,w->name, svc->server_name, svc->client_port, svc->service_name,w->escalation_count, w->escalation_limit); + _log("@NOT-EXT@%d|%d|%d|%s||%s:%d/%s|'(escalation %d/%d)'", svc->service_id, svc->last_state ,svc->current_state,w->name, svc->srv->server_name, svc->srv->client_port, svc->service_name,w->escalation_count, w->escalation_limit); return FL; } else { w->escalation_count++; @@ -218,19 +224,19 @@ int bartlby_trigger_chk(struct service *svc) { if(svc->srv->server_notify == 0) { - _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Notifications disabled on this server)'", svc->service_id, svc->last_state ,svc->current_state, svc->server_name, svc->client_port, svc->service_name); + _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Notifications disabled on this server)'", svc->service_id, svc->last_state ,svc->current_state, svc->srv->server_name, svc->srv->client_port, svc->service_name); return FL; } if(svc->notify_enabled == 0) { - //_log("Suppressed notify: Notifications disabled %s:%d/%s",svc->client_ip, svc->client_port, svc->service_name); - _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Notifications disabled)'", svc->service_id, svc->last_state ,svc->current_state, svc->server_name, svc->client_port, svc->service_name); + //_log("Suppressed notify: Notifications disabled %s:%d/%s",svc->client_ip, svc->srv->client_port, svc->service_name); + _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Notifications disabled)'", svc->service_id, svc->last_state ,svc->current_state, svc->srv->server_name, svc->srv->client_port, svc->service_name); return FL; } else { if((time(NULL) - svc->srv->last_notify_send) > svc->srv->server_flap_seconds) { svc->srv->flap_count=0; } else { if(svc->srv->flap_count > 2) { - _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Server lazy %d)'", svc->service_id, svc->last_state ,svc->current_state, svc->server_name, svc->client_port, svc->service_name, svc->flap_count); + _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Server lazy %d)'", svc->service_id, svc->last_state ,svc->current_state, svc->srv->server_name, svc->srv->client_port, svc->service_name, svc->flap_count); return FL; } else { svc->srv->flap_count++; @@ -243,10 +249,10 @@ } else { if(svc->flap_count > 2) { - _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Service flapping %d)'", svc->service_id, svc->last_state ,svc->current_state, svc->server_name, svc->client_port, svc->service_name, svc->flap_count); + _log("@NOT-EXT@%d|%d|%d|||%s:%d/%s|'(Service flapping %d)'", svc->service_id, svc->last_state ,svc->current_state, svc->srv->server_name, svc->srv->client_port, svc->service_name, svc->flap_count); return FL; } else { - //Log("trigger", "Service %s:%d/%s Sent", svc->client_ip, svc->client_port, svc->service_name); + //Log("trigger", "Service %s:%d/%s Sent", svc->client_ip, svc->srv->client_port, svc->service_name); svc->flap_count++; return TR; } @@ -449,7 +455,7 @@ if(cfg_trigger_msg == NULL) { cfg_trigger_msg=strdup(DEFAULT_NOTIFY_MSG); } - notify_mem=(strlen(cfg_trigger_msg)+40+strlen(svc->service_name)+strlen(PROGNAME)+strlen(VERSION)+strlen(svc->server_name)+strlen(svc->service_name)+40+strlen(svc->new_server_text)); + notify_mem=(strlen(cfg_trigger_msg)+40+strlen(svc->service_name)+strlen(PROGNAME)+strlen(VERSION)+strlen(svc->srv->server_name)+strlen(svc->service_name)+40+strlen(svc->new_server_text)); notify_msg=malloc(sizeof(char)*notify_mem); sprintf(notify_msg, "%s", cfg_trigger_msg); //$VARS @@ -484,53 +490,55 @@ if(S_ISREG(finfo.st_mode)) { for(x=0; xwrkcount; x++) { - if(bartlby_worker_has_service(&wrkmap[x], svc, cfgfile) != 0 || do_check == 0) { - if(strstr(wrkmap[x].enabled_triggers, find_trigger) != NULL || strlen(wrkmap[x].enabled_triggers) == 0) { - - - if((bartlby_trigger_escalation(&wrkmap[x], svc)) == FL) continue; - if((bartlby_trigger_worker_level(&wrkmap[x], svc)) == FL) continue; - - - en.trigger = entry->d_name; - en.svc = svc; - en.wrk = &wrkmap[x]; - bartlby_callback(EXTENSION_CALLBACK_TRIGGER_FIRED, &en); - - //_log("EXEC trigger: %s", full_path); - _log("@NOT@%d|%d|%d|%s|%s|%s:%d/%s", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->server_name, svc->client_port, svc->service_name); - - svc->last_notify_send=time(NULL); - svc->srv->last_notify_send=time(NULL); - wrkmap[x].escalation_time=time(NULL); - exec_str=malloc(sizeof(char)*(strlen(full_path)+strlen("\"\"\"\" ")+strlen(wrkmap[x].icq)+strlen(wrkmap[x].name)+strlen(notify_msg)+strlen(wrkmap[x].mail))); - sprintf(exec_str, "%s \"%s\" \"%s\" \"%s\" \"%s\"", full_path, wrkmap[x].mail,wrkmap[x].icq,wrkmap[x].name, notify_msg); - ptrigger=popen(exec_str, "r"); - if(ptrigger != NULL) { - connection_timed_out=0; - alarm(CONN_TIMEOUT); - if(fgets(trigger_return, 1024, ptrigger) != NULL) { - trigger_return[strlen(trigger_return)-1]='\0'; - _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'%s'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->server_name, svc->client_port, svc->service_name, trigger_return); - - } else { - _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'(empty output)'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->server_name, svc->client_port, svc->service_name); - } - - if(connection_timed_out == 1) { - _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'(timed out)'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->server_name, svc->client_port, svc->service_name); - } - connection_timed_out=0; - alarm(0); + if(service_is_in_time(wrkmap[x].notify_plan) > 0) { + if(bartlby_worker_has_service(&wrkmap[x], svc, cfgfile) != 0 || do_check == 0) { + if(strstr(wrkmap[x].enabled_triggers, find_trigger) != NULL || strlen(wrkmap[x].enabled_triggers) == 0) { + + + if((bartlby_trigger_escalation(&wrkmap[x], svc)) == FL) continue; + if((bartlby_trigger_worker_level(&wrkmap[x], svc)) == FL) continue; + + + en.trigger = entry->d_name; + en.svc = svc; + en.wrk = &wrkmap[x]; + bartlby_callback(EXTENSION_CALLBACK_TRIGGER_FIRED, &en); + + //_log("EXEC trigger: %s", full_path); + _log("@NOT@%d|%d|%d|%s|%s|%s:%d/%s", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->srv->server_name, svc->srv->client_port, svc->service_name); + + svc->last_notify_send=time(NULL); + svc->srv->last_notify_send=time(NULL); + wrkmap[x].escalation_time=time(NULL); + exec_str=malloc(sizeof(char)*(strlen(full_path)+strlen("\"\"\"\" ")+strlen(wrkmap[x].icq)+strlen(wrkmap[x].name)+strlen(notify_msg)+strlen(wrkmap[x].mail))); + sprintf(exec_str, "%s \"%s\" \"%s\" \"%s\" \"%s\"", full_path, wrkmap[x].mail,wrkmap[x].icq,wrkmap[x].name, notify_msg); + ptrigger=popen(exec_str, "r"); if(ptrigger != NULL) { - pclose(ptrigger); + connection_timed_out=0; + alarm(CONN_TIMEOUT); + if(fgets(trigger_return, 1024, ptrigger) != NULL) { + trigger_return[strlen(trigger_return)-1]='\0'; + _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'%s'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->srv->server_name, svc->srv->client_port, svc->service_name, trigger_return); + + } else { + _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'(empty output)'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->srv->server_name, svc->srv->client_port, svc->service_name); + } + + if(connection_timed_out == 1) { + _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'(timed out)'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->srv->server_name, svc->srv->client_port, svc->service_name); + } + connection_timed_out=0; + alarm(0); + if(ptrigger != NULL) { + pclose(ptrigger); + } + } else { + _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'(failed %s)'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->srv->server_name, svc->srv->client_port, svc->service_name, full_path); } - } else { - _log("@NOT-EXT@%d|%d|%d|%s|%s|%s:%d/%s|'(failed %s)'", svc->service_id, svc->last_state ,svc->current_state,entry->d_name,wrkmap[x].name, svc->server_name, svc->client_port, svc->service_name, full_path); - } - free(exec_str); - } else { - //_log("Worker: %s does not have trigger: %s", wrkmap[x].name, entry->d_name); + free(exec_str); + } else { + //_log("Worker: %s does not have trigger: %s", wrkmap[x].name, entry->d_name); + } } } } diff -Nur /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/trigger/mail.sh bartlby-core/trigger/mail.sh --- /var/www/htdocs/bartlby.januschka.com/cvs/last_full//bartlby-core/trigger/mail.sh 2006-11-07 15:46:59.000000000 +0100 +++ bartlby-core/trigger/mail.sh 2007-03-22 02:09:22.000000000 +0100 @@ -28,5 +28,5 @@ SUBJ="bartlby notify: ${BARTLBY_CURR_HOST} / ${BARTLBY_CURR_SERVICE} : ${READABLE_STATE} "; MSG=$(echo -e $4); -echo -e $MSG|mail -s "$SUBJ" $1 +echo -e ${BARTLBY_CURR_HOST} $MSG|mail -s "$SUBJ" $1 echo "Mail sent to $1";