forked from DataDog/statsd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
csharp_example.cs
154 lines (130 loc) · 4.21 KB
/
csharp_example.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using System;
using System.Linq;
using System.Net.Sockets;
using System.Text;
namespace Statsd
{
public class StatsdPipe : IDisposable
{
private readonly UdpClient udpClient;
private readonly Random random = new Random();
public StatsdPipe(string host, int port)
{
udpClient = new UdpClient(host, port);
}
public bool Gauge(string key, int value)
{
return Gauge(key, value, 1.0);
}
public bool Gauge(string key, int value, double sampleRate)
{
return Send(sampleRate, String.Format("{0}:{1:d}|g", key, value));
}
public bool Timing(string key, int value)
{
return Timing(key, value, 1.0);
}
public bool Timing(string key, int value, double sampleRate)
{
return Send(sampleRate, String.Format("{0}:{1:d}|ms", key, value));
}
public bool Decrement(string key)
{
return Increment(key, -1, 1.0);
}
public bool Decrement(string key, int magnitude)
{
return Decrement(key, magnitude, 1.0);
}
public bool Decrement(string key, int magnitude, double sampleRate)
{
magnitude = magnitude < 0 ? magnitude : -magnitude;
return Increment(key, magnitude, sampleRate);
}
public bool Decrement(params string[] keys)
{
return Increment(-1, 1.0, keys);
}
public bool Decrement(int magnitude, params string[] keys)
{
magnitude = magnitude < 0 ? magnitude : -magnitude;
return Increment(magnitude, 1.0, keys);
}
public bool Decrement(int magnitude, double sampleRate, params string[] keys)
{
magnitude = magnitude < 0 ? magnitude : -magnitude;
return Increment(magnitude, sampleRate, keys);
}
public bool Increment(string key)
{
return Increment(key, 1, 1.0);
}
public bool Increment(string key, int magnitude)
{
return Increment(key, magnitude, 1.0);
}
public bool Increment(string key, int magnitude, double sampleRate)
{
string stat = String.Format("{0}:{1}|c", key, magnitude);
return Send(stat, sampleRate);
}
public bool Increment(int magnitude, double sampleRate, params string[] keys)
{
return Send(sampleRate, keys.Select(key => String.Format("{0}:{1}|c", key, magnitude)).ToArray());
}
protected bool Send(String stat, double sampleRate)
{
return Send(sampleRate, stat);
}
protected bool Send(double sampleRate, params string[] stats)
{
var retval = false; // didn't send anything
if (sampleRate < 1.0)
{
foreach (var stat in stats)
{
if (random.NextDouble() <= sampleRate)
{
var statFormatted = String.Format("{0}|@{1:f}", stat, sampleRate);
if (DoSend(statFormatted))
{
retval = true;
}
}
}
}
else
{
foreach (var stat in stats)
{
if (DoSend(stat))
{
retval = true;
}
}
}
return retval;
}
protected bool DoSend(string stat)
{
var data = Encoding.Default.GetBytes(stat + "\n");
udpClient.Send(data, data.Length);
return true;
}
#region IDisposable Members
public void Dispose()
{
try
{
if (udpClient != null)
{
udpClient.Close();
}
}
catch
{
}
}
#endregion
}
}