cleanup rrd/net_submit
This commit is contained in:
parent
d1e5e5a1dd
commit
5d4148234e
2
Makefile
2
Makefile
@ -11,7 +11,7 @@ WITH_CURL = yes
|
|||||||
SAMMLER_SRC := sammler.c configfile.c event.c helper.c logging.c network.c plugins.c
|
SAMMLER_SRC := sammler.c configfile.c event.c helper.c logging.c network.c plugins.c
|
||||||
PLUGIN_SRC := p_ctstat.c p_load.c p_memory.c p_mount.c p_netdev.c p_random.c
|
PLUGIN_SRC := p_ctstat.c p_load.c p_memory.c p_mount.c p_netdev.c p_random.c
|
||||||
PLUGIN_SRC += p_rtstat.c p_stat.c p_uptime.c p_vmstat.c
|
PLUGIN_SRC += p_rtstat.c p_stat.c p_uptime.c p_vmstat.c
|
||||||
CFLAGS := -O2 -Wall
|
CFLAGS := -O2 -Wall -fno-stack-protector
|
||||||
LDFLAGS := -ldl -rdynamic
|
LDFLAGS := -ldl -rdynamic
|
||||||
|
|
||||||
# ############################
|
# ############################
|
||||||
|
20
network.c
20
network.c
@ -30,13 +30,13 @@ static LIST_HEAD(fwd_list);
|
|||||||
static char *tx_buf, *rx_buf;
|
static char *tx_buf, *rx_buf;
|
||||||
static int tx_pos;
|
static int tx_pos;
|
||||||
|
|
||||||
int net_submit(const char *hostname, const char *plugin, const char *filename, int ds_id, const char *data)
|
int net_submit(const char *hostname, struct sammler_plugin *plugin, const char *filename, int ds_id, const char *data)
|
||||||
{
|
{
|
||||||
if (list_empty(&fwd_list))
|
if (list_empty(&fwd_list))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int size = snprintf(tx_buf + tx_pos, BUFSIZE - tx_pos, "%s:%s:%s:%d %s\n",
|
int size = snprintf(tx_buf + tx_pos, BUFSIZE - tx_pos, "%s:%s:%s:%d %s\n",
|
||||||
hostname, plugin, filename, ds_id, data);
|
hostname, plugin->name, filename, ds_id, data);
|
||||||
|
|
||||||
if (size < 0 || size >= BUFSIZE - tx_pos) {
|
if (size < 0 || size >= BUFSIZE - tx_pos) {
|
||||||
log_print(LOG_ERROR, "net_submit(): arguments too long");
|
log_print(LOG_ERROR, "net_submit(): arguments too long");
|
||||||
@ -69,19 +69,27 @@ static int net_receive(int socket, void *privdata)
|
|||||||
while ((delim = memchr(rx_buf + rx_pos, '\n', size - rx_pos))) {
|
while ((delim = memchr(rx_buf + rx_pos, '\n', size - rx_pos))) {
|
||||||
*delim = '\0';
|
*delim = '\0';
|
||||||
|
|
||||||
char *data[2], *part[4];
|
char *data[2];
|
||||||
int ret = strsplit(rx_buf + rx_pos, " ", data, 2);
|
int ret = strsplit(rx_buf + rx_pos, " ", data, 2);
|
||||||
if (ret != 2) {
|
if (ret != 2) {
|
||||||
log_print(LOG_ERROR, "net_receive() abort data-split");
|
log_print(LOG_ERROR, "net_receive(): abort data-split");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *part[4];
|
||||||
ret = strsplit(data[0], ":", part, 4);
|
ret = strsplit(data[0], ":", part, 4);
|
||||||
if (ret != 4) {
|
if (ret != 4) {
|
||||||
log_print(LOG_ERROR, "net_receive() abort header-split");
|
log_print(LOG_ERROR, "net_receive(): abort header-split");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
rrd_submit(part[0], part[1], part[2], atoi(part[3]), data[1]);
|
|
||||||
|
struct sammler_plugin *plugin = plugin_lookup(part[1]);
|
||||||
|
if (plugin == NULL) {
|
||||||
|
log_print(LOG_ERROR, "net_receive(): plugin not found (%s)", part[1]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
rrd_submit(part[0], plugin, part[2], atoi(part[3]), data[1]);
|
||||||
|
|
||||||
rx_pos = (delim - rx_buf) +1;
|
rx_pos = (delim - rx_buf) +1;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
int net_init(void);
|
int net_init(void);
|
||||||
|
|
||||||
int net_submit(const char *hostname, const char *plugin, const char *filename, int ds_id, const char *data);
|
int net_submit(const char *hostname, struct sammler_plugin *plugin, const char *filename, int ds_id, const char *data);
|
||||||
void net_submit_flush(void);
|
void net_submit_flush(void);
|
||||||
|
|
||||||
#endif /* _NETWORK_H_ */
|
#endif /* _NETWORK_H_ */
|
||||||
|
@ -175,10 +175,10 @@ int probe_submit(struct sammler_plugin *plugin, const char *filename, int ds_id,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
net_submit(hostname, plugin->name, filename, ds_id, buffer);
|
net_submit(hostname, plugin, filename, ds_id, buffer);
|
||||||
|
|
||||||
if (!(submit_flags & SUBMIT_NET_ONLY))
|
if (!(submit_flags & SUBMIT_NET_ONLY))
|
||||||
rrd_submit(hostname, plugin->name, filename, ds_id, buffer);
|
rrd_submit(hostname, plugin, filename, ds_id, buffer);
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return 0;
|
return 0;
|
||||||
|
102
rrdtool.c
102
rrdtool.c
@ -48,7 +48,7 @@ struct rra_cb_data {
|
|||||||
int *pos;
|
int *pos;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int append_rra_config_cb(const char *parameter, void *privdata)
|
static int append_rra_config(const char *parameter, void *privdata)
|
||||||
{
|
{
|
||||||
struct rra_cb_data *data = (struct rra_cb_data *)privdata;
|
struct rra_cb_data *data = (struct rra_cb_data *)privdata;
|
||||||
|
|
||||||
@ -62,114 +62,78 @@ static int append_rra_config_cb(const char *parameter, void *privdata)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int append_rra_config(char *buffer, int size, int *pos)
|
static int do_rrd(int (*rrd_func)(int, char **), char *cmd)
|
||||||
{
|
{
|
||||||
struct rra_cb_data data = {
|
|
||||||
.buffer = buffer,
|
|
||||||
.size = size,
|
|
||||||
.pos = pos,
|
|
||||||
};
|
|
||||||
|
|
||||||
return config_get_strings("global", "rra", append_rra_config_cb, &data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int do_rrd(int mode, const char *cmd)
|
|
||||||
{
|
|
||||||
int argc;
|
|
||||||
char *argv[ARGCMAX];
|
char *argv[ARGCMAX];
|
||||||
|
int argc = strsplit(cmd, " \t\n", argv, ARGCMAX -1);
|
||||||
argc = strsplit(cmd, " \t\n", argv, ARGCMAX -1);
|
|
||||||
argv[argc] = NULL;
|
argv[argc] = NULL;
|
||||||
|
|
||||||
optind = 0;
|
optind = 0;
|
||||||
rrd_clear_error();
|
rrd_clear_error();
|
||||||
|
|
||||||
if (mode == RRDTOOL_CREATE) {
|
int retval = rrd_func(argc, argv);
|
||||||
if (rrd_create(argc, argv) == -1) {
|
if (retval == -1) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
log_print(LOG_ERROR, "rrd_create failed: %s: %s",
|
log_print(LOG_ERROR, "rrd_func failed: %s", rrd_get_error());
|
||||||
argv[1], rrd_get_error());
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (mode == RRDTOOL_UPDATE) {
|
free(cmd);
|
||||||
if (rrd_update(argc, argv) == -1) {
|
return retval;
|
||||||
errno = 0;
|
|
||||||
log_print(LOG_ERROR, "rrd_update failed: %s: %s",
|
|
||||||
argv[1], rrd_get_error());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rrd_create_file(const char *filename, const char *plugin_name, int ds_id)
|
static int rrd_create_file(const char *filename, struct sammler_plugin *plugin, int ds_id)
|
||||||
{
|
{
|
||||||
struct sammler_plugin *plugin;
|
const char *ds_def = plugin->get_ds(ds_id);
|
||||||
int pos, step, retval;
|
|
||||||
const char *ds_def;
|
|
||||||
char *buffer;
|
|
||||||
|
|
||||||
plugin = plugin_lookup(plugin_name);
|
|
||||||
if (plugin == NULL) {
|
|
||||||
log_print(LOG_ERROR, "Plugin not found (%s)", plugin_name);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ds_def = plugin->get_ds(ds_id);
|
|
||||||
if (ds_def == NULL) {
|
if (ds_def == NULL) {
|
||||||
log_print(LOG_ERROR, "No vaild DS found (%s:%d)", plugin->name, ds_id);
|
log_print(LOG_ERROR, "No vaild DS found (%s:%d)", plugin->name, ds_id);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = malloc(ARGVSIZE);
|
char *buffer = malloc(ARGVSIZE);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
log_print(LOG_ERROR, "append_ds_config: out of memory");
|
log_print(LOG_ERROR, "append_ds_config: out of memory");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
step = plugin->interval;
|
int step = plugin->interval;
|
||||||
|
int pos = snprintf(buffer, ARGVSIZE, "create %s -s %d %s ", filename, step, ds_def);
|
||||||
pos = snprintf(buffer, ARGVSIZE, "create %s -s %d %s ", filename, step, ds_def);
|
|
||||||
if (pos < 0 || pos >= ARGVSIZE) {
|
if (pos < 0 || pos >= ARGVSIZE) {
|
||||||
log_print(LOG_ERROR, "rrd_create_file: arguments too long");
|
log_print(LOG_ERROR, "rrd_create_file: arguments too long");
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (append_rra_config(buffer, ARGVSIZE, &pos) <= 0) {
|
struct rra_cb_data data = {
|
||||||
|
.buffer = buffer,
|
||||||
|
.size = ARGVSIZE,
|
||||||
|
.pos = &pos,
|
||||||
|
};
|
||||||
|
|
||||||
|
int cnt = config_get_strings("global", "rra", append_rra_config, &data);
|
||||||
|
if (cnt <= 0) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = do_rrd(RRDTOOL_CREATE, buffer);
|
return do_rrd(&rrd_create, buffer);
|
||||||
free(buffer);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rrd_update_file(const char *filename, const char *values)
|
static int rrd_update_file(const char *filename, const char *values)
|
||||||
{
|
{
|
||||||
int pos, retval;
|
char *buffer = malloc(ARGVSIZE);
|
||||||
char *buffer;
|
|
||||||
|
|
||||||
buffer = malloc(ARGVSIZE);
|
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
log_print(LOG_ERROR, "append_ds_config: out of memory");
|
log_print(LOG_ERROR, "append_ds_config: out of memory");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = snprintf(buffer, ARGVSIZE, "update %s %lu:%s", filename, time(NULL), values);
|
int pos = snprintf(buffer, ARGVSIZE, "update %s %lu:%s", filename, time(NULL), values);
|
||||||
if (pos < 0 || pos >= ARGVSIZE) {
|
if (pos < 0 || pos >= ARGVSIZE) {
|
||||||
log_print(LOG_ERROR, "rrd_update_file: arguments too long");
|
log_print(LOG_ERROR, "rrd_update_file: arguments too long");
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = do_rrd(RRDTOOL_UPDATE, buffer);
|
return do_rrd(&rrd_update, buffer);
|
||||||
free(buffer);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_create_dir(const char *dir)
|
static int check_create_dir(const char *dir)
|
||||||
@ -197,9 +161,9 @@ static int check_create_dir(const char *dir)
|
|||||||
|
|
||||||
static int create_parent_dirs(char *filename)
|
static int create_parent_dirs(char *filename)
|
||||||
{
|
{
|
||||||
char *lastslash, *nextslash = filename;
|
char *nextslash = filename;
|
||||||
|
|
||||||
lastslash = strrchr(filename, '/');
|
char *lastslash = strrchr(filename, '/');
|
||||||
if (lastslash == NULL) {
|
if (lastslash == NULL) {
|
||||||
log_print(LOG_ERROR, "create_parent_dirs: invalid file name");
|
log_print(LOG_ERROR, "create_parent_dirs: invalid file name");
|
||||||
return -1;
|
return -1;
|
||||||
@ -229,30 +193,26 @@ static int create_parent_dirs(char *filename)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rrd_submit(const char *hostname, const char *plugin, const char *filename, int ds_id, const char *data)
|
int rrd_submit(const char *hostname, struct sammler_plugin *plugin, const char *filename, int ds_id, const char *data)
|
||||||
{
|
{
|
||||||
struct stat statbuf;
|
|
||||||
static const char *rrd_dir = NULL;
|
static const char *rrd_dir = NULL;
|
||||||
|
|
||||||
char *fullfile;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
if (rrd_dir == NULL)
|
if (rrd_dir == NULL)
|
||||||
rrd_dir = config_get_string("global", "rrd_dir", ".");
|
rrd_dir = config_get_string("global", "rrd_dir", ".");
|
||||||
|
|
||||||
fullfile = malloc(BUFSIZE);
|
char *fullfile = malloc(BUFSIZE);
|
||||||
if (fullfile == NULL) {
|
if (fullfile == NULL) {
|
||||||
log_print(LOG_ERROR, "rrd_submit: out of memory");
|
log_print(LOG_ERROR, "rrd_submit: out of memory");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = snprintf(fullfile, BUFSIZE, "%s/%s/%s", rrd_dir, hostname, filename);
|
int len = snprintf(fullfile, BUFSIZE, "%s/%s/%s", rrd_dir, hostname, filename);
|
||||||
if (len < 0 || len >= BUFSIZE) {
|
if (len < 0 || len >= BUFSIZE) {
|
||||||
log_print(LOG_ERROR, "rrd_submit: arguments too long");
|
log_print(LOG_ERROR, "rrd_submit: arguments too long");
|
||||||
free(fullfile);
|
free(fullfile);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct stat statbuf;
|
||||||
if (stat(fullfile, &statbuf) == -1) {
|
if (stat(fullfile, &statbuf) == -1) {
|
||||||
if (errno == ENOENT) {
|
if (errno == ENOENT) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define _RRDTOOL_H_
|
#define _RRDTOOL_H_
|
||||||
|
|
||||||
#ifdef WITH_RRD
|
#ifdef WITH_RRD
|
||||||
int rrd_submit(const char *hostname, const char *plugin, const char *filename, int ds_id, const char *data);
|
int rrd_submit(const char *hostname, struct sammler_plugin *plugin, const char *filename, int ds_id, const char *data);
|
||||||
#else
|
#else
|
||||||
#define rrd_submit(hostname, plugin, filename, ds_id, data)
|
#define rrd_submit(hostname, plugin, filename, ds_id, data)
|
||||||
#endif
|
#endif
|
||||||
|
@ -17,8 +17,8 @@ plugin p_vmstat.so
|
|||||||
plugin p_uptime.so
|
plugin p_uptime.so
|
||||||
plugin p_netdev.so
|
plugin p_netdev.so
|
||||||
plugin p_mount.so
|
plugin p_mount.so
|
||||||
#plugin p_ctstat.so
|
plugin p_ctstat.so
|
||||||
#plugin p_rtstat.so
|
plugin p_rtstat.so
|
||||||
plugin p_random.so
|
plugin p_random.so
|
||||||
plugin p_mysql.so
|
plugin p_mysql.so
|
||||||
plugin p_apache.so
|
plugin p_apache.so
|
||||||
|
Loading…
Reference in New Issue
Block a user