statsd 0.0.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/python_example.py DELETED
@@ -1,89 +0,0 @@
1
- # python_example.py
2
-
3
- # Steve Ivy <steveivy@gmail.com>
4
- # http://monkinetic.com
5
-
6
- # this file expects local_settings.py to be in the same dir, with statsd host and port information:
7
- #
8
- # statsd_host = 'localhost'
9
- # statsd_port = 8125
10
-
11
- # Sends statistics to the stats daemon over UDP
12
- class Statsd(object):
13
-
14
- @staticmethod
15
- def timing(stats, time, sample_rate=1):
16
- """
17
- Log timing information
18
- >>> from python_example import Statsd
19
- >>> Statsd.timing('some.time','500|ms')
20
- """
21
- Statsd.update_stats(stats, time, sample_rate)
22
-
23
- @staticmethod
24
- def increment(stats, sample_rate=1):
25
- """
26
- Increments one or more stats counters
27
- >>> Statsd.increment('some.int')
28
- >>> Statsd.increment('some.int',0.5)
29
- """
30
- Statsd.update_stats(stats, 1, sample_rate)
31
-
32
- @staticmethod
33
- def decrement(stats, sample_rate=1):
34
- """
35
- Decrements one or more stats counters
36
- >>> Statsd.decrement('some.int')
37
- """
38
- Statsd.update_stats(stats, -1, sample_rate)
39
-
40
- @staticmethod
41
- def update_stats(stats, delta=1, sampleRate=1):
42
- """
43
- Updates one or more stats counters by arbitrary amounts
44
- >>> Statsd.update_stats('some.int',10)
45
- """
46
- if (type(stats) is not list):
47
- stats = [stats]
48
- data = {}
49
- for stat in stats:
50
- data[stat] = "%s|c" % delta
51
-
52
- Statsd.send(data, sampleRate)
53
-
54
- @staticmethod
55
- def send(data, sample_rate=1):
56
- """
57
- Squirt the metrics over UDP
58
- """
59
- try:
60
- import local_settings as settings
61
- host = settings.statsd_host
62
- port = settings.statsd_port
63
- addr=(host, port)
64
- except Error:
65
- exit(1)
66
-
67
- sampled_data = {}
68
-
69
- if(sample_rate < 1):
70
- import random
71
- if random.random() <= sample_rate:
72
- for stat in data.keys():
73
- value = data[stat]
74
- sampled_data[stat] = "%s|@%s" %(value, sample_rate)
75
- else:
76
- sampled_data=data
77
-
78
- from socket import *
79
- udp_sock = socket(AF_INET, SOCK_DGRAM)
80
- try:
81
- for stat in sampled_data.keys():
82
- value = data[stat]
83
- send_data = "%s:%s" % (stat, value)
84
- udp_sock.sendto(send_data, addr)
85
- except:
86
- import sys
87
- from pprint import pprint
88
- print "Unexpected error:", pprint(sys.exc_info())
89
- pass # we don't care
data/stats.js DELETED
@@ -1,128 +0,0 @@
1
- var dgram = require('dgram')
2
- , sys = require('sys')
3
- , net = require('net')
4
- , config = require('./config')
5
-
6
- var counters = {};
7
- var timers = {};
8
- var debugInt, flushInt, server;
9
-
10
- config.configFile(process.argv[2], function (config, oldConfig) {
11
- if (! config.debug && debugInt) {
12
- clearInterval(debugInt);
13
- debugInt = false;
14
- }
15
-
16
- if (config.debug) {
17
- if (debugInt !== undefined) { clearInterval(debugInt); }
18
- debugInt = setInterval(function () {
19
- sys.log("Counters:\n" + sys.inspect(counters) + "\nTimers:\n" + sys.inspect(timers));
20
- }, config.debugInterval || 10000);
21
- }
22
-
23
- if (server === undefined) {
24
- server = dgram.createSocket('udp4', function (msg, rinfo) {
25
- if (config.dumpMessages) { sys.log(msg.toString()); }
26
- var bits = msg.toString().split(':');
27
- var key = bits.shift()
28
- .replace(/\s+/g, '_')
29
- .replace(/\//g, '-')
30
- .replace(/[^a-zA-Z_\-0-9\.]/g, '');
31
-
32
- if (bits.length == 0) {
33
- bits.push("1");
34
- }
35
-
36
- for (var i = 0; i < bits.length; i++) {
37
- var sampleRate = 1;
38
- var fields = bits[i].split("|");
39
- if (fields[1].trim() == "ms") {
40
- if (! timers[key]) {
41
- timers[key] = [];
42
- }
43
- timers[key].push(Number(fields[0] || 0));
44
- } else {
45
- if (fields[2] && fields[2].match(/^@([\d\.]+)/)) {
46
- sampleRate = Number(fields[2].match(/^@([\d\.]+)/)[1]);
47
- }
48
- if (! counters[key]) {
49
- counters[key] = 0;
50
- }
51
- counters[key] += Number(fields[0] || 1) * (1 / sampleRate);
52
- }
53
- }
54
- });
55
-
56
- server.bind(config.port || 8125);
57
-
58
- var flushInterval = Number(config.flushInterval || 10000);
59
-
60
- flushInt = setInterval(function () {
61
- var statString = '';
62
- var ts = Math.round(new Date().getTime() / 1000);
63
- var numStats = 0;
64
- var key;
65
-
66
- for (key in counters) {
67
- var value = counters[key] / (flushInterval / 1000);
68
- var message = 'stats.' + key + ' ' + value + ' ' + ts + "\n";
69
- statString += message;
70
- counters[key] = 0;
71
-
72
- numStats += 1;
73
- }
74
-
75
- for (key in timers) {
76
- if (timers[key].length > 0) {
77
- var pctThreshold = config.percentThreshold || 90;
78
- var values = timers[key].sort(function (a,b) { return a-b; });
79
- var count = values.length;
80
- var min = values[0];
81
- var max = values[count - 1];
82
-
83
- var mean = min;
84
- var maxAtThreshold = max;
85
-
86
- if (count > 1) {
87
- var thresholdIndex = Math.round(((100 - pctThreshold) / 100) * count);
88
- var numInThreshold = count - thresholdIndex;
89
- values = values.slice(0, numInThreshold);
90
- maxAtThreshold = values[numInThreshold - 1];
91
-
92
- // average the remaining timings
93
- var sum = 0;
94
- for (var i = 0; i < numInThreshold; i++) {
95
- sum += values[i];
96
- }
97
-
98
- mean = sum / numInThreshold;
99
- }
100
-
101
- timers[key] = [];
102
-
103
- var message = "";
104
- message += 'stats.timers.' + key + '.mean ' + mean + ' ' + ts + "\n";
105
- message += 'stats.timers.' + key + '.upper ' + max + ' ' + ts + "\n";
106
- message += 'stats.timers.' + key + '.upper_' + pctThreshold + ' ' + maxAtThreshold + ' ' + ts + "\n";
107
- message += 'stats.timers.' + key + '.lower ' + min + ' ' + ts + "\n";
108
- message += 'stats.timers.' + key + '.count ' + count + ' ' + ts + "\n";
109
- statString += message;
110
-
111
- numStats += 1;
112
- }
113
- }
114
-
115
- statString += 'statsd.numStats ' + numStats + ' ' + ts + "\n";
116
-
117
- var graphite = net.createConnection(config.graphitePort, config.graphiteHost);
118
-
119
- graphite.on('connect', function() {
120
- this.write(statString);
121
- this.end();
122
- });
123
-
124
- }, flushInterval);
125
- }
126
-
127
- });
128
-
data/webapp/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- # A sample Gemfile
2
- source "http://rubygems.org"
3
-
4
- gem "sinatra"
5
- gem "mongo"
data/webapp/Gemfile.lock DELETED
@@ -1,21 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- SystemTimer (1.2.2)
5
- rack (1.2.1)
6
- redis (2.1.1)
7
- sinatra (1.1.3)
8
- rack (~> 1.1)
9
- tilt (>= 1.2.2, < 2.0)
10
- tilt (1.2.2)
11
- vegas (0.1.8)
12
- rack (>= 1.0.0)
13
-
14
- PLATFORMS
15
- ruby
16
-
17
- DEPENDENCIES
18
- SystemTimer
19
- redis
20
- sinatra
21
- vegas
data/webapp/README.md DELETED
@@ -1,2 +0,0 @@
1
- a simple Sinatra web app for viewing charts
2
- ruby -Irubygems app.rb
data/webapp/app.rb DELETED
@@ -1,12 +0,0 @@
1
- require 'rubygems'
2
- require 'sinatra'
3
- require 'mongo'
4
- require 'yaml'
5
- ROOT = File.expand_path(File.dirname(__FILE__))
6
- APP_CONFIG = YAML::load(ERB.new(IO.read(File.join(ROOT,'config.yml'))).result)
7
- get '/' do
8
- db = Mongo::Connection.new(APP_CONFIG['dbhost']).db(APP_CONFIG['db'])
9
- coll = db.collection("stats_10s")
10
- @stats = coll.find({}).limit(100)
11
- erb :chart
12
- end
data/webapp/bin/rackup DELETED
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env rbx
2
- #
3
- # This file was generated by Bundler.
4
- #
5
- # The application 'rackup' is installed as part of a gem, and
6
- # this file is here to facilitate running it.
7
- #
8
-
9
- require 'pathname'
10
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
- Pathname.new(__FILE__).realpath)
12
-
13
- require 'rubygems'
14
- require 'bundler/setup'
15
-
16
- load Gem.bin_path('rack', 'rackup')
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pathname'
4
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
5
- Pathname.new(__FILE__).realpath)
6
- puts ENV['BUNDLE_GEMFILE']
7
- require 'rubygems'
8
- require 'bundler/setup'
9
-
10
- #load Gem.bin_path('statsd', 'statsd')
11
-
12
- require File.expand_path(File.dirname(__FILE__) + '/../statsd-web.rb')
13
- require 'vegas'
14
-
15
- Vegas::Runner.new(StatsdWeb, 'statsd-web')
data/webapp/config.yml DELETED
@@ -1,3 +0,0 @@
1
- ---
2
- dbhost: statsd.example.com
3
- db: statsdb