diff options
| author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-07-18 07:42:29 +0000 |
|---|---|---|
| committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-07-18 07:42:29 +0000 |
| commit | 125d97877ec6846cd8be946eb786621e3debec81 (patch) | |
| tree | a5c01f85e7485d707e0a864e9ea7d0ea4670e1ca /src/libs/zbxsysinfo/linux | |
| parent | e5d67b4bf90b74467862df4555f7c061f7a13b47 (diff) | |
| download | zabbix-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.c | 2 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/linux/swap.c | 137 |
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; } |
