Commit 94ddb039ec694926c2867099e8dc38efc8ae3f8a
1 parent
0ff2d46d
Fixed memfree linux
Showing
2 changed files
with
45 additions
and
13 deletions
check_memfree/check_memfree.cpp
@@ -4,6 +4,36 @@ using namespace std; | @@ -4,6 +4,36 @@ using namespace std; | ||
4 | 4 | ||
5 | char *servicename = (char*)"MEMORY"; | 5 | char *servicename = (char*)"MEMORY"; |
6 | 6 | ||
7 | +void getMem(ifstream *file, MEMINFO *meminfo) | ||
8 | +{ | ||
9 | + meminfo->freeMem = 0; | ||
10 | + meminfo->totalMem = 0; | ||
11 | + string line, field, value; | ||
12 | + getline(*file,line); | ||
13 | + do | ||
14 | + { | ||
15 | + field = line.substr(0,line.find_first_of(':')); | ||
16 | + value = line.substr(line.find_first_of(' '),line.find_last_of(' ')); | ||
17 | + if(field == "MemTotal") | ||
18 | + { | ||
19 | + meminfo->totalMem = str2int(value); | ||
20 | + } | ||
21 | + else if(field == "MemFree") | ||
22 | + { | ||
23 | + meminfo->freeMem += str2int(value); | ||
24 | + } | ||
25 | + else if(field == "Buffers") | ||
26 | + { | ||
27 | + meminfo->freeMem += str2int(value); | ||
28 | + } | ||
29 | + else if(field == "Cached") | ||
30 | + { | ||
31 | + meminfo->freeMem += str2int(value); | ||
32 | + } | ||
33 | + getline(*file,line); | ||
34 | + }while(!file->eof()); | ||
35 | +} | ||
36 | + | ||
7 | int getNum(ifstream *file) | 37 | int getNum(ifstream *file) |
8 | { | 38 | { |
9 | string numStr = ""; | 39 | string numStr = ""; |
@@ -104,21 +134,15 @@ int main(int argc, char **argv) | @@ -104,21 +134,15 @@ int main(int argc, char **argv) | ||
104 | return 3; | 134 | return 3; |
105 | } | 135 | } |
106 | 136 | ||
107 | - double freeMem = 0; | ||
108 | - double totalMem = 0; | ||
109 | - | ||
110 | - ifstream meminfo(MEMINFO); | 137 | + MEMINFO meminfo; |
138 | + ifstream meminfo_file(MEMINFO_FILE); | ||
111 | 139 | ||
112 | - totalMem = getNum(&meminfo); | ||
113 | - freeMem += getNum(&meminfo); | ||
114 | - getNum(&meminfo); | ||
115 | - freeMem += getNum(&meminfo); | ||
116 | - freeMem += getNum(&meminfo); | 140 | + getMem(&meminfo_file,&meminfo); |
117 | 141 | ||
118 | - meminfo.close(); | 142 | + meminfo_file.close(); |
119 | 143 | ||
120 | - int freeMemMB = freeMem / 1024; | ||
121 | - int totalMemMB = totalMem / 1024; | 144 | + int freeMemMB = meminfo.freeMem / 1024; |
145 | + int totalMemMB = meminfo.totalMem / 1024; | ||
122 | int percFree = ((double)freeMemMB/(double)totalMemMB)*100; | 146 | int percFree = ((double)freeMemMB/(double)totalMemMB)*100; |
123 | 147 | ||
124 | range warningLimit, criticalLimit; | 148 | range warningLimit, criticalLimit; |
@@ -156,3 +180,4 @@ int main(int argc, char **argv) | @@ -156,3 +180,4 @@ int main(int argc, char **argv) | ||
156 | cout << " - " << percFree << "% free (" << freeMemMB << " MB out of " << totalMemMB << " MB) |memory=" << freeMemMB << "MB;" << warningLimit.max << ";" << criticalLimit.max << ";" << "0;" << totalMemMB << endl; | 180 | cout << " - " << percFree << "% free (" << freeMemMB << " MB out of " << totalMemMB << " MB) |memory=" << freeMemMB << "MB;" << warningLimit.max << ";" << criticalLimit.max << ";" << "0;" << totalMemMB << endl; |
157 | return returnCode; | 181 | return returnCode; |
158 | } | 182 | } |
183 | + |
check_memfree/check_memfree.h
@@ -16,11 +16,18 @@ | @@ -16,11 +16,18 @@ | ||
16 | #include "range.h" | 16 | #include "range.h" |
17 | #include "auxiliar.h" | 17 | #include "auxiliar.h" |
18 | 18 | ||
19 | -#define MEMINFO "/proc/meminfo" | 19 | +#define MEMINFO_FILE "/proc/meminfo" |
20 | #define VERSION "1.0" | 20 | #define VERSION "1.0" |
21 | 21 | ||
22 | +struct meminfo { | ||
23 | + ssize_t totalMem; | ||
24 | + ssize_t freeMem; | ||
25 | +}; | ||
26 | +typedef struct meminfo MEMINFO; | ||
27 | + | ||
22 | int getNum(ifstream *file); | 28 | int getNum(ifstream *file); |
23 | void printVersion(); | 29 | void printVersion(); |
24 | void printHelp(bool longVersion); | 30 | void printHelp(bool longVersion); |
25 | 31 | ||
26 | #endif | 32 | #endif |
33 | + |