summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxsysinfo/linux
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-07-18 07:42:29 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-07-18 07:42:29 +0000
commit125d97877ec6846cd8be946eb786621e3debec81 (patch)
treea5c01f85e7485d707e0a864e9ea7d0ea4670e1ca /src/libs/zbxsysinfo/linux
parente5d67b4bf90b74467862df4555f7c061f7a13b47 (diff)
downloadzabbix-125d97877ec6846cd8be946eb786621e3debec81.tar.gz
zabbix-125d97877ec6846cd8be946eb786621e3debec81.tar.xz
zabbix-125d97877ec6846cd8be946eb786621e3debec81.zip
- added support of "ayatem.swap.out" key for Linux with kernel 2.4 (Eugene)
- added support of "ayatem.swap.in" key for Linux with kernel 2.4 (Eugene) git-svn-id: svn://svn.zabbix.com/trunk@3056 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsysinfo/linux')
-rw-r--r--src/libs/zbxsysinfo/linux/linux.c2
-rw-r--r--src/libs/zbxsysinfo/linux/swap.c137
2 files changed, 134 insertions, 5 deletions
diff --git a/src/libs/zbxsysinfo/linux/linux.c b/src/libs/zbxsysinfo/linux/linux.c
index 0926604e..ca5b612c 100644
--- a/src/libs/zbxsysinfo/linux/linux.c
+++ b/src/libs/zbxsysinfo/linux/linux.c
@@ -70,7 +70,7 @@ ZBX_METRIC parameters_specific[]=
{"system.swap.size", CF_USEUPARAM, SYSTEM_SWAP_SIZE, 0, "all,free"},
{"system.swap.in", CF_USEUPARAM, SYSTEM_SWAP_IN, 0, "all"},
- {"system.swap.out", CF_USEUPARAM, SYSTEM_SWAP_OUT, 0, "all,count"},
+ {"system.swap.out", CF_USEUPARAM, SYSTEM_SWAP_OUT, 0, "all"},
{"system.hostname", 0, SYSTEM_HOSTNAME, 0, 0},
diff --git a/src/libs/zbxsysinfo/linux/swap.c b/src/libs/zbxsysinfo/linux/swap.c
index 03145a81..a719fe73 100644
--- a/src/libs/zbxsysinfo/linux/swap.c
+++ b/src/libs/zbxsysinfo/linux/swap.c
@@ -173,15 +173,144 @@ int OLD_SWAP(const char *cmd, const char *param, unsigned flags, AGENT_RESUL
return ret;
}
+static int get_swap_io(zbx_uint64_t *swapin, zbx_uint64_t *swapout)
+{
+ FILE *f = NULL;
+ char line[MAX_STRING_LEN];
+ char name[20];
+ zbx_uint64_t
+ value1,
+ value2;
+
+ if(NULL != (f = fopen("/proc/stat","r")) )
+ {
+ while(fgets(line, sizeof(line), f))
+ {
+ if(sscanf(line, "%10s\t" ZBX_FS_UI64 "\t" ZBX_FS_UI64 "\n", name, &value1, &value2) != 3)
+ continue;
+
+ if(strcmp(name, "swap"))
+ continue;
+
+ if(swapin) *swapin = value1;
+ if(swapout) *swapout = value2;
+
+ return SYSINFO_RET_OK;
+ };
+ zbx_fclose(f);
+ }
+ return SYSINFO_RET_FAIL;
+}
+
int SYSTEM_SWAP_IN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
- /* in this moment this function for this platform unsupported */
- return SYSINFO_RET_FAIL;
+ int ret = SYSINFO_RET_FAIL;
+ char swapdev[10];
+ char mode[20];
+ zbx_uint64_t value = 0;
+
+ assert(result);
+
+ init_result(result);
+
+ if(num_param(param) > 2)
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(get_param(param, 1, swapdev, sizeof(swapdev)) != 0)
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(swapdev[0] == '\0')
+ {
+ /* default parameter */
+ zbx_snprintf(swapdev, sizeof(swapdev), "all");
+ }
+
+ if(strcmp(swapdev, "all"))
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(get_param(param, 2, mode, sizeof(mode)) != 0)
+ {
+ mode[0] = '\0';
+ }
+
+ if(mode[0] == '\0')
+ {
+ /* default parameter */
+ zbx_snprintf(mode, sizeof(mode), "pages");
+ }
+
+ if(strcmp(mode,"pages") != 0)
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if( SYSINFO_RET_OK == (ret = get_swap_io(&value, NULL)) )
+ {
+ SET_UI64_RESULT(result, value);
+ }
+
+ return ret;
}
int SYSTEM_SWAP_OUT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
- /* in this moment this function for this platform unsupported */
- return SYSINFO_RET_FAIL;
+ int ret = SYSINFO_RET_FAIL;
+ char swapdev[10];
+ char mode[20];
+ zbx_uint64_t value = 0;
+
+ assert(result);
+
+ init_result(result);
+
+ if(num_param(param) > 2)
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(get_param(param, 1, swapdev, sizeof(swapdev)) != 0)
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(swapdev[0] == '\0')
+ {
+ /* default parameter */
+ zbx_snprintf(swapdev, sizeof(swapdev), "all");
+ }
+
+ if(strcmp(swapdev, "all"))
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(get_param(param, 2, mode, sizeof(mode)) != 0)
+ {
+ mode[0] = '\0';
+ }
+
+ if(mode[0] == '\0')
+ {
+ /* default parameter */
+ zbx_snprintf(mode, sizeof(mode), "pages");
+ }
+
+ if(strcmp(mode,"pages") != 0)
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ if( SYSINFO_RET_OK == (ret = get_swap_io(NULL, &value)) )
+ {
+ SET_UI64_RESULT(result, value);
+ }
+
+ return ret;
}