diff options
author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-11-29 15:32:42 +0000 |
---|---|---|
committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-11-29 15:32:42 +0000 |
commit | 182eb7962ce8c198ffdba985cb868909dcf665ef (patch) | |
tree | 12506d1f0958f280e0f5a4f9c6314c47263c0d3e /src | |
parent | 4c418de98e6c5cef953378998057752dc20ab2c3 (diff) | |
download | zabbix-182eb7962ce8c198ffdba985cb868909dcf665ef.tar.gz zabbix-182eb7962ce8c198ffdba985cb868909dcf665ef.tar.xz zabbix-182eb7962ce8c198ffdba985cb868909dcf665ef.zip |
- added support of SQLite3 database (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@3539 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/zbxdbhigh/db.c | 90 | ||||
-rw-r--r-- | src/zabbix_server/server.c | 65 |
2 files changed, 60 insertions, 95 deletions
diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c index 695042c5..12ae9e4f 100644 --- a/src/libs/zbxdbhigh/db.c +++ b/src/libs/zbxdbhigh/db.c @@ -35,6 +35,7 @@ #ifdef HAVE_SQLITE3 sqlite3 *sqlite; + ZBX_MUTEX sqlite_access; #endif #ifdef HAVE_MYSQL @@ -70,6 +71,7 @@ void DBclose(void) #endif } + /* * Connect to the database. * If fails, program terminates. @@ -147,6 +149,14 @@ void DBconnect(void) /* Do not return SQLITE_BUSY immediately, wait for N ms */ sqlite3_busy_timeout(sqlite, 60*1000); + + if(ZBX_MUTEX_ERROR == zbx_mutex_create(&sqlite_access, "sqlite")) + { + zbx_error("Unable to create mutex for sqlite"); + exit(FAIL); + } + + #endif } @@ -241,6 +251,7 @@ int DBexecute(const char *fmt, ...) #endif #ifdef HAVE_SQLITE3 int ret = SUCCEED; + int sql_ret = SUCCEED; char *error=0; #endif @@ -294,13 +305,17 @@ int DBexecute(const char *fmt, ...) return ret; #endif #ifdef HAVE_SQLITE3 - if(SQLITE_OK != sqlite3_exec(sqlite, sql, NULL, 0, &error)) + zbx_mutex_lock(&sqlite_access); + + if(SQLITE_OK != (sql_ret = sqlite3_exec(sqlite, sql, NULL, 0, &error))) { zabbix_log( LOG_LEVEL_ERR, "Query::%s",sql); - zabbix_log(LOG_LEVEL_ERR, "Query failed:%s", error); + zabbix_log(LOG_LEVEL_ERR, "Query failed [%i]:%s", sql_ret, error); sqlite3_free(error); ret = FAIL; } + + zbx_mutex_unlock(&sqlite_access); return ret; #endif } @@ -321,6 +336,8 @@ int DBis_null(char *field) /* in db.h - #define DBfree_result PG_DBfree_result */ void PG_DBfree_result(DB_RESULT result) { + if(!result) return; + /* free old data */ if(result->values) { @@ -337,17 +354,13 @@ void PG_DBfree_result(DB_RESULT result) /* in db.h - #define DBfree_result SQ_DBfree_result */ void SQ_DBfree_result(DB_RESULT result) { - int i = 0; - - /* free old data */ - if(result->values) + if(!result) return; + + if(result->data) { - result->fld_num = 0; - free(result->values); - result->values = NULL; + sqlite3_free_table(result->data); } - sqlite3_finalize(result->sq_result); free(result); } #endif @@ -416,29 +429,13 @@ DB_ROW DBfetch(DB_RESULT result) if(!result) return NULL; /* EOF */ - if(sqlite3_step(result->sq_result) != SQLITE_ROW) return NULL; + if(result->curow >= result->nrow) return NULL; - /* free old data */ - if(result->values) - { - result->fld_num = 0; - free(result->values); - result->values = NULL; - } + if(!result->data) return NULL; - /* init result */ - result->fld_num = sqlite3_column_count(result->sq_result); - - if(result->fld_num > 0) - { - result->values = malloc(sizeof(char*) * result->fld_num); - for(i = 0; i < result->fld_num; i++) - { - result->values[i] = (char*)sqlite3_column_text(result->sq_result, i); - } - } + result->curow++; /* NOTE: First row == header row */ - return result->values; + return &(result->data[result->curow * result->ncolumn]); #endif } @@ -457,6 +454,10 @@ DB_RESULT DBselect(const char *fmt, ...) #ifdef HAVE_ORACLE sqlo_stmt_handle_t sth; #endif +#ifdef HAVE_SQLITE3 + int sql_ret = SUCCEED; + char *error=0; +#endif va_start(args, fmt); vsnprintf(sql, ZBX_MAX_SQL_LEN-1, fmt, args); @@ -512,18 +513,21 @@ DB_RESULT DBselect(const char *fmt, ...) return sth; #endif #ifdef HAVE_SQLITE3 + zbx_mutex_lock(&sqlite_access); + result = malloc(sizeof(ZBX_SQ_DB_RESULT)); - result->sq_result = NULL; - result->values = NULL; - result->fld_num = 0; + result->curow = 0; - if(SQLITE_OK != sqlite3_prepare(sqlite, sql, -1, &result->sq_result, 0)) + if(SQLITE_OK != (sql_ret = sqlite3_get_table(sqlite,sql,&result->data,&result->nrow, &result->ncolumn, &error))) { - zabbix_log(LOG_LEVEL_ERR, "Query::%s",sql); - zabbix_log(LOG_LEVEL_ERR, "Query failed:%s", sqlite3_errmsg(sqlite)); + zabbix_log( LOG_LEVEL_ERR, "Query::%s",sql); + zabbix_log(LOG_LEVEL_ERR, "Query failed [%i]:%s", sql_ret, error); + sqlite3_free(error); + zbx_mutex_unlock(&sqlite_access); exit(FAIL); } - + + zbx_mutex_unlock(&sqlite_access); return result; #endif } @@ -1906,7 +1910,7 @@ void DBget_item_from_db(DB_ITEM *item,DB_ROW row) char *s; ZBX_STR2UINT64(item->itemid, row[0]); -// item->itemid=atoi(row[0]); +/* item->itemid=atoi(row[0]); */ strscpy(item->key,row[1]); item->host=row[2]; item->port=atoi(row[3]); @@ -1941,7 +1945,7 @@ void DBget_item_from_db(DB_ITEM *item,DB_ROW row) item->prevvalue_str=s; item->prevvalue=atof(s); } -// item->hostid=atoi(row[15]); +/* item->hostid=atoi(row[15]); */ ZBX_STR2UINT64(item->hostid, row[15]); item->host_status=atoi(row[16]); item->value_type=atoi(row[17]); @@ -1983,7 +1987,7 @@ void DBget_item_from_db(DB_ITEM *item,DB_ROW row) item->trapper_hosts=row[32]; item->logtimefmt=row[33]; ZBX_STR2UINT64(item->valuemapid, row[34]); -// item->valuemapid=atoi(row[34]); +/* item->valuemapid=atoi(row[34]); */ item->delay_flex=row[35]; } @@ -2005,7 +2009,7 @@ zbx_uint64_t DBget_nextid(char *table, char *field) max = (zbx_uint64_t)__UINT64_C(100000000000000)*(zbx_uint64_t)(CONFIG_NODEID+1)-1; result = DBselect("select max(%s) from %s where %s>=" ZBX_FS_UI64 " and %s<=" ZBX_FS_UI64, field, table, field, min, field, max); -// zabbix_log(LOG_LEVEL_WARNING, "select max(%s) from %s where %s>=" ZBX_FS_UI64 " and %s<=" ZBX_FS_UI64, field, table, field, min, field, max); +/* zabbix_log(LOG_LEVEL_WARNING, "select max(%s) from %s where %s>=" ZBX_FS_UI64 " and %s<=" ZBX_FS_UI64, field, table, field, min, field, max); */ row=DBfetch(result); @@ -2017,11 +2021,11 @@ zbx_uint64_t DBget_nextid(char *table, char *field) } else { -// zabbix_log(LOG_LEVEL_WARNING,"4"); +/* zabbix_log(LOG_LEVEL_WARNING,"4"); */ res=(zbx_uint64_t)__UINT64_C(100000000000000)*(zbx_uint64_t)CONFIG_NODEID+1; } DBfree_result(result); -// zabbix_log(LOG_LEVEL_WARNING, ZBX_FS_UI64, res); +/* zabbix_log(LOG_LEVEL_WARNING, ZBX_FS_UI64, res); */ return res; } diff --git a/src/zabbix_server/server.c b/src/zabbix_server/server.c index c43a4890..bdd4844c 100644 --- a/src/zabbix_server/server.c +++ b/src/zabbix_server/server.c @@ -320,58 +320,15 @@ int tcp_listen(const char *host, int port, socklen_t *addrlenp) * * ******************************************************************************/ -//#define TEST +/* #define TEST */ #ifdef TEST -void run_commands(DB_TRIGGER *trigger,DB_ACTION *action); - void test() { - DB_RESULT result; - DB_ROW row; - - char *data; - int offset=0; - int allocated=1024; - int i; - - data=malloc(allocated); - -// zbx_snprintf_alloc(&data, &allocated, &offset, 128, "Test"); - zbx_snprintf_alloc(&data, &allocated, &offset, 128, "%s", "\n"); - printf("[%s]\n",data); - printf("Allocated %d Offset %d\n",allocated, offset); - - i = zbx_snprintf(data, 128,"test"); - printf("[%s]\n",data); - printf("Written %d\n", i); - - return; - - - printf("-= Test Started =-\n"); - result = DBselect("select hostid,host from hosts"); - - while((row=DBfetch(result))) - { - printf("[%s|%s]\n",row[0],row[1]); - } - DBfree_result(result); - - result = DBselect("select * from users"); - - while((row=DBfetch(result))) - { - printf("[%s|%s]\n",row[0],row[3]); - } - DBfree_result(result); - - printf("-= Test completed =-\n"); - - return 0; + printf("\n-= Test completed =-\n"); } #endif /* TEST */ @@ -503,7 +460,7 @@ int MAIN_ZABBIX_ENTRY(void) zabbix_open_log(LOG_TYPE_FILE,CONFIG_LOG_LEVEL,CONFIG_LOG_FILE); } -// zabbix_log( LOG_LEVEL_WARNING, "INFO [%s]", ZBX_SQL_MOD(a,%d)); +/* zabbix_log( LOG_LEVEL_WARNING, "INFO [%s]", ZBX_SQL_MOD(a,%d)); */ zabbix_log( LOG_LEVEL_WARNING, "Starting zabbix_server. ZABBIX %s.", ZABBIX_VERSION); DBconnect(); @@ -560,13 +517,13 @@ int MAIN_ZABBIX_ENTRY(void) } } -// zabbix_log( LOG_LEVEL_WARNING, "zabbix_server #%d started",server_num); +/* zabbix_log( LOG_LEVEL_WARNING, "zabbix_server #%d started",server_num); */ /* Main process */ if(server_num == 0) { init_main_process(); zabbix_log( LOG_LEVEL_WARNING, "server #%d started [Main]",server_num); - for(;;) sleep(3600); + for(;;) zbx_sleep(3600); } @@ -590,8 +547,8 @@ int MAIN_ZABBIX_ENTRY(void) } child_trapper_main(server_num, listenfd, addrlen); -// threads[i] = child_trapper_make(i, listenfd, addrlen); -// child_trapper_make(server_num, listenfd, addrlen); +/* threads[i] = child_trapper_make(i, listenfd, addrlen); */ +/* child_trapper_make(server_num, listenfd, addrlen); */ } else if(server_num <= CONFIG_POLLER_FORKS + CONFIG_TRAPPERD_FORKS + CONFIG_PINGER_FORKS) { @@ -618,14 +575,14 @@ int MAIN_ZABBIX_ENTRY(void) else if(server_num <= CONFIG_POLLER_FORKS + CONFIG_TRAPPERD_FORKS + CONFIG_PINGER_FORKS + CONFIG_ALERTER_FORKS +CONFIG_HOUSEKEEPER_FORKS + CONFIG_TIMER_FORKS + CONFIG_UNREACHABLE_POLLER_FORKS) { -// zabbix_log( LOG_LEVEL_WARNING, "%d<=%d",server_num, CONFIG_POLLER_FORKS + CONFIG_TRAPPERD_FORKS + CONFIG_PINGER_FORKS + CONFIG_ALERTER_FORKS+CONFIG_HOUSEKEEPER_FORKS + CONFIG_TIMER_FORKS + CONFIG_UNREACHABLE_POLLER_FORKS); +/* zabbix_log( LOG_LEVEL_WARNING, "%d<=%d",server_num, CONFIG_POLLER_FORKS + CONFIG_TRAPPERD_FORKS + CONFIG_PINGER_FORKS + CONFIG_ALERTER_FORKS+CONFIG_HOUSEKEEPER_FORKS + CONFIG_TIMER_FORKS + CONFIG_UNREACHABLE_POLLER_FORKS); */ #ifdef HAVE_SNMP init_snmp("zabbix_server"); zabbix_log( LOG_LEVEL_WARNING, "server #%d started [Poller for unreachable hosts. SNMP:ON]",server_num); #else zabbix_log( LOG_LEVEL_WARNING, "server #%d started [Poller for unreachable hosts. SNMP:OFF]",server_num); #endif -// zabbix_log( LOG_LEVEL_WARNING, "Before main_poller_loop(%d,%d)",ZBX_POLLER_TYPE_UNREACHABLE,server_num - (CONFIG_POLLER_FORKS + CONFIG_TRAPPERD_FORKS + CONFIG_PINGER_FORKS +CONFIG_ALERTER_FORKS+CONFIG_HOUSEKEEPER_FORKS + CONFIG_TIMER_FORKS)); +/* zabbix_log( LOG_LEVEL_WARNING, "Before main_poller_loop(%d,%d)",ZBX_POLLER_TYPE_UNREACHABLE,server_num - (CONFIG_POLLER_FORKS + CONFIG_TRAPPERD_FORKS + CONFIG_PINGER_FORKS +CONFIG_ALERTER_FORKS+CONFIG_HOUSEKEEPER_FORKS + CONFIG_TIMER_FORKS)); */ main_poller_loop(ZBX_POLLER_TYPE_UNREACHABLE, server_num - (CONFIG_POLLER_FORKS + CONFIG_TRAPPERD_FORKS + CONFIG_PINGER_FORKS + CONFIG_ALERTER_FORKS+CONFIG_HOUSEKEEPER_FORKS + CONFIG_TIMER_FORKS)); } @@ -744,6 +701,10 @@ void zbx_on_exit() zabbix_log(LOG_LEVEL_INFORMATION, "ZABBIX Server stopped"); zabbix_close_log(); + +#ifdef HAVE_SQLITE3 + zbx_mutex_destroy(&sqlite_access); +#endif /* HAVE_SQLITE3 */ exit(SUCCEED); } |