summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxsysinfo/linux/memory.c
diff options
context:
space:
mode:
authorsasha <sasha@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-11-09 14:52:54 +0000
committersasha <sasha@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-11-09 14:52:54 +0000
commitd7d135227396a5b3cede974e94c25032a1bc69d2 (patch)
treedd9f58193183139cb6f104fb6b01bdaf503e1828 /src/libs/zbxsysinfo/linux/memory.c
parentb49e076608f062db84ef895f2541d03f907dc02a (diff)
downloadzabbix-d7d135227396a5b3cede974e94c25032a1bc69d2.tar.gz
zabbix-d7d135227396a5b3cede974e94c25032a1bc69d2.tar.xz
zabbix-d7d135227396a5b3cede974e94c25032a1bc69d2.zip
- [ZBX-149] fixed incorrect processing of vm.memory.size key in FreeBSD
- [ZBX-109] added support of vm.memory.size[pfree] Linux, FreeBSD & Win agents [svn merge -r4992:4994 svn://svn.zabbix.com/branches/1.4] git-svn-id: svn://svn.zabbix.com/trunk@4995 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsysinfo/linux/memory.c')
-rw-r--r--src/libs/zbxsysinfo/linux/memory.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/libs/zbxsysinfo/linux/memory.c b/src/libs/zbxsysinfo/linux/memory.c
index a6a03531..cac0d1a3 100644
--- a/src/libs/zbxsysinfo/linux/memory.c
+++ b/src/libs/zbxsysinfo/linux/memory.c
@@ -151,6 +151,41 @@ static int VM_MEMORY_FREE(const char *cmd, const char *param, unsigned flags, AG
}
}
+static int VM_MEMORY_PFREE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+{
+ AGENT_RESULT result_tmp;
+ zbx_uint64_t tot_val = 0;
+ zbx_uint64_t free_val = 0;
+
+ assert(result);
+
+ init_result(result);
+ init_result(&result_tmp);
+
+ if(VM_MEMORY_TOTAL(cmd, param, flags, &result_tmp) != SYSINFO_RET_OK ||
+ !(result_tmp.type & AR_UINT64))
+ return SYSINFO_RET_FAIL;
+ tot_val = result_tmp.ui64;
+
+ /* Check fot division by zero */
+ if(tot_val == 0)
+ {
+ free_result(&result_tmp);
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(VM_MEMORY_FREE(cmd, param, flags, &result_tmp) != SYSINFO_RET_OK ||
+ !(result_tmp.type & AR_UINT64))
+ return SYSINFO_RET_FAIL;
+ free_val = result_tmp.ui64;
+
+ free_result(&result_tmp);
+
+ SET_DBL_RESULT(result, (100.0 * (double)free_val) / (double)tot_val);
+
+ return SYSINFO_RET_OK;
+}
+
int VM_MEMORY_SIZE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
#define MEM_FNCLIST struct mem_fnclist_s
@@ -163,6 +198,7 @@ MEM_FNCLIST
MEM_FNCLIST fl[] =
{
{"free", VM_MEMORY_FREE},
+ {"pfree", VM_MEMORY_PFREE},
{"shared", VM_MEMORY_SHARED},
{"total", VM_MEMORY_TOTAL},
{"buffers", VM_MEMORY_BUFFERS},