kb-simple-metrics 0.0.12-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE +13 -0
- data/README.md +144 -0
- data/Rakefile +7 -0
- data/doc/NurseRatched.html +246 -0
- data/doc/Rdio.html +233 -0
- data/doc/Samovar.html +241 -0
- data/doc/Simple/Metrics/Check.html +308 -0
- data/doc/Simple/Metrics/Graphite.html +262 -0
- data/doc/Simple/Metrics/HEALTHY.html +144 -0
- data/doc/Simple/Metrics/Health.html +288 -0
- data/doc/Simple/Metrics/Healthchecks.html +413 -0
- data/doc/Simple/Metrics/Meter.html +295 -0
- data/doc/Simple/Metrics/RackMetrics.html +366 -0
- data/doc/Simple/Metrics/Timer.html +232 -0
- data/doc/Simple/Metrics/UNHEALTHY.html +144 -0
- data/doc/Simple/Metrics/WARNING.html +144 -0
- data/doc/Simple/Metrics.html +510 -0
- data/doc/Simple.html +117 -0
- data/doc/_index.html +259 -0
- data/doc/class_list.html +53 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +328 -0
- data/doc/file.README.html +224 -0
- data/doc/file_list.html +55 -0
- data/doc/frames.html +28 -0
- data/doc/index.html +224 -0
- data/doc/js/app.js +214 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +180 -0
- data/doc/top-level-namespace.html +114 -0
- data/lib/java/jackson-core-asl-1.9.5.jar +0 -0
- data/lib/java/jackson-mapper-asl-1.9.5.jar +0 -0
- data/lib/java/metrics-core-2.1.1.jar +0 -0
- data/lib/java/metrics-graphite-2.1.1.jar +0 -0
- data/lib/java/metrics-servlet-2.1.1.jar +0 -0
- data/lib/java/slf4j-api-1.6.4.jar +0 -0
- data/lib/simple/metrics/graphite.rb +23 -0
- data/lib/simple/metrics/health.rb +15 -0
- data/lib/simple/metrics/healthcheck.rb +65 -0
- data/lib/simple/metrics/meter.rb +23 -0
- data/lib/simple/metrics/rack_metrics.rb +32 -0
- data/lib/simple/metrics/timer.rb +24 -0
- data/lib/simple/metrics.rb +51 -0
- data/lib/simple/version.rb +5 -0
- data/lib/simple.rb +6 -0
- data/simple-metrics.gemspec +21 -0
- data/spec/metrics/graphite_spec.rb +9 -0
- data/spec/metrics/healthcheck_spec.rb +55 -0
- data/spec/metrics/meter_spec.rb +20 -0
- data/spec/metrics/timer_spec.rb +29 -0
- data/spec/spec_helper.rb +13 -0
- metadata +182 -0
data/doc/frames.html
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
7
|
+
<title>Documentation by YARD 0.8.3</title>
|
8
|
+
</head>
|
9
|
+
<script type="text/javascript" charset="utf-8">
|
10
|
+
window.onload = function() {
|
11
|
+
var match = window.location.hash.match(/^#!(.+)/);
|
12
|
+
var name = 'index.html';
|
13
|
+
if (match) {
|
14
|
+
name = unescape(match[1]);
|
15
|
+
}
|
16
|
+
document.writeln('<frameset cols="20%,*">' +
|
17
|
+
'<frame name="list" src="class_list.html" />' +
|
18
|
+
'<frame name="main" src="' + name + '" />' +
|
19
|
+
'</frameset>');
|
20
|
+
}
|
21
|
+
</script>
|
22
|
+
<noscript>
|
23
|
+
<frameset cols="20%,*">
|
24
|
+
<frame name="list" src="class_list.html" />
|
25
|
+
<frame name="main" src="index.html" />
|
26
|
+
</frameset>
|
27
|
+
</noscript>
|
28
|
+
</html>
|
data/doc/index.html
ADDED
@@ -0,0 +1,224 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
6
|
+
<title>
|
7
|
+
File: README
|
8
|
+
|
9
|
+
— Documentation by YARD 0.8.3
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
|
16
|
+
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
18
|
+
hasFrames = window.top.frames.main ? true : false;
|
19
|
+
relpath = '';
|
20
|
+
framesUrl = "frames.html#!" + escape(window.location.href);
|
21
|
+
</script>
|
22
|
+
|
23
|
+
|
24
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
25
|
+
|
26
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
27
|
+
|
28
|
+
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="header">
|
32
|
+
<div id="menu">
|
33
|
+
|
34
|
+
<a href="_index.html">Index</a> »
|
35
|
+
<span class="title">File: README</span>
|
36
|
+
|
37
|
+
|
38
|
+
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div id="search">
|
42
|
+
|
43
|
+
<a class="full_list_link" id="class_list_link"
|
44
|
+
href="class_list.html">
|
45
|
+
Class List
|
46
|
+
</a>
|
47
|
+
|
48
|
+
<a class="full_list_link" id="method_list_link"
|
49
|
+
href="method_list.html">
|
50
|
+
Method List
|
51
|
+
</a>
|
52
|
+
|
53
|
+
<a class="full_list_link" id="file_list_link"
|
54
|
+
href="file_list.html">
|
55
|
+
File List
|
56
|
+
</a>
|
57
|
+
|
58
|
+
</div>
|
59
|
+
<div class="clear"></div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<iframe id="search_frame"></iframe>
|
63
|
+
|
64
|
+
<div id="content"><div id='filecontents'><h1 id="simplemetrics">Simple::Metrics</h1>
|
65
|
+
|
66
|
+
<p>A simple JRuby wrapper around Coda’s excellent <a href="http://metrics.codahale.com/">Metrics package</a></p>
|
67
|
+
|
68
|
+
<h2 id="installation">Installation</h2>
|
69
|
+
|
70
|
+
<p>Add this line to your application’s Gemfile:</p>
|
71
|
+
|
72
|
+
<pre class="code ruby"><code><span class='rubyid_gem identifier id'>gem</span> <span class='string val'>'simple-metrics'</span>
|
73
|
+
</code></pre>
|
74
|
+
|
75
|
+
<p>And then execute:</p>
|
76
|
+
|
77
|
+
<pre class="code ruby"><code>$ <span class='rubyid_bundle identifier id'>bundle</span>
|
78
|
+
</code></pre>
|
79
|
+
|
80
|
+
<p>Or install it yourself as:</p>
|
81
|
+
|
82
|
+
<pre class="code ruby"><code>$ <span class='rubyid_gem identifier id'>gem</span> <span class='rubyid_install identifier id'>install</span> <span class='rubyid_simple identifier id'>simple</span><span class='minus op'>-</span><span class='rubyid_metrics identifier id'>metrics</span>
|
83
|
+
</code></pre>
|
84
|
+
|
85
|
+
<h2 id="healthchecks">Healthchecks</h2>
|
86
|
+
|
87
|
+
<p>Monitor the health of your application in a granular way.</p>
|
88
|
+
|
89
|
+
<p>In a Sinatra/Padrino app, register healthchecks as an extension like so:</p>
|
90
|
+
|
91
|
+
<pre class="code ruby"><code><span class='rubyid_register identifier id'>register</span> <span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span><span class='colon2 op'>::</span><span class='rubyid_Healthchecks constant id'>Healthchecks</span>
|
92
|
+
</code></pre>
|
93
|
+
|
94
|
+
<p>To register a new healthcheck:</p>
|
95
|
+
|
96
|
+
<pre class="code ruby"><code><span class='rubyid_class class kw'>class</span> <span class='rubyid_NurseRatched constant id'>NurseRatched</span>
|
97
|
+
<span class='rubyid_extend identifier id'>extend</span> <span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span><span class='colon2 op'>::</span><span class='rubyid_Healthchecks constant id'>Healthchecks</span>
|
98
|
+
|
99
|
+
<span class='rubyid_attr_accessor identifier id'>attr_accessor</span> <span class='symbol val'>:temp</span>
|
100
|
+
|
101
|
+
<span class='rubyid_new_healthcheck identifier id'>new_healthcheck</span><span class='lparen token'>(</span><span class='string val'>"temperature"</span><span class='rparen token'>)</span> <span class='rubyid_do do kw'>do</span>
|
102
|
+
<span class='rubyid_if if kw'>if</span> <span class='rubyid_@temp ivar id'>@temp</span> <span class='assign token'>=</span> <span class='integer val'>98</span>
|
103
|
+
<span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span><span class='colon2 op'>::</span><span class='rubyid_HEALTHY constant id'>HEALTHY</span>
|
104
|
+
<span class='rubyid_elsif elsif kw'>elsif</span> <span class='rubyid_@temp ivar id'>@temp</span> <span class='gt op'>></span> <span class='integer val'>101</span>
|
105
|
+
<span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span><span class='colon2 op'>::</span><span class='rubyid_UNHEALTHY constant id'>UNHEALTHY</span><span class='dot token'>.</span><span class='rubyid_new identifier id'>new</span><span class='lparen token'>(</span><span class='string val'>"Fever!"</span><span class='rparen token'>)</span>
|
106
|
+
<span class='rubyid_else else kw'>else</span>
|
107
|
+
<span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span><span class='colon2 op'>::</span><span class='rubyid_WARNING constant id'>WARNING</span>
|
108
|
+
<span class='rubyid_end end kw'>end</span>
|
109
|
+
<span class='rubyid_end end kw'>end</span>
|
110
|
+
<span class='rubyid_end end kw'>end</span>
|
111
|
+
</code></pre>
|
112
|
+
|
113
|
+
<p>Run all healthchecks:</p>
|
114
|
+
|
115
|
+
<pre class="code ruby"><code><span class='rubyid_NurseRatched constant id'>NurseRatched</span><span class='dot token'>.</span><span class='rubyid_run_all_healthchecks identifier id'>run_all_healthchecks</span>
|
116
|
+
</code></pre>
|
117
|
+
|
118
|
+
<p>Your healthchecks will be run in a separate thread every 5 seconds. This is a great way to monitor the health of your db connections, thread pools and connections to queues.</p>
|
119
|
+
|
120
|
+
<p>If you are running the servlet in a warbler .war file (see example below), you can monitor the overall health of your application with nagios or other monitoring tools.</p>
|
121
|
+
|
122
|
+
<h2 id="timers">Timers</h2>
|
123
|
+
|
124
|
+
<p>From: <a href="http://metrics.codahale.com/getting-started/#timers">Timers</a>:</p>
|
125
|
+
|
126
|
+
<p>A timer measures both the rate that a particular piece of code is called and the distribution of its duration.</p>
|
127
|
+
|
128
|
+
<pre class="code ruby"><code><span class='rubyid_class class kw'>class</span> <span class='rubyid_Samovar constant id'>Samovar</span>
|
129
|
+
<span class='rubyid_include identifier id'>include</span> <span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span>
|
130
|
+
|
131
|
+
<span class='rubyid_def def kw'>def</span> <span class='rubyid_buh identifier id'>buh</span>
|
132
|
+
<span class='rubyid_timer identifier id'>timer</span><span class='lparen token'>(</span><span class='string val'>"tea time"</span><span class='rparen token'>)</span> <span class='rubyid_do do kw'>do</span>
|
133
|
+
<span class='string val'>"Brewing..."</span>
|
134
|
+
<span class='rubyid_end end kw'>end</span>
|
135
|
+
<span class='rubyid_end end kw'>end</span>
|
136
|
+
<span class='rubyid_end end kw'>end</span>
|
137
|
+
</code></pre>
|
138
|
+
|
139
|
+
<h2 id="meters">Meters</h2>
|
140
|
+
|
141
|
+
<p>From: <a href="http://metrics.codahale.com/getting-started/#meters">Meters</a>:</p>
|
142
|
+
|
143
|
+
<p>“A meter measures the rate of events over time (e.g., “requests per second”). In addition to the mean rate, meters also track 1-, 5-, and 15-minute moving averages.”</p>
|
144
|
+
|
145
|
+
<pre class="code ruby"><code><span class='rubyid_class class kw'>class</span> <span class='rubyid_Rdio constant id'>Rdio</span>
|
146
|
+
<span class='rubyid_extend identifier id'>extend</span> <span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span><span class='colon2 op'>::</span><span class='rubyid_Meter constant id'>Meter</span>
|
147
|
+
|
148
|
+
<span class='rubyid_define_meter identifier id'>define_meter</span> <span class='symbol val'>:bump_meter</span>
|
149
|
+
|
150
|
+
<span class='rubyid_def def kw'>def</span> <span class='rubyid_bump_dat identifier id'>bump_dat</span>
|
151
|
+
<span class='rubyid_bump_meter identifier id'>bump_meter</span><span class='dot token'>.</span><span class='rubyid_mark identifier id'>mark</span>
|
152
|
+
<span class='rubyid_end end kw'>end</span>
|
153
|
+
<span class='rubyid_end end kw'>end</span>
|
154
|
+
</code></pre>
|
155
|
+
|
156
|
+
<h2 id="send-metrics-directly-to-graphite">Send metrics directly to graphite</h2>
|
157
|
+
|
158
|
+
<p>In a Sinatra app:</p>
|
159
|
+
|
160
|
+
<pre class="code ruby"><code><span class='rubyid_register identifier id'>register</span> <span class='rubyid_Simple constant id'>Simple</span><span class='colon2 op'>::</span><span class='rubyid_Metrics constant id'>Metrics</span><span class='colon2 op'>::</span><span class='rubyid_Graphite constant id'>Graphite</span>
|
161
|
+
|
162
|
+
<span class='rubyid_enable_graphite_reporter identifier id'>enable_graphite_reporter</span><span class='lparen token'>(</span><span class='string val'>"graphite.example.com"</span><span class='comma token'>,</span> <span class='integer val'>2003</span><span class='comma token'>,</span> <span class='dstring node'>"services.#{RACK_ENV}"</span><span class='rparen token'>)</span>
|
163
|
+
</code></pre>
|
164
|
+
|
165
|
+
<h2 id="exposing-metrics-from-within-your-app">Exposing metrics from within your app</h2>
|
166
|
+
|
167
|
+
<p>In order to view/collect the health and metrics of your application from the web, you’ll need to add the servlet endpoints.
|
168
|
+
For this example, I’m using <a href="https://github.com/jruby/warbler">Warbler</a> to package
|
169
|
+
the application as a .war</p>
|
170
|
+
|
171
|
+
<p>In config/web.xml, add the following servlet mappings:</p>
|
172
|
+
|
173
|
+
<pre class="code ruby"><code> <span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='gt op'>></span>
|
174
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span><span class='rubyid_metrics identifier id'>metrics</span><span class='dot token'>.</span><span class='rubyid_MetricsServlet constant id'>MetricsServlet</span><span class='lt op'><</span><span class='regexp val'>/servlet-name>
|
175
|
+
<servlet-class>com.yammer.metrics.reporting.MetricsServlet</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='minus op'>-</span><span class='rubyid_class class kw'>class</span><span class='gt op'>></span>
|
176
|
+
<span class='lt op'><</span><span class='regexp val'>/servlet>
|
177
|
+
<servlet-mapping>
|
178
|
+
<servlet-name>metrics.MetricsServlet</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='minus op'>-</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span>
|
179
|
+
<span class='lt op'><</span><span class='rubyid_url identifier id'>url</span><span class='minus op'>-</span><span class='rubyid_pattern identifier id'>pattern</span><span class='gt op'>></span><span class='regexp val'>/metrics</</span><span class='rubyid_url identifier id'>url</span><span class='minus op'>-</span><span class='rubyid_pattern identifier id'>pattern</span><span class='gt op'>></span>
|
180
|
+
<span class='lt op'><</span><span class='regexp val'>/servlet-mapping>
|
181
|
+
|
182
|
+
<servlet>
|
183
|
+
<servlet-name>metrics.HealthCheckServlet</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='minus op'>-</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span>
|
184
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_class class kw'>class</span><span class='gt op'>></span><span class='rubyid_com identifier id'>com</span><span class='dot token'>.</span><span class='rubyid_yammer identifier id'>yammer</span><span class='dot token'>.</span><span class='rubyid_metrics identifier id'>metrics</span><span class='dot token'>.</span><span class='rubyid_reporting identifier id'>reporting</span><span class='dot token'>.</span><span class='rubyid_HealthCheckServlet constant id'>HealthCheckServlet</span><span class='lt op'><</span><span class='regexp val'>/servlet-class>
|
185
|
+
</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='gt op'>></span>
|
186
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_mapping identifier id'>mapping</span><span class='gt op'>></span>
|
187
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span><span class='rubyid_metrics identifier id'>metrics</span><span class='dot token'>.</span><span class='rubyid_HealthCheckServlet constant id'>HealthCheckServlet</span><span class='lt op'><</span><span class='regexp val'>/servlet-name>
|
188
|
+
<url-pattern>/</span><span class='rubyid_healthcheck identifier id'>healthcheck</span><span class='lt op'><</span><span class='regexp val'>/url-pattern>
|
189
|
+
</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='minus op'>-</span><span class='rubyid_mapping identifier id'>mapping</span><span class='gt op'>></span>
|
190
|
+
|
191
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='gt op'>></span>
|
192
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span><span class='rubyid_metrics identifier id'>metrics</span><span class='dot token'>.</span><span class='rubyid_ThreadDumpServlet constant id'>ThreadDumpServlet</span><span class='lt op'><</span><span class='regexp val'>/servlet-name>
|
193
|
+
<servlet-class>com.yammer.metrics.reporting.ThreadDumpServlet</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='minus op'>-</span><span class='rubyid_class class kw'>class</span><span class='gt op'>></span>
|
194
|
+
<span class='lt op'><</span><span class='rubyid_url identifier id'>url</span><span class='minus op'>-</span><span class='rubyid_pattern identifier id'>pattern</span><span class='gt op'>></span><span class='regexp val'>/threads</</span><span class='rubyid_url identifier id'>url</span><span class='minus op'>-</span><span class='rubyid_pattern identifier id'>pattern</span><span class='gt op'>></span>
|
195
|
+
<span class='lt op'><</span><span class='regexp val'>/servlet>
|
196
|
+
|
197
|
+
<servlet>
|
198
|
+
<servlet-name>metrics.PingServlet</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='minus op'>-</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span>
|
199
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_class class kw'>class</span><span class='gt op'>></span><span class='rubyid_com identifier id'>com</span><span class='dot token'>.</span><span class='rubyid_yammer identifier id'>yammer</span><span class='dot token'>.</span><span class='rubyid_metrics identifier id'>metrics</span><span class='dot token'>.</span><span class='rubyid_reporting identifier id'>reporting</span><span class='dot token'>.</span><span class='rubyid_PingServlet constant id'>PingServlet</span><span class='lt op'><</span><span class='regexp val'>/servlet-class>
|
200
|
+
</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='gt op'>></span>
|
201
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_mapping identifier id'>mapping</span><span class='gt op'>></span>
|
202
|
+
<span class='lt op'><</span><span class='rubyid_servlet identifier id'>servlet</span><span class='minus op'>-</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span><span class='rubyid_metrics identifier id'>metrics</span><span class='dot token'>.</span><span class='rubyid_PingServlet constant id'>PingServlet</span><span class='lt op'><</span><span class='regexp val'>/servlet-name>
|
203
|
+
<url-pattern>/</span><span class='rubyid_ping identifier id'>ping</span><span class='lt op'><</span><span class='regexp val'>/url-pattern>
|
204
|
+
</s</span><span class='rubyid_ervlet identifier id'>ervlet</span><span class='minus op'>-</span><span class='rubyid_mapping identifier id'>mapping</span><span class='gt op'>></span>
|
205
|
+
</code></pre>
|
206
|
+
|
207
|
+
<p>Now you can visit your application and get a thread dump, health check or collect metrics using collectd:</p>
|
208
|
+
|
209
|
+
<pre class="code ruby"><code><span class='gt op'>></span> <span class='rubyid_curl identifier id'>curl</span> <span class='rubyid_localhost identifier id'>localhost</span><span class='symbol val'>:9292</span><span class='div op'>/</span><span class='rubyid_threads identifier id'>threads</span>
|
210
|
+
<span class='rubyid_main identifier id'>main</span> <span class='rubyid_id identifier id'>id</span><span class='assign token'>=</span><span class='integer val'>1</span> <span class='rubyid_state identifier id'>state</span><span class='assign token'>=</span><span class='rubyid_WAITING constant id'>WAITING</span>
|
211
|
+
<span class='minus op'>-</span> <span class='rubyid_waiting identifier id'>waiting</span> <span class='rubyid_on identifier id'>on</span> <span class='lt op'><</span><span class='integer val'>0x073772c5</span><span class='gt op'>></span> <span class='lparen token'>(</span><span class='rubyid_a identifier id'>a</span> <span class='rubyid_java identifier id'>java</span><span class='dot token'>.</span><span class='rubyid_lang identifier id'>lang</span><span class='dot token'>.</span><span class='rubyid_Object constant id'>Object</span><span class='rparen token'>)</span>
|
212
|
+
<span class='minus op'>-</span> <span class='rubyid_locked identifier id'>locked</span> <span class='lt op'><</span><span class='integer val'>0x073772c5</span><span class='gt op'>></span> <span class='lparen token'>(</span><span class='rubyid_a identifier id'>a</span> <span class='rubyid_java identifier id'>java</span><span class='dot token'>.</span><span class='rubyid_lang identifier id'>lang</span><span class='dot token'>.</span><span class='rubyid_Object constant id'>Object</span><span class='rparen token'>)</span>
|
213
|
+
<span class='rubyid_at identifier id'>at</span> <span class='rubyid_java identifier id'>java</span><span class='dot token'>.</span><span class='rubyid_lang identifier id'>lang</span><span class='dot token'>.</span><span class='rubyid_Object constant id'>Object</span><span class='dot token'>.</span><span class='rubyid_wait identifier id'>wait</span><span class='lparen token'>(</span><span class='rubyid_Native constant id'>Native</span> <span class='rubyid_Method constant id'>Method</span><span class='rparen token'>)</span>
|
214
|
+
</code></pre>
|
215
|
+
</div></div>
|
216
|
+
|
217
|
+
<div id="footer">
|
218
|
+
Generated on Mon May 13 23:22:15 2013 by
|
219
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
220
|
+
0.8.3 (ruby-1.9.3).
|
221
|
+
</div>
|
222
|
+
|
223
|
+
</body>
|
224
|
+
</html>
|
data/doc/js/app.js
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
function createSourceLinks() {
|
2
|
+
$('.method_details_list .source_code').
|
3
|
+
before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
|
4
|
+
$('.toggleSource').toggle(function() {
|
5
|
+
$(this).parent().nextAll('.source_code').slideDown(100);
|
6
|
+
$(this).text("Hide source");
|
7
|
+
},
|
8
|
+
function() {
|
9
|
+
$(this).parent().nextAll('.source_code').slideUp(100);
|
10
|
+
$(this).text("View source");
|
11
|
+
});
|
12
|
+
}
|
13
|
+
|
14
|
+
function createDefineLinks() {
|
15
|
+
var tHeight = 0;
|
16
|
+
$('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
|
17
|
+
$('.toggleDefines').toggle(function() {
|
18
|
+
tHeight = $(this).parent().prev().height();
|
19
|
+
$(this).prev().show();
|
20
|
+
$(this).parent().prev().height($(this).parent().height());
|
21
|
+
$(this).text("(less)");
|
22
|
+
},
|
23
|
+
function() {
|
24
|
+
$(this).prev().hide();
|
25
|
+
$(this).parent().prev().height(tHeight);
|
26
|
+
$(this).text("more...");
|
27
|
+
});
|
28
|
+
}
|
29
|
+
|
30
|
+
function createFullTreeLinks() {
|
31
|
+
var tHeight = 0;
|
32
|
+
$('.inheritanceTree').toggle(function() {
|
33
|
+
tHeight = $(this).parent().prev().height();
|
34
|
+
$(this).parent().toggleClass('showAll');
|
35
|
+
$(this).text("(hide)");
|
36
|
+
$(this).parent().prev().height($(this).parent().height());
|
37
|
+
},
|
38
|
+
function() {
|
39
|
+
$(this).parent().toggleClass('showAll');
|
40
|
+
$(this).parent().prev().height(tHeight);
|
41
|
+
$(this).text("show all");
|
42
|
+
});
|
43
|
+
}
|
44
|
+
|
45
|
+
function fixBoxInfoHeights() {
|
46
|
+
$('dl.box dd.r1, dl.box dd.r2').each(function() {
|
47
|
+
$(this).prev().height($(this).height());
|
48
|
+
});
|
49
|
+
}
|
50
|
+
|
51
|
+
function searchFrameLinks() {
|
52
|
+
$('.full_list_link').click(function() {
|
53
|
+
toggleSearchFrame(this, $(this).attr('href'));
|
54
|
+
return false;
|
55
|
+
});
|
56
|
+
}
|
57
|
+
|
58
|
+
function toggleSearchFrame(id, link) {
|
59
|
+
var frame = $('#search_frame');
|
60
|
+
$('#search a').removeClass('active').addClass('inactive');
|
61
|
+
if (frame.attr('src') == link && frame.css('display') != "none") {
|
62
|
+
frame.slideUp(100);
|
63
|
+
$('#search a').removeClass('active inactive');
|
64
|
+
}
|
65
|
+
else {
|
66
|
+
$(id).addClass('active').removeClass('inactive');
|
67
|
+
frame.attr('src', link).slideDown(100);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
function linkSummaries() {
|
72
|
+
$('.summary_signature').click(function() {
|
73
|
+
document.location = $(this).find('a').attr('href');
|
74
|
+
});
|
75
|
+
}
|
76
|
+
|
77
|
+
function framesInit() {
|
78
|
+
if (hasFrames) {
|
79
|
+
document.body.className = 'frames';
|
80
|
+
$('#menu .noframes a').attr('href', document.location);
|
81
|
+
window.top.document.title = $('html head title').text();
|
82
|
+
}
|
83
|
+
else {
|
84
|
+
$('#menu .noframes a').text('frames').attr('href', framesUrl);
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
function keyboardShortcuts() {
|
89
|
+
if (window.top.frames.main) return;
|
90
|
+
$(document).keypress(function(evt) {
|
91
|
+
if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
|
92
|
+
if (typeof evt.target !== "undefined" &&
|
93
|
+
(evt.target.nodeName == "INPUT" ||
|
94
|
+
evt.target.nodeName == "TEXTAREA")) return;
|
95
|
+
switch (evt.charCode) {
|
96
|
+
case 67: case 99: $('#class_list_link').click(); break; // 'c'
|
97
|
+
case 77: case 109: $('#method_list_link').click(); break; // 'm'
|
98
|
+
case 70: case 102: $('#file_list_link').click(); break; // 'f'
|
99
|
+
default: break;
|
100
|
+
}
|
101
|
+
});
|
102
|
+
}
|
103
|
+
|
104
|
+
function summaryToggle() {
|
105
|
+
$('.summary_toggle').click(function() {
|
106
|
+
if (localStorage) {
|
107
|
+
localStorage.summaryCollapsed = $(this).text();
|
108
|
+
}
|
109
|
+
$('.summary_toggle').each(function() {
|
110
|
+
$(this).text($(this).text() == "collapse" ? "expand" : "collapse");
|
111
|
+
var next = $(this).parent().parent().nextAll('ul.summary').first();
|
112
|
+
if (next.hasClass('compact')) {
|
113
|
+
next.toggle();
|
114
|
+
next.nextAll('ul.summary').first().toggle();
|
115
|
+
}
|
116
|
+
else if (next.hasClass('summary')) {
|
117
|
+
var list = $('<ul class="summary compact" />');
|
118
|
+
list.html(next.html());
|
119
|
+
list.find('.summary_desc, .note').remove();
|
120
|
+
list.find('a').each(function() {
|
121
|
+
$(this).html($(this).find('strong').html());
|
122
|
+
$(this).parent().html($(this)[0].outerHTML);
|
123
|
+
});
|
124
|
+
next.before(list);
|
125
|
+
next.toggle();
|
126
|
+
}
|
127
|
+
});
|
128
|
+
return false;
|
129
|
+
});
|
130
|
+
if (localStorage) {
|
131
|
+
if (localStorage.summaryCollapsed == "collapse") {
|
132
|
+
$('.summary_toggle').first().click();
|
133
|
+
}
|
134
|
+
else localStorage.summaryCollapsed = "expand";
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
function fixOutsideWorldLinks() {
|
139
|
+
$('a').each(function() {
|
140
|
+
if (window.location.host != this.host) this.target = '_parent';
|
141
|
+
});
|
142
|
+
}
|
143
|
+
|
144
|
+
function generateTOC() {
|
145
|
+
if ($('#filecontents').length === 0) return;
|
146
|
+
var _toc = $('<ol class="top"></ol>');
|
147
|
+
var show = false;
|
148
|
+
var toc = _toc;
|
149
|
+
var counter = 0;
|
150
|
+
var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
|
151
|
+
var i;
|
152
|
+
if ($('#filecontents h1').length > 1) tags.unshift('h1');
|
153
|
+
for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
|
154
|
+
var lastTag = parseInt(tags[0][1], 10);
|
155
|
+
$(tags.join(', ')).each(function() {
|
156
|
+
if ($(this).parents('.method_details .docstring').length != 0) return;
|
157
|
+
if (this.id == "filecontents") return;
|
158
|
+
show = true;
|
159
|
+
var thisTag = parseInt(this.tagName[1], 10);
|
160
|
+
if (this.id.length === 0) {
|
161
|
+
var proposedId = $(this).attr('toc-id');
|
162
|
+
if (typeof(proposedId) != "undefined") this.id = proposedId;
|
163
|
+
else {
|
164
|
+
var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
|
165
|
+
if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
|
166
|
+
this.id = proposedId;
|
167
|
+
}
|
168
|
+
}
|
169
|
+
if (thisTag > lastTag) {
|
170
|
+
for (i = 0; i < thisTag - lastTag; i++) {
|
171
|
+
var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
|
172
|
+
}
|
173
|
+
}
|
174
|
+
if (thisTag < lastTag) {
|
175
|
+
for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
|
176
|
+
}
|
177
|
+
var title = $(this).attr('toc-title');
|
178
|
+
if (typeof(title) == "undefined") title = $(this).text();
|
179
|
+
toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
|
180
|
+
lastTag = thisTag;
|
181
|
+
});
|
182
|
+
if (!show) return;
|
183
|
+
html = '<div id="toc"><p class="title"><a class="hide_toc" href="#"><strong>Table of Contents</strong></a> <small>(<a href="#" class="float_toc">left</a>)</small></p></div>';
|
184
|
+
$('#content').prepend(html);
|
185
|
+
$('#toc').append(_toc);
|
186
|
+
$('#toc .hide_toc').toggle(function() {
|
187
|
+
$('#toc .top').slideUp('fast');
|
188
|
+
$('#toc').toggleClass('hidden');
|
189
|
+
$('#toc .title small').toggle();
|
190
|
+
}, function() {
|
191
|
+
$('#toc .top').slideDown('fast');
|
192
|
+
$('#toc').toggleClass('hidden');
|
193
|
+
$('#toc .title small').toggle();
|
194
|
+
});
|
195
|
+
$('#toc .float_toc').toggle(function() {
|
196
|
+
$(this).text('float');
|
197
|
+
$('#toc').toggleClass('nofloat');
|
198
|
+
}, function() {
|
199
|
+
$(this).text('left');
|
200
|
+
$('#toc').toggleClass('nofloat');
|
201
|
+
});
|
202
|
+
}
|
203
|
+
|
204
|
+
$(framesInit);
|
205
|
+
$(createSourceLinks);
|
206
|
+
$(createDefineLinks);
|
207
|
+
$(createFullTreeLinks);
|
208
|
+
$(fixBoxInfoHeights);
|
209
|
+
$(searchFrameLinks);
|
210
|
+
$(linkSummaries);
|
211
|
+
$(keyboardShortcuts);
|
212
|
+
$(summaryToggle);
|
213
|
+
$(fixOutsideWorldLinks);
|
214
|
+
$(generateTOC);
|
data/doc/js/full_list.js
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
var inSearch = null;
|
2
|
+
var searchIndex = 0;
|
3
|
+
var searchCache = [];
|
4
|
+
var searchString = '';
|
5
|
+
var regexSearchString = '';
|
6
|
+
var caseSensitiveMatch = false;
|
7
|
+
var ignoreKeyCodeMin = 8;
|
8
|
+
var ignoreKeyCodeMax = 46;
|
9
|
+
var commandKey = 91;
|
10
|
+
|
11
|
+
RegExp.escape = function(text) {
|
12
|
+
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
13
|
+
}
|
14
|
+
|
15
|
+
function fullListSearch() {
|
16
|
+
// generate cache
|
17
|
+
searchCache = [];
|
18
|
+
$('#full_list li').each(function() {
|
19
|
+
var link = $(this).find('.object_link a');
|
20
|
+
var fullName = link.attr('title').split(' ')[0];
|
21
|
+
searchCache.push({name:link.text(), fullName:fullName, node:$(this), link:link});
|
22
|
+
});
|
23
|
+
|
24
|
+
$('#search input').keyup(function(event) {
|
25
|
+
if ((event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax)
|
26
|
+
|| event.keyCode == commandKey)
|
27
|
+
return;
|
28
|
+
searchString = this.value;
|
29
|
+
caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
|
30
|
+
regexSearchString = RegExp.escape(searchString);
|
31
|
+
if (caseSensitiveMatch) {
|
32
|
+
regexSearchString += "|" +
|
33
|
+
$.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
|
34
|
+
join('.+?');
|
35
|
+
}
|
36
|
+
if (searchString === "") {
|
37
|
+
clearTimeout(inSearch);
|
38
|
+
inSearch = null;
|
39
|
+
$('ul .search_uncollapsed').removeClass('search_uncollapsed');
|
40
|
+
$('#full_list, #content').removeClass('insearch');
|
41
|
+
$('#full_list li').removeClass('found').each(function() {
|
42
|
+
|
43
|
+
var link = $(this).find('.object_link a');
|
44
|
+
link.text(link.text());
|
45
|
+
});
|
46
|
+
if (clicked) {
|
47
|
+
clicked.parents('ul').each(function() {
|
48
|
+
$(this).removeClass('collapsed').prev().removeClass('collapsed');
|
49
|
+
});
|
50
|
+
}
|
51
|
+
highlight();
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
if (inSearch) clearTimeout(inSearch);
|
55
|
+
searchIndex = 0;
|
56
|
+
lastRowClass = '';
|
57
|
+
$('#full_list, #content').addClass('insearch');
|
58
|
+
$('#noresults').text('');
|
59
|
+
searchItem();
|
60
|
+
}
|
61
|
+
});
|
62
|
+
|
63
|
+
$('#search input').focus();
|
64
|
+
$('#full_list').after("<div id='noresults'></div>");
|
65
|
+
}
|
66
|
+
|
67
|
+
var lastRowClass = '';
|
68
|
+
function searchItem() {
|
69
|
+
for (var i = 0; i < searchCache.length / 50; i++) {
|
70
|
+
var item = searchCache[searchIndex];
|
71
|
+
var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
|
72
|
+
var matchString = regexSearchString;
|
73
|
+
var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
|
74
|
+
if (searchName.match(matchRegexp) == null) {
|
75
|
+
item.node.removeClass('found');
|
76
|
+
}
|
77
|
+
else {
|
78
|
+
item.node.css('padding-left', '10px').addClass('found');
|
79
|
+
item.node.parents().addClass('search_uncollapsed');
|
80
|
+
item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
|
81
|
+
lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
|
82
|
+
item.link.html(item.name.replace(matchRegexp, "<strong>$&</strong>"));
|
83
|
+
}
|
84
|
+
|
85
|
+
if (searchCache.length === searchIndex + 1) {
|
86
|
+
searchDone();
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
searchIndex++;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
inSearch = setTimeout('searchItem()', 0);
|
94
|
+
}
|
95
|
+
|
96
|
+
function searchDone() {
|
97
|
+
highlight(true);
|
98
|
+
if ($('#full_list li:visible').size() === 0) {
|
99
|
+
$('#noresults').text('No results were found.').hide().fadeIn();
|
100
|
+
}
|
101
|
+
else {
|
102
|
+
$('#noresults').text('');
|
103
|
+
}
|
104
|
+
$('#content').removeClass('insearch');
|
105
|
+
clearTimeout(inSearch);
|
106
|
+
inSearch = null;
|
107
|
+
}
|
108
|
+
|
109
|
+
clicked = null;
|
110
|
+
function linkList() {
|
111
|
+
$('#full_list li, #full_list li a:last').click(function(evt) {
|
112
|
+
if ($(this).hasClass('toggle')) return true;
|
113
|
+
if (this.tagName.toLowerCase() == "li") {
|
114
|
+
var toggle = $(this).children('a.toggle');
|
115
|
+
if (toggle.size() > 0 && evt.pageX < toggle.offset().left) {
|
116
|
+
toggle.click();
|
117
|
+
return false;
|
118
|
+
}
|
119
|
+
}
|
120
|
+
if (clicked) clicked.removeClass('clicked');
|
121
|
+
var win = window.top.frames.main ? window.top.frames.main : window.parent;
|
122
|
+
if (this.tagName.toLowerCase() == "a") {
|
123
|
+
clicked = $(this).parent('li').addClass('clicked');
|
124
|
+
win.location = this.href;
|
125
|
+
}
|
126
|
+
else {
|
127
|
+
clicked = $(this).addClass('clicked');
|
128
|
+
win.location = $(this).find('a:last').attr('href');
|
129
|
+
}
|
130
|
+
return false;
|
131
|
+
});
|
132
|
+
}
|
133
|
+
|
134
|
+
function collapse() {
|
135
|
+
if (!$('#full_list').hasClass('class')) return;
|
136
|
+
$('#full_list.class a.toggle').click(function() {
|
137
|
+
$(this).parent().toggleClass('collapsed').next().toggleClass('collapsed');
|
138
|
+
highlight();
|
139
|
+
return false;
|
140
|
+
});
|
141
|
+
$('#full_list.class ul').each(function() {
|
142
|
+
$(this).addClass('collapsed').prev().addClass('collapsed');
|
143
|
+
});
|
144
|
+
$('#full_list.class').children().removeClass('collapsed');
|
145
|
+
highlight();
|
146
|
+
}
|
147
|
+
|
148
|
+
function highlight(no_padding) {
|
149
|
+
var n = 1;
|
150
|
+
$('#full_list li:visible').each(function() {
|
151
|
+
var next = n == 1 ? 2 : 1;
|
152
|
+
$(this).removeClass("r" + next).addClass("r" + n);
|
153
|
+
if (!no_padding && $('#full_list').hasClass('class')) {
|
154
|
+
$(this).css('padding-left', (10 + $(this).parents('ul').size() * 15) + 'px');
|
155
|
+
}
|
156
|
+
n = next;
|
157
|
+
});
|
158
|
+
}
|
159
|
+
|
160
|
+
function escapeShortcut() {
|
161
|
+
$(document).keydown(function(evt) {
|
162
|
+
if (evt.which == 27) {
|
163
|
+
$('#search_frame', window.top.document).slideUp(100);
|
164
|
+
$('#search a', window.top.document).removeClass('active inactive');
|
165
|
+
$(window.top).focus();
|
166
|
+
}
|
167
|
+
});
|
168
|
+
}
|
169
|
+
|
170
|
+
$(escapeShortcut);
|
171
|
+
$(fullListSearch);
|
172
|
+
$(linkList);
|
173
|
+
$(collapse);
|