DaMon: share the definition of DaMonHost

This commit is contained in:
Pierre Pronchery 2022-05-22 04:34:37 +02:00
parent 9d30692a08
commit 1a30b948e8
3 changed files with 75 additions and 83 deletions

View File

@ -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"
@ -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];

View File

@ -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);
}

View File

@ -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);