DaMon: share the definition of DaMonHost
This commit is contained in:
parent
9d30692a08
commit
1a30b948e8
|
@ -17,8 +17,6 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <System.h>
|
||||
#include <System/App.h>
|
||||
#include "rrd.h"
|
||||
#include "damon.h"
|
||||
#include "../config.h"
|
||||
|
@ -34,75 +32,54 @@
|
|||
#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;
|
||||
};
|
||||
|
||||
|
||||
/* 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];
|
||||
|
|
47
src/damon.c
47
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);
|
||||
}
|
||||
|
|
12
src/damon.h
12
src/damon.h
|
@ -19,6 +19,7 @@
|
|||
# define DAMON_DAMON_H
|
||||
|
||||
# include <System.h>
|
||||
# include <System/App.h>
|
||||
# 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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user