1 <?xml version="1.0" encoding="iso-8859-1"?>
3 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
8 <title>Class: MCollective::RPC::Helpers</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">
15 function popupCode( url ) {
16 window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
19 function toggleCode( id ) {
20 if ( document.getElementById )
21 elem = document.getElementById( id );
22 else if ( document.all )
23 elem = eval( "document.all." + id );
27 elemStyle = elem.style;
29 if ( elemStyle.display != "block" ) {
30 elemStyle.display = "block"
32 elemStyle.display = "none"
38 // Make codeblocks hidden by default
39 document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
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">MCollective::RPC::Helpers</td>
55 <tr class="top-aligned-row">
56 <td><strong>In:</strong></td>
58 <a href="../../../files/lib/mcollective/rpc/helpers_rb.html">
59 lib/mcollective/rpc/helpers.rb
65 <tr class="top-aligned-row">
66 <td><strong>Parent:</strong></td>
73 <!-- banner header -->
75 <div id="bodyContent">
79 <div id="contextContent">
81 <div id="description">
83 Various utilities for the <a href="../RPC.html">RPC</a> system
91 <div id="method-list">
92 <h3 class="section-bar">Methods</h3>
94 <div class="name-list">
95 <a href="#M000050">add_simplerpc_options</a>
96 <a href="#M000045">extract_hosts_from_array</a>
97 <a href="#M000044">extract_hosts_from_json</a>
98 <a href="#M000049">old_rpcresults</a>
99 <a href="#M000046">rpcresults</a>
100 <a href="#M000048">text_for_flattened_result</a>
101 <a href="#M000047">text_for_result</a>
119 <!-- if method_list -->
121 <h3 class="section-bar">Public Class methods</h3>
123 <div id="method-M000050" class="method-detail">
124 <a name="M000050"></a>
126 <div class="method-heading">
127 <a href="#M000050" class="method-signature">
128 <span class="method-name">add_simplerpc_options</span><span class="method-args">(parser, options)</span>
132 <div class="method-description">
134 Add SimpleRPC common options
136 <p><a class="source-toggle" href="#"
137 onclick="toggleCode('M000050-source');return false;">[Source]</a></p>
138 <div class="method-source-code" id="M000050-source">
140 <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 254</span>
141 254: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">add_simplerpc_options</span>(<span class="ruby-identifier">parser</span>, <span class="ruby-identifier">options</span>)
142 255: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span>
143 256: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"RPC Options"</span>
145 258: <span class="ruby-comment cmt"># add SimpleRPC specific options to all clients that use our library</span>
146 259: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--np'</span>, <span class="ruby-value str">'--no-progress'</span>, <span class="ruby-value str">'Do not show the progress bar'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
147 260: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:progress_bar</span>] = <span class="ruby-keyword kw">false</span>
148 261: <span class="ruby-keyword kw">end</span>
150 263: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--one'</span>, <span class="ruby-value str">'-1'</span>, <span class="ruby-value str">'Send request to only one discovered nodes'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
151 264: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mcollective_limit_targets</span>] = <span class="ruby-value">1</span>
152 265: <span class="ruby-keyword kw">end</span>
154 267: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--batch SIZE'</span>, <span class="ruby-constant">Integer</span>, <span class="ruby-value str">'Do requests in batches'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
155 268: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:batch_size</span>] = <span class="ruby-identifier">v</span>
156 269: <span class="ruby-keyword kw">end</span>
158 271: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--batch-sleep SECONDS'</span>, <span class="ruby-constant">Float</span>, <span class="ruby-value str">'Sleep time between batches'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
159 272: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:batch_sleep_time</span>] = <span class="ruby-identifier">v</span>
160 273: <span class="ruby-keyword kw">end</span>
162 275: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--limit-seed NUMBER'</span>, <span class="ruby-constant">Integer</span>, <span class="ruby-value str">'Seed value for deterministic random batching'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
163 276: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:limit_seed</span>] = <span class="ruby-identifier">v</span>
164 277: <span class="ruby-keyword kw">end</span>
166 279: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--limit-nodes COUNT'</span>, <span class="ruby-value str">'--ln'</span>, <span class="ruby-value str">'--limit'</span>, <span class="ruby-value str">'Send request to only a subset of nodes, can be a percentage'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
167 280: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Invalid limit specified: #{v} valid limits are /^\d+%*$/"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\d+%*$/</span>
169 282: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\d+$/</span>
170 283: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mcollective_limit_targets</span>] = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">to_i</span>
171 284: <span class="ruby-keyword kw">else</span>
172 285: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mcollective_limit_targets</span>] = <span class="ruby-identifier">v</span>
173 286: <span class="ruby-keyword kw">end</span>
174 287: <span class="ruby-keyword kw">end</span>
176 289: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--json'</span>, <span class="ruby-value str">'-j'</span>, <span class="ruby-value str">'Produce JSON output'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
177 290: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:progress_bar</span>] = <span class="ruby-keyword kw">false</span>
178 291: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:output_format</span>] = <span class="ruby-identifier">:json</span>
179 292: <span class="ruby-keyword kw">end</span>
181 294: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--display MODE'</span>, <span class="ruby-value str">'Influence how results are displayed. One of ok, all or failed'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
182 295: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"all"</span>
183 296: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:force_display_mode</span>] = <span class="ruby-identifier">:always</span>
184 297: <span class="ruby-keyword kw">else</span>
185 298: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:force_display_mode</span>] = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">intern</span>
186 299: <span class="ruby-keyword kw">end</span>
188 301: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"--display has to be one of 'ok', 'all' or 'failed'"</span> <span class="ruby-keyword kw">unless</span> [<span class="ruby-identifier">:ok</span>, <span class="ruby-identifier">:failed</span>, <span class="ruby-identifier">:always</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:force_display_mode</span>])
189 302: <span class="ruby-keyword kw">end</span>
190 303: <span class="ruby-keyword kw">end</span>
196 <div id="method-M000045" class="method-detail">
197 <a name="M000045"></a>
199 <div class="method-heading">
200 <a href="#M000045" class="method-signature">
201 <span class="method-name">extract_hosts_from_array</span><span class="method-args">(hosts)</span>
205 <div class="method-description">
207 Given an array of something, make sure each is a string chomp off any new
208 lines and return just the array of hosts
210 <p><a class="source-toggle" href="#"
211 onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
212 <div class="method-source-code" id="M000045-source">
214 <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 29</span>
215 29: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">extract_hosts_from_array</span>(<span class="ruby-identifier">hosts</span>)
216 30: [<span class="ruby-identifier">hosts</span>].<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">host</span><span class="ruby-operator">|</span>
217 31: <span class="ruby-identifier">raise</span> <span class="ruby-node">"#{host} should be a string"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">host</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
218 32: <span class="ruby-identifier">host</span>.<span class="ruby-identifier">chomp</span>
219 33: <span class="ruby-keyword kw">end</span>
220 34: <span class="ruby-keyword kw">end</span>
226 <div id="method-M000044" class="method-detail">
227 <a name="M000044"></a>
229 <div class="method-heading">
230 <a href="#M000044" class="method-signature">
231 <span class="method-name">extract_hosts_from_json</span><span class="method-args">(json)</span>
235 <div class="method-description">
237 Parse JSON output as produced by printrpc and extract the
238 "sender" of each rpc response
241 The simplist valid JSON based data would be:
247 {"sender" => "example.com"},
248 {"sender" => "another.com"}
253 <p><a class="source-toggle" href="#"
254 onclick="toggleCode('M000044-source');return false;">[Source]</a></p>
255 <div class="method-source-code" id="M000044-source">
257 <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 14</span>
258 14: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">extract_hosts_from_json</span>(<span class="ruby-identifier">json</span>)
259 15: <span class="ruby-identifier">hosts</span> = <span class="ruby-constant">JSON</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">json</span>)
261 17: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"JSON hosts list is not an array"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">hosts</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
263 19: <span class="ruby-identifier">hosts</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">host</span><span class="ruby-operator">|</span>
264 20: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"JSON host list is not an array of Hashes"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">host</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
265 21: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"JSON host list does not have senders in it"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">host</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">"sender"</span>)
267 23: <span class="ruby-identifier">host</span>[<span class="ruby-value str">"sender"</span>]
268 24: <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">uniq</span>
269 25: <span class="ruby-keyword kw">end</span>
275 <div id="method-M000049" class="method-detail">
276 <a name="M000049"></a>
278 <div class="method-heading">
279 <a href="#M000049" class="method-signature">
280 <span class="method-name">old_rpcresults</span><span class="method-args">(result, flags = {})</span>
284 <div class="method-description">
286 Backward compatible display block for results without a <a
287 href="../DDL.html">DDL</a>
289 <p><a class="source-toggle" href="#"
290 onclick="toggleCode('M000049-source');return false;">[Source]</a></p>
291 <div class="method-source-code" id="M000049-source">
293 <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 202</span>
294 202: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">old_rpcresults</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">flags</span> = {})
295 203: <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">""</span>
297 205: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:flatten</span>]
298 206: <span class="ruby-identifier">result</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
299 207: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator"><=</span> <span class="ruby-value">1</span>
300 208: <span class="ruby-identifier">data</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:data</span>]
302 210: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
303 211: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">pretty_inspect</span>
304 212: <span class="ruby-keyword kw">else</span>
305 213: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">data</span>
306 214: <span class="ruby-keyword kw">end</span>
307 215: <span class="ruby-keyword kw">else</span>
308 216: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">pretty_inspect</span>
309 217: <span class="ruby-keyword kw">end</span>
310 218: <span class="ruby-keyword kw">end</span>
312 220: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">""</span>
313 221: <span class="ruby-keyword kw">else</span>
314 222: [<span class="ruby-identifier">result</span>].<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
316 224: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:verbose</span>]
317 225: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"%-40s: %s\n"</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">r</span>[<span class="ruby-identifier">:sender</span>], <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statusmsg</span>]]
319 227: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator"><=</span> <span class="ruby-value">1</span>
320 228: <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:data</span>].<span class="ruby-identifier">pretty_inspect</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-identifier">result_text</span> <span class="ruby-operator">+=</span> <span class="ruby-node">" #{m}"</span>}
321 229: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n\n"</span>
322 230: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
323 231: <span class="ruby-comment cmt"># dont print anything, no useful data to display</span>
324 232: <span class="ruby-comment cmt"># past what was already shown</span>
325 233: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator">==</span> <span class="ruby-value">3</span>
326 234: <span class="ruby-comment cmt"># dont print anything, no useful data to display</span>
327 235: <span class="ruby-comment cmt"># past what was already shown</span>
328 236: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator">==</span> <span class="ruby-value">4</span>
329 237: <span class="ruby-comment cmt"># dont print anything, no useful data to display</span>
330 238: <span class="ruby-comment cmt"># past what was already shown</span>
331 239: <span class="ruby-keyword kw">else</span>
332 240: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-node">" #{r[:statusmsg]}"</span>
333 241: <span class="ruby-keyword kw">end</span>
334 242: <span class="ruby-keyword kw">else</span>
335 243: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
336 244: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"%-40s %s\n"</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">r</span>[<span class="ruby-identifier">:sender</span>], <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statusmsg</span>])]
337 245: <span class="ruby-keyword kw">end</span>
338 246: <span class="ruby-keyword kw">end</span>
339 247: <span class="ruby-keyword kw">end</span>
340 248: <span class="ruby-keyword kw">end</span>
342 250: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">""</span>
343 251: <span class="ruby-keyword kw">end</span>
349 <div id="method-M000046" class="method-detail">
350 <a name="M000046"></a>
352 <div class="method-heading">
353 <a href="#M000046" class="method-signature">
354 <span class="method-name">rpcresults</span><span class="method-args">(result, flags = {})</span>
358 <div class="method-description">
360 Returns a blob of text representing the results in a standard way
363 It tries hard to do sane things so you often should not need to write your
364 own display functions
367 If the agent you are getting results for has a <a
368 href="../DDL.html">DDL</a> it will use the hints in there to do the right
369 thing specifically it will look at the values of display in the <a
370 href="../DDL.html">DDL</a> to choose when to show results
373 If you do not have a <a href="../DDL.html">DDL</a> you can pass these
377 printrpc exim.mailq, :flatten => true
378 printrpc exim.mailq, :verbose => true
381 If you‘ve asked it to flatten the result it will not print sender
382 hostnames, it will just print the result as if it‘s one huge result,
383 handy for things like showing a combined mailq.
385 <p><a class="source-toggle" href="#"
386 onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
387 <div class="method-source-code" id="M000046-source">
389 <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 54</span>
390 54: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">rpcresults</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">flags</span> = {})
391 55: <span class="ruby-identifier">flags</span> = {<span class="ruby-identifier">:verbose</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">:flatten</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">:format</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:console</span>, <span class="ruby-identifier">:force_display_mode</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">false</span>}.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">flags</span>)
393 57: <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">""</span>
394 58: <span class="ruby-identifier">ddl</span> = <span class="ruby-keyword kw">nil</span>
396 60: <span class="ruby-comment cmt"># if running in verbose mode, just use the old style print</span>
397 61: <span class="ruby-comment cmt"># no need for all the DDL helpers obfuscating the result</span>
398 62: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">:json</span>
399 63: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">STDOUT</span>.<span class="ruby-identifier">tty?</span>
400 64: <span class="ruby-identifier">result_text</span> = <span class="ruby-constant">JSON</span>.<span class="ruby-identifier">pretty_generate</span>(<span class="ruby-identifier">result</span>)
401 65: <span class="ruby-keyword kw">else</span>
402 66: <span class="ruby-identifier">result_text</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">to_json</span>
403 67: <span class="ruby-keyword kw">end</span>
404 68: <span class="ruby-keyword kw">else</span>
405 69: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:verbose</span>]
406 70: <span class="ruby-identifier">result_text</span> = <span class="ruby-identifier">old_rpcresults</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">flags</span>)
407 71: <span class="ruby-keyword kw">else</span>
408 72: [<span class="ruby-identifier">result</span>].<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
409 73: <span class="ruby-keyword kw">begin</span>
410 74: <span class="ruby-identifier">ddl</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">DDL</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">r</span>.<span class="ruby-identifier">agent</span>).<span class="ruby-identifier">action_interface</span>(<span class="ruby-identifier">r</span>.<span class="ruby-identifier">action</span>.<span class="ruby-identifier">to_s</span>)
412 76: <span class="ruby-identifier">sender</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:sender</span>]
413 77: <span class="ruby-identifier">status</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>]
414 78: <span class="ruby-identifier">message</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statusmsg</span>]
415 79: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:data</span>]
417 81: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:force_display_mode</span>]
418 82: <span class="ruby-identifier">display</span> = <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:force_display_mode</span>]
419 83: <span class="ruby-keyword kw">else</span>
420 84: <span class="ruby-identifier">display</span> = <span class="ruby-identifier">ddl</span>[<span class="ruby-identifier">:display</span>]
421 85: <span class="ruby-keyword kw">end</span>
423 87: <span class="ruby-comment cmt"># appand the results only according to what the DDL says</span>
424 88: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">display</span>
425 89: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:ok</span>
426 90: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
427 91: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text_for_result</span>(<span class="ruby-identifier">sender</span>, <span class="ruby-identifier">status</span>, <span class="ruby-identifier">message</span>, <span class="ruby-identifier">result</span>, <span class="ruby-identifier">ddl</span>)
428 92: <span class="ruby-keyword kw">end</span>
430 94: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:failed</span>
431 95: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
432 96: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text_for_result</span>(<span class="ruby-identifier">sender</span>, <span class="ruby-identifier">status</span>, <span class="ruby-identifier">message</span>, <span class="ruby-identifier">result</span>, <span class="ruby-identifier">ddl</span>)
433 97: <span class="ruby-keyword kw">end</span>
435 99: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:always</span>
436 100: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text_for_result</span>(<span class="ruby-identifier">sender</span>, <span class="ruby-identifier">status</span>, <span class="ruby-identifier">message</span>, <span class="ruby-identifier">result</span>, <span class="ruby-identifier">ddl</span>)
438 102: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:flatten</span>
439 103: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text_for_flattened_result</span>(<span class="ruby-identifier">status</span>, <span class="ruby-identifier">result</span>)
441 105: <span class="ruby-keyword kw">end</span>
442 106: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
443 107: <span class="ruby-comment cmt"># no DDL so just do the old style print unchanged for</span>
444 108: <span class="ruby-comment cmt"># backward compat</span>
445 109: <span class="ruby-identifier">result_text</span> = <span class="ruby-identifier">old_rpcresults</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">flags</span>)
446 110: <span class="ruby-keyword kw">end</span>
447 111: <span class="ruby-keyword kw">end</span>
448 112: <span class="ruby-keyword kw">end</span>
449 113: <span class="ruby-keyword kw">end</span>
451 115: <span class="ruby-identifier">result_text</span>
452 116: <span class="ruby-keyword kw">end</span>
458 <div id="method-M000048" class="method-detail">
459 <a name="M000048"></a>
461 <div class="method-heading">
462 <a href="#M000048" class="method-signature">
463 <span class="method-name">text_for_flattened_result</span><span class="method-args">(status, result)</span>
467 <div class="method-description">
469 Returns text representing a flattened result of only good data
471 <p><a class="source-toggle" href="#"
472 onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
473 <div class="method-source-code" id="M000048-source">
475 <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 189</span>
476 189: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">text_for_flattened_result</span>(<span class="ruby-identifier">status</span>, <span class="ruby-identifier">result</span>)
477 190: <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">""</span>
479 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator"><=</span> <span class="ruby-value">1</span>
480 193: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
481 194: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">pretty_inspect</span>
482 195: <span class="ruby-keyword kw">else</span>
483 196: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">result</span>
484 197: <span class="ruby-keyword kw">end</span>
485 198: <span class="ruby-keyword kw">end</span>
486 199: <span class="ruby-keyword kw">end</span>
492 <div id="method-M000047" class="method-detail">
493 <a name="M000047"></a>
495 <div class="method-heading">
496 <a href="#M000047" class="method-signature">
497 <span class="method-name">text_for_result</span><span class="method-args">(sender, status, msg, result, ddl)</span>
501 <div class="method-description">
503 Return text representing a result
505 <p><a class="source-toggle" href="#"
506 onclick="toggleCode('M000047-source');return false;">[Source]</a></p>
507 <div class="method-source-code" id="M000047-source">
509 <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 119</span>
510 119: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">text_for_result</span>(<span class="ruby-identifier">sender</span>, <span class="ruby-identifier">status</span>, <span class="ruby-identifier">msg</span>, <span class="ruby-identifier">result</span>, <span class="ruby-identifier">ddl</span>)
511 120: <span class="ruby-identifier">statusses</span> = [<span class="ruby-value str">""</span>,
512 121: <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-value str">"Request Aborted"</span>),
513 122: <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:yellow</span>, <span class="ruby-value str">"Unknown Action"</span>),
514 123: <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:yellow</span>, <span class="ruby-value str">"Missing Request Data"</span>),
515 124: <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:yellow</span>, <span class="ruby-value str">"Invalid Request Data"</span>),
516 125: <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-value str">"Unknown Request Status"</span>)]
518 127: <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">"%-40s %s\n"</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">sender</span>, <span class="ruby-identifier">statusses</span>[<span class="ruby-identifier">status</span>]]
519 128: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" %s\n"</span> <span class="ruby-operator">%</span> [<span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:yellow</span>, <span class="ruby-identifier">msg</span>)] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">msg</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"OK"</span>
521 130: <span class="ruby-comment cmt"># only print good data, ignore data that results from failure</span>
522 131: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
523 132: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
524 133: <span class="ruby-comment cmt"># figure out the lengths of the display as strings, we'll use</span>
525 134: <span class="ruby-comment cmt"># it later to correctly justify the output</span>
526 135: <span class="ruby-identifier">lengths</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
527 136: <span class="ruby-keyword kw">begin</span>
528 137: <span class="ruby-identifier">ddl</span>[<span class="ruby-identifier">:output</span>][<span class="ruby-identifier">k</span>][<span class="ruby-identifier">:display_as</span>].<span class="ruby-identifier">size</span>
529 138: <span class="ruby-keyword kw">rescue</span>
530 139: <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span>
531 140: <span class="ruby-keyword kw">end</span>
532 141: <span class="ruby-keyword kw">end</span>
534 143: <span class="ruby-identifier">result</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">k</span>}.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
535 144: <span class="ruby-comment cmt"># get all the output fields nicely lined up with a</span>
536 145: <span class="ruby-comment cmt"># 3 space front padding</span>
537 146: <span class="ruby-keyword kw">begin</span>
538 147: <span class="ruby-identifier">display_as</span> = <span class="ruby-identifier">ddl</span>[<span class="ruby-identifier">:output</span>][<span class="ruby-identifier">k</span>][<span class="ruby-identifier">:display_as</span>]
539 148: <span class="ruby-keyword kw">rescue</span>
540 149: <span class="ruby-identifier">display_as</span> = <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>
541 150: <span class="ruby-keyword kw">end</span>
543 152: <span class="ruby-identifier">display_length</span> = <span class="ruby-identifier">display_as</span>.<span class="ruby-identifier">size</span>
544 153: <span class="ruby-identifier">padding</span> = <span class="ruby-identifier">lengths</span>.<span class="ruby-identifier">max</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">display_length</span> <span class="ruby-operator">+</span> <span class="ruby-value">3</span>
545 154: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" "</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">padding</span>
547 156: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{display_as}:"</span>
549 158: <span class="ruby-keyword kw">if</span> [<span class="ruby-constant">String</span>, <span class="ruby-constant">Numeric</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">result</span>[<span class="ruby-identifier">k</span>].<span class="ruby-identifier">class</span>)
550 159: <span class="ruby-identifier">lines</span> = <span class="ruby-identifier">result</span>[<span class="ruby-identifier">k</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>)
552 161: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lines</span>.<span class="ruby-identifier">empty?</span>
553 162: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span>
554 163: <span class="ruby-keyword kw">else</span>
555 164: <span class="ruby-identifier">lines</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
556 165: <span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">padtxt</span> = <span class="ruby-value str">" "</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">padtxt</span> = <span class="ruby-value str">" "</span> <span class="ruby-operator">*</span> (<span class="ruby-identifier">padding</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">display_length</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>)
558 167: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{padtxt}#{line}\n"</span>
559 168: <span class="ruby-keyword kw">end</span>
560 169: <span class="ruby-keyword kw">end</span>
561 170: <span class="ruby-keyword kw">else</span>
562 171: <span class="ruby-identifier">padding</span> = <span class="ruby-value str">" "</span> <span class="ruby-operator">*</span> (<span class="ruby-identifier">lengths</span>.<span class="ruby-identifier">max</span> <span class="ruby-operator">+</span> <span class="ruby-value">5</span>)
563 172: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" "</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">result</span>[<span class="ruby-identifier">k</span>].<span class="ruby-identifier">pretty_inspect</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">"\n"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">padding</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span>
564 173: <span class="ruby-keyword kw">end</span>
565 174: <span class="ruby-keyword kw">end</span>
566 175: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
567 176: <span class="ruby-comment cmt"># for status 1 we dont want to show half baked</span>
568 177: <span class="ruby-comment cmt"># data by default since the DDL will supply all the defaults</span>
569 178: <span class="ruby-comment cmt"># it just doesnt look right</span>
570 179: <span class="ruby-keyword kw">else</span>
571 180: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n\t"</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">pretty_inspect</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">"\n\t"</span>)
572 181: <span class="ruby-keyword kw">end</span>
573 182: <span class="ruby-keyword kw">end</span>
575 184: <span class="ruby-identifier">result_text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span>
576 185: <span class="ruby-identifier">result_text</span>
577 186: <span class="ruby-keyword kw">end</span>
590 <div id="validator-badges">
591 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>