RubyRun_CE 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/LICENSE +13 -0
  2. data/README +75 -0
  3. data/Rakefile +241 -0
  4. data/bin/confgure +2 -0
  5. data/docs/RubyRunCE_09.htm +6346 -0
  6. data/docs/RubyRunCE_09.pdf +0 -0
  7. data/docs/RubyRunCE_09_files/colorschememapping.xml +2 -0
  8. data/docs/RubyRunCE_09_files/filelist.xml +29 -0
  9. data/docs/RubyRunCE_09_files/header.htm +142 -0
  10. data/docs/RubyRunCE_09_files/image001.jpg +0 -0
  11. data/docs/RubyRunCE_09_files/image002.jpg +0 -0
  12. data/docs/RubyRunCE_09_files/image003.jpg +0 -0
  13. data/docs/RubyRunCE_09_files/image004.jpg +0 -0
  14. data/docs/RubyRunCE_09_files/image005.jpg +0 -0
  15. data/docs/RubyRunCE_09_files/image006.jpg +0 -0
  16. data/docs/RubyRunCE_09_files/image007.jpg +0 -0
  17. data/docs/RubyRunCE_09_files/image008.jpg +0 -0
  18. data/docs/RubyRunCE_09_files/image009.jpg +0 -0
  19. data/docs/RubyRunCE_09_files/image010.jpg +0 -0
  20. data/docs/RubyRunCE_09_files/image011.jpg +0 -0
  21. data/docs/RubyRunCE_09_files/image012.jpg +0 -0
  22. data/docs/RubyRunCE_09_files/image013.jpg +0 -0
  23. data/docs/RubyRunCE_09_files/image014.jpg +0 -0
  24. data/docs/RubyRunCE_09_files/image015.jpg +0 -0
  25. data/docs/RubyRunCE_09_files/image016.jpg +0 -0
  26. data/docs/RubyRunCE_09_files/image017.png +0 -0
  27. data/docs/RubyRunCE_09_files/image018.jpg +0 -0
  28. data/docs/RubyRunCE_09_files/image019.jpg +0 -0
  29. data/docs/RubyRunCE_09_files/image020.jpg +0 -0
  30. data/docs/RubyRunCE_09_files/image021.jpg +0 -0
  31. data/docs/RubyRunCE_09_files/image022.png +0 -0
  32. data/docs/RubyRunCE_09_files/themedata.thmx +0 -0
  33. data/etc/rubyrun_opts.yml +132 -0
  34. data/ext/extconf.rb +4 -0
  35. data/ext/rubyrunnative__.bundle +0 -0
  36. data/ext/rubyrunnative__.c +154 -0
  37. data/ext/rubyrunnative__.def +2 -0
  38. data/ext/rubyrunnative__.h +36 -0
  39. data/ext/rubyrunnative__.so +0 -0
  40. data/ext/rubyrunnative__linux.so +0 -0
  41. data/html/classes/Module.html +174 -0
  42. data/html/classes/Object.html +151 -0
  43. data/html/classes/RubyRunBufferMgr__.html +182 -0
  44. data/html/classes/RubyRunCommander__.html +578 -0
  45. data/html/classes/RubyRunDad__.html +144 -0
  46. data/html/classes/RubyRunGlobals.html +248 -0
  47. data/html/classes/RubyRunHTMLWriter.html +186 -0
  48. data/html/classes/RubyRunHTMLWriter/RubyRunHTMLDevice.html +157 -0
  49. data/html/classes/RubyRunHTML__.html +198 -0
  50. data/html/classes/RubyRunInitializer__.html +821 -0
  51. data/html/classes/RubyRunInstrumentor__.html +576 -0
  52. data/html/classes/RubyRunMonitor__.html +298 -0
  53. data/html/classes/RubyRunRSS.html +302 -0
  54. data/html/classes/RubyRunReport__.html +294 -0
  55. data/html/classes/RubyRunTracer__.html +253 -0
  56. data/html/classes/RubyRunUtils__.html +376 -0
  57. data/html/created.rid +1 -0
  58. data/html/files/LICENSE.html +119 -0
  59. data/html/files/README.html +196 -0
  60. data/html/files/lib/rubyrun/rubyrun_buffer_mgr___rb.html +101 -0
  61. data/html/files/lib/rubyrun/rubyrun_commander___rb.html +101 -0
  62. data/html/files/lib/rubyrun/rubyrun_dad___rb.html +101 -0
  63. data/html/files/lib/rubyrun/rubyrun_globals_rb.html +101 -0
  64. data/html/files/lib/rubyrun/rubyrun_html___rb.html +101 -0
  65. data/html/files/lib/rubyrun/rubyrun_html_writer___rb.html +108 -0
  66. data/html/files/lib/rubyrun/rubyrun_initializer___rb.html +112 -0
  67. data/html/files/lib/rubyrun/rubyrun_instrumentor___rb.html +116 -0
  68. data/html/files/lib/rubyrun/rubyrun_monitor___rb.html +116 -0
  69. data/html/files/lib/rubyrun/rubyrun_rb.html +121 -0
  70. data/html/files/lib/rubyrun/rubyrun_report___rb.html +101 -0
  71. data/html/files/lib/rubyrun/rubyrun_rss___rb.html +108 -0
  72. data/html/files/lib/rubyrun/rubyrun_tracer___rb.html +110 -0
  73. data/html/files/lib/rubyrun/rubyrun_utils___rb.html +108 -0
  74. data/html/files/lib/rubyrunm_rb.html +116 -0
  75. data/html/fr_class_index.html +42 -0
  76. data/html/fr_file_index.html +43 -0
  77. data/html/fr_method_index.html +96 -0
  78. data/html/index.html +24 -0
  79. data/html/rdoc-style.css +208 -0
  80. data/lib/rubyrun/rubyrun.rb +78 -0
  81. data/lib/rubyrun/rubyrun_buffer_mgr__.rb +49 -0
  82. data/lib/rubyrun/rubyrun_commander__.rb +196 -0
  83. data/lib/rubyrun/rubyrun_dad__.rb +35 -0
  84. data/lib/rubyrun/rubyrun_globals.rb +51 -0
  85. data/lib/rubyrun/rubyrun_html__.rb +136 -0
  86. data/lib/rubyrun/rubyrun_html_writer__.rb +64 -0
  87. data/lib/rubyrun/rubyrun_initializer__.rb +286 -0
  88. data/lib/rubyrun/rubyrun_instrumentor__.rb +226 -0
  89. data/lib/rubyrun/rubyrun_monitor__.rb +237 -0
  90. data/lib/rubyrun/rubyrun_report__.rb +109 -0
  91. data/lib/rubyrun/rubyrun_rss__.rb +97 -0
  92. data/lib/rubyrun/rubyrun_tracer__.rb +79 -0
  93. data/lib/rubyrun/rubyrun_utils__.rb +98 -0
  94. data/lib/rubyrunm.rb +10 -0
  95. metadata +148 -0
@@ -0,0 +1,298 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Module: RubyRunMonitor__</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Module</strong></td>
53
+ <td class="class-name-in-header">RubyRunMonitor__</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/rubyrun/rubyrun_monitor___rb.html">
59
+ lib/rubyrun/rubyrun_monitor__.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ </table>
66
+ </div>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+
71
+
72
+
73
+ <div id="contextContent">
74
+
75
+
76
+
77
+ </div>
78
+
79
+ <div id="method-list">
80
+ <h3 class="section-bar">Methods</h3>
81
+
82
+ <div class="name-list">
83
+ <a href="#M000025">create_metrics_hash</a>&nbsp;&nbsp;
84
+ <a href="#M000024">create_thread_local</a>&nbsp;&nbsp;
85
+ <a href="#M000026">report_rails_timing</a>&nbsp;&nbsp;
86
+ <a href="#M000023">start_thread_monitor</a>&nbsp;&nbsp;
87
+ </div>
88
+ </div>
89
+
90
+ </div>
91
+
92
+
93
+ <!-- if includes -->
94
+ <div id="includes">
95
+ <h3 class="section-bar">Included Modules</h3>
96
+
97
+ <div id="includes-list">
98
+ <span class="include-name"><a href="RubyRunGlobals.html">RubyRunGlobals</a></span>
99
+ <span class="include-name"><a href="RubyRunUtils__.html">RubyRunUtils__</a></span>
100
+ <span class="include-name"><a href="RubyRunTracer__.html">RubyRunTracer__</a></span>
101
+ <span class="include-name"><a href="RubyRunBufferMgr__.html">RubyRunBufferMgr__</a></span>
102
+ <span class="include-name"><a href="RubyRunHTML__.html">RubyRunHTML__</a></span>
103
+ <span class="include-name"><a href="RubyRunReport__.html">RubyRunReport__</a></span>
104
+ <span class="include-name"><a href="RubyRunCommander__.html">RubyRunCommander__</a></span>
105
+ </div>
106
+ </div>
107
+
108
+ <div id="section">
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+ <!-- if method_list -->
118
+ <div id="methods">
119
+ <h3 class="section-bar">Public Instance methods</h3>
120
+
121
+ <div id="method-M000025" class="method-detail">
122
+ <a name="M000025"></a>
123
+
124
+ <div class="method-heading">
125
+ <a href="#M000025" class="method-signature">
126
+ <span class="method-name">create_metrics_hash</span><span class="method-args">(klass)</span>
127
+ </a>
128
+ </div>
129
+
130
+ <div class="method-description">
131
+ <p>
132
+ Create a place holding global metrics hash for each RAILS application
133
+ controller class to accumulate performance metrics by action. Key elements
134
+ in the hash are, for instance: {#{controller} =&gt; {#{action} =&gt;
135
+ [dispatch_t, action_t, dbio_t, view_t, uncap_t, dispatch_wait_t]}}
136
+ </p>
137
+ <p><a class="source-toggle" href="#"
138
+ onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
139
+ <div class="method-source-code" id="M000025-source">
140
+ <pre>
141
+ <span class="ruby-comment cmt"># File lib/rubyrun/rubyrun_monitor__.rb, line 116</span>
142
+ 116: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create_metrics_hash</span>(<span class="ruby-identifier">klass</span>)
143
+ 117: <span class="ruby-identifier">$rubyrun_metrics_hash</span>[<span class="ruby-identifier">klass</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">downcase</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">-11</span>]] <span class="ruby-operator">||=</span> {}
144
+ 118: <span class="ruby-keyword kw">end</span>
145
+ </pre>
146
+ </div>
147
+ </div>
148
+ </div>
149
+
150
+ <div id="method-M000024" class="method-detail">
151
+ <a name="M000024"></a>
152
+
153
+ <div class="method-heading">
154
+ <a href="#M000024" class="method-signature">
155
+ <span class="method-name">create_thread_local</span><span class="method-args">(tid, request, klass, mid)</span>
156
+ </a>
157
+ </div>
158
+
159
+ <div class="method-description">
160
+ <p>
161
+ Simulate a thread local storage by using a private hash keyed on thread id.
162
+ Key elements in the hash are, for instance: {#{tid} =&gt;
163
+ {:req=&gt;request.object_id, :controller=&gt;name, :action=&gt; name,
164
+ </p>
165
+ <pre>
166
+ :action_t=&gt;t, :dbio=&gt;t, :dispatch_t=&gt;t, :view_t=&gt;t, :uncaptured_t=&gt;t,
167
+ :dispatch_wait_t=&gt;t}}
168
+ </pre>
169
+ <p>
170
+ Thread local is used to store performance metrics of a RAILS request. When
171
+ the same thread serves a different request, the current thread local data
172
+ needs to be rolled up and re-initialized.
173
+ </p>
174
+ <p><a class="source-toggle" href="#"
175
+ onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
176
+ <div class="method-source-code" id="M000024-source">
177
+ <pre>
178
+ <span class="ruby-comment cmt"># File lib/rubyrun/rubyrun_monitor__.rb, line 103</span>
179
+ 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create_thread_local</span>(<span class="ruby-identifier">tid</span>, <span class="ruby-identifier">request</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>)
180
+ 104: <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>] <span class="ruby-operator">||=</span> {}
181
+ 105: <span class="ruby-identifier">init_thread_local</span>(<span class="ruby-identifier">tid</span>, <span class="ruby-identifier">request</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:req</span>]
182
+ 106: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:req</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">request</span>.<span class="ruby-identifier">object_id</span>
183
+ 107: <span class="ruby-identifier">roll_up_metrics</span>(<span class="ruby-identifier">tid</span>)
184
+ 108: <span class="ruby-identifier">init_thread_local</span>(<span class="ruby-identifier">tid</span>, <span class="ruby-identifier">request</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>)
185
+ 109: <span class="ruby-keyword kw">end</span>
186
+ 110: <span class="ruby-keyword kw">end</span>
187
+ </pre>
188
+ </div>
189
+ </div>
190
+ </div>
191
+
192
+ <div id="method-M000026" class="method-detail">
193
+ <a name="M000026"></a>
194
+
195
+ <div class="method-heading">
196
+ <a href="#M000026" class="method-signature">
197
+ <span class="method-name">report_rails_timing</span><span class="method-args">(klass, mid, t2, t1, tid)</span>
198
+ </a>
199
+ </div>
200
+
201
+ <div class="method-description">
202
+ <p>
203
+ Report timings to thread local after decomposing it into the right
204
+ component. For each action, there are 5 components of Response Time (RT)
205
+ </p>
206
+ <pre>
207
+ :dispatch_t, :#{action}_t, :dbio_t, :view_t, :uncaptured_t
208
+ </pre>
209
+ <p><a class="source-toggle" href="#"
210
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
211
+ <div class="method-source-code" id="M000026-source">
212
+ <pre>
213
+ <span class="ruby-comment cmt"># File lib/rubyrun/rubyrun_monitor__.rb, line 123</span>
214
+ 123: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">report_rails_timing</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>, <span class="ruby-identifier">t2</span>, <span class="ruby-identifier">t1</span>, <span class="ruby-identifier">tid</span>)
215
+ 124: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">t1</span>
216
+ 125: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">is_in_hash?</span>(<span class="ruby-identifier">$rubyrun_adapter_hash</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>)
217
+ 126: <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:dbio_t</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">t</span>
218
+ 127: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">is_in_hash?</span>(<span class="ruby-constant">RUBYRUN_VIEW_HASH</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>)
219
+ 128: <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:view_t</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">t2</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">t1</span>
220
+ 129: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">is_in_hash?</span>(<span class="ruby-identifier">$rubyrun_outer_dispatch_hash</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>)
221
+ 130: <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:outer_dispatch_t</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">t</span>
222
+ 131: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">is_in_hash?</span>(<span class="ruby-identifier">$rubyrun_inner_dispatch_hash</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>)
223
+ 132: <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:inner_dispatch_t</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">t</span>
224
+ 133: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">is_rails_controller?</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>)
225
+ 134: <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:action_t</span>] = <span class="ruby-identifier">t</span>
226
+ 135: <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:scafold_style</span>] = <span class="ruby-identifier">$rubyrun_thread_local</span>[<span class="ruby-identifier">tid</span>][<span class="ruby-identifier">:view_t</span>].<span class="ruby-identifier">empty?</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">false</span>
227
+ 136: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">is_in?</span>(<span class="ruby-constant">RUBYRUN_THREAD_END_HASH</span>, <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">mid</span>, <span class="ruby-value str">'strict'</span>)
228
+ 137: <span class="ruby-identifier">roll_up_metrics</span>(<span class="ruby-identifier">tid</span>, <span class="ruby-keyword kw">true</span>)
229
+ 138: <span class="ruby-keyword kw">end</span>
230
+ 139: <span class="ruby-keyword kw">end</span>
231
+ </pre>
232
+ </div>
233
+ </div>
234
+ </div>
235
+
236
+ <div id="method-M000023" class="method-detail">
237
+ <a name="M000023"></a>
238
+
239
+ <div class="method-heading">
240
+ <a href="#M000023" class="method-signature">
241
+ <span class="method-name">start_thread_monitor</span><span class="method-args">()</span>
242
+ </a>
243
+ </div>
244
+
245
+ <div class="method-description">
246
+ <p>
247
+ In response to the presence of a &#8216;cmd_status&#8217;,
248
+ &#8216;cmd_soft_kill&#8217;, &#8216;cmd_hard_kill&#8217; or
249
+ &#8216;cmd_object_map&#8217; in the work directory, the monitor thread will
250
+ either display thread status, interrupt the threads in different manner, or
251
+ show object instances in memory
252
+ </p>
253
+ <p><a class="source-toggle" href="#"
254
+ onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
255
+ <div class="method-source-code" id="M000023-source">
256
+ <pre>
257
+ <span class="ruby-comment cmt"># File lib/rubyrun/rubyrun_monitor__.rb, line 71</span>
258
+ 71: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_thread_monitor</span>
259
+ 72: <span class="ruby-identifier">$rubyrun_logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-value str">&quot;----- RubyRun Thread Monitor started -----&quot;</span>
260
+ 73: <span class="ruby-identifier">monitor_thr</span> = <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> {
261
+ 74: <span class="ruby-identifier">cycle</span> = <span class="ruby-identifier">$rubyrun_report_timer</span> <span class="ruby-operator">/</span> <span class="ruby-constant">RUBYRUN_MONITOR_TIMER</span>
262
+ 75: <span class="ruby-identifier">sleep_count</span> = <span class="ruby-value">0</span>
263
+ 76: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
264
+ 77: <span class="ruby-identifier">sleep</span> <span class="ruby-constant">RUBYRUN_MONITOR_TIMER</span>
265
+ 78: <span class="ruby-identifier">monitor_thr</span>.<span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">exit_monitor?</span>
266
+ 79: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> {
267
+ 80: <span class="ruby-keyword kw">begin</span>
268
+ 81: <span class="ruby-identifier">sleep_count</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
269
+ 82: <span class="ruby-identifier">sleep_count</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">cycle</span> <span class="ruby-value">? </span>(<span class="ruby-identifier">dump_reports</span>(<span class="ruby-keyword kw">true</span>); <span class="ruby-identifier">sleep_count</span> = <span class="ruby-value">0</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">dump_reports</span>
270
+ 83: <span class="ruby-identifier">dump_thread_status</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">thread_status?</span>
271
+ 84: <span class="ruby-identifier">dump_object_map</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">object_map?</span>
272
+ 85: <span class="ruby-identifier">kill_threads</span>(<span class="ruby-identifier">monitor_thr</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">soft_kill?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">hard_kill?</span>
273
+ 86: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
274
+ 87: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
275
+ 88: <span class="ruby-identifier">exit</span>(<span class="ruby-value">-1</span>)
276
+ 89: <span class="ruby-keyword kw">end</span>
277
+ 90: }
278
+ 91: <span class="ruby-keyword kw">end</span>
279
+ 92: }
280
+ 93: <span class="ruby-keyword kw">end</span>
281
+ </pre>
282
+ </div>
283
+ </div>
284
+ </div>
285
+
286
+
287
+ </div>
288
+
289
+
290
+ </div>
291
+
292
+
293
+ <div id="validator-badges">
294
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
295
+ </div>
296
+
297
+ </body>
298
+ </html>
@@ -0,0 +1,302 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: RubyRunRSS</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">RubyRunRSS</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/rubyrun/rubyrun_rss___rb.html">
59
+ lib/rubyrun/rubyrun_rss__.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Object.html">
69
+ Object
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+
84
+
85
+ </div>
86
+
87
+ <div id="method-list">
88
+ <h3 class="section-bar">Methods</h3>
89
+
90
+ <div class="name-list">
91
+ <a href="#M000003">add_item</a>&nbsp;&nbsp;
92
+ <a href="#M000002">create_channel_content</a>&nbsp;&nbsp;
93
+ <a href="#M000001">new</a>&nbsp;&nbsp;
94
+ </div>
95
+ </div>
96
+
97
+ </div>
98
+
99
+
100
+ <!-- if includes -->
101
+
102
+ <div id="section">
103
+
104
+
105
+ <div id="constants-list">
106
+ <h3 class="section-bar">Constants</h3>
107
+
108
+ <div class="name-list">
109
+ <table summary="Constants">
110
+ <tr class="top-aligned-row context-row">
111
+ <td class="context-item-name">RUBYRUN_RSS_VERSION</td>
112
+ <td>=</td>
113
+ <td class="context-item-value">'2.0'</td>
114
+ </tr>
115
+ <tr class="top-aligned-row context-row">
116
+ <td class="context-item-name">RUBYRUN_RSS_CHANNEL_URL</td>
117
+ <td>=</td>
118
+ <td class="context-item-value">'http://www.rubysophic.com'</td>
119
+ </tr>
120
+ <tr class="top-aligned-row context-row">
121
+ <td class="context-item-name">RUBYRUN_RSS_IMAGE_TITLE</td>
122
+ <td>=</td>
123
+ <td class="context-item-value">'Learn more about RubyRun from Rubysophic'</td>
124
+ </tr>
125
+ <tr class="top-aligned-row context-row">
126
+ <td class="context-item-name">RUBYRUN_RSS_IMAGE_URL</td>
127
+ <td>=</td>
128
+ <td class="context-item-value">'http://www.rubysophic.com/images/logo.jpg'</td>
129
+ </tr>
130
+ <tr class="top-aligned-row context-row">
131
+ <td class="context-item-name">RUBYRUN_RSS_FOLDER</td>
132
+ <td>=</td>
133
+ <td class="context-item-value">'rubyrun_rss'</td>
134
+ </tr>
135
+ <tr class="top-aligned-row context-row">
136
+ <td class="context-item-name">RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_TITLE</td>
137
+ <td>=</td>
138
+ <td class="context-item-value">'RubyRun: %s Performance Summary'</td>
139
+ </tr>
140
+ <tr class="top-aligned-row context-row">
141
+ <td class="context-item-name">RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_ITEM_FILENAME</td>
142
+ <td>=</td>
143
+ <td class="context-item-value">'perf_summary_item'</td>
144
+ </tr>
145
+ <tr class="top-aligned-row context-row">
146
+ <td class="context-item-name">RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_DESCRIPTION</td>
147
+ <td>=</td>
148
+ <td class="context-item-value">'RubyRun delivers up-to-the-minute performance summary of your application.'</td>
149
+ </tr>
150
+ <tr class="top-aligned-row context-row">
151
+ <td class="context-item-name">RUBYRUN_RSS_PERF_SUMMARY_CHANNEL_FILENAME</td>
152
+ <td>=</td>
153
+ <td class="context-item-value">'perf_summary.xml'</td>
154
+ </tr>
155
+ <tr class="top-aligned-row context-row">
156
+ <td class="context-item-name">RUBYRUN_RSS_PERF_SUMMARY_ITEM_TITLE</td>
157
+ <td>=</td>
158
+ <td class="context-item-value">'Performance summary at %s'</td>
159
+ </tr>
160
+ <tr class="top-aligned-row context-row">
161
+ <td class="context-item-name">RUBYRUN_RSS_PERF_SUMMARY_ITEM_DESCRIPTION</td>
162
+ <td>=</td>
163
+ <td class="context-item-value">'Performance summary of %s at %s'</td>
164
+ </tr>
165
+ </table>
166
+ </div>
167
+ </div>
168
+
169
+
170
+
171
+
172
+
173
+
174
+ <!-- if method_list -->
175
+ <div id="methods">
176
+ <h3 class="section-bar">Public Class methods</h3>
177
+
178
+ <div id="method-M000001" class="method-detail">
179
+ <a name="M000001"></a>
180
+
181
+ <div class="method-heading">
182
+ <a href="#M000001" class="method-signature">
183
+ <span class="method-name">new</span><span class="method-args">(title, description, directory, rss_filename, html_filename)</span>
184
+ </a>
185
+ </div>
186
+
187
+ <div class="method-description">
188
+ <p>
189
+ Constructor of the class. RSS XML file and HTML files will be kept in the
190
+ directory as specified
191
+ </p>
192
+ <p><a class="source-toggle" href="#"
193
+ onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
194
+ <div class="method-source-code" id="M000001-source">
195
+ <pre>
196
+ <span class="ruby-comment cmt"># File lib/rubyrun/rubyrun_rss__.rb, line 35</span>
197
+ 35: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span> (<span class="ruby-identifier">title</span>, <span class="ruby-identifier">description</span>, <span class="ruby-identifier">directory</span>, <span class="ruby-identifier">rss_filename</span>, <span class="ruby-identifier">html_filename</span>)
198
+ 36: <span class="ruby-ivar">@title</span> = <span class="ruby-identifier">title</span>
199
+ 37: <span class="ruby-ivar">@description</span> = <span class="ruby-identifier">description</span>
200
+ 38: <span class="ruby-ivar">@directory</span> = <span class="ruby-identifier">directory</span>
201
+ 39: <span class="ruby-ivar">@rss_filename</span> = <span class="ruby-identifier">rss_filename</span>
202
+ 40: <span class="ruby-ivar">@html_filename</span> = <span class="ruby-identifier">html_filename</span>
203
+ 41: <span class="ruby-ivar">@apps_name</span> = <span class="ruby-constant">Rails</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">new</span>.<span class="ruby-identifier">root_path</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">'/'</span>).<span class="ruby-identifier">last</span>
204
+ 42: <span class="ruby-ivar">@rss_xml_destination</span> = <span class="ruby-node">&quot;#{@directory}/#{@rss_filename}&quot;</span>
205
+ 43: <span class="ruby-identifier">create_channel_content</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">exists?</span>(<span class="ruby-ivar">@rss_xml_destination</span>)
206
+ 44: <span class="ruby-ivar">@rss</span> = <span class="ruby-identifier">load_rss_content</span>
207
+ 45: <span class="ruby-keyword kw">end</span>
208
+ </pre>
209
+ </div>
210
+ </div>
211
+ </div>
212
+
213
+ <h3 class="section-bar">Public Instance methods</h3>
214
+
215
+ <div id="method-M000003" class="method-detail">
216
+ <a name="M000003"></a>
217
+
218
+ <div class="method-heading">
219
+ <a href="#M000003" class="method-signature">
220
+ <span class="method-name">add_item</span><span class="method-args">(title, description, html_content)</span>
221
+ </a>
222
+ </div>
223
+
224
+ <div class="method-description">
225
+ <p>
226
+ Add an item to the RSS channel
227
+ </p>
228
+ <p><a class="source-toggle" href="#"
229
+ onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
230
+ <div class="method-source-code" id="M000003-source">
231
+ <pre>
232
+ <span class="ruby-comment cmt"># File lib/rubyrun/rubyrun_rss__.rb, line 66</span>
233
+ 66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_item</span> (<span class="ruby-identifier">title</span>, <span class="ruby-identifier">description</span>, <span class="ruby-identifier">html_content</span>)
234
+ 67: <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;#{@html_filename}_#{Time.now.to_i}#{rand(1000000)}.html&quot;</span>
235
+ 68: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-node">&quot;#{@directory}/#{filename}&quot;</span>, <span class="ruby-value str">'w'</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> <span class="ruby-identifier">file</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">html_content</span> }
236
+ 69: <span class="ruby-identifier">item</span> = <span class="ruby-constant">RSS</span><span class="ruby-operator">::</span><span class="ruby-constant">Rss</span><span class="ruby-operator">::</span><span class="ruby-constant">Channel</span><span class="ruby-operator">::</span><span class="ruby-constant">Item</span>.<span class="ruby-identifier">new</span>
237
+ 70: <span class="ruby-identifier">item</span>.<span class="ruby-identifier">title</span> = <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">title</span>, <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">strftime</span>(<span class="ruby-value str">&quot;%H:%M:%S&quot;</span>))
238
+ 71: <span class="ruby-identifier">item</span>.<span class="ruby-identifier">description</span> = <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">description</span>, <span class="ruby-ivar">@apps_name</span>, <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">strftime</span>(<span class="ruby-value str">&quot;%H:%M:%S&quot;</span>))
239
+ 72: <span class="ruby-identifier">item</span>.<span class="ruby-identifier">link</span> = <span class="ruby-node">&quot;http://#{$rubyrun_host_with_port}/#{RUBYRUN_RSS_FOLDER}/#{filename}&quot;</span>
240
+ 73: <span class="ruby-identifier">remove_old_item</span>(<span class="ruby-ivar">@rss</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@rss</span>.<span class="ruby-identifier">items</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">$rubyrun_report_shift_age</span>
241
+ 74: <span class="ruby-ivar">@rss</span>.<span class="ruby-identifier">items</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">item</span>
242
+ 75: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@rss_xml_destination</span>,<span class="ruby-value str">&quot;w&quot;</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
243
+ 76: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@rss</span>)
244
+ 77: <span class="ruby-keyword kw">end</span>
245
+ 78: <span class="ruby-keyword kw">end</span>
246
+ </pre>
247
+ </div>
248
+ </div>
249
+ </div>
250
+
251
+ <div id="method-M000002" class="method-detail">
252
+ <a name="M000002"></a>
253
+
254
+ <div class="method-heading">
255
+ <a href="#M000002" class="method-signature">
256
+ <span class="method-name">create_channel_content</span><span class="method-args">()</span>
257
+ </a>
258
+ </div>
259
+
260
+ <div class="method-description">
261
+ <p>
262
+ Create the RSS channel
263
+ </p>
264
+ <p><a class="source-toggle" href="#"
265
+ onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
266
+ <div class="method-source-code" id="M000002-source">
267
+ <pre>
268
+ <span class="ruby-comment cmt"># File lib/rubyrun/rubyrun_rss__.rb, line 48</span>
269
+ 48: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create_channel_content</span>
270
+ 49: <span class="ruby-identifier">content</span> = <span class="ruby-constant">RSS</span><span class="ruby-operator">::</span><span class="ruby-constant">Maker</span>.<span class="ruby-identifier">make</span>(<span class="ruby-constant">RUBYRUN_RSS_VERSION</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span>
271
+ 50: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">channel</span>.<span class="ruby-identifier">title</span> = <span class="ruby-identifier">sprintf</span>(<span class="ruby-ivar">@title</span>, <span class="ruby-ivar">@apps_name</span>)
272
+ 51: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">channel</span>.<span class="ruby-identifier">link</span> = <span class="ruby-constant">RUBYRUN_RSS_CHANNEL_URL</span>
273
+ 52: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">channel</span>.<span class="ruby-identifier">description</span> = <span class="ruby-ivar">@description</span>
274
+ 53: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">items</span>.<span class="ruby-identifier">do_sort</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-comment cmt"># sort items by date</span>
275
+ 54: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">image</span>.<span class="ruby-identifier">title</span> = <span class="ruby-constant">RUBYRUN_RSS_IMAGE_TITLE</span>
276
+ 55: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">image</span>.<span class="ruby-identifier">width</span> = <span class="ruby-value">140</span>
277
+ 56: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">image</span>.<span class="ruby-identifier">height</span> = <span class="ruby-value">25</span>
278
+ 57: <span class="ruby-identifier">m</span>.<span class="ruby-identifier">image</span>.<span class="ruby-identifier">url</span> = <span class="ruby-constant">RUBYRUN_RSS_IMAGE_URL</span>
279
+ 58: <span class="ruby-keyword kw">end</span>
280
+ 59: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@rss_xml_destination</span>,<span class="ruby-value str">&quot;w&quot;</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
281
+ 60: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">content</span>)
282
+ 61: <span class="ruby-keyword kw">end</span>
283
+ 62: <span class="ruby-identifier">content</span>.<span class="ruby-identifier">to_s</span>
284
+ 63: <span class="ruby-keyword kw">end</span>
285
+ </pre>
286
+ </div>
287
+ </div>
288
+ </div>
289
+
290
+
291
+ </div>
292
+
293
+
294
+ </div>
295
+
296
+
297
+ <div id="validator-badges">
298
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
299
+ </div>
300
+
301
+ </body>
302
+ </html>