From f7f74958b31cb3c8009d5946497911bfcf00cac0 Mon Sep 17 00:00:00 2001 From: hugetoad Date: Fri, 10 Sep 2004 17:47:32 +0000 Subject: - added support for custom multiplier (Alexei) - added column items.formula (Alexei) - added support of SNMPv3 (Alexei) - added columns snmpv3_* to table items (Alexei) git-svn-id: svn://svn.zabbix.com/trunk@1420 97f52cf1-0a1b-0410-bd0e-c28be96e8082 --- include/common.h | 17 ++++++++++++++++- include/db.h | 7 +++++++ include/functions.c | 32 ++++++++++++++++++++++++-------- 3 files changed, 47 insertions(+), 9 deletions(-) (limited to 'include') diff --git a/include/common.h b/include/common.h index 00ca4aa2..27218abc 100644 --- a/include/common.h +++ b/include/common.h @@ -20,8 +20,9 @@ /*#define TESTTEST*/ +/* #define ZABBIX_THREADS - +*/ #define IT_HELPDESK #ifndef ZABBIX_COMMON_H @@ -59,6 +60,20 @@ #define ITEM_VALUE_TYPE_FLOAT 0 #define ITEM_VALUE_TYPE_STR 1 +/* Item snmpv3 security levels */ +#define ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV 0 +#define ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV 1 +#define ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV 2 + +/* Item multiplier types */ +#define ITEM_MULTIPLIER_DO_NOT_USE 0 +#define ITEM_MULTIPLIER_USE 1 + +/* Item delta types */ +#define ITEM_STORE_AS_IS 0 +#define ITEM_STORE_SPEED_PER_SECOND 1 +#define ITEM_STORE_SIMPLE_CHANGE 2 + /* Recipient types for actions */ #define RECIPIENT_TYPE_USER 0 #define RECIPIENT_TYPE_GROUP 1 diff --git a/include/db.h b/include/db.h index 4ca85592..620a8899 100644 --- a/include/db.h +++ b/include/db.h @@ -112,6 +112,13 @@ DB_ITEM int delta; int multiplier; char *units; + + char *snmpv3_securityname; + int snmpv3_securitylevel; + char *snmpv3_authpassphrase; + char *snmpv3_privpassphrase; + + char *formula; }; DB_FUNCTION diff --git a/include/functions.c b/include/functions.c index 32b52372..4a838c09 100644 --- a/include/functions.c +++ b/include/functions.c @@ -733,7 +733,12 @@ int evaluate_FUNCTION_thread(MYSQL *database, char *value,DB_ITEM *item,char *fu (SUCCEED == ret) && strlen(item->units)>0) { value_float=atof(value); - value_float=value_float*pow(1024,item->multiplier); + /* Use multiplier ? */ +/* if(item->multiplier == 1) + { + zabbix_log( LOG_LEVEL_WARNING, "HMM [%s] [%f] [%f]",item->formula, value_float, atof(item->formula)); + value_float=value_float*atof(item->formula); + }*/ value_float_abs=abs(value_float); if(value_float_abs<1024) { @@ -993,7 +998,11 @@ int evaluate_FUNCTION(char *value,DB_ITEM *item,char *function,char *parameter, (SUCCEED == ret) && strlen(item->units)>0) { value_float=atof(value); - value_float=value_float*pow(1024,item->multiplier); + /* Custom multiplier? */ + if(item->multiplier == 1) + { + value_float=value_float*atof(item->formula); + } value_float_abs=abs(value_float); if(value_float_abs<1024) { @@ -2231,6 +2240,7 @@ void process_new_value_thread(MYSQL *database, DB_ITEM *item,char *value) char sql[MAX_STRING_LEN]; char value_esc[MAX_STRING_LEN]; double value_double; + double multiplier; char *e; now = time(NULL); @@ -2238,17 +2248,23 @@ void process_new_value_thread(MYSQL *database, DB_ITEM *item,char *value) zabbix_log( LOG_LEVEL_DEBUG, "In process_new_value()"); value_double=strtod(value,&e); + if( (item->value_type==ITEM_VALUE_TYPE_FLOAT) && (item->multiplier == ITEM_MULTIPLIER_USE)) + { + multiplier = strtod(item->formula,&e); + value_double = value_double * multiplier; + } + if(item->history>0) { if(item->value_type==ITEM_VALUE_TYPE_FLOAT) { /* Should we store delta or original value? */ - if(item->delta == 0) + if(item->delta == ITEM_STORE_AS_IS) { DBadd_history_thread(database, item->itemid,value_double,now); } /* Delta as speed of change */ - else if(item->delta == 1) + else if(item->delta == ITEM_STORE_SPEED_PER_SECOND) { /* Save delta */ if((item->prevorgvalue_null == 0) && (item->prevorgvalue <= value_double) ) @@ -2257,7 +2273,7 @@ void process_new_value_thread(MYSQL *database, DB_ITEM *item,char *value) } } /* Real delta: simple difference between values */ - else if(item->delta == 2) + else if(item->delta == ITEM_STORE_SIMPLE_CHANGE) { /* Save delta */ if((item->prevorgvalue_null == 0) && (item->prevorgvalue <= value_double) ) @@ -2278,7 +2294,7 @@ void process_new_value_thread(MYSQL *database, DB_ITEM *item,char *value) } - if(item->delta ==0) + if(item->delta == ITEM_STORE_AS_IS) { if((item->prevvalue_null == 1) || (strcmp(value,item->lastvalue_str) != 0) || (strcmp(item->prevvalue_str,item->lastvalue_str) != 0) ) { @@ -2298,7 +2314,7 @@ void process_new_value_thread(MYSQL *database, DB_ITEM *item,char *value) } } /* Logic for delta as speed of change */ - else if(item->delta == 1) + else if(item->delta == ITEM_STORE_SPEED_PER_SECOND) { if((item->prevorgvalue_null == 0) && (item->prevorgvalue <= value_double) ) { @@ -2318,7 +2334,7 @@ void process_new_value_thread(MYSQL *database, DB_ITEM *item,char *value) item->lastvalue_null=0; } /* Real delta: simple difference between values */ - else if(item->delta == 2) + else if(item->delta == ITEM_STORE_SIMPLE_CHANGE) { if((item->prevorgvalue_null == 0) && (item->prevorgvalue <= value_double) ) { -- cgit