summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-05-12 14:23:12 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-05-12 14:23:12 +0000
commit4182bc6afb20b00fa27a54c67056bb98a58a49bb (patch)
tree5cab17d23e387cc3b6e8c92e4c928ac5e1111b76 /src
parent6a6ac0772b8215bffc5fe8b02fc1033dbf273f41 (diff)
downloadzabbix-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.c4
-rw-r--r--src/libs/zbxsysinfo/aix/aix.c1
-rw-r--r--src/libs/zbxsysinfo/aix/net.c10
-rw-r--r--src/libs/zbxsysinfo/freebsd/freebsd.c1
-rw-r--r--src/libs/zbxsysinfo/freebsd/net.c10
-rw-r--r--src/libs/zbxsysinfo/hpux/hpux.c1
-rw-r--r--src/libs/zbxsysinfo/hpux/net.c10
-rw-r--r--src/libs/zbxsysinfo/linux/linux.c1
-rw-r--r--src/libs/zbxsysinfo/linux/net.c63
-rw-r--r--src/libs/zbxsysinfo/netbsd/net.c10
-rw-r--r--src/libs/zbxsysinfo/netbsd/netbsd.c1
-rw-r--r--src/libs/zbxsysinfo/openbsd/net.c149
-rw-r--r--src/libs/zbxsysinfo/openbsd/openbsd.c1
-rw-r--r--src/libs/zbxsysinfo/osf/net.c10
-rw-r--r--src/libs/zbxsysinfo/osf/osf.c1
-rw-r--r--src/libs/zbxsysinfo/osx/net.c10
-rw-r--r--src/libs/zbxsysinfo/osx/osx.c1
-rw-r--r--src/libs/zbxsysinfo/solaris/net.c153
-rw-r--r--src/libs/zbxsysinfo/solaris/solaris.c1
-rw-r--r--src/libs/zbxsysinfo/unknown/net.c10
-rw-r--r--src/libs/zbxsysinfo/unknown/unknown.c1
-rw-r--r--src/zabbix_server/actions.c3
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);