diff options
| author | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-06-25 22:13:55 +0000 |
|---|---|---|
| committer | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-06-25 22:13:55 +0000 |
| commit | 80f40d1d857bc5803b538b4994d14d202029e987 (patch) | |
| tree | 14dc4979d9979f22b0eb142364d99bac0b6f3c9f /src | |
| parent | a53b7fbe2d28b3b589788ff9af51e963bf7e82e1 (diff) | |
| download | zabbix-80f40d1d857bc5803b538b4994d14d202029e987.tar.gz zabbix-80f40d1d857bc5803b538b4994d14d202029e987.tar.xz zabbix-80f40d1d857bc5803b538b4994d14d202029e987.zip | |
- performance optimization: do not update functions and triggers if same
value received (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@1896 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
| -rw-r--r-- | src/zabbix_server/functions.c | 22 | ||||
| -rw-r--r-- | src/zabbix_server/functions.h | 2 | ||||
| -rw-r--r-- | src/zabbix_server/pinger/pinger.c | 8 | ||||
| -rw-r--r-- | src/zabbix_server/poller/poller.c | 16 | ||||
| -rw-r--r-- | src/zabbix_server/zlog.c | 8 |
5 files changed, 41 insertions, 15 deletions
diff --git a/src/zabbix_server/functions.c b/src/zabbix_server/functions.c index c3fdd310..35eae13d 100644 --- a/src/zabbix_server/functions.c +++ b/src/zabbix_server/functions.c @@ -400,6 +400,7 @@ int process_data(int sockfd,char *server,char *key,char *value) DB_ITEM item; char *s; char lastlogsize[MAX_STRING_LEN]; + int update_tr; zabbix_log( LOG_LEVEL_DEBUG, "In process_data()"); @@ -489,9 +490,12 @@ int process_data(int sockfd,char *server,char *key,char *value) zabbix_log(LOG_LEVEL_DEBUG, "Value [%s] S [%s] Lastlogsize [%s] [%d]", value, s, lastlogsize, s-value-1); } - process_new_value(&item,s); + process_new_value(&item,s,&update_tr); - update_triggers(item.itemid); + if(update_tr==1) + { + update_triggers(item.itemid); + } DBfree_result(result); @@ -507,15 +511,15 @@ int process_data(int sockfd,char *server,char *key,char *value) * Parameters: item - item data * * value - new value of the item * * * - * Return value: SUCCEED - new value sucesfully processed * - * FAIL - otherwise * + * Return value: update_tr=0 - update of triggers is not required * + * update_tr=1 - update of triggers is required * * * * Author: Alexei Vladishev * * * * Comments: for trapper poller process * * * ******************************************************************************/ -void process_new_value(DB_ITEM *item,char *value) +void process_new_value(DB_ITEM *item,char *value, int *update_tr) { time_t now; char sql[MAX_STRING_LEN]; @@ -525,6 +529,8 @@ void process_new_value(DB_ITEM *item,char *value) double multiplier; char *e; + *update_tr = 1; + now = time(NULL); strscpy(value_str, value); @@ -608,6 +614,7 @@ void process_new_value(DB_ITEM *item,char *value) { /* snprintf(sql,sizeof(sql)-1,"update items set nextcheck=%d,lastclock=%d where itemid=%d",now+item->delay,now,item->itemid);*/ snprintf(sql,sizeof(sql)-1,"update items set nextcheck=%d,lastclock=%d where itemid=%d",calculate_item_nextcheck(item->delay,now),(int)now,item->itemid); + *update_tr=0; } } /* Logic for delta as speed of change */ @@ -656,5 +663,8 @@ void process_new_value(DB_ITEM *item,char *value) } DBexecute(sql); - update_functions( item ); + if(*update_tr == 1) + { + update_functions( item ); + } } diff --git a/src/zabbix_server/functions.h b/src/zabbix_server/functions.h index b478c5c7..c2859b7b 100644 --- a/src/zabbix_server/functions.h +++ b/src/zabbix_server/functions.h @@ -26,6 +26,6 @@ void update_triggers (int itemid); int process_data(int sockfd,char *server,char *key, char *value); -void process_new_value(DB_ITEM *item,char *value); +void process_new_value(DB_ITEM *item,char *value,int *update_triggers); #endif diff --git a/src/zabbix_server/pinger/pinger.c b/src/zabbix_server/pinger/pinger.c index d5632395..62cb1ddd 100644 --- a/src/zabbix_server/pinger/pinger.c +++ b/src/zabbix_server/pinger/pinger.c @@ -127,6 +127,7 @@ static int process_value(char *key, char *host, char *value) DB_RESULT *result; DB_ITEM item; char *s; + int update_tr; zabbix_log( LOG_LEVEL_DEBUG, "In process_value()"); @@ -191,8 +192,11 @@ static int process_value(char *key, char *host, char *value) item.multiplier=atoi(DBget_field(result,0,19)); item.formula=DBget_field(result,0,20); - process_new_value(&item,value); - update_triggers(item.itemid); + process_new_value(&item,value,&update_tr); + if(update_tr == 1) + { + update_triggers(item.itemid); + } DBfree_result(result); diff --git a/src/zabbix_server/poller/poller.c b/src/zabbix_server/poller/poller.c index 786afd31..52a1001b 100644 --- a/src/zabbix_server/poller/poller.c +++ b/src/zabbix_server/poller/poller.c @@ -139,6 +139,7 @@ static void update_key_status(int hostid,int host_status) { char sql[MAX_STRING_LEN]; char value_str[MAX_STRING_LEN]; + int update_tr; DB_ITEM item; DB_RESULT *result; @@ -158,8 +159,11 @@ static void update_key_status(int hostid,int host_status) snprintf(value_str,sizeof(value_str)-1,"%d",host_status); - process_new_value(&item,value_str); - update_triggers(item.itemid); + process_new_value(&item,value_str,&update_tr); + if(update_tr == 1) + { + update_triggers(item.itemid); + } } DBfree_result(result); @@ -179,6 +183,7 @@ int get_values(void) int now; int res; DB_ITEM item; + int update_tr; error[0]=0; @@ -196,7 +201,7 @@ int get_values(void) if(res == SUCCEED ) { - process_new_value(&item,value_str); + process_new_value(&item,value_str,&update_tr); if(item.host_network_errors>0) { @@ -216,7 +221,10 @@ int get_values(void) /* Why this break??? Trigger needs to be updated anyway! break;*/ } - update_triggers(item.itemid); + if(update_tr == 1) + { + update_triggers(item.itemid); + } } else if(res == NOTSUPPORTED) { diff --git a/src/zabbix_server/zlog.c b/src/zabbix_server/zlog.c index f8ac5a12..87ab4742 100644 --- a/src/zabbix_server/zlog.c +++ b/src/zabbix_server/zlog.c @@ -58,6 +58,7 @@ void zabbix_syslog(const char *fmt, ...) DB_ITEM item; DB_RESULT *result; + int update_tr; zabbix_log(LOG_LEVEL_DEBUG, "In zabbix_log()"); @@ -79,8 +80,11 @@ void zabbix_syslog(const char *fmt, ...) value_str[MAX_STRING_LEN]=0; va_end(ap); - process_new_value(&item,value_str); - update_triggers(item.itemid); + process_new_value(&item,value_str,&update_tr); + if(update_tr == 1) + { + update_triggers(item.itemid); + } } } |
