8 #include <apr-1/apr_pools.h>
9 #include <apr-1/apr_strings.h>
15 Ganglia_pool global_context;
16 Ganglia_gmond_config gmond_config;
17 Ganglia_udp_send_channels send_channels;
21 char* conf_local = (
char*)conf;
24 global_context = Ganglia_pool_create(NULL);
27 TRACE(0,
"Unable to create global context. Exiting.");
32 int use_default_config = 1;
33 if (strcmp(conf,
"") != 0)
35 use_default_config = 0;
37 gmond_config = Ganglia_gmond_config_create(conf_local, use_default_config);
40 TRACE(0,
"Unable to load Ganglia configuration. Exiting.");
45 send_channels = Ganglia_udp_send_channels_create(global_context, gmond_config);
48 TRACE(0,
"Unable to create ganglia send channels. Exiting.");
57 int send_gmetric(
const char* name,
const char* value,
const char* type,
const char* units,
const char* slope,
int tmax,
58 int dmax,
const char* group,
const char* cluster,
const char* desc,
const char* title)
60 Ganglia_metric gmetric;
65 char* name_local = (
char*)name;
66 char* value_local = (
char*)value;
67 char* type_local = (
char*)type;
68 char* units_local = (
char*)units;
69 char* slope_local = (
char*)slope;
70 char* group_local = (
char*)group;
71 char* cluster_local = (
char*)cluster;
72 char* desc_local = (
char*)desc;
73 char* title_local = (
char*)title;
76 gmetric = Ganglia_metric_create(global_context);
79 TRACE(0,
"Unable to allocate gmetric structure. Exiting.");
84 if (!(strcmp(name,
"") != 0 && strcmp(value,
"") != 0 && strcmp(type,
"") != 0))
86 TRACE(0,
"Incorrect options supplied, exiting.\n");
89 rval = Ganglia_metric_set(gmetric, name_local, value_local, type_local, units_local, cstr_to_slope(slope_local), tmax,
96 TRACE(0,
"gmetric parameters invalid. exiting.\n");
99 TRACE(0,
"one of your parameters has an invalid character '\"'. exiting.\n");
102 TRACE(0,
"the type parameter \"%s\" is not a valid type. exiting.\n", type);
105 TRACE(0,
"the value parameter \"%s\" does not represent a number. exiting.\n", value);
109 if (strcmp(cluster,
"") != 0) Ganglia_metadata_add(gmetric,
"CLUSTER", cluster_local);
110 if (strcmp(group,
"") != 0)
113 for (
char* groupArg = apr_strtok(group_local,
", ", &last); groupArg != NULL;
114 groupArg = apr_strtok(NULL,
", ", &last))
116 Ganglia_metadata_add(gmetric,
"GROUP", groupArg);
119 if (strcmp(desc,
"") != 0) Ganglia_metadata_add(gmetric,
"DESC", desc_local);
120 if (strcmp(title,
"") != 0) Ganglia_metadata_add(gmetric,
"TITLE", title_local);
123 rval = Ganglia_metric_send(gmetric, send_channels);
126 TRACE(0,
"There was an error sending to %d of the send channels.\n", rval);
132 Ganglia_metric_destroy(gmetric);
int init_gmetric(const char *conf)
Initialize Ganglia.
void destroy_gmetric()
Close connection to gmond.
int send_gmetric(const char *name, const char *value, const char *type, const char *units, const char *slope, int tmax, int dmax, const char *group, const char *cluster, const char *desc, const char *title)
Send a metric to gmond.