/* * Called when the LFS module is activated. * Need to initialize APR ourselves */ int lfs_activate(void) { globus_extension_registry_add( GLOBUS_GFS_DSI_REGISTRY, "lfs", GlobusExtensionMyModule(globus_gridftp_server_lfs), &globus_l_gfs_lfs_dsi_iface); // See if we're configured to write to statsd char * local_host = globus_malloc(256); if (local_host) { memset(local_host, 0, 256); if (gethostname(local_host, 255)) { strcpy(local_host, "UNKNOWN"); } } char statsd_namespace_prefix [] = "lfs.gridftp."; char * statsd_namespace = globus_malloc(strlen(statsd_namespace_prefix)+ strlen(local_host)+1); strcpy(statsd_namespace, statsd_namespace_prefix); char * source = local_host; char * dest; for (dest = statsd_namespace + strlen(statsd_namespace_prefix); *source != '\0'; ++source, ++dest) { if (*source == '.') { *dest = '_'; } else { *dest = *source; } } *dest = '\0'; char * lfs_statsd_link_port = getenv("GRIDFTP_LFS_STATSD_PORT"); char * lfs_statsd_link_host = getenv("GRIDFTP_LFS_STATSD_HOST"); if (lfs_statsd_link_host) { int lfs_statsd_link_port_conv = 8125; if (lfs_statsd_link_port) { lfs_statsd_link_port_conv = atoi(lfs_statsd_link_port); } lfs_statsd_link = statsd_init_with_namespace(lfs_statsd_link_host, lfs_statsd_link_port_conv, statsd_namespace); globus_gfs_log_message(GLOBUS_GFS_LOG_INFO, "Sending log data to statsd %s:%i, namespace %s\n", lfs_statsd_link_host, lfs_statsd_link_port_conv, statsd_namespace); } else { globus_gfs_log_message(GLOBUS_GFS_LOG_INFO, "Not logging to statsd. Set $GRIDFTP_LFS_STATSD_HOST to enable\n"); lfs_statsd_link = NULL; } globus_free(statsd_namespace); globus_gfs_log_message(GLOBUS_GFS_LOG_INFO, "LFS DSI activated.\n"); STATSD_COUNT("activate",1); if (local_host) globus_free(local_host); return 0; }
int main(void) { statsd_t *link, *link2; link = statsd_init("127.0.0.1", 8125); assert(statsd_count(link, "count1", 123, 1.0) == 0); link2 = statsd_init_with_namespace("127.0.0.1", 8125, "mynamespace"); assert(statsd_count(link, "count2", 125, 1.0) == 0); assert(statsd_gauge(link, "speed", 10) == 0); assert(statsd_timing(link2, "request", 2400) == 0); sleep(1); assert(statsd_inc(link, "count1", 1.0) == 0); assert(statsd_dec(link2, "count2", 1.0) == 0); int i; for (i=0; i<10; i++) { assert(statsd_count(link2, "count3", i, 0.8) == 0); } statsd_finalize(link); statsd_finalize(link2); return 0; }
int main(void) { statsd_init("127.0.0.1", 8125); statsd_count("count1", 123, 1.0); statsd_init_with_namespace("127.0.0.1", 8125, "mynamespace"); statsd_count("count2", 125, 1.0); statsd_gauge("speed", 10); statsd_timing("request", 2400); sleep(1); statsd_inc("count1", 1.0); statsd_dec("count2", 1.0); int i; for(i=0; i<10; i++) { statsd_count("count3", i, 0.8); } statsd_finalize(); return 0; }
int main(int argc, char *argv[]) { char *metric_name = NULL; int c; char *statsd_host = STATSD_DEFAULT_HOST; int statsd_port = STATSD_DEFAULT_PORT; char *gearmand_host = GEARMAND_DEFAULT_HOST; int gearmand_port = GEARMAND_DEFAULT_PORT; int debug = 0; int foreground = 0; int polling_interval = DEFAULT_POLLING_INTERVAL; while ((c = getopt (argc, argv, "e:dvifH:t::P::h:p::N:")) != -1) { switch (c) { case '?': showHelp(); return 0; break; case 'N': metric_name = malloc(strlen(optarg)); strcpy(metric_name, optarg); break; case 'h': statsd_host = malloc(strlen(optarg)); strcpy(statsd_host, optarg); break; case 'p': statsd_port = atoi(optarg); break; case 'H': gearmand_host = malloc(strlen(optarg)); strcpy(gearmand_host, optarg); break; case 'P': gearmand_port = atoi(optarg); break; case 't': polling_interval = atoi(optarg); break; case 'f': foreground = 1; break; case 'd': debug = 1; break; default: showHelp(); return 1; break; } } if (metric_name == NULL) { fprintf(stderr, "%s: missing -N option\n", argv[0]); showHelp(); return 1; } if (debug) { setlogmask(LOG_UPTO(LOG_INFO)); openlog("statsd-gearmand-monitor", LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER); syslog(LOG_INFO, "statsd host: %s:%d", statsd_host, statsd_port); syslog(LOG_INFO, "metric name: %s", metric_name); syslog(LOG_INFO, "polling interval: %d secs", polling_interval); syslog(LOG_INFO, "gearmand host: %s:%d", gearmand_host, gearmand_port); } signal(SIGHUP, SIG_IGN); signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); signal(SIGTERM, sigterm); int sockfd = 0, n = 0; char recvBuff[1024]; struct sockaddr_in gearmand_serv_addr; memset(recvBuff, '0',sizeof(recvBuff)); if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("error: could not create socket \n"); return 1; } /* resolve hostname */ struct hostent * he; if ((he = gethostbyname(gearmand_host)) == NULL) { perror("error: could not resolve host\n"); return 1; } memset(&gearmand_serv_addr, '0', sizeof(gearmand_serv_addr)); gearmand_serv_addr.sin_family = AF_INET; gearmand_serv_addr.sin_port = htons(gearmand_port); if(memcpy(&gearmand_serv_addr.sin_addr, he->h_addr_list[0], he->h_length) <= 0) { perror("error: memcpy error occured\n"); return 1; } if (!foreground) { if (debug) { syslog(LOG_INFO, "sending process to background"); } daemon(0, 0); } statsd_link *_statsd_link; _statsd_link = statsd_init_with_namespace(statsd_host, statsd_port, metric_name); while(running) { if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("error : could not create socket \n"); return 1; } if( connect(sockfd, (struct sockaddr *)&gearmand_serv_addr, sizeof(gearmand_serv_addr)) < 0) { perror("error: connect Failed to gearmand \n"); return 1; } write(sockfd, "status\n", strlen("status\n")); while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0) { recvBuff[n] = 0; if (recvBuff[n - 2] == '.' && recvBuff[n - 1] == '\n') { recvBuff[n - 2] = 0; break; } } close(sockfd); char * pch; pch = strtok (recvBuff, "\n"); while (pch != NULL) { char function_name[1024]; char * _metric_name = NULL; int queued, running, connected; sscanf(pch, "%s\t%d\t%d\t%d", function_name, &queued, &running, &connected); _metric_name = _forge_metric_name(function_name, "connected"); statsd_gauge(_statsd_link, _metric_name, connected); free(_metric_name); _metric_name = _forge_metric_name(function_name, "queued"); statsd_gauge(_statsd_link, _metric_name , queued); free(_metric_name); _metric_name = _forge_metric_name(function_name, "running"); statsd_gauge(_statsd_link, _metric_name, running); free(_metric_name); if (debug) { syslog(LOG_INFO, "function %s has a total of %d queued jobs - %d workers running - %d workers connected\n", function_name, queued, running, connected); } pch = strtok (NULL, "\n"); } sleep(polling_interval); } statsd_finalize(_statsd_link); return 0; }