diff options
| author | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-07-04 06:34:33 +0000 |
|---|---|---|
| committer | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-07-04 06:34:33 +0000 |
| commit | 2ea040cd24640d5cdb43b781025f7e7f96c87be4 (patch) | |
| tree | 9c81128d2a502c4dc727ef7865747847a6b0ab4a /src | |
| parent | cdf4f61a5d660da907e18aff9a481eca8dd9e2a1 (diff) | |
- new utility zabbix_get (Alexei)
- added src/zabbix_get/* (Alexei)
- user timeout time is configurable (Alexei)
- added support of locales on user level (Alexei)
- added support of user profiles (Alexei)
- removed include/local_en.inc.php
- added include/locales/.htaccess (Alexei)
- added include/locales/en_en.inc.php (Alexei)
- added include/locales/de_de.inc.php (Alexei)
- added include/locales/en_en.inc.php (Alexei)
- added column users.lang (Alexei)
- added column users.autologout (Alexei)
- added frontends/php/profile.php (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@1900 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/libs/zbxdbhigh/db.c | 26 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/cpu.c | 2 | ||||
| -rw-r--r-- | src/zabbix_agent/active.c | 4 | ||||
| -rw-r--r-- | src/zabbix_get/Makefile.am | 3 | ||||
| -rw-r--r-- | src/zabbix_get/zabbix_get.c | 258 | ||||
| -rw-r--r-- | src/zabbix_server/housekeeper/housekeeper.c | 88 |
7 files changed, 361 insertions, 22 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 30a7a339..62768787 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1 +1 @@ -SUBDIRS = libs zabbix_agent zabbix_sender zabbix_server +SUBDIRS = libs zabbix_agent zabbix_get zabbix_sender zabbix_server diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c index 86d7d7f7..cc5d951a 100644 --- a/src/libs/zbxdbhigh/db.c +++ b/src/libs/zbxdbhigh/db.c @@ -732,22 +732,6 @@ void DBdelete_history_by_itemid(int itemid) DBexecute(sql); } -void DBdelete_item(int itemid) -{ - char sql[MAX_STRING_LEN]; - - zabbix_log(LOG_LEVEL_DEBUG,"In DBdelete_item(%d)", itemid); - - DBdelete_triggers_by_itemid(itemid); - DBdelete_history_by_itemid(itemid); - DBdelete_trends_by_itemid(itemid); - - snprintf(sql,sizeof(sql)-1,"delete from items where itemid=%d", itemid); - DBexecute(sql); - - zabbix_log(LOG_LEVEL_DEBUG,"End of DBdelete_item(%d)", itemid); -} - void DBdelete_sysmaps_links_by_shostid(int shostid) { char sql[MAX_STRING_LEN]; @@ -777,6 +761,16 @@ void DBdelete_sysmaps_hosts_by_hostid(int hostid) DBexecute(sql); } +int DBdelete_history_pertial(int itemid) +{ + char sql[MAX_STRING_LEN]; + + snprintf(sql,sizeof(sql)-1,"delete from history where itemid=%d limit 500", itemid); + DBexecute(sql); + + return DBaffected_rows(); +} + void DBdelete_host(int hostid) { int i, itemid; diff --git a/src/libs/zbxsysinfo/cpu.c b/src/libs/zbxsysinfo/cpu.c index a1fde2c6..38cd9757 100644 --- a/src/libs/zbxsysinfo/cpu.c +++ b/src/libs/zbxsysinfo/cpu.c @@ -286,7 +286,7 @@ int PROCLOAD(const char *cmd, const char *parameter,double *value) if(getloadavg_kmem(loadavg,3) == FAIL) { - return STSINFO_RET_FAIL; + return SYSINFO_RET_FAIL; } *value=loadavg[0]; diff --git a/src/zabbix_agent/active.c b/src/zabbix_agent/active.c index dac6cca4..eb3f4f0c 100644 --- a/src/zabbix_agent/active.c +++ b/src/zabbix_agent/active.c @@ -489,7 +489,7 @@ void refresh_metrics(char *server, int port, char *error, int max_error_len) { zabbix_log( LOG_LEVEL_WARNING, "Getting list of active checks failed. Will retry after 60 seconds"); #ifdef HAVE_FUNCTION_SETPROCTITLE - setproctitle("sucker [sleeping for %d seconds]", 60); + setproctitle("poller [sleeping for %d seconds]", 60); #endif sleep(60); } @@ -544,7 +544,7 @@ void child_active_main(int i,char *server, int port) zabbix_log( LOG_LEVEL_DEBUG, "Sleeping for %d seconds", sleeptime ); #ifdef HAVE_FUNCTION_SETPROCTITLE - setproctitle("sucker [sleeping for %d seconds]", + setproctitle("poller [sleeping for %d seconds]", sleeptime); #endif sleep( sleeptime ); diff --git a/src/zabbix_get/Makefile.am b/src/zabbix_get/Makefile.am new file mode 100644 index 00000000..82d397b1 --- /dev/null +++ b/src/zabbix_get/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = . +bin_PROGRAMS = zabbix_get +zabbix_get_SOURCES = zabbix_get.c diff --git a/src/zabbix_get/zabbix_get.c b/src/zabbix_get/zabbix_get.c new file mode 100644 index 00000000..4183ad3d --- /dev/null +++ b/src/zabbix_get/zabbix_get.c @@ -0,0 +1,258 @@ +/* +** ZABBIX +** Copyright (C) 2000-2005 SIA Zabbix +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +**/ + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <netinet/in.h> +#include <netdb.h> + +#include <string.h> + +/* OpenBSD*/ +#ifdef HAVE_SYS_SOCKET_H + #include <sys/socket.h> +#endif + +#include <signal.h> +#include <time.h> + +#include <errno.h> + +#include <string.h> + +#include "common.h" + +/****************************************************************************** + * * + * Function: signal_handler * + * * + * Purpose: process signals * + * * + * Parameters: sig - signal ID * + * * + * Return value: * + * * + * Author: Alexei Vladishev * + * * + * Comments: * + * * + ******************************************************************************/ +static void signal_handler( int sig ) +{ + if( SIGALRM == sig ) + { + signal( SIGALRM, signal_handler ); + fprintf(stderr,"Timeout while executing operation.\n"); + } + + if( SIGQUIT == sig || SIGINT == sig || SIGTERM == sig ) + { +/* fprintf(stderr,"\nGot QUIT or INT or TERM signal. Exiting..." ); */ + } + exit( FAIL ); +} + +/****************************************************************************** + * * + * Function: usage * + * * + * Purpose: print information about command line parameters and exit * + * * + * Parameters: prog - name of process, normally 'zabbix_get' * + * * + * Return value: * + * * + * Author: Alexei Vladishev * + * * + * Comments: * + * * + ******************************************************************************/ +static void usage(char *prog) +{ + printf("zabbix_get - Communicate with ZABBIX agent %s\n", ZABBIX_VERSION); + printf("Usage: %s [-h] -s<host name or IP> [-p<port number>] -k<key>\n", prog); + printf("\nOptions:\n"); + printf(" -p <port number> Specify port number of agent running on the host. Default is 10050.\n"); + printf(" -s <host name or IP> Specify host name or IP address of a host.\n"); + printf(" -k <key of metric> Specify metric name (key) we want to retrieve.\n"); + printf(" -h Help\n"); + printf("\nExample: zabbix_get -s127.0.0.1 -p10050 -k\"system[procload]\"\n"); + exit(-1); +} + + +/****************************************************************************** + * * + * Function: get_value * + * * + * Purpose: connect to ZABBIX agent and receive value for given key * + * * + * Parameters: server - serv name or IP address * + * port - port number * + * key - item's key * + * * + * Return value: SUCCEED - ok, FAIL - otherwise * + * value - retrieved value * + * * + * Author: Alexei Vladishev * + * * + * Comments: * + * * + ******************************************************************************/ +static int get_value(char *server,int port,char *key,char *value) +{ + int i,s; + char tosend[1024]; + char result[1024]; + struct hostent *hp; + + struct sockaddr_in myaddr_in; + struct sockaddr_in servaddr_in; + +/* struct linger ling;*/ + + servaddr_in.sin_family=AF_INET; + hp=gethostbyname(server); + + if(hp==NULL) + { + fprintf(stderr, "Error: %s\n", strerror(errno)); + return FAIL; + } + + servaddr_in.sin_addr.s_addr=((struct in_addr *)(hp->h_addr))->s_addr; + + servaddr_in.sin_port=htons(port); + + s=socket(AF_INET,SOCK_STREAM,0); + if(s == -1) + { + fprintf(stderr, "Error: %s\n", strerror(errno)); + return FAIL; + } + + myaddr_in.sin_family = AF_INET; + myaddr_in.sin_port=0; + myaddr_in.sin_addr.s_addr=INADDR_ANY; + + if( connect(s,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 ) + { + fprintf(stderr, "Error: %s\n", strerror(errno)); + close(s); + return FAIL; + } + + snprintf(tosend,sizeof(tosend)-1,"%s\n",key); + + if( sendto(s,tosend,strlen(tosend),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 ) + { + fprintf(stderr, "Error: %s\n", strerror(errno)); + close(s); + return FAIL; + } + i=sizeof(struct sockaddr_in); +/* i=recvfrom(s,result,1023,0,(struct sockaddr *)&servaddr_in,(size_t *)&i);*/ + i=recvfrom(s,value,1023,0,(struct sockaddr *)&servaddr_in,(socklen_t *)&i); + if(s==-1) + { + fprintf(stderr, "Error: %s\n", strerror(errno)); + close(s); + return FAIL; + } + + value[i-1]=0; + + if( close(s)!=0 ) + { + /* Ignore */ + } + + return SUCCEED; +} + +/****************************************************************************** + * * + * Function: main * + * * + * Purpose: main function * + * * + * Parameters: * + * * + * Return value: * + * * + * Author: Alexei Vladishev * + * * + * Comments: * + * * + ******************************************************************************/ +int main(int argc, char **argv) +{ + int port = 10050; + int ret=SUCCEED; + char value[MAX_STRING_LEN]; + char *host; + char *key; + int ch; + + /* Parse the command-line. */ + while ((ch = getopt(argc, argv, "k:p:s:h")) != EOF) + switch ((char) ch) { + case 'k': + key = optarg; + break; + case 'p': + port = atoi(optarg); + break; + case 's': + host = optarg; + break; + case 'h': + usage(argv[0]); + break; + default: + usage(argv[0]); + break; + } + + + signal( SIGINT, signal_handler ); + signal( SIGQUIT, signal_handler ); + signal( SIGTERM, signal_handler ); + signal( SIGALRM, signal_handler ); + + alarm(SENDER_TIMEOUT); + +/* printf("Host [%s] Port [%d] Key [%s]\n",host,port,key);*/ + + ret = get_value(host,port,key,value); + + alarm(0); + + if(ret == SUCCEED) + { + printf("%s\n",value); + } + + return ret; +} diff --git a/src/zabbix_server/housekeeper/housekeeper.c b/src/zabbix_server/housekeeper/housekeeper.c index 2dd4f151..7179dad6 100644 --- a/src/zabbix_server/housekeeper/housekeeper.c +++ b/src/zabbix_server/housekeeper/housekeeper.c @@ -50,6 +50,90 @@ #include "housekeeper.h" +static int delete_history(int itemid) +{ + char sql[MAX_STRING_LEN]; + + snprintf(sql,sizeof(sql)-1,"delete from history where itemid=%d limit 500", itemid); + DBexecute(sql); + + return DBaffected_rows(); +} + +static int delete_trends(int itemid) +{ + char sql[MAX_STRING_LEN]; + + snprintf(sql,sizeof(sql)-1,"delete from trends where itemid=%d limit 500", itemid); + DBexecute(sql); + + return DBaffected_rows(); +} + +static int delete_item(int itemid) +{ + char sql[MAX_STRING_LEN]; + int res = 0; + + zabbix_log(LOG_LEVEL_DEBUG,"In delete_item(%d)", itemid); + + res = delete_history(itemid); + + if(res == 0) + { + res = delete_trends(itemid); + } + + if(res == 0) + { + DBdelete_triggers_by_itemid(itemid); + + snprintf(sql,sizeof(sql)-1,"delete from items where itemid=%d", itemid); + DBexecute(sql); + } + + zabbix_log(LOG_LEVEL_DEBUG,"End of delete_item(%d)", itemid); + + return res; +} + +static int delete_host(int hostid) +{ + int i, itemid; + char sql[MAX_STRING_LEN]; + DB_RESULT *result; + int res = 0; + + zabbix_log(LOG_LEVEL_DEBUG,"In delete_host(%d)", hostid); + snprintf(sql,sizeof(sql)-1,"select itemid from items where hostid=%d", hostid); + result = DBselect(sql); + + for(i=0;i<DBnum_rows(result);i++) + { + itemid=atoi(DBget_field(result,i,0)); + res += delete_item(itemid); + } + DBfree_result(result); + + if(res==0) + { + DBdelete_sysmaps_hosts_by_hostid(hostid); + + snprintf(sql,sizeof(sql)-1,"delete from actions where triggerid=%d and scope=%d", hostid, ACTION_SCOPE_HOST); + DBexecute(sql); + + snprintf(sql,sizeof(sql)-1,"delete from hosts_groups where hostid=%d", hostid); + DBexecute(sql); + + snprintf(sql,sizeof(sql)-1,"delete from hosts where hostid=%d", hostid); + DBexecute(sql); + } + + zabbix_log(LOG_LEVEL_DEBUG,"End of DBdelete_host(%d)", hostid); + + return res; +} + /****************************************************************************** * * * Function: housekeeping_items * @@ -77,7 +161,7 @@ static int housekeeping_items(void) for(i=0;i<DBnum_rows(result);i++) { itemid=atoi(DBget_field(result,i,0)); - DBdelete_item(itemid); + delete_item(itemid); } DBfree_result(result); return SUCCEED; @@ -110,7 +194,7 @@ static int housekeeping_hosts(void) for(i=0;i<DBnum_rows(result);i++) { hostid=atoi(DBget_field(result,i,0)); - DBdelete_host(hostid); + delete_host(hostid); } DBfree_result(result); return SUCCEED; |
