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

add memory sensor

parent 0f4f64ba
No related branches found
No related tags found
3 merge requests!9fix sensor example (doc),!6Simple memory sensor,!5Add dev name to labels
This commit is part of merge request !5. Comments created here will be created in the context of that merge request.
......@@ -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"
......
src/memory.c 0 → 100644
/*******************************************************
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;
}
src/memory.h 0 → 100644
/*******************************************************
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