mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-25 02:18:08 +00:00
Merge branch 'mnc'
This commit is contained in:
commit
6d4d58bbf3
6 changed files with 182 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.*.swp
|
4
tools/munin-node-c/.gitignore
vendored
Normal file
4
tools/munin-node-c/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# output files
|
||||
/*.o
|
||||
/munin-node-c
|
||||
/plugins/*
|
24
tools/munin-node-c/Makefile
Normal file
24
tools/munin-node-c/Makefile
Normal file
|
@ -0,0 +1,24 @@
|
|||
CC=gcc
|
||||
CFLAGS=-W -Wall -pedantic -Wextra -g -O2
|
||||
OBJS=main.o
|
||||
LINKS=
|
||||
|
||||
%.o: %.c
|
||||
${CC} ${CFLAGS} -c $< -o $@
|
||||
all: munin-node-c
|
||||
|
||||
munin-node-c: ${OBJS}
|
||||
${CC} ${CFLAGS} $^ -o $@
|
||||
clean:
|
||||
rm -f munin-node-c ${OBJS} ${LINKS}
|
||||
rm -Rf plugins
|
||||
|
||||
plugins: plugins/.munin-plugins-busybox.installed
|
||||
|
||||
plugins/.munin-plugins-busybox.installed:
|
||||
mkdir -p plugins
|
||||
cd ../munin-plugins-busybox && make
|
||||
cd plugins && for i in $$(find ../../munin-plugins-busybox -type l); do ln -s $$i; done
|
||||
touch plugins/.munin-plugins-busybox.installed
|
||||
|
||||
.PHONY: all clean plugins
|
28
tools/munin-node-c/README
Normal file
28
tools/munin-node-c/README
Normal file
|
@ -0,0 +1,28 @@
|
|||
This is a rewrite of munin node in C.
|
||||
|
||||
Pro:
|
||||
----
|
||||
|
||||
The purpose is multiple:
|
||||
|
||||
* reducing resource usage for embedded plateforms, specially when paired
|
||||
with the C rewrite of the core plugins.
|
||||
|
||||
* no need for Perl
|
||||
|
||||
* Everything runs from inetd.
|
||||
|
||||
Cons:
|
||||
-----
|
||||
|
||||
* You lose flexibility
|
||||
|
||||
It is compiled code, so you have to create binaries. Even one for each
|
||||
architecture.
|
||||
|
||||
* Not all the features are implemented
|
||||
|
||||
- root uid is not supported. All plugins are run with a single user, usually nobody.
|
||||
- no socket is opened. Everything runs from inetd.
|
||||
|
||||
GPLv2 - (C) 2013 Steve SCHNEPP <steve.schnepp@pwkf.org>
|
124
tools/munin-node-c/main.c
Normal file
124
tools/munin-node-c/main.c
Normal file
|
@ -0,0 +1,124 @@
|
|||
#include <libgen.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
|
||||
|
||||
char VERSION[] = "1.0.0";
|
||||
|
||||
int verbose;
|
||||
|
||||
char* host = "";
|
||||
char* plugin_dir = "plugins";
|
||||
char* spoolfetch_dir = "";
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
int optch;
|
||||
extern int opterr;
|
||||
int optarg_len;
|
||||
|
||||
char format[] = "vd:h:s:";
|
||||
|
||||
char line[LINE_MAX];
|
||||
|
||||
opterr = 1;
|
||||
|
||||
while ((optch = getopt(argc, argv, format)) != -1)
|
||||
switch (optch) {
|
||||
case 'v':
|
||||
verbose ++;
|
||||
break;
|
||||
case 'd':
|
||||
optarg_len = strlen(optarg);
|
||||
plugin_dir = (char *) malloc(optarg_len + 1);
|
||||
strcpy(plugin_dir, optarg);
|
||||
break;
|
||||
case 'h':
|
||||
optarg_len = strlen(optarg);
|
||||
host = (char *) malloc(optarg_len + 1);
|
||||
strcpy(host, optarg);
|
||||
break;
|
||||
case 's':
|
||||
optarg_len = strlen(optarg);
|
||||
spoolfetch_dir = (char *) malloc(optarg_len + 1);
|
||||
strcpy(spoolfetch_dir, optarg);
|
||||
break;
|
||||
}
|
||||
|
||||
/* get default hostname if not precised */
|
||||
if (! strlen(host)) {
|
||||
host = (char *) malloc(HOST_NAME_MAX + 1);
|
||||
gethostname(host, HOST_NAME_MAX);
|
||||
}
|
||||
|
||||
printf("# munin node at %s\n", host);
|
||||
while (fgets(line, LINE_MAX, stdin) != NULL) {
|
||||
char* cmd;
|
||||
char* arg;
|
||||
|
||||
line[LINE_MAX-1] = '\0';
|
||||
|
||||
cmd = strtok(line, " \t\n");
|
||||
arg = strtok(NULL, " \t\n");
|
||||
|
||||
if (!cmd || strlen(cmd) == 0) {
|
||||
printf("# empty cmd\n");
|
||||
} else if (strcmp(cmd, "version") == 0) {
|
||||
printf("munin c node version: %s\n", VERSION);
|
||||
} else if (strcmp(cmd, "nodes") == 0) {
|
||||
printf("%s\n", host);
|
||||
printf(".\n");
|
||||
} else if (strcmp(cmd, "quit") == 0) {
|
||||
return(0);
|
||||
} else if (strcmp(cmd, "list") == 0) {
|
||||
DIR* dirp = opendir(plugin_dir);
|
||||
struct dirent* dp;
|
||||
while ((dp = readdir(dirp)) != NULL) {
|
||||
char cmdline[LINE_MAX];
|
||||
char* plugin_filename = dp->d_name;;
|
||||
|
||||
if (plugin_filename[0] == '.') {
|
||||
/* No dotted plugin */
|
||||
continue;
|
||||
}
|
||||
|
||||
sprintf(cmdline, "%s/%s", plugin_dir, plugin_filename);
|
||||
if (access(cmdline, X_OK) == 0) {
|
||||
printf("%s ", plugin_filename);
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
closedir(dirp);
|
||||
} else if (
|
||||
strcmp(cmd, "config") == 0 ||
|
||||
strcmp(cmd, "fetch") == 0
|
||||
) {
|
||||
char cmdline[LINE_MAX];
|
||||
sprintf(cmdline, "%s/%s", plugin_dir, arg);
|
||||
if (access(cmdline, X_OK) == -1) {
|
||||
printf("# unknown plugin: %s\n", arg);
|
||||
continue;
|
||||
}
|
||||
sprintf(cmdline, "exec %s/%s %s", plugin_dir, arg, cmd);
|
||||
system(cmdline);
|
||||
printf(".\n");
|
||||
} else if (strcmp(cmd, "cap") == 0) {
|
||||
printf("cap ");
|
||||
if (strlen(spoolfetch_dir)) {
|
||||
printf("spool ");
|
||||
}
|
||||
printf("\n");
|
||||
} else if (strcmp(cmd, "spoolfetch") == 0) {
|
||||
printf("# not implem yet cmd: %s\n", cmd);
|
||||
} else {
|
||||
printf("# unknown cmd: %s\n", cmd);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
1
tools/munin-plugins-busybox/.gitignore
vendored
Normal file
1
tools/munin-plugins-busybox/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
*.o
|
Loading…
Add table
Add a link
Reference in a new issue