summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-07-04 06:34:33 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-07-04 06:34:33 +0000
commit2ea040cd24640d5cdb43b781025f7e7f96c87be4 (patch)
tree9c81128d2a502c4dc727ef7865747847a6b0ab4a /src
parentcdf4f61a5d660da907e18aff9a481eca8dd9e2a1 (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.am2
-rw-r--r--src/libs/zbxdbhigh/db.c26
-rw-r--r--src/libs/zbxsysinfo/cpu.c2
-rw-r--r--src/zabbix_agent/active.c4
-rw-r--r--src/zabbix_get/Makefile.am3
-rw-r--r--src/zabbix_get/zabbix_get.c258
-rw-r--r--src/zabbix_server/housekeeper/housekeeper.c88
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;