diff options
| author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-05-12 14:23:12 +0000 |
|---|---|---|
| committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-05-12 14:23:12 +0000 |
| commit | 4182bc6afb20b00fa27a54c67056bb98a58a49bb (patch) | |
| tree | 5cab17d23e387cc3b6e8c92e4c928ac5e1111b76 /src | |
| parent | 6a6ac0772b8215bffc5fe8b02fc1033dbf273f41 (diff) | |
| download | zabbix-4182bc6afb20b00fa27a54c67056bb98a58a49bb.tar.gz zabbix-4182bc6afb20b00fa27a54c67056bb98a58a49bb.tar.xz zabbix-4182bc6afb20b00fa27a54c67056bb98a58a49bb.zip | |
- speed improvement for Overview screens (Eugene)
- developed 'net.if.total[*]' parameter (Eugene)
- fixed new map link adding (Eugene)
- fixed host group adding (Eugene)
- fixed map displaying (Eugene)
- fixed 'No permissions' for 'Latest data','Triggers','Alarms' screens (Eugene)
- fixed permision deletion (Eugene)
- fixed 'get_map_by_sysmapid' function calls(Eugene)
- improved php code execution speed (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@2825 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
| -rw-r--r-- | src/libs/zbxdbhigh/db.c | 4 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/aix/aix.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/aix/net.c | 10 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/freebsd/freebsd.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/freebsd/net.c | 10 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/hpux/hpux.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/hpux/net.c | 10 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/linux/linux.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/linux/net.c | 63 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/netbsd/net.c | 10 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/netbsd/netbsd.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/openbsd/net.c | 149 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/openbsd/openbsd.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/osf/net.c | 10 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/osf/osf.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/osx/net.c | 10 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/osx/osx.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/solaris/net.c | 153 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/solaris/solaris.c | 1 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/unknown/net.c | 10 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/unknown/unknown.c | 1 | ||||
| -rw-r--r-- | src/zabbix_server/actions.c | 3 |
22 files changed, 449 insertions, 3 deletions
diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c index a4862e95..d529e9fd 100644 --- a/src/libs/zbxdbhigh/db.c +++ b/src/libs/zbxdbhigh/db.c @@ -236,8 +236,8 @@ DB_RESULT DBselect(char *query) zabbix_log(LOG_LEVEL_ERR, "Query failed:%s [%d]", mysql_error(&mysql), mysql_errno(&mysql) ); if( (ER_SERVER_SHUTDOWN != mysql_errno(&mysql)) && - (CR_SERVER_GONE_ERROR != mysql_errno(&mysql)) && - (CR_CONNECTION_ERROR != mysql_errno(&mysql))) + (CR_SERVER_GONE_ERROR != mysql_errno(&mysql)) && + (CR_CONNECTION_ERROR != mysql_errno(&mysql))) { exit(FAIL); } diff --git a/src/libs/zbxsysinfo/aix/aix.c b/src/libs/zbxsysinfo/aix/aix.c index ddd8ac72..fb6cd580 100644 --- a/src/libs/zbxsysinfo/aix/aix.c +++ b/src/libs/zbxsysinfo/aix/aix.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/aix/net.c b/src/libs/zbxsysinfo/aix/net.c index c8c65ff2..baf1de42 100644 --- a/src/libs/zbxsysinfo/aix/net.c +++ b/src/libs/zbxsysinfo/aix/net.c @@ -42,6 +42,16 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_FAIL; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + + assert(result); + + init_result(result); + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/freebsd/freebsd.c b/src/libs/zbxsysinfo/freebsd/freebsd.c index bb33e9c8..ec5a0837 100644 --- a/src/libs/zbxsysinfo/freebsd/freebsd.c +++ b/src/libs/zbxsysinfo/freebsd/freebsd.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/freebsd/net.c b/src/libs/zbxsysinfo/freebsd/net.c index 851be786..e1086771 100644 --- a/src/libs/zbxsysinfo/freebsd/net.c +++ b/src/libs/zbxsysinfo/freebsd/net.c @@ -42,6 +42,16 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_FAIL; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + + assert(result); + + init_result(result); + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/hpux/hpux.c b/src/libs/zbxsysinfo/hpux/hpux.c index ddd8ac72..fb6cd580 100644 --- a/src/libs/zbxsysinfo/hpux/hpux.c +++ b/src/libs/zbxsysinfo/hpux/hpux.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/hpux/net.c b/src/libs/zbxsysinfo/hpux/net.c index 851be786..e1086771 100644 --- a/src/libs/zbxsysinfo/hpux/net.c +++ b/src/libs/zbxsysinfo/hpux/net.c @@ -42,6 +42,16 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_FAIL; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + + assert(result); + + init_result(result); + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/linux/linux.c b/src/libs/zbxsysinfo/linux/linux.c index 6dfb94d5..f4f85677 100644 --- a/src/libs/zbxsysinfo/linux/linux.c +++ b/src/libs/zbxsysinfo/linux/linux.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/linux/net.c b/src/libs/zbxsysinfo/linux/net.c index 30e426ad..8fad22a6 100644 --- a/src/libs/zbxsysinfo/linux/net.c +++ b/src/libs/zbxsysinfo/linux/net.c @@ -222,6 +222,69 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return ret; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + struct net_stat_s ns; + + char interface[MAX_STRING_LEN]; + char mode[MAX_STRING_LEN]; + + int ret = SYSINFO_RET_FAIL; + + assert(result); + + init_result(result); + + if(num_param(param) > 2) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 2, mode, MAX_STRING_LEN) != 0) + { + mode[0] = '\0'; + } + if(mode[0] == '\0') + { + /* default parameter */ + sprintf(mode, "bytes"); + } + + ret = get_net_stat(interface, &ns); + + + if(ret == SYSINFO_RET_OK) + { + if(strncmp(mode, "bytes", MAX_STRING_LEN) == 0) + { + SET_UI64_RESULT(result, ns.ibytes + ns.obytes); + } + else if(strncmp(mode, "packets", MAX_STRING_LEN) == 0) + { + SET_UI64_RESULT(result, ns.ipackets + ns.opackets); + } + else if(strncmp(mode, "errors", MAX_STRING_LEN) == 0) + { + SET_UI64_RESULT(result, ns.ierr + ns.oerr); + } + else if(strncmp(mode, "dropped", MAX_STRING_LEN) == 0) + { + SET_UI64_RESULT(result, ns.idrop + ns.odrop); + } + else + { + ret = SYSINFO_RET_FAIL; + } + } + + return ret; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/netbsd/net.c b/src/libs/zbxsysinfo/netbsd/net.c index 851be786..e1086771 100644 --- a/src/libs/zbxsysinfo/netbsd/net.c +++ b/src/libs/zbxsysinfo/netbsd/net.c @@ -42,6 +42,16 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_FAIL; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + + assert(result); + + init_result(result); + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/netbsd/netbsd.c b/src/libs/zbxsysinfo/netbsd/netbsd.c index ddd8ac72..fb6cd580 100644 --- a/src/libs/zbxsysinfo/netbsd/netbsd.c +++ b/src/libs/zbxsysinfo/netbsd/netbsd.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/openbsd/net.c b/src/libs/zbxsysinfo/openbsd/net.c index 2adb526b..467cf1bb 100644 --- a/src/libs/zbxsysinfo/openbsd/net.c +++ b/src/libs/zbxsysinfo/openbsd/net.c @@ -383,6 +383,155 @@ NET_FNCLIST return SYSINFO_RET_FAIL; } +static int NET_IF_TOTAL_BYTES(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + struct ifnet value; + char interface[MAX_STRING_LEN]; + int ret = SYSINFO_RET_FAIL; + + assert(result); + + init_result(result); + + if(num_param(param) > 1) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + ret = get_ifdata(interface, &value); + + if(ret == SYSINFO_RET_OK) + { + SET_UI64_RESULT(result, value.if_obytes + value.if_ibytes); + ret = SYSINFO_RET_OK; + } + + return ret; +} + +static int NET_IF_TOTAL_PACKETS(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + struct ifnet value; + char interface[MAX_STRING_LEN]; + int ret = SYSINFO_RET_FAIL; + + assert(result); + + init_result(result); + + if(num_param(param) > 1) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + ret = get_ifdata(interface, &value); + + if(ret == SYSINFO_RET_OK) + { + SET_UI64_RESULT(result, value.if_opackets + value.if_ipackets); + ret = SYSINFO_RET_OK; + } + + return ret; +} + +static int NET_IF_TOTAL_ERRORS(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + struct ifnet value; + char interface[MAX_STRING_LEN]; + int ret = SYSINFO_RET_FAIL; + + assert(result); + + init_result(result); + + if(num_param(param) > 1) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + ret = get_ifdata(interface, &value); + + if(ret == SYSINFO_RET_OK) + { + SET_UI64_RESULT(result, value.if_oerrors + value.if_ierrors); + ret = SYSINFO_RET_OK; + } + + return ret; +} + +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ +#define NET_FNCLIST struct net_fnclist_s +NET_FNCLIST +{ + char *mode; + int (*function)(); +}; + + NET_FNCLIST fl[] = + { + {"bytes", NET_IF_TOTAL_BYTES}, + {"packets", NET_IF_TOTAL_PACKETS}, + {"errors", NET_IF_TOTAL_ERRORS}, + {0, 0} + }; + + char interface[MAX_STRING_LEN]; + char mode[MAX_STRING_LEN]; + int i; + + assert(result); + + init_result(result); + + if(num_param(param) > 2) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 2, mode, MAX_STRING_LEN) != 0) + { + mode[0] = '\0'; + } + if(mode[0] == '\0') + { + /* default parameter */ + sprintf(mode, "bytes"); + } + + for(i=0; fl[i].mode!=0; i++) + { + if(strncmp(mode, fl[i].mode, MAX_STRING_LEN)==0) + { + return (fl[i].function)(cmd, interface, flags, result); + } + } + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/openbsd/openbsd.c b/src/libs/zbxsysinfo/openbsd/openbsd.c index cf2db472..3d57642c 100644 --- a/src/libs/zbxsysinfo/openbsd/openbsd.c +++ b/src/libs/zbxsysinfo/openbsd/openbsd.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/osf/net.c b/src/libs/zbxsysinfo/osf/net.c index 851be786..e1086771 100644 --- a/src/libs/zbxsysinfo/osf/net.c +++ b/src/libs/zbxsysinfo/osf/net.c @@ -42,6 +42,16 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_FAIL; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + + assert(result); + + init_result(result); + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/osf/osf.c b/src/libs/zbxsysinfo/osf/osf.c index ddd8ac72..fb6cd580 100644 --- a/src/libs/zbxsysinfo/osf/osf.c +++ b/src/libs/zbxsysinfo/osf/osf.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/osx/net.c b/src/libs/zbxsysinfo/osx/net.c index 851be786..e1086771 100644 --- a/src/libs/zbxsysinfo/osx/net.c +++ b/src/libs/zbxsysinfo/osx/net.c @@ -42,6 +42,16 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_FAIL; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + + assert(result); + + init_result(result); + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/osx/osx.c b/src/libs/zbxsysinfo/osx/osx.c index bb33e9c8..ec5a0837 100644 --- a/src/libs/zbxsysinfo/osx/osx.c +++ b/src/libs/zbxsysinfo/osx/osx.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/solaris/net.c b/src/libs/zbxsysinfo/solaris/net.c index 552b75d1..2cf8655f 100644 --- a/src/libs/zbxsysinfo/solaris/net.c +++ b/src/libs/zbxsysinfo/solaris/net.c @@ -242,6 +242,103 @@ static int NET_IF_OUT_ERRORS(const char *cmd, const char *param, unsigned flags, return ret; } +static int NET_IF_TOTAL_BYTES(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + kstat_named_t ikn; + kstat_named_t okn; + char interface[MAX_STRING_LEN]; + int ret; + + assert(result); + + init_result(result); + + if(num_param(param) > 1) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + ret = get_kstat_named_field(interface, "rbytes64", &ikn) & get_kstat_named_field(interface, "obytes64", &okn); + if (ret == SYSINFO_RET_OK) + { + SET_UI64_RESULT(result, ikn.value.ui64 + okn.value.ui64); + } + else + { + ret = get_kstat_named_field(interface, "rbytes", &ikn) & get_kstat_named_field(interface, "obytes", &okn); + SET_UI64_RESULT(result, ikn.value.ui32 + okn.value.ui32); + } + + return ret; +} + +static int NET_IF_TOTAL_PACKETS(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + kstat_named_t ikn; + kstat_named_t okn; + char interface[MAX_STRING_LEN]; + int ret; + + assert(result); + + init_result(result); + + if(num_param(param) > 1) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + ret = get_kstat_named_field(interface, "ipackets64", &ikn) & get_kstat_named_field(interface, "opackets64", &okn); + if (ret == SYSINFO_RET_OK) + { + SET_UI64_RESULT(result, ikn.value.ui64 + okn.value.ui64); + } + else + { + ret = get_kstat_named_field(interface, "ipackets", &ikn) & get_kstat_named_field(interface, "opackets", &okn); + SET_UI64_RESULT(result, ikn.value.ui32 + okn.value.ui32); + } + + return ret; +} + +static int NET_IF_TOTAL_ERRORS(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + kstat_named_t ikn; + kstat_named_t okn; + char interface[MAX_STRING_LEN]; + int ret; + + assert(result); + + init_result(result); + + if(num_param(param) > 1) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + ret = get_kstat_named_field(interface, "ierrors", &ikn) & get_kstat_named_field(interface, "oerrors", &okn); + SET_UI64_RESULT(result, ikn.value.ui32 + okn.value.ui32); + + return ret; +} + int NET_IF_COLLISIONS(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { kstat_named_t kn; @@ -399,4 +496,60 @@ NET_FNCLIST return SYSINFO_RET_FAIL; } +int NET_IF_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + +#define NET_FNCLIST struct net_fnclist_s +NET_FNCLIST +{ + char *mode; + int (*function)(); +}; + + NET_FNCLIST fl[] = + { + {"bytes", NET_IF_TOTAL_BYTES}, + {"packets", NET_IF_TOTAL_PACKETS}, + {"errors", NET_IF_TOTAL_ERRORS}, + {0, 0} + }; + + char interface[MAX_STRING_LEN]; + char mode[MAX_STRING_LEN]; + int i; + + assert(result); + + init_result(result); + + if(num_param(param) > 2) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, interface, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 2, mode, MAX_STRING_LEN) != 0) + { + mode[0] = '\0'; + } + if(mode[0] == '\0') + { + /* default parameter */ + sprintf(mode, "bytes"); + } + + for(i=0; fl[i].mode!=0; i++) + { + if(strncmp(mode, fl[i].mode, MAX_STRING_LEN)==0) + { + return (fl[i].function)(cmd, interface, flags, result); + } + } + + return SYSINFO_RET_FAIL; +} diff --git a/src/libs/zbxsysinfo/solaris/solaris.c b/src/libs/zbxsysinfo/solaris/solaris.c index 06492538..9bd627cc 100644 --- a/src/libs/zbxsysinfo/solaris/solaris.c +++ b/src/libs/zbxsysinfo/solaris/solaris.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "hme0,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "hme0,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "hme0,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "hme0"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/libs/zbxsysinfo/unknown/net.c b/src/libs/zbxsysinfo/unknown/net.c index 851be786..c0b853df 100644 --- a/src/libs/zbxsysinfo/unknown/net.c +++ b/src/libs/zbxsysinfo/unknown/net.c @@ -42,6 +42,16 @@ int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT return SYSINFO_RET_FAIL; } +int NET_IF_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + + assert(result); + + init_result(result); + + return SYSINFO_RET_FAIL; +} + int NET_TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { assert(result); diff --git a/src/libs/zbxsysinfo/unknown/unknown.c b/src/libs/zbxsysinfo/unknown/unknown.c index 4c60f2b5..62ae30c0 100644 --- a/src/libs/zbxsysinfo/unknown/unknown.c +++ b/src/libs/zbxsysinfo/unknown/unknown.c @@ -237,6 +237,7 @@ ZBX_METRIC parameters_specific[]= {"net.if.in", CF_USEUPARAM, NET_IF_IN, 0, "lo,bytes"}, {"net.if.out", CF_USEUPARAM, NET_IF_OUT, 0, "lo,bytes"}, + {"net.if.total", CF_USEUPARAM, NET_IF_TOTAL, 0, "lo,bytes"}, {"net.if.collisions", CF_USEUPARAM, NET_IF_COLLISIONS, 0, "lo"}, {"vfs.fs.size", CF_USEUPARAM, VFS_FS_SIZE, 0, "/,free"}, diff --git a/src/zabbix_server/actions.c b/src/zabbix_server/actions.c index 6d326302..163e716e 100644 --- a/src/zabbix_server/actions.c +++ b/src/zabbix_server/actions.c @@ -401,6 +401,7 @@ static int get_next_command(char** command_list, char** alias, int* is_group, ch { run_remote_command(alias, command); } +// DBadd_alert(action->actionid,trigger->triggerid, userid, media.mediatypeid,media.sendto,action->subject,action->scripts, action->maxrepeats, action->repeatdelay); // TODO !!! Add alert for remote commands !!! } zabbix_log( LOG_LEVEL_DEBUG, "Run remote commands END"); } @@ -697,7 +698,6 @@ void apply_actions(DB_TRIGGER *trigger,int alarmid,int trigger_value) if(check_action_conditions(trigger, alarmid, trigger_value, action.actionid) == SUCCEED) { - action.actiontype=atoi(row[9]); action.userid=atoi(row[1]); action.delay=atoi(row[2]); @@ -710,6 +710,7 @@ void apply_actions(DB_TRIGGER *trigger,int alarmid,int trigger_value) action.maxrepeats=atoi(row[6]); action.repeatdelay=atoi(row[7]); strscpy(action.scripts,row[8]); + action.actiontype=atoi(row[9]); if(action.actiontype == ACTION_TYPE_MESSAGE) send_to_user(trigger,&action); |
