summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2003-10-17 09:34:54 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2003-10-17 09:34:54 +0000
commite3eca8ce0ecfaf8fbb40c2de6099bf1dfe811ca9 (patch)
tree904b9441b9bb0688ddf6e1d89e5603222125529a /include
parent622a603eec30f6bf1d65218dc0e9ca861e16e12c (diff)
downloadzabbix-e3eca8ce0ecfaf8fbb40c2de6099bf1dfe811ca9.tar.gz
zabbix-e3eca8ce0ecfaf8fbb40c2de6099bf1dfe811ca9.tar.xz
zabbix-e3eca8ce0ecfaf8fbb40c2de6099bf1dfe811ca9.zip
- support of delta flag in item definition (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@994 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'include')
-rw-r--r--include/db.h4
-rw-r--r--include/functions.c55
2 files changed, 49 insertions, 10 deletions
diff --git a/include/db.h b/include/db.h
index d7a9daa7..e5787927 100644
--- a/include/db.h
+++ b/include/db.h
@@ -79,7 +79,10 @@ DB_ITEM
int port;
int delay;
int history;
+ double prevorgvalue;
+ int prevorgvalue_null;
double lastvalue;
+ int lastclock;
char *lastvalue_str;
int lastvalue_null;
double prevvalue;
@@ -89,6 +92,7 @@ DB_ITEM
time_t lastcheck;
time_t nextcheck;
int value_type;
+ int delta;
};
DB_FUNCTION
diff --git a/include/functions.c b/include/functions.c
index a4573c70..f90dd3e2 100644
--- a/include/functions.c
+++ b/include/functions.c
@@ -1298,6 +1298,7 @@ void process_new_value(DB_ITEM *item,char *value)
double value_double;
char *e;
+ now = time(NULL);
zabbix_log( LOG_LEVEL_DEBUG, "In process_new_value()");
value_double=strtod(value,&e);
@@ -1306,7 +1307,19 @@ void process_new_value(DB_ITEM *item,char *value)
{
if(item->value_type==ITEM_VALUE_TYPE_FLOAT)
{
- DBadd_history(item->itemid,value_double);
+ /* Should we store delta or original value? */
+ if(item->delta == 0)
+ {
+ DBadd_history(item->itemid,value_double);
+ }
+ else
+ {
+ /* Save delta */
+ if(item->prevorgvalue_null == 0)
+ {
+ DBadd_history(item->itemid, (value_double - item->prevorgvalue)/(now-item->lastclock));
+ }
+ }
}
else
{
@@ -1314,23 +1327,45 @@ void process_new_value(DB_ITEM *item,char *value)
}
}
- now = time(NULL);
- if((item->prevvalue_null == 1) || (strcmp(value,item->lastvalue_str) != 0) || (strcmp(item->prevvalue_str,item->lastvalue_str) != 0) )
+ if(item->delta ==0)
+ {
+ if((item->prevvalue_null == 1) || (strcmp(value,item->lastvalue_str) != 0) || (strcmp(item->prevvalue_str,item->lastvalue_str) != 0) )
+ {
+ sprintf(sql,"update items set nextcheck=%d,prevvalue=lastvalue,lastvalue='%s',lastclock=%d where itemid=%d",now+item->delay,value,now,item->itemid);
+ item->prevvalue=item->lastvalue;
+ item->lastvalue=value_double;
+ item->prevvalue_str=item->lastvalue_str;
+ /* Risky !!!*/
+ item->lastvalue_str=value;
+ item->prevvalue_null=item->lastvalue_null;
+ item->lastvalue_null=0;
+ }
+ else
+ {
+ sprintf(sql,"update items set nextcheck=%d,lastclock=%d where itemid=%d",now+item->delay,now,item->itemid);
+ }
+ }
+ /* Logic for delta */
+ else
{
- sprintf(sql,"update items set nextcheck=%d,prevvalue=lastvalue,lastvalue='%s',lastclock=%d where itemid=%d",now+item->delay,value,now,item->itemid);
+ if(item->prevorgvalue_null == 0)
+ {
+ sprintf(sql,"update items set nextcheck=%d,prevvalue=lastvalue,prevorgvalue=%f,lastvalue='%f',lastclock=%d where itemid=%d",now+item->delay,value_double,(value_double - item->prevorgvalue)/(now-item->lastclock),now,item->itemid);
+ }
+ else
+ {
+ sprintf(sql,"update items set nextcheck=%d,prevorgvalue=%f,lastclock=%d where itemid=%d",now+item->delay,value_double,now,item->itemid);
+ }
+
item->prevvalue=item->lastvalue;
- item->lastvalue=value_double;
+ item->lastvalue=(value_double - item->prevorgvalue)/(now-item->lastclock);
item->prevvalue_str=item->lastvalue_str;
-/* Risky !!!*/
+ /* Risky !!!*/
item->lastvalue_str=value;
item->prevvalue_null=item->lastvalue_null;
item->lastvalue_null=0;
}
- else
- {
- sprintf(sql,"update items set nextcheck=%d,lastclock=%d where itemid=%d",now+item->delay,now,item->itemid);
- }
DBexecute(sql);
update_functions( item );