From: Timo Kokkonen Date: Mon, 19 Nov 2012 16:48:38 +0000 (+0200) Subject: Remove database.h X-Git-Url: http://git.itanic.dy.fi/?p=rrdd;a=commitdiff_plain;h=b54e0f249f7f67fcd9aa4ae2a43141afd9c679c2 Remove database.h Instead of having a database built in the software, have one being provided with a config file instead. Keeping the database header file is becoming a maintenance burden. Signed-off-by: Timo Kokkonen --- diff --git a/config.c b/config.c index 0754d0a..2e28c33 100644 --- a/config.c +++ b/config.c @@ -346,180 +346,3 @@ out: config_destroy(&config); return rrd_db; } - -#define CONFIG_ADD_STRING(_config, _setting, _name, _val) \ - do { \ - _setting = config_setting_add(_config, _name, \ - CONFIG_TYPE_STRING); \ - config_setting_set_string(_setting, _val); \ - } while (0); \ - -#define CONFIG_ADD_INT(_config, _setting, _name, _val) \ - do { \ - _setting = config_setting_add(_config, _name, \ - CONFIG_TYPE_INT); \ - config_setting_set_int(_setting, _val); \ - } while (0); \ - -#define CONFIG_ADD_FLOAT(_config, _setting, _name, _val) \ - do { \ - _setting = config_setting_add(_config, _name, \ - CONFIG_TYPE_FLOAT); \ - config_setting_set_float(_setting, _val); \ - } while (0); \ - -static void put_strings_to_list(config_setting_t *config, - const char *entry_name, const char **strings) -{ - config_setting_t *list, *setting; - int i; - - list = config_setting_add(config, entry_name, CONFIG_TYPE_LIST); - for (i = 0; strings[i]; i++) - CONFIG_ADD_STRING(list, setting, NULL, strings[i]); -} - -static void put_image_to_list(config_setting_t *config, - struct rrd_image *image) -{ - config_setting_t *setting, *group; - - group = config_setting_add(config, "image", CONFIG_TYPE_GROUP); - - CONFIG_ADD_STRING(group, setting, "rrd_database", image->rrd_database); - CONFIG_ADD_STRING(group, setting, "filename", image->image_filename); - CONFIG_ADD_INT(group, setting, "width", image->width); - CONFIG_ADD_INT(group, setting, "height", image->height); - CONFIG_ADD_STRING(group, setting, "timestart", image->timestart); - CONFIG_ADD_STRING(group, setting, "timeend", image->timeend); - CONFIG_ADD_STRING(group, setting, "imageformat", image->imageformat); - - put_strings_to_list(group, "options", image->options); - - CONFIG_ADD_INT(group, setting, "text_lead", image->text_lead); - - put_strings_to_list(group, "text", image->text); -} - -static void put_data_source_to_list(config_setting_t *list, - struct rrd_data_source *source) -{ - config_setting_t *setting, *group; - - group = config_setting_add(list, "data_source", CONFIG_TYPE_GROUP); - - CONFIG_ADD_STRING(group, setting, "type", source->type); - CONFIG_ADD_STRING(group, setting, "name", source->name); - CONFIG_ADD_INT(group, setting, "heartbeat", source->heartbeat); - CONFIG_ADD_FLOAT(group, setting, "min", source->min); - CONFIG_ADD_FLOAT(group, setting, "max", source->max); -} - -static void put_archive_to_list(config_setting_t *list, - struct rrd_archive *archive) -{ - config_setting_t *setting, *group; - - group = config_setting_add(list, "archive", CONFIG_TYPE_GROUP); - - CONFIG_ADD_STRING(group, setting, "type", archive->type); - CONFIG_ADD_FLOAT(group, setting, "xff", archive->xff); - CONFIG_ADD_INT(group, setting, "steps", archive->steps); - CONFIG_ADD_INT(group, setting, "rows", archive->rows); -} - -static char *parser_to_str(int (*parser)(char *rrd_data, const char **parser_data)) -{ - if (parser == cpu_parser) - return "cpu"; - - if (parser == mem_parser) - return "mem"; - - if (parser == cpu_mem_parser) - return "cpu_mem"; - - if (parser == digitemp_parser) - return "digitemp"; - - if (parser == digitemp_parser_mod) - return "digitemp_mod"; - - if (parser == script_parser) - return "script"; - - if (parser == netstats_parser) - return "netstats"; - - if (parser == onewire_parser) - return "onewire"; - - return NULL; -} - -static void put_database_to_list(config_setting_t *config, - struct rrd_database *db) -{ - config_setting_t *setting; - config_setting_t *list, *group; - char *str = parser_to_str(db->parse); - int i; - - group = config_setting_add(config, RRD_DATABASE_LIST, - CONFIG_TYPE_GROUP); - - CONFIG_ADD_STRING(group, setting, "name", db->name); - CONFIG_ADD_STRING(group, setting, "filename", db->filename); - CONFIG_ADD_INT(group, setting, "interval", db->interval); - CONFIG_ADD_STRING(group, setting, "parser", str); - - if (db->parser_data) - put_strings_to_list(group, "parser_data", db->parser_data); - - list = config_setting_add(group, "image", CONFIG_TYPE_LIST); - for (i = 0; db->images[i]; i++) { - put_image_to_list(list, db->images[i]); - } - - if (db->sources) { - list = config_setting_add(group, "sources", CONFIG_TYPE_LIST); - for (i = 0; db->sources[i].type; i++) { - put_data_source_to_list(list, &db->sources[i]); - } - } - - if (db->archives) { - list = config_setting_add(group, "archives", CONFIG_TYPE_LIST); - for (i = 0; db->archives[i].type; i++) { - put_archive_to_list(list, &db->archives[i]); - } - } -} - -int write_database(const char *conffile, struct rrd_database **rrd_db) -{ - config_t config; - config_setting_t *root, *rrd_database_list; - int i; - int ret; - - config_init(&config); - - config_set_tab_width(&config, 4); - - root = config_root_setting(&config); - - rrd_database_list = config_setting_add(root, RRD_DATABASE_LIST, - CONFIG_TYPE_LIST); - for (i = 0; rrd_db[i]; i++) { - put_database_to_list(rrd_database_list, rrd_db[i]); - } - - ret = !config_write_file(&config, conffile); - if (ret) - pr_err("Error while writing file.\n"); - - config_destroy(&config); - - return ret; -} diff --git a/database.h b/database.h deleted file mode 100644 index 76946fe..0000000 --- a/database.h +++ /dev/null @@ -1,460 +0,0 @@ -#ifndef _TESTDATA_H -#define _TESTDATA_H - -#include "rrdtool.h" -#include "parser.h" - -const char blank[] = "COMMENT: "; -#define numfmt " % 8.2lf " - -#define SYSINFO_PATH "./" -#define SYSINFO_RRD_PATH SYSINFO_PATH "sysinfo.rrd" -#define SYSINFO_IMAGES_PATH SYSINFO_PATH "images/" - -#define SYSTEMP_RRD_PATH "/root/systemp/systemp.rrd" - -#define NETWORK_RRD_PATH SYSINFO_PATH "network.rrd" - -const char *cputext[] = { - "DEF:us=" SYSINFO_RRD_PATH ":User:AVERAGE", - "DEF:ni=" SYSINFO_RRD_PATH ":Nice:AVERAGE", - "DEF:sy=" SYSINFO_RRD_PATH ":Sys:AVERAGE", - "DEF:id=" SYSINFO_RRD_PATH ":Idle:AVERAGE", - "DEF:wa=" SYSINFO_RRD_PATH ":Wait:AVERAGE", - "DEF:in=" SYSINFO_RRD_PATH ":IRQ:AVERAGE", - "DEF:so=" SYSINFO_RRD_PATH ":SoftIRQ:AVERAGE", - "COMMENT:\\n", - blank, - "COMMENT: " - "MIN MAX AVG Last\\n", - blank, - "AREA:sy#ff0000:System ", - "GPRINT:sy:MIN:" numfmt, - "GPRINT:sy:MAX:" numfmt, - "GPRINT:sy:AVERAGE:" numfmt, - "GPRINT:sy:LAST:" numfmt "\\n", - blank, - "STACK:us#0000ff:User ", - "GPRINT:us:MIN:" numfmt, - "GPRINT:us:MAX:" numfmt, - "GPRINT:us:AVERAGE:" numfmt, - "GPRINT:us:LAST:" numfmt "\\n", - blank, - "STACK:ni#00ff00:Nice ", - "GPRINT:ni:MIN:" numfmt, - "GPRINT:ni:MAX:" numfmt, - "GPRINT:ni:AVERAGE:" numfmt, - "GPRINT:ni:LAST:" numfmt "\\n", - blank, - "STACK:id#ffffff:Idle ", - "GPRINT:id:MIN:" numfmt, - "GPRINT:id:MAX:" numfmt, - "GPRINT:id:AVERAGE:" numfmt, - "GPRINT:id:LAST:" numfmt "\\n", - blank, - "STACK:wa#ff00ff:IO wait ", - "GPRINT:wa:MIN:" numfmt, - "GPRINT:wa:MAX:" numfmt, - "GPRINT:wa:AVERAGE:" numfmt, - "GPRINT:wa:LAST:" numfmt "\\n", - blank, - "STACK:in#ffff00:IRQ ", - "GPRINT:in:MIN:" numfmt, - "GPRINT:in:MAX:" numfmt, - "GPRINT:in:AVERAGE:" numfmt, - "GPRINT:in:LAST:" numfmt "\\n", - blank, - "STACK:so#00ffff:Soft IRQ ", - "GPRINT:so:MIN:" numfmt, - "GPRINT:so:MAX:" numfmt, - "GPRINT:so:AVERAGE:" numfmt, - "GPRINT:so:LAST:" numfmt "\\n", - "COMMENT: \\n", - 0 -}; - -const char *memtext[] = { - "DEF:fr=" SYSINFO_RRD_PATH ":Free:AVERAGE", - "DEF:bu=" SYSINFO_RRD_PATH ":Buffers:AVERAGE", - "DEF:ca=" SYSINFO_RRD_PATH ":Cached:AVERAGE", - "DEF:an=" SYSINFO_RRD_PATH ":Anon:AVERAGE", - "DEF:sl=" SYSINFO_RRD_PATH ":Slab:AVERAGE", - "DEF:ta=" SYSINFO_RRD_PATH ":Tables:AVERAGE", - "DEF:ot=" SYSINFO_RRD_PATH ":Other:AVERAGE", - "DEF:sw=" SYSINFO_RRD_PATH ":Swap:AVERAGE", - "COMMENT:\\n", - blank, - "COMMENT: " - "MIN MAX AVG Last\\n", - blank, - "AREA:bu#ffff00:Buffers ", - "GPRINT:bu:MIN:" numfmt, - "GPRINT:bu:MAX:" numfmt, - "GPRINT:bu:AVERAGE:" numfmt, - "GPRINT:bu:LAST:" numfmt "\\n", - blank, - "STACK:an#000000:AnonPages ", - "GPRINT:an:MIN:" numfmt, - "GPRINT:an:MAX:" numfmt, - "GPRINT:an:AVERAGE:" numfmt, - "GPRINT:an:LAST:" numfmt "\\n", - blank, - "STACK:ca#00ff00:Cached ", - "GPRINT:ca:MIN:" numfmt, - "GPRINT:ca:MAX:" numfmt, - "GPRINT:ca:AVERAGE:" numfmt, - "GPRINT:ca:LAST:" numfmt "\\n", - blank, - "STACK:fr#ffffff:Free ", - "GPRINT:fr:MIN:" numfmt, - "GPRINT:fr:MAX:" numfmt, - "GPRINT:fr:AVERAGE:" numfmt, - "GPRINT:fr:LAST:" numfmt "\\n", - blank, - "STACK:sl#00ffff:Slab ", - "GPRINT:sl:MIN:" numfmt, - "GPRINT:sl:MAX:" numfmt, - "GPRINT:sl:AVERAGE:" numfmt, - "GPRINT:sl:LAST:" numfmt "\\n", - blank, - "STACK:ta#0000ff:PageTables ", - "GPRINT:ta:MIN:" numfmt, - "GPRINT:ta:MAX:" numfmt, - "GPRINT:ta:AVERAGE:" numfmt, - "GPRINT:ta:LAST:" numfmt "\\n", - blank, - "STACK:ot#a0a0a0:Other ", - "GPRINT:ot:MIN:" numfmt, - "GPRINT:ot:MAX:" numfmt, - "GPRINT:ot:AVERAGE:" numfmt, - "GPRINT:ot:LAST:" numfmt "\\n", - blank, - "STACK:sw#ff0000:Swap ", - "GPRINT:sw:MIN:" numfmt, - "GPRINT:sw:MAX:" numfmt, - "GPRINT:sw:AVERAGE:" numfmt, - "GPRINT:sw:LAST:" numfmt "\\n", - "COMMENT: \\n", - 0 -}; - -const char *eth0text[] = { - "DEF:rxb=" NETWORK_RRD_PATH ":eth0rxb:AVERAGE", - "DEF:txb=" NETWORK_RRD_PATH ":eth0txb:AVERAGE", - "COMMENT:\\n", - blank, - "COMMENT: " - "MIN MAX AVG Last\\n", - blank, - "LINE1:rxb#0000FF:eth0 receive ", - "GPRINT:rxb:MIN: % 3.2lf %sB", - "GPRINT:rxb:MAX: % 3.2lf %sB", - "GPRINT:rxb:AVERAGE: % 3.2lf %sB", - "GPRINT:rxb:LAST: % 3.2lf %sB\\n", - blank, - "LINE1:txb#00FF00:eth0 transmit ", - "GPRINT:txb:MIN: % 3.2lf %sB", - "GPRINT:txb:MAX: % 3.2lf %sB", - "GPRINT:txb:AVERAGE: % 3.2lf %sB", - "GPRINT:txb:LAST: % 3.2lf %sB\\n", - "COMMENT: \\n", - 0 -}; - -const char *eth1text[] = { - "DEF:rxb=" NETWORK_RRD_PATH ":eth1rxb:AVERAGE", - "DEF:txb=" NETWORK_RRD_PATH ":eth1txb:AVERAGE", - "COMMENT:\\n", - blank, - "COMMENT: " - "MIN MAX AVG Last\\n", - blank, - "LINE1:rxb#0000FF:eth1 receive ", - "GPRINT:rxb:MIN: % 3.2lf %sB", - "GPRINT:rxb:MAX: % 3.2lf %sB", - "GPRINT:rxb:AVERAGE: % 3.2lf %sB", - "GPRINT:rxb:LAST: % 3.2lf %sB\\n", - blank, - "LINE1:txb#00FF00:eth1 transmit ", - "GPRINT:txb:MIN: % 3.2lf %sB", - "GPRINT:txb:MAX: % 3.2lf %sB", - "GPRINT:txb:AVERAGE: % 3.2lf %sB", - "GPRINT:txb:LAST: % 3.2lf %sB\\n", - "COMMENT: \\n", - 0 -}; - -const char *systemptext[] = { - "DEF:sda_c=" SYSTEMP_RRD_PATH ":sda:AVERAGE", - "DEF:SYS_c=" SYSTEMP_RRD_PATH ":SYS:AVERAGE", - "DEF:CPU_c=" SYSTEMP_RRD_PATH ":CPU:AVERAGE", - "COMMENT:\\n", - blank, - "COMMENT: " - "MIN MAX AVG Last\\n", - blank, - "LINE1:sda_c#0000FF:SAMSUNG HD501LJ ", - "GPRINT:sda_c:MIN: %5.2lf °C", - "GPRINT:sda_c:MAX: %5.2lf °C", - "GPRINT:sda_c:AVERAGE: %5.2lf °C", - "GPRINT:sda_c:LAST: %5.2lf °C\\n", - blank, - "LINE1:SYS_c#00FF00:Sys Temp ", - "GPRINT:SYS_c:MIN: %5.2lf °C", - "GPRINT:SYS_c:MAX: %5.2lf °C", - "GPRINT:SYS_c:AVERAGE: %5.2lf °C", - "GPRINT:SYS_c:LAST: %5.2lf °C\\n", - blank, - "LINE1:CPU_c#FF0000:Intel Core2 Quad ", - "GPRINT:CPU_c:MIN: %5.2lf °C", - "GPRINT:CPU_c:MAX: %5.2lf °C", - "GPRINT:CPU_c:AVERAGE: %5.2lf °C", - "GPRINT:CPU_c:LAST: %5.2lf °C\\n", - "COMMENT: \\n", - 0 -}; - -const char *cpuoptions[] = { - "--alt-autoscale-max", - "--lower-limit", "0", - "--vertical-label", - "CPU Tics", - 0 -}; - -const char *memoptions[] = { - "--alt-autoscale-max", - "--lower-limit", "0", - "--vertical-label", - "Mem usage (MB)", - "--units-exponent", "0", - "--base", "1024", - 0 -}; - -const char *eth0options[] = { - "--alt-autoscale-max", - "--vertical-label", "Bytes", - "--lower-limit", "0", - 0 -}; - -const char *eth1options[] = { - "--alt-autoscale-max", - "--vertical-label", "Bytes", - "--lower-limit", "0", - 0 -}; - -const char *systempoptions[] = { - "--alt-autoscale", - "--vertical-label", "Temp °C", - 0 -}; - -#define DEFINE_IMAGE(rrdname, _filename, _width, _height, time) \ - static struct rrd_image rrdname ## daily = { \ - .image_filename = _filename "_daily.png", \ - .width = _width, \ - .height = _height, \ - .timestart = "end-" #time "d", \ - .timeend = "now", \ - .imageformat = "PNG", \ - .options = (const char **)&rrdname ## options, \ - .text = (const char **)&rrdname ## text, \ - }; \ - static struct rrd_image rrdname ## weekly = { \ - .image_filename = _filename "_weekly.png", \ - .width = _width, \ - .height = _height, \ - .timestart = "end-" #time "w", \ - .timeend = "now", \ - .imageformat = "PNG", \ - .options = (const char **)&rrdname ## options, \ - .text = (const char **)&rrdname ## text, \ - }; \ - static struct rrd_image rrdname ## monthly = { \ - .image_filename = _filename "_monthly.png", \ - .width = _width, \ - .height = _height, \ - .timestart = "end-" #time "m", \ - .timeend = "now", \ - .imageformat = "PNG", \ - .options = (const char **)&rrdname ## options, \ - .text = (const char **)&rrdname ## text, \ - }; \ - static struct rrd_image rrdname ## yearly = { \ - .image_filename = _filename "_yearly.png", \ - .width = _width, \ - .height = _height, \ - .timestart = "end-" #time "y", \ - .timeend = "now", \ - .imageformat = "PNG", \ - .options = (const char **)&rrdname ## options, \ - .text = (const char **)&rrdname ## text, \ - }; - -DEFINE_IMAGE(cpu, SYSINFO_PATH "/images/cpu", 720, 480, 1); -DEFINE_IMAGE(mem, SYSINFO_PATH "/images/mem", 720, 480, 1); -DEFINE_IMAGE(systemp, SYSINFO_PATH "/images/systemp", 720,480,1); -DEFINE_IMAGE(eth0, SYSINFO_PATH "/images/eth0", 720, 200, 1); -DEFINE_IMAGE(eth1, SYSINFO_PATH "/images/eth1", 720, 200, 1); - -static struct rrd_image *cpu_mem_images[] = { - &cpudaily, - &cpuweekly, - &cpumonthly, - &cpuyearly, - &memdaily, - &memweekly, - &memmonthly, - &memyearly, - 0 -}; - -static struct rrd_image *network_images[] = { - ð0daily, - ð0weekly, - ð0monthly, - ð0yearly, - ð1daily, - ð1weekly, - ð1monthly, - ð1yearly, - NULL, -}; - -static struct rrd_image *systemp_images[] = { - &systempdaily, - &systempweekly, - &systempmonthly, - &systempyearly, - 0 -}; - -#define SOURCE_ENTRY(_name, _type, _heartbeat, _min, _max) \ - { \ - .name = _name, \ - .type = _type, \ - .heartbeat = _heartbeat, \ - .min = _min, \ - .max = _max, \ - }, - -#define ARCHIVE_ENTRY(_type, _xff, _steps, _rows) \ - { \ - .type = _type, \ - .xff = _xff, \ - .steps = _steps, \ - .rows = _rows, \ - }, - -struct rrd_data_source cpumem_sources[] = { - SOURCE_ENTRY("User", "COUNTER", 240, 0, 1200) - SOURCE_ENTRY("Nice", "COUNTER", 240, 0, 1200) - SOURCE_ENTRY("Sys", "COUNTER", 240, 0, 1200) - SOURCE_ENTRY("Idle", "COUNTER", 240, 0, 1200) - SOURCE_ENTRY("Wait", "COUNTER", 240, 0, 1200) - SOURCE_ENTRY("IRQ", "COUNTER", 240, 0, 1200) - SOURCE_ENTRY("SoftIRQ", "COUNTER", 240, 0, 1200) - SOURCE_ENTRY("Free", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Buffers", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Cached", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Active", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Inactive","GAUGE", 240, 0, 32768) - SOURCE_ENTRY("SwapFree","GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Anon", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Slab", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Tables", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Other", "GAUGE", 240, 0, 32768) - SOURCE_ENTRY("Swap", "GAUGE", 240, 0, 32768) - {}, -}; - -struct rrd_archive cpumem_archives[] = { - ARCHIVE_ENTRY("AVERAGE", 0.5, 1, 720) - ARCHIVE_ENTRY("AVERAGE", 0.5, 7, 720) - ARCHIVE_ENTRY("AVERAGE", 0.5, 31, 720) - ARCHIVE_ENTRY("AVERAGE", 0.5, 365, 720) - ARCHIVE_ENTRY("MIN", 0.5, 1, 720) - ARCHIVE_ENTRY("MIN", 0.5, 7, 720) - ARCHIVE_ENTRY("MIN", 0.5, 31, 720) - ARCHIVE_ENTRY("MIN", 0.5, 365, 720) - ARCHIVE_ENTRY("MAX", 0.5, 1, 720) - ARCHIVE_ENTRY("MAX", 0.5, 7, 720) - ARCHIVE_ENTRY("MAX", 0.5, 31, 720) - ARCHIVE_ENTRY("MAX", 0.5, 365, 720) - {}, -}; - -struct rrd_data_source network_sources[] = { - SOURCE_ENTRY("eth0rxb", "COUNTER", 240, 0, 120000000000) - SOURCE_ENTRY("eth0rxp", "COUNTER", 240, 0, 120000000000) - SOURCE_ENTRY("eth0txb", "COUNTER", 240, 0, 120000000000) - SOURCE_ENTRY("eth0txp", "COUNTER", 240, 0, 120000000000) - SOURCE_ENTRY("eth1rxb", "COUNTER", 240, 0, 120000000000) - SOURCE_ENTRY("eth1rxp", "COUNTER", 240, 0, 120000000000) - SOURCE_ENTRY("eth1txb", "COUNTER", 240, 0, 120000000000) - SOURCE_ENTRY("eth1txp", "COUNTER", 240, 0, 120000000000) - {}, -}; - -struct rrd_archive network_archives[] = { - ARCHIVE_ENTRY("AVERAGE", 0.5, 1, 720) - ARCHIVE_ENTRY("AVERAGE", 0.5, 7, 720) - ARCHIVE_ENTRY("AVERAGE", 0.5, 31, 720) - ARCHIVE_ENTRY("AVERAGE", 0.5, 365, 720) - ARCHIVE_ENTRY("MIN", 0.5, 1, 720) - ARCHIVE_ENTRY("MIN", 0.5, 7, 720) - ARCHIVE_ENTRY("MIN", 0.5, 31, 720) - ARCHIVE_ENTRY("MIN", 0.5, 365, 720) - ARCHIVE_ENTRY("MAX", 0.5, 1, 720) - ARCHIVE_ENTRY("MAX", 0.5, 7, 720) - ARCHIVE_ENTRY("MAX", 0.5, 31, 720) - ARCHIVE_ENTRY("MAX", 0.5, 365, 720) - {}, -}; - -static struct rrd_database cpumem_rrd = { - .filename = SYSINFO_RRD_PATH, - .interval = 120, - .parse = cpu_mem_parser, - .images = (struct rrd_image **)&cpu_mem_images, - .sources = cpumem_sources, - .archives = cpumem_archives, - .name = "cpumem", -}; - -static struct rrd_database systemp_rrd = { - .interval = 300, - .parse = NULL, - .filename = NULL, - .images = (struct rrd_image **)&systemp_images, - .name = "systemp", -}; - -const char *network_interfaces[] = { - "eth0", - "eth1", - NULL, -}; - -static struct rrd_database network_rrd = { - .name = "network", - .filename = NETWORK_RRD_PATH, - .interval = 120, - .parse = netstats_parser, - .sources = network_sources, - .archives = network_archives, - .parser_data = network_interfaces, - .images = network_images, -}; - -static struct rrd_database *default_rrds[] = { - &cpumem_rrd, - &systemp_rrd, - &network_rrd, - 0 -}; - -#endif diff --git a/database.sysinfo.conf b/database.sysinfo.conf new file mode 100644 index 0000000..1fc108c --- /dev/null +++ b/database.sysinfo.conf @@ -0,0 +1,488 @@ + { + name = "cpumem"; + filename = "sysinfo/sysinfo.rrd"; + interval = 120; + parser = "cpu_mem"; + image = ( + { + rrd_database = ""; + filename = "sysinfo/images/cpu_daily.png"; + width = 720; + height = 480; + timestart = "end-1d"; + timeend = "now"; + imageformat = "PNG"; + options = ( + "--alt-autoscale-max", + "--lower-limit", + "0", + "--vertical-label", + "CPU Tics" + ); + text_lead = 0; + text = ( + "DEF:us=sysinfo/sysinfo.rrd:User:AVERAGE", + "DEF:ni=sysinfo/sysinfo.rrd:Nice:AVERAGE", + "DEF:sy=sysinfo/sysinfo.rrd:Sys:AVERAGE", + "DEF:id=sysinfo/sysinfo.rrd:Idle:AVERAGE", + "DEF:wa=sysinfo/sysinfo.rrd:Wait:AVERAGE", + "DEF:in=sysinfo/sysinfo.rrd:IRQ:AVERAGE", + "DEF:so=sysinfo/sysinfo.rrd:SoftIRQ:AVERAGE", + "COMMENT:\\n", + "COMMENT: ", + "COMMENT: MIN MAX AVG Last\\n", + "COMMENT: ", + "AREA:sy#ff0000:System ", + "GPRINT:sy:MIN: % 8.2lf ", + "GPRINT:sy:MAX: % 8.2lf ", + "GPRINT:sy:AVERAGE: % 8.2lf ", + "GPRINT:sy:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:us#0000ff:User ", + "GPRINT:us:MIN: % 8.2lf ", + "GPRINT:us:MAX: % 8.2lf ", + "GPRINT:us:AVERAGE: % 8.2lf ", + "GPRINT:us:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:ni#00ff00:Nice ", + "GPRINT:ni:MIN: % 8.2lf ", + "GPRINT:ni:MAX: % 8.2lf ", + "GPRINT:ni:AVERAGE: % 8.2lf ", + "GPRINT:ni:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:id#ffffff:Idle ", + "GPRINT:id:MIN: % 8.2lf ", + "GPRINT:id:MAX: % 8.2lf ", + "GPRINT:id:AVERAGE: % 8.2lf ", + "GPRINT:id:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:wa#ff00ff:IO wait ", + "GPRINT:wa:MIN: % 8.2lf ", + "GPRINT:wa:MAX: % 8.2lf ", + "GPRINT:wa:AVERAGE: % 8.2lf ", + "GPRINT:wa:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:in#ffff00:IRQ ", + "GPRINT:in:MIN: % 8.2lf ", + "GPRINT:in:MAX: % 8.2lf ", + "GPRINT:in:AVERAGE: % 8.2lf ", + "GPRINT:in:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:so#00ffff:Soft IRQ ", + "GPRINT:so:MIN: % 8.2lf ", + "GPRINT:so:MAX: % 8.2lf ", + "GPRINT:so:AVERAGE: % 8.2lf ", + "GPRINT:so:LAST: % 8.2lf \\n", + "COMMENT: \\n" + ); + }, + { + filename = "sysinfo/images/cpu_weekly.png"; + timestart = "end-1w"; + }, + { + filename = "sysinfo/images/cpu_monthly.png"; + timestart = "end-1m"; + }, + { + filename = "sysinfo/images/cpu_yearly.png"; + timestart = "end-1y"; + }, + { + filename = "sysinfo/images/mem_daily.png"; + timestart = "end-1d"; + options = ( + "--alt-autoscale-max", + "--lower-limit", + "0", + "--vertical-label", + "Mem usage (MB)", + "--units-exponent", + "0", + "--base", + "1024" + ); + text = ( + "DEF:fr=sysinfo/sysinfo.rrd:Free:AVERAGE", + "DEF:bu=sysinfo/sysinfo.rrd:Buffers:AVERAGE", + "DEF:ca=sysinfo/sysinfo.rrd:Cached:AVERAGE", + "DEF:an=sysinfo/sysinfo.rrd:Anon:AVERAGE", + "DEF:sl=sysinfo/sysinfo.rrd:Slab:AVERAGE", + "DEF:ta=sysinfo/sysinfo.rrd:Tables:AVERAGE", + "DEF:ot=sysinfo/sysinfo.rrd:Other:AVERAGE", + "DEF:sw=sysinfo/sysinfo.rrd:Swap:AVERAGE", + "COMMENT:\\n", + "COMMENT: ", + "COMMENT: MIN MAX AVG Last\\n", + "COMMENT: ", + "AREA:bu#ffff00:Buffers ", + "GPRINT:bu:MIN: % 8.2lf ", + "GPRINT:bu:MAX: % 8.2lf ", + "GPRINT:bu:AVERAGE: % 8.2lf ", + "GPRINT:bu:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:an#000000:AnonPages ", + "GPRINT:an:MIN: % 8.2lf ", + "GPRINT:an:MAX: % 8.2lf ", + "GPRINT:an:AVERAGE: % 8.2lf ", + "GPRINT:an:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:ca#00ff00:Cached ", + "GPRINT:ca:MIN: % 8.2lf ", + "GPRINT:ca:MAX: % 8.2lf ", + "GPRINT:ca:AVERAGE: % 8.2lf ", + "GPRINT:ca:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:fr#ffffff:Free ", + "GPRINT:fr:MIN: % 8.2lf ", + "GPRINT:fr:MAX: % 8.2lf ", + "GPRINT:fr:AVERAGE: % 8.2lf ", + "GPRINT:fr:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:sl#00ffff:Slab ", + "GPRINT:sl:MIN: % 8.2lf ", + "GPRINT:sl:MAX: % 8.2lf ", + "GPRINT:sl:AVERAGE: % 8.2lf ", + "GPRINT:sl:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:ta#0000ff:PageTables ", + "GPRINT:ta:MIN: % 8.2lf ", + "GPRINT:ta:MAX: % 8.2lf ", + "GPRINT:ta:AVERAGE: % 8.2lf ", + "GPRINT:ta:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:ot#a0a0a0:Other ", + "GPRINT:ot:MIN: % 8.2lf ", + "GPRINT:ot:MAX: % 8.2lf ", + "GPRINT:ot:AVERAGE: % 8.2lf ", + "GPRINT:ot:LAST: % 8.2lf \\n", + "COMMENT: ", + "STACK:sw#ff0000:Swap ", + "GPRINT:sw:MIN: % 8.2lf ", + "GPRINT:sw:MAX: % 8.2lf ", + "GPRINT:sw:AVERAGE: % 8.2lf ", + "GPRINT:sw:LAST: % 8.2lf \\n", + "COMMENT: \\n" + ); + }, + { + filename = "sysinfo/images/mem_weekly.png"; + timestart = "end-1w"; + }, + { + filename = "sysinfo/images/mem_monthly.png"; + timestart = "end-1m"; + }, + { + filename = "sysinfo/images/mem_yearly.png"; + timestart = "end-1y"; + } ); + sources = ( + { + type = "COUNTER"; + name = "User"; + heartbeat = 240; + min = 0.0; + max = 1200.0; + }, + { + type = "COUNTER"; + name = "Nice"; + }, + { + type = "COUNTER"; + name = "Sys"; + }, + { + type = "COUNTER"; + name = "Idle"; + }, + { + type = "COUNTER"; + name = "Wait"; + }, + { + type = "COUNTER"; + name = "IRQ"; + }, + { + type = "COUNTER"; + name = "SoftIRQ"; + }, + { + type = "GAUGE"; + name = "Free"; + max = 32768.0; + }, + { + type = "GAUGE"; + name = "Buffers"; + }, + { + type = "GAUGE"; + name = "Cached"; + }, + { + type = "GAUGE"; + name = "Active"; + }, + { + type = "GAUGE"; + name = "Inactive"; + }, + { + type = "GAUGE"; + name = "SwapFree"; + }, + { + type = "GAUGE"; + name = "Anon"; + }, + { + type = "GAUGE"; + name = "Slab"; + }, + { + type = "GAUGE"; + name = "Tables"; + }, + { + type = "GAUGE"; + name = "Other"; + }, + { + type = "GAUGE"; + name = "Swap"; + } ); + archives = ( + { + type = "AVERAGE"; + xff = 0.5; + steps = 1; + rows = 720; + }, + { + type = "AVERAGE"; + steps = 7; + }, + { + type = "AVERAGE"; + steps = 31; + }, + { + type = "AVERAGE"; + steps = 365; + }, + { + type = "MIN"; + steps = 1; + }, + { + type = "MIN"; + steps = 7; + }, + { + type = "MIN"; + steps = 31; + }, + { + type = "MIN"; + steps = 365; + }, + { + type = "MAX"; + steps = 1; + }, + { + type = "MAX"; + steps = 7; + }, + { + type = "MAX"; + steps = 31; + }, + { + type = "MAX"; + steps = 365; + } ); + }, + { + name = "network"; + filename = "sysinfo/network.rrd"; + interval = 120; + parser = "netstats"; + parser_data = ( "eth0", "eth1" ); + image = ( + { + rrd_database = ""; + filename = "sysinfo/images/eth0_daily.png"; + width = 720; + height = 200; + timestart = "end-1d"; + timeend = "now"; + imageformat = "PNG"; + options = ( + "--alt-autoscale-max", + "--vertical-label", + "Bytes", + "--lower-limit", + "0" + ); + text_lead = 0; + text = ( + "DEF:rxb=sysinfo/network.rrd:eth0rxb:AVERAGE", + "DEF:txb=sysinfo/network.rrd:eth0txb:AVERAGE", + "COMMENT:\\n", + "COMMENT: ", + "COMMENT: MIN MAX AVG Last\\n", + "COMMENT: ", + "LINE1:rxb#0000FF:eth0 receive ", + "GPRINT:rxb:MIN: % 3.2lf %sB", + "GPRINT:rxb:MAX: % 3.2lf %sB", + "GPRINT:rxb:AVERAGE: % 3.2lf %sB", + "GPRINT:rxb:LAST: % 3.2lf %sB\\n", + "COMMENT: ", + "LINE1:txb#00FF00:eth0 transmit ", + "GPRINT:txb:MIN: % 3.2lf %sB", + "GPRINT:txb:MAX: % 3.2lf %sB", + "GPRINT:txb:AVERAGE: % 3.2lf %sB", + "GPRINT:txb:LAST: % 3.2lf %sB\\n", + "COMMENT: \\n" + ); + }, + { + filename = "sysinfo/images/eth0_weekly.png"; + timestart = "end-1w"; + }, + { + filename = "sysinfo/images/eth0_monthly.png"; + timestart = "end-1m"; + }, + { + filename = "sysinfo/images/eth0_yearly.png"; + timestart = "end-1y"; + }, + { + filename = "sysinfo/images/eth1_daily.png"; + timestart = "end-1d"; + text = ( + "DEF:rxb=sysinfo/network.rrd:eth1rxb:AVERAGE", + "DEF:txb=sysinfo/network.rrd:eth1txb:AVERAGE", + "COMMENT:\\n", + "COMMENT: ", + "COMMENT: MIN MAX AVG Last\\n", + "COMMENT: ", + "LINE1:rxb#0000FF:eth1 receive ", + "GPRINT:rxb:MIN: % 3.2lf %sB", + "GPRINT:rxb:MAX: % 3.2lf %sB", + "GPRINT:rxb:AVERAGE: % 3.2lf %sB", + "GPRINT:rxb:LAST: % 3.2lf %sB\\n", + "COMMENT: ", + "LINE1:txb#00FF00:eth1 transmit ", + "GPRINT:txb:MIN: % 3.2lf %sB", + "GPRINT:txb:MAX: % 3.2lf %sB", + "GPRINT:txb:AVERAGE: % 3.2lf %sB", + "GPRINT:txb:LAST: % 3.2lf %sB\\n", + "COMMENT: \\n" + ); + }, + { + filename = "sysinfo/images/eth1_weekly.png"; + timestart = "end-1w"; + }, + { + filename = "sysinfo/images/eth1_monthly.png"; + timestart = "end-1m"; + }, + { + filename = "sysinfo/images/eth1_yearly.png"; + timestart = "end-1y"; + } ); + sources = ( + { + type = "COUNTER"; + name = "eth0rxb"; + heartbeat = 240; + min = 0.0; + max = 1.2e+11; + }, + { + type = "COUNTER"; + name = "eth0rxp"; + }, + { + type = "COUNTER"; + name = "eth0txb"; + }, + { + type = "COUNTER"; + name = "eth0txp"; + }, + { + type = "COUNTER"; + name = "eth1rxb"; + }, + { + type = "COUNTER"; + name = "eth1rxp"; + }, + { + type = "COUNTER"; + name = "eth1txb"; + }, + { + type = "COUNTER"; + name = "eth1txp"; + } ); + archives = ( + { + type = "AVERAGE"; + xff = 0.5; + steps = 1; + rows = 720; + }, + { + type = "AVERAGE"; + steps = 7; + }, + { + type = "AVERAGE"; + steps = 31; + }, + { + type = "AVERAGE"; + steps = 365; + }, + { + type = "MIN"; + steps = 1; + }, + { + type = "MIN"; + steps = 7; + }, + { + type = "MIN"; + steps = 31; + }, + { + type = "MIN"; + steps = 365; + }, + { + type = "MAX"; + steps = 1; + }, + { + type = "MAX"; + steps = 7; + }, + { + type = "MAX"; + steps = 31; + }, + { + type = "MAX"; + steps = 365; + } ); + } diff --git a/example_database.conf b/example_database.conf new file mode 100644 index 0000000..23e2334 --- /dev/null +++ b/example_database.conf @@ -0,0 +1,3 @@ +rrd_database = ( +@include "database.sysinfo.conf" + ); diff --git a/main.c b/main.c index 76588c9..49adc28 100644 --- a/main.c +++ b/main.c @@ -8,13 +8,11 @@ #include "parser.h" #include "debug.h" -#include "database.h" #include "config.h" struct user_options { int max_jobs; char *config_file; - int dump_defaults; }; int read_args(int argc, char *argv[], struct user_options *opts) @@ -23,10 +21,9 @@ int read_args(int argc, char *argv[], struct user_options *opts) static struct option long_options[] = { { .val = 'j', .has_arg = 1, .name = "jobs", }, { .val = 'c', .has_arg = 1, .name = "config", }, - { .val = 'd', .has_arg = 1, .name = "dump-default", }, { }, }; - char short_options[] = "j:c:d:"; + char short_options[] = "j:c:"; while (1) { c = getopt_long(argc, argv, short_options, long_options, @@ -44,11 +41,6 @@ int read_args(int argc, char *argv[], struct user_options *opts) opts->config_file = optarg; break; - case 'd': - opts->dump_defaults = 1; - opts->config_file = optarg; - break; - case '?': return -1; } @@ -68,15 +60,13 @@ int main(int argc, char *argv[]) if (read_args(argc, argv, &opts) < 0) return -1; - if (opts.dump_defaults) { - ret = write_database(opts.config_file, default_rrds); - return 0; + + if (!opts.config_file) { + pr_err("No database config file given. Nothing to do\n"); + return 1; } - if (opts.config_file) - db_list = populate_database(opts.config_file); - else - db_list = default_rrds; + db_list = populate_database(opts.config_file); if (ret || !db_list) return 1;