8 #include <apr-1/apr_strings.h>
9 #include <apr-1/apr_pools.h>
14 Ganglia_pool global_context;
15 Ganglia_gmond_config gmond_config;
16 Ganglia_udp_send_channels send_channels;
20 char* conf_local = (
char *)conf;
23 global_context = Ganglia_pool_create(NULL);
26 fprintf(stderr,
"Unable to create global context. Exiting.\n");
30 int use_default_config = 1;
31 if (strcmp(conf,
"") != 0)
33 use_default_config = 0;
35 gmond_config = Ganglia_gmond_config_create(conf_local, use_default_config);
38 send_channels = Ganglia_udp_send_channels_create(global_context, gmond_config);
41 fprintf(stderr,
"Unable to create ganglia send channels. Exiting.\n");
50 Ganglia_pool_destroy(global_context);
53 int send_gmetric(
const char* name,
const char* value,
const char* type,
const char* units,
54 const char* slope,
int tmax,
int dmax,
const char* group,
const char* cluster,
55 const char* desc,
const char* title)
57 Ganglia_metric gmetric;
62 char* name_local = (
char *)name;
63 char* value_local = (
char *)value;
64 char* type_local = (
char *)type;
65 char* units_local = (
char *)units;
66 char* slope_local = (
char *)slope;
67 char* group_local = (
char *)group;
68 char* cluster_local = (
char *)cluster;
69 char* desc_local = (
char *)desc;
70 char* title_local = (
char *)title;
73 gmetric = Ganglia_metric_create(global_context);
76 fprintf(stderr,
"Unable to allocate gmetric structure. Exiting.\n");
81 if (!(strcmp(name,
"") != 0 && strcmp(value,
"") != 0 && strcmp(type,
"") != 0))
83 fprintf(stderr,
"Incorrect options supplied, exiting.\n");
86 rval = Ganglia_metric_set(gmetric, name_local, value_local,
87 type_local, units_local, cstr_to_slope(slope_local),
94 fprintf(stderr,
"gmetric parameters invalid. exiting.\n");
97 fprintf(stderr,
"one of your parameters has an invalid character '\"'. exiting.\n");
100 fprintf(stderr,
"the type parameter \"%s\" is not a valid type. exiting.\n", type);
103 fprintf(stderr,
"the value parameter \"%s\" does not represent a number. exiting.\n", value);
107 if (strcmp(cluster,
"") != 0)
108 Ganglia_metadata_add(gmetric,
"CLUSTER", cluster_local);
109 if (strcmp(group,
"") != 0)
112 for (
char* groupArg = apr_strtok(group_local,
", ", &last); groupArg != NULL; groupArg = apr_strtok(NULL,
", ", &last))
114 Ganglia_metadata_add(gmetric,
"GROUP", groupArg);
117 if (strcmp(desc,
"") != 0)
118 Ganglia_metadata_add(gmetric,
"DESC", desc_local);
119 if (strcmp(title,
"") != 0)
120 Ganglia_metadata_add(gmetric,
"TITLE", title_local);
123 rval = Ganglia_metric_send(gmetric, send_channels);
126 fprintf(stderr,
"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.