Skip to content
Snippets Groups Projects
Commit 80686673 authored by floreal.risso's avatar floreal.risso
Browse files

add memory sensor

parent 0f4f64ba
Branches
Tags ups/2022090800
3 merge requests!9fix sensor example (doc),!6Simple memory sensor,!5Add dev name to labels
......@@ -55,7 +55,7 @@ ls_sensors() {
try find src -type f -name '*.h' |
sed 's,src/\(.*\)\.h,\1,' |
grep -xEv "($hdr_blacklist)" |
grep -xE "($hdr_whitelist)"
grep -xE "($hdr_whitelist)"
}
# gen_sensors_h(sensor, nb_sensors)
......@@ -118,6 +118,10 @@ detect_caps() {
[ -d /sys/class/infiniband ] && hdr_whitelist="${hdr_whitelist}|infiniband"
[ -r /proc/stat ] && hdr_whitelist="${hdr_whitelist}|load"
if [ "$(uname -r | cut -d "." -f 1)" -gt "2" ]; then
hdr_whitelist="${hdr_whitelist}|memory"
fi
if [ -r /proc/net/route ]; then
dev=$(awk 'NR == 2 { print $1 }' /proc/net/route)
[ -e "/sys/class/net/$dev" ] && hdr_whitelist="${hdr_whitelist}|network"
......
/*******************************************************
Copyright (C) 2023-2023 Georges Da Costa <georges.da-costa@irit.fr>
This file is part of Mojitos.
Mojitos is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Mojitos is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with MojitO/S. If not, see <https://www.gnu.org/licenses/>.
*******************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <sys/sysinfo.h>
#include <string.h>
#include "util.h"
typedef enum {
TOTALRAM = 0,
FREERAM,
SHAREDRAM,
BUFFERRAM,
TOTALSWAP,
FREESWAP,
PROCS,
TOTALHIGH,
FREEHIGH,
MEM_UNIT,
MEMORY_COUNT,
} MemoryKind;
static const char *memory_labels[MEMORY_COUNT] = {
"totalram", "freeram", "sharedram", "bufferram",
"totalswap", "freeswap",
"procs",
"totalhigh", "freehigh", "mem_unit",
};
unsigned int init_memory(char *none1, void **none2)
{
UNUSED(none1);
UNUSED(none2);
struct sysinfo info;
if (sysinfo(&info) < 0) {
fprintf(stderr, "Failed to get the memory information");
return 0;
}
return MEMORY_COUNT;
}
unsigned int get_memory(uint64_t *results, void *none)
{
UNUSED(none);
struct sysinfo info;
if (sysinfo(&info) < 0) {
fprintf(stderr, "Failed to get the memory information");
exit(99);
}
// Can't use memcpy, the size isn't always the same
results[TOTALRAM] = info.totalram;
results[FREERAM] = info.freeram;
results[SHAREDRAM] = info.sharedram;
results[BUFFERRAM] = info.bufferram;
results[TOTALSWAP] = info.totalswap;
results[FREESWAP] = info.freeswap;
results[PROCS] = info.procs;
results[TOTALHIGH] = info.totalhigh;
results[FREEHIGH] = info.freehigh;
results[MEM_UNIT] = info.mem_unit;
return MEMORY_COUNT;
}
void label_memory(char **labels, void *none)
{
UNUSED(none);
memcpy(labels, memory_labels, sizeof(char *) * MEMORY_COUNT);
}
void clean_memory(void *none)
{
UNUSED(none);
return;
}
/*******************************************************
Copyright (C) 2023-2023 Georges Da Costa <georges.da-costa@irit.fr>
This file is part of Mojitos.
Mojitos is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Mojitos is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with MojitO/S. If not, see <https://www.gnu.org/licenses/>.
*******************************************************/
unsigned int init_memory(char *, void **);
unsigned int get_memory(uint64_t *results, void *);
void clean_memory(void *);
void label_memory(char **labels, void *);
Sensor memory = {
.init = init_memory,
.get = get_memory,
.clean = clean_memory,
.label = label_memory,
.nb_opt = 1,
};
Optparse memory_opt[1] = {
{
.longname = "memory",
.shortname = 'm',
.argtype = OPTPARSE_NONE,
.usage_arg = NULL,
.usage_msg = "Retrieves information about the memory via the syscall 'sysinfo(2)'.",
},
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment