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;
20 char* conf_local = (
char*)conf;
23 global_context = Ganglia_pool_create(NULL);
24 if (!global_context) {
25 TRACE(0,
"Unable to create global context. Exiting.");
30 int use_default_config = 1;
31 if (strcmp(conf,
"") != 0) {
32 use_default_config = 0;
34 gmond_config = Ganglia_gmond_config_create(conf_local, use_default_config);
36 TRACE(0,
"Unable to load Ganglia configuration. Exiting.");
41 send_channels = Ganglia_udp_send_channels_create(global_context, gmond_config);
43 TRACE(0,
"Unable to create ganglia send channels. Exiting.");
52 int send_gmetric(
const char* name,
const char* value,
const char* type,
const char* units,
const char* slope,
int tmax,
53 int dmax,
const char* group,
const char* cluster,
const char* desc,
const char* title) {
54 Ganglia_metric gmetric;
59 char* name_local = (
char*)name;
60 char* value_local = (
char*)value;
61 char* type_local = (
char*)type;
62 char* units_local = (
char*)units;
63 char* slope_local = (
char*)slope;
64 char* group_local = (
char*)group;
65 char* cluster_local = (
char*)cluster;
66 char* desc_local = (
char*)desc;
67 char* title_local = (
char*)title;
70 gmetric = Ganglia_metric_create(global_context);
72 TRACE(0,
"Unable to allocate gmetric structure. Exiting.");
77 if (!(strcmp(name,
"") != 0 && strcmp(value,
"") != 0 && strcmp(type,
"") != 0)) {
78 TRACE(0,
"Incorrect options supplied, exiting.\n");
81 rval = Ganglia_metric_set(gmetric, name_local, value_local, type_local, units_local, cstr_to_slope(slope_local), tmax,
87 TRACE(0,
"gmetric parameters invalid. exiting.\n");
90 TRACE(0,
"one of your parameters has an invalid character '\"'. exiting.\n");
93 TRACE(0,
"the type parameter \"%s\" is not a valid type. exiting.\n", type);
96 TRACE(0,
"the value parameter \"%s\" does not represent a number. exiting.\n", value);
100 if (strcmp(cluster,
"") != 0) Ganglia_metadata_add(gmetric,
"CLUSTER", cluster_local);
101 if (strcmp(group,
"") != 0) {
103 for (
char* groupArg = apr_strtok(group_local,
", ", &last); groupArg != NULL;
104 groupArg = apr_strtok(NULL,
", ", &last)) {
105 Ganglia_metadata_add(gmetric,
"GROUP", groupArg);
108 if (strcmp(desc,
"") != 0) Ganglia_metadata_add(gmetric,
"DESC", desc_local);
109 if (strcmp(title,
"") != 0) Ganglia_metadata_add(gmetric,
"TITLE", title_local);
112 rval = Ganglia_metric_send(gmetric, send_channels);
114 TRACE(0,
"There was an error sending to %d of the send channels.\n", rval);
120 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.