diff --git a/src/damon-backend-app.c b/src/damon-backend-app.c index 468e706..c7d8c65 100644 --- a/src/damon-backend-app.c +++ b/src/damon-backend-app.c @@ -17,8 +17,6 @@ #include #include -#include -#include #include "rrd.h" #include "damon.h" #include "../config.h" @@ -31,78 +29,57 @@ # define PROGNAME_DAMON "DaMon" #endif -#define DAMON_SEP '/' - - -/* types */ -/* XXX duplicated from damon.c */ -typedef struct _Host -{ - DaMon * damon; - AppClient * appclient; - char * hostname; - char ** ifaces; - char ** vols; -} Host; - -struct _DaMon -{ - char const * prefix; - unsigned int refresh; - Host * hosts; - unsigned int hosts_cnt; - Event * event; -}; +#define DAMON_SEP '/' /* functions */ /* damon_refresh */ -static AppClient * _refresh_connect(Host * host, Event * event); -static int _refresh_uptime(AppClient * ac, Host * host, char * rrd); -static int _refresh_load(AppClient * ac, Host * host, char * rrd); -static int _refresh_ram(AppClient * ac, Host * host, char * rrd); -static int _refresh_swap(AppClient * ac, Host * host, char * rrd); -static int _refresh_procs(AppClient * ac, Host * host, char * rrd); -static int _refresh_users(AppClient * ac, Host * host, char * rrd); -static int _refresh_ifaces(AppClient * ac, Host * host, char * rrd); -static int _refresh_ifaces_if(AppClient * ac, Host * host, char * rrd, +static AppClient * _refresh_connect(DaMonHost * host, Event * event); +static int _refresh_uptime(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_load(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_ram(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_swap(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_procs(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_users(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_ifaces(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_ifaces_if(AppClient * ac, DaMonHost * host, char * rrd, char const * iface); -static int _refresh_vols(AppClient * ac, Host * host, char * rrd); -static int _refresh_vols_vol(AppClient * ac, Host * host, char * rrd, +static int _refresh_vols(AppClient * ac, DaMonHost * host, char * rrd); +static int _refresh_vols_vol(AppClient * ac, DaMonHost * host, char * rrd, char * vol); int damon_refresh(DaMon * damon) { - unsigned int i; + size_t i; AppClient * ac = NULL; char * rrd = NULL; char * p; - Host * hosts = damon->hosts; + DaMonHost * host; #ifdef DEBUG fprintf(stderr, "DEBUG: %s()\n", __func__); #endif - for(i = 0; i < damon->hosts_cnt; i++) + for(i = 0; (host = damon_get_host_by_id(damon, i)) != NULL; i++) { - if((ac = hosts[i].appclient) == NULL) - if((ac = _refresh_connect(&hosts[i], damon->event)) + if((ac = host->appclient) == NULL) + if((ac = _refresh_connect(host, damon_get_event(damon))) == NULL) continue; - if((p = realloc(rrd, string_get_length(hosts[i].hostname) + 12)) + if((p = realloc(rrd, string_get_length(host->hostname) + 12)) == NULL) /* XXX avoid this constant */ break; rrd = p; - if(_refresh_uptime(ac, &hosts[i], rrd) != 0 - || _refresh_load(ac, &hosts[i], rrd) != 0 - || _refresh_ram(ac, &hosts[i], rrd) != 0 - || _refresh_swap(ac, &hosts[i], rrd) != 0 - || _refresh_procs(ac, &hosts[i], rrd) != 0 - || _refresh_users(ac, &hosts[i], rrd) != 0 - || _refresh_ifaces(ac, &hosts[i], rrd) != 0 - || _refresh_vols(ac, &hosts[i], rrd) != 0) + if(_refresh_uptime(ac, host, rrd) != 0 + || _refresh_load(ac, host, rrd) != 0 + || _refresh_ram(ac, host, rrd) != 0 + || _refresh_swap(ac, host, rrd) != 0 + || _refresh_procs(ac, host, rrd) != 0 + || _refresh_users(ac, host, rrd) != 0 + || _refresh_ifaces(ac, host, rrd) != 0 + || _refresh_vols(ac, host, rrd) != 0) { appclient_delete(ac); - hosts[i].appclient = NULL; + host->appclient = NULL; continue; } ac = NULL; @@ -114,7 +91,7 @@ int damon_refresh(DaMon * damon) return 0; } -static AppClient * _refresh_connect(Host * host, Event * event) +static AppClient * _refresh_connect(DaMonHost * host, Event * event) { if(setenv("APPSERVER_Probe", host->hostname, 1) != 0) return NULL; @@ -124,7 +101,7 @@ static AppClient * _refresh_connect(Host * host, Event * event) return host->appclient; } -static int _refresh_uptime(AppClient * ac, Host * host, char * rrd) +static int _refresh_uptime(AppClient * ac, DaMonHost * host, char * rrd) { int32_t ret; @@ -135,7 +112,7 @@ static int _refresh_uptime(AppClient * ac, Host * host, char * rrd) return 0; } -static int _refresh_load(AppClient * ac, Host * host, char * rrd) +static int _refresh_load(AppClient * ac, DaMonHost * host, char * rrd) { int32_t res; uint32_t load[3]; @@ -151,7 +128,7 @@ static int _refresh_load(AppClient * ac, Host * host, char * rrd) return 0; } -static int _refresh_procs(AppClient * ac, Host * host, char * rrd) +static int _refresh_procs(AppClient * ac, DaMonHost * host, char * rrd) { int32_t res; @@ -162,7 +139,7 @@ static int _refresh_procs(AppClient * ac, Host * host, char * rrd) return 0; } -static int _refresh_ram(AppClient * ac, Host * host, char * rrd) +static int _refresh_ram(AppClient * ac, DaMonHost * host, char * rrd) { int32_t res; uint32_t ram[4]; @@ -176,7 +153,7 @@ static int _refresh_ram(AppClient * ac, Host * host, char * rrd) return 0; } -static int _refresh_swap(AppClient * ac, Host * host, char * rrd) +static int _refresh_swap(AppClient * ac, DaMonHost * host, char * rrd) { int32_t res; uint32_t swap[2]; @@ -188,7 +165,7 @@ static int _refresh_swap(AppClient * ac, Host * host, char * rrd) return 0; } -static int _refresh_users(AppClient * ac, Host * host, char * rrd) +static int _refresh_users(AppClient * ac, DaMonHost * host, char * rrd) { int32_t res; @@ -199,7 +176,7 @@ static int _refresh_users(AppClient * ac, Host * host, char * rrd) return 0; } -static int _refresh_ifaces(AppClient * ac, Host * host, char * rrd) +static int _refresh_ifaces(AppClient * ac, DaMonHost * host, char * rrd) { char ** p = host->ifaces; int ret = 0; @@ -211,7 +188,7 @@ static int _refresh_ifaces(AppClient * ac, Host * host, char * rrd) return ret; } -static int _refresh_ifaces_if(AppClient * ac, Host * host, char * rrd, +static int _refresh_ifaces_if(AppClient * ac, DaMonHost * host, char * rrd, char const * iface) { int32_t res[2]; @@ -225,7 +202,7 @@ static int _refresh_ifaces_if(AppClient * ac, Host * host, char * rrd, return 0; } -static int _refresh_vols(AppClient * ac, Host * host, char * rrd) +static int _refresh_vols(AppClient * ac, DaMonHost * host, char * rrd) { char ** p = host->vols; int ret = 0; @@ -237,7 +214,7 @@ static int _refresh_vols(AppClient * ac, Host * host, char * rrd) return ret; } -static int _refresh_vols_vol(AppClient * ac, Host * host, char * rrd, +static int _refresh_vols_vol(AppClient * ac, DaMonHost * host, char * rrd, char * vol) { int32_t res[2]; diff --git a/src/damon.c b/src/damon.c index 0382952..8eb25ee 100644 --- a/src/damon.c +++ b/src/damon.c @@ -43,21 +43,12 @@ /* DaMon */ /* private */ /* types */ -typedef struct _Host -{ - DaMon * damon; - AppClient * appclient; - char * hostname; - char ** ifaces; - char ** vols; -} Host; - struct _DaMon { char * prefix; String * rrdcached; unsigned int refresh; - Host * hosts; + DaMonHost * hosts; unsigned int hosts_cnt; Event * event; }; @@ -124,6 +115,14 @@ Event * damon_get_event(DaMon * damon) return damon->event; } +/* damon_get_host_by_id */ +DaMonHost * damon_get_host_by_id(DaMon * damon, size_t id) +{ + if(damon->hosts_cnt >= id) + return NULL; + return &damon->hosts[id]; +} + /* useful */ /* damon_error */ @@ -179,9 +178,9 @@ int damon_update(DaMon * damon, RRDType type, char const * filename, /* damon_init */ static int _init_config(DaMon * damon, char const * filename); static int _init_config_hosts(DaMon * damon, Config * config, - char const * hosts); -static int _init_config_hosts_host(DaMon * damon, Config * config, Host * host, - char const * h, unsigned int pos); + String const * hosts); +static int _init_config_hosts_host(DaMon * damon, Config * config, DaMonHost * host, + String const * h, unsigned int pos); static char ** _init_config_hosts_host_comma(char const * line); static int _damon_init(DaMon * damon, char const * config, Event * event) @@ -256,7 +255,7 @@ static int _init_config_hosts(DaMon * damon, Config * config, { String const * h = hosts; unsigned int pos = 0; - Host * p; + DaMonHost * p; while(h[0] != '\0') { @@ -284,8 +283,8 @@ static int _init_config_hosts(DaMon * damon, Config * config, return 0; } -static int _init_config_hosts_host(DaMon * damon, Config * config, Host * host, - char const * h, unsigned int pos) +static int _init_config_hosts_host(DaMon * damon, Config * config, DaMonHost * host, + String const * h, unsigned int pos) { String const * p; @@ -354,18 +353,22 @@ static char ** _init_config_hosts_host_comma(char const * line) /* damon_destroy */ +static void _destroy_host(DaMonHost * host); + static void _damon_destroy(DaMon * damon) { unsigned int i; for(i = 0; i < damon->hosts_cnt; i++) - { - free(damon->hosts[i].hostname); - if(damon->hosts[i].appclient != NULL) - appclient_delete(damon->hosts[i].appclient); - } - event_delete(damon->event); + _destroy_host(&damon->hosts[i]); free(damon->hosts); string_delete(damon->rrdcached); free(damon->prefix); } + +static void _destroy_host(DaMonHost * host) +{ + string_delete(host->hostname); + if(host->appclient != NULL) + appclient_delete(host->appclient); +} diff --git a/src/damon.h b/src/damon.h index 89a44d5..2f544b4 100644 --- a/src/damon.h +++ b/src/damon.h @@ -19,6 +19,7 @@ # define DAMON_DAMON_H # include +# include # include "rrd.h" @@ -26,6 +27,15 @@ /* types */ typedef struct _DaMon DaMon; +typedef struct _DaMonHost +{ + DaMon * damon; + AppClient * appclient; + String * hostname; + char ** ifaces; + char ** vols; +} DaMonHost; + /* functions */ DaMon * damon_new(char const * config); @@ -35,6 +45,8 @@ void damon_delete(DaMon * damon); /* accessors */ Event * damon_get_event(DaMon * damon); +DaMonHost * damon_get_host_by_id(DaMon * damon, size_t id); + /* useful */ int damon_error(char const * message, int error); int damon_perror(char const * message, int error);