summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-06-25 22:13:55 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-06-25 22:13:55 +0000
commit80f40d1d857bc5803b538b4994d14d202029e987 (patch)
tree14dc4979d9979f22b0eb142364d99bac0b6f3c9f /src
parenta53b7fbe2d28b3b589788ff9af51e963bf7e82e1 (diff)
downloadzabbix-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.c22
-rw-r--r--src/zabbix_server/functions.h2
-rw-r--r--src/zabbix_server/pinger/pinger.c8
-rw-r--r--src/zabbix_server/poller/poller.c16
-rw-r--r--src/zabbix_server/zlog.c8
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);
+ }
}
}