Example #1
0
static void statsd_run_recvmsg(struct brubeck_statsd *statsd, int sock)
{
	struct brubeck_server *server = statsd->sampler.server;

	struct brubeck_statsd_msg msg;
	struct brubeck_metric *metric;

	char buffer[MAX_PACKET_SIZE];

	struct sockaddr_in reporter;
	socklen_t reporter_len = sizeof(reporter);
	memset(&reporter, 0, reporter_len);

	log_splunk("sampler=statsd event=worker_online syscall=recvmsg socket=%d", sock);

	for (;;) {
		int res = recvfrom(sock, buffer,
			sizeof(buffer) - 1, 0,
			(struct sockaddr *)&reporter, &reporter_len);

		if (res < 0) {
			if (errno == EAGAIN || errno == EINTR)
				continue;

			log_splunk_errno("sampler=statsd event=failed_read from=%s",
				inet_ntoa(reporter.sin_addr));
			brubeck_server_mark_dropped(server);
			continue;
		}

		/* store stats */
		brubeck_atomic_inc(&server->stats.metrics);
		brubeck_atomic_inc(&statsd->sampler.inflow);


            if (brubeck_statsd_msg_parse(&msg, buffer, (size_t) res) < 0) {
                if (msg.key_len > 0)
                    buffer[msg.key_len] = ':';

                log_splunk("sampler=statsd event=bad_key key='%.*s' from=%s",
                           res, buffer, inet_ntoa(reporter.sin_addr));

                brubeck_server_mark_dropped(server);
                continue;
            }

            metric = brubeck_metric_find(server, msg.key, msg.key_len, msg.type);
            if (metric != NULL) {
                brubeck_metric_record(metric, msg.value);
            }

	}

}
Example #2
0
static void statsd_run_recvmsg(struct brubeck_statsd *statsd, int sock)
{
	struct brubeck_server *server = statsd->sampler.server;

	char *buffer = xmalloc(MAX_PACKET_SIZE);
	struct sockaddr_in reporter;
	socklen_t reporter_len = sizeof(reporter);
	memset(&reporter, 0, reporter_len);

	log_splunk("sampler=statsd event=worker_online syscall=recvmsg socket=%d", sock);

	for (;;) {
		int res = recvfrom(sock, buffer, MAX_PACKET_SIZE - 1, 0,
			(struct sockaddr *)&reporter, &reporter_len);

		if (res < 0) {
			if (errno == EAGAIN || errno == EINTR)
				continue;

			log_splunk_errno("sampler=statsd event=failed_read from=%s",
				inet_ntoa(reporter.sin_addr));
			brubeck_stats_inc(server, errors);
			continue;
		}

		brubeck_atomic_inc(&statsd->sampler.inflow);
		brubeck_statsd_packet_parse(server, buffer, buffer + res);
	}
}