Update version according to OSCI-856
[packages/precise/mcollective.git] / doc / MCollective / RPC / Helpers.html
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5 <head>
6         <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
8         <title>Class: MCollective::RPC::Helpers</title>
9
10         <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
11
12         <script src="../../js/jquery.js" type="text/javascript"
13                 charset="utf-8"></script>
14         <script src="../../js/thickbox-compressed.js" type="text/javascript"
15                 charset="utf-8"></script>
16         <script src="../../js/quicksearch.js" type="text/javascript"
17                 charset="utf-8"></script>
18         <script src="../../js/darkfish.js" type="text/javascript"
19                 charset="utf-8"></script>
20
21 </head>
22 <body class="class">
23
24         <div id="metadata">
25                 <div id="file-metadata">
26                         <div id="file-list-section" class="section">
27                                 <h3 class="section-header">In Files</h3>
28                                 <div class="section-body">
29                                         <ul>
30                                         
31                                                 <li><a href="../../lib/mcollective/rpc/helpers_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
32                                                         class="thickbox" title="lib/mcollective/rpc/helpers.rb">lib/mcollective/rpc/helpers.rb</a></li>
33                                         
34                                         </ul>
35                                 </div>
36                         </div>
37
38                         
39                 </div>
40
41                 <div id="class-metadata">
42
43                         <!-- Parent Class -->
44                         
45                         <div id="parent-class-section" class="section">
46                                 <h3 class="section-header">Parent</h3>
47                                 
48                                 <p class="link"><a href="../../Object.html">Object</a></p>
49                                 
50                         </div>
51                         
52
53                         <!-- Namespace Contents -->
54                         
55
56                         <!-- Method Quickref -->
57                         
58                         <div id="method-list-section" class="section">
59                                 <h3 class="section-header">Methods</h3>
60                                 <ul class="link-list">
61                                         
62                                         <li><a href="#M000453">::add_simplerpc_options</a></li>
63                                         
64                                         <li><a href="#M000442">::extract_hosts_from_array</a></li>
65                                         
66                                         <li><a href="#M000441">::extract_hosts_from_json</a></li>
67                                         
68                                         <li><a href="#M000451">::old_rpcresults</a></li>
69                                         
70                                         <li><a href="#M000444">::rpcresults</a></li>
71                                         
72                                         <li><a href="#M000450">::text_for_flattened_result</a></li>
73                                         
74                                         <li><a href="#M000445">::text_for_result</a></li>
75                                         
76                                 </ul>
77                         </div>
78                         
79
80                         <!-- Included Modules -->
81                         
82                 </div>
83
84                 <div id="project-metadata">
85                         
86                         
87                         <div id="fileindex-section" class="section project-section">
88                                 <h3 class="section-header">Files</h3>
89                                 <ul>
90                                 
91                                         <li class="file"><a href="../../COPYING.html">COPYING</a></li>
92                                 
93                                         <li class="file"><a href="../../Gemfile.html">Gemfile</a></li>
94                                 
95                                         <li class="file"><a href="../../README.html">README</a></li>
96                                 
97                                         <li class="file"><a href="../../Rakefile.html">Rakefile</a></li>
98                                 
99                                         <li class="file"><a href="../../etc/client_cfg_dist.html">client.cfg.dist</a></li>
100                                 
101                                         <li class="file"><a href="../../etc/data-help_erb.html">data-help.erb</a></li>
102                                 
103                                         <li class="file"><a href="../../etc/discovery-help_erb.html">discovery-help.erb</a></li>
104                                 
105                                         <li class="file"><a href="../../etc/facts_yaml_dist.html">facts.yaml.dist</a></li>
106                                 
107                                         <li class="file"><a href="../../etc/metadata-help_erb.html">metadata-help.erb</a></li>
108                                 
109                                         <li class="file"><a href="../../etc/msg-help_erb.html">msg-help.erb</a></li>
110                                 
111                                         <li class="file"><a href="../../etc/rpc-help_erb.html">rpc-help.erb</a></li>
112                                 
113                                         <li class="file"><a href="../../etc/server_cfg_dist.html">server.cfg.dist</a></li>
114                                 
115                                         <li class="file"><a href="../../etc/ssl/PLACEHOLDER.html">PLACEHOLDER</a></li>
116                                 
117                                         <li class="file"><a href="../../etc/ssl/clients/PLACEHOLDER.html">PLACEHOLDER</a></li>
118                                 
119                                         <li class="file"><a href="../../lib/mcollective/generators/templates/action_snippet_erb.html">action_snippet.erb</a></li>
120                                 
121                                         <li class="file"><a href="../../lib/mcollective/generators/templates/data_input_snippet_erb.html">data_input_snippet.erb</a></li>
122                                 
123                                         <li class="file"><a href="../../lib/mcollective/generators/templates/ddl_erb.html">ddl.erb</a></li>
124                                 
125                                         <li class="file"><a href="../../lib/mcollective/generators/templates/plugin_erb.html">plugin.erb</a></li>
126                                 
127                                         <li class="file"><a href="../../lib/mcollective/locales/en_yml.html">en.yml</a></li>
128                                 
129                                         <li class="file"><a href="../../mcollective_init.html">mcollective.init</a></li>
130                                 
131                                 </ul>
132                         </div>
133                         
134
135                         <div id="classindex-section" class="section project-section">
136                                 <h3 class="section-header">Class Index
137                                         <span class="search-toggle"><img src="../../images/find.png"
138                                                 height="16" width="16" alt="[+]"
139                                                 title="show/hide quicksearch" /></span></h3>
140                                 <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
141                                 <fieldset>
142                                         <legend>Quicksearch</legend>
143                                         <input type="text" name="quicksearch" value=""
144                                                 class="quicksearch-field" />
145                                 </fieldset>
146                                 </form>
147
148                                 <ul class="link-list">
149                                 
150                                         <li><a href="../../MCollective.html">MCollective</a></li>
151                                 
152                                         <li><a href="../../MCollective/Agent.html">MCollective::Agent</a></li>
153                                 
154                                         <li><a href="../../MCollective/Agents.html">MCollective::Agents</a></li>
155                                 
156                                         <li><a href="../../MCollective/Aggregate.html">MCollective::Aggregate</a></li>
157                                 
158                                         <li><a href="../../MCollective/Aggregate/Base.html">MCollective::Aggregate::Base</a></li>
159                                 
160                                         <li><a href="../../MCollective/Aggregate/Result.html">MCollective::Aggregate::Result</a></li>
161                                 
162                                         <li><a href="../../MCollective/Aggregate/Result/Base.html">MCollective::Aggregate::Result::Base</a></li>
163                                 
164                                         <li><a href="../../MCollective/Aggregate/Result/CollectionResult.html">MCollective::Aggregate::Result::CollectionResult</a></li>
165                                 
166                                         <li><a href="../../MCollective/Aggregate/Result/NumericResult.html">MCollective::Aggregate::Result::NumericResult</a></li>
167                                 
168                                         <li><a href="../../MCollective/Application.html">MCollective::Application</a></li>
169                                 
170                                         <li><a href="../../MCollective/Applications.html">MCollective::Applications</a></li>
171                                 
172                                         <li><a href="../../MCollective/Cache.html">MCollective::Cache</a></li>
173                                 
174                                         <li><a href="../../MCollective/Client.html">MCollective::Client</a></li>
175                                 
176                                         <li><a href="../../MCollective/CodedError.html">MCollective::CodedError</a></li>
177                                 
178                                         <li><a href="../../MCollective/Config.html">MCollective::Config</a></li>
179                                 
180                                         <li><a href="../../MCollective/Connector.html">MCollective::Connector</a></li>
181                                 
182                                         <li><a href="../../MCollective/Connector/Base.html">MCollective::Connector::Base</a></li>
183                                 
184                                         <li><a href="../../MCollective/DDL.html">MCollective::DDL</a></li>
185                                 
186                                         <li><a href="../../MCollective/DDL/AgentDDL.html">MCollective::DDL::AgentDDL</a></li>
187                                 
188                                         <li><a href="../../MCollective/DDL/Base.html">MCollective::DDL::Base</a></li>
189                                 
190                                         <li><a href="../../MCollective/DDL/DataDDL.html">MCollective::DDL::DataDDL</a></li>
191                                 
192                                         <li><a href="../../MCollective/DDL/DiscoveryDDL.html">MCollective::DDL::DiscoveryDDL</a></li>
193                                 
194                                         <li><a href="../../MCollective/DDL/ValidatorDDL.html">MCollective::DDL::ValidatorDDL</a></li>
195                                 
196                                         <li><a href="../../MCollective/DDLValidationError.html">MCollective::DDLValidationError</a></li>
197                                 
198                                         <li><a href="../../MCollective/Data.html">MCollective::Data</a></li>
199                                 
200                                         <li><a href="../../MCollective/Data/Base.html">MCollective::Data::Base</a></li>
201                                 
202                                         <li><a href="../../MCollective/Data/Result.html">MCollective::Data::Result</a></li>
203                                 
204                                         <li><a href="../../MCollective/Discovery.html">MCollective::Discovery</a></li>
205                                 
206                                         <li><a href="../../MCollective/Facts.html">MCollective::Facts</a></li>
207                                 
208                                         <li><a href="../../MCollective/Facts/Base.html">MCollective::Facts::Base</a></li>
209                                 
210                                         <li><a href="../../MCollective/Generators.html">MCollective::Generators</a></li>
211                                 
212                                         <li><a href="../../MCollective/Generators/AgentGenerator.html">MCollective::Generators::AgentGenerator</a></li>
213                                 
214                                         <li><a href="../../MCollective/Generators/Base.html">MCollective::Generators::Base</a></li>
215                                 
216                                         <li><a href="../../MCollective/Generators/DataGenerator.html">MCollective::Generators::DataGenerator</a></li>
217                                 
218                                         <li><a href="../../MCollective/InvalidRPCData.html">MCollective::InvalidRPCData</a></li>
219                                 
220                                         <li><a href="../../MCollective/Log.html">MCollective::Log</a></li>
221                                 
222                                         <li><a href="../../MCollective/Logger.html">MCollective::Logger</a></li>
223                                 
224                                         <li><a href="../../MCollective/Logger/Base.html">MCollective::Logger::Base</a></li>
225                                 
226                                         <li><a href="../../MCollective/Logger/Console_logger.html">MCollective::Logger::Console_logger</a></li>
227                                 
228                                         <li><a href="../../MCollective/Logger/File_logger.html">MCollective::Logger::File_logger</a></li>
229                                 
230                                         <li><a href="../../MCollective/Logger/Syslog_logger.html">MCollective::Logger::Syslog_logger</a></li>
231                                 
232                                         <li><a href="../../MCollective/Matcher.html">MCollective::Matcher</a></li>
233                                 
234                                         <li><a href="../../MCollective/Matcher/Parser.html">MCollective::Matcher::Parser</a></li>
235                                 
236                                         <li><a href="../../MCollective/Matcher/Scanner.html">MCollective::Matcher::Scanner</a></li>
237                                 
238                                         <li><a href="../../MCollective/Message.html">MCollective::Message</a></li>
239                                 
240                                         <li><a href="../../MCollective/MissingRPCData.html">MCollective::MissingRPCData</a></li>
241                                 
242                                         <li><a href="../../MCollective/MsgDoesNotMatchRequestID.html">MCollective::MsgDoesNotMatchRequestID</a></li>
243                                 
244                                         <li><a href="../../MCollective/MsgTTLExpired.html">MCollective::MsgTTLExpired</a></li>
245                                 
246                                         <li><a href="../../MCollective/NotTargettedAtUs.html">MCollective::NotTargettedAtUs</a></li>
247                                 
248                                         <li><a href="../../MCollective/Optionparser.html">MCollective::Optionparser</a></li>
249                                 
250                                         <li><a href="../../MCollective/PluginManager.html">MCollective::PluginManager</a></li>
251                                 
252                                         <li><a href="../../MCollective/PluginPackager.html">MCollective::PluginPackager</a></li>
253                                 
254                                         <li><a href="../../MCollective/PluginPackager/AgentDefinition.html">MCollective::PluginPackager::AgentDefinition</a></li>
255                                 
256                                         <li><a href="../../MCollective/PluginPackager/StandardDefinition.html">MCollective::PluginPackager::StandardDefinition</a></li>
257                                 
258                                         <li><a href="../../MCollective/RPC.html">MCollective::RPC</a></li>
259                                 
260                                         <li><a href="../../MCollective/RPC/ActionRunner.html">MCollective::RPC::ActionRunner</a></li>
261                                 
262                                         <li><a href="../../MCollective/RPC/Agent.html">MCollective::RPC::Agent</a></li>
263                                 
264                                         <li><a href="../../MCollective/RPC/Audit.html">MCollective::RPC::Audit</a></li>
265                                 
266                                         <li><a href="../../MCollective/RPC/Client.html">MCollective::RPC::Client</a></li>
267                                 
268                                         <li><a href="../../MCollective/RPC/Helpers.html">MCollective::RPC::Helpers</a></li>
269                                 
270                                         <li><a href="../../MCollective/RPC/Progress.html">MCollective::RPC::Progress</a></li>
271                                 
272                                         <li><a href="../../MCollective/RPC/Reply.html">MCollective::RPC::Reply</a></li>
273                                 
274                                         <li><a href="../../MCollective/RPC/Request.html">MCollective::RPC::Request</a></li>
275                                 
276                                         <li><a href="../../MCollective/RPC/Result.html">MCollective::RPC::Result</a></li>
277                                 
278                                         <li><a href="../../MCollective/RPC/Stats.html">MCollective::RPC::Stats</a></li>
279                                 
280                                         <li><a href="../../MCollective/RPCAborted.html">MCollective::RPCAborted</a></li>
281                                 
282                                         <li><a href="../../MCollective/RPCError.html">MCollective::RPCError</a></li>
283                                 
284                                         <li><a href="../../MCollective/Registration.html">MCollective::Registration</a></li>
285                                 
286                                         <li><a href="../../MCollective/Registration/Base.html">MCollective::Registration::Base</a></li>
287                                 
288                                         <li><a href="../../MCollective/Runner.html">MCollective::Runner</a></li>
289                                 
290                                         <li><a href="../../MCollective/RunnerStats.html">MCollective::RunnerStats</a></li>
291                                 
292                                         <li><a href="../../MCollective/SSL.html">MCollective::SSL</a></li>
293                                 
294                                         <li><a href="../../MCollective/Security.html">MCollective::Security</a></li>
295                                 
296                                         <li><a href="../../MCollective/Security/Base.html">MCollective::Security::Base</a></li>
297                                 
298                                         <li><a href="../../MCollective/SecurityValidationFailed.html">MCollective::SecurityValidationFailed</a></li>
299                                 
300                                         <li><a href="../../MCollective/Shell.html">MCollective::Shell</a></li>
301                                 
302                                         <li><a href="../../MCollective/Translatable.html">MCollective::Translatable</a></li>
303                                 
304                                         <li><a href="../../MCollective/UnixDaemon.html">MCollective::UnixDaemon</a></li>
305                                 
306                                         <li><a href="../../MCollective/UnknownRPCAction.html">MCollective::UnknownRPCAction</a></li>
307                                 
308                                         <li><a href="../../MCollective/UnknownRPCError.html">MCollective::UnknownRPCError</a></li>
309                                 
310                                         <li><a href="../../MCollective/Util.html">MCollective::Util</a></li>
311                                 
312                                         <li><a href="../../MCollective/Validator.html">MCollective::Validator</a></li>
313                                 
314                                         <li><a href="../../MCollective/ValidatorError.html">MCollective::ValidatorError</a></li>
315                                 
316                                         <li><a href="../../MCollective/WindowsDaemon.html">MCollective::WindowsDaemon</a></li>
317                                 
318                                         <li><a href="../../Array.html">Array</a></li>
319                                 
320                                         <li><a href="../../Dir.html">Dir</a></li>
321                                 
322                                         <li><a href="../../Object.html">Object</a></li>
323                                 
324                                         <li><a href="../../String.html">String</a></li>
325                                 
326                                         <li><a href="../../Symbol.html">Symbol</a></li>
327                                 
328                                 </ul>
329                                 <div id="no-class-search-results" style="display: none;">No matching classes.</div>
330                         </div>
331
332                         
333                 </div>
334         </div>
335
336         <div id="documentation">
337                 <h1 class="class">MCollective::RPC::Helpers</h1>
338
339                 <div id="description">
340                         <p>
341 Various utilities for the <a href="../RPC.html">RPC</a> system
342 </p>
343
344                 </div>
345
346                 <!-- Constants -->
347                 
348
349                 <!-- Attributes -->
350                 
351
352                 <!-- Methods -->
353                 
354                 <div id="public-class-method-details" class="method-section section">
355                         <h3 class="section-header">Public Class Methods</h3>
356
357                 
358                         <div id="add-simplerpc-options-method" class="method-detail ">
359                                 <a name="M000453"></a>
360
361                                 <div class="method-heading">
362                                 
363                                         <span class="method-name">add_simplerpc_options</span><span
364                                                 class="method-args">(parser, options)</span>
365                                         <span class="method-click-advice">click to toggle source</span>
366                                 
367                                 </div>
368
369                                 <div class="method-description">
370                                         
371                                         <p>
372 Add SimpleRPC common options
373 </p>
374                                         
375
376                                         
377                                         <div class="method-source-code"
378                                                 id="add-simplerpc-options-source">
379 <pre>
380      <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 254</span>
381 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>)
382 255:         <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
383 256:         <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;RPC Options&quot;</span>
384 257: 
385 258:         <span class="ruby-comment cmt"># add SimpleRPC specific options to all clients that use our library</span>
386 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>
387 260:           <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:progress_bar</span>] = <span class="ruby-keyword kw">false</span>
388 261:         <span class="ruby-keyword kw">end</span>
389 262: 
390 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>
391 264:           <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mcollective_limit_targets</span>] = <span class="ruby-value">1</span>
392 265:         <span class="ruby-keyword kw">end</span>
393 266: 
394 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>
395 268:           <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:batch_size</span>] = <span class="ruby-identifier">v</span>
396 269:         <span class="ruby-keyword kw">end</span>
397 270: 
398 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>
399 272:           <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:batch_sleep_time</span>] = <span class="ruby-identifier">v</span>
400 273:         <span class="ruby-keyword kw">end</span>
401 274: 
402 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>
403 276:           <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:limit_seed</span>] = <span class="ruby-identifier">v</span>
404 277:         <span class="ruby-keyword kw">end</span>
405 278: 
406 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>
407 280:           <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid limit specified: #{v} valid limits are /^\d+%*$/&quot;</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>
408 281: 
409 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>
410 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>
411 284:           <span class="ruby-keyword kw">else</span>
412 285:             <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:mcollective_limit_targets</span>] = <span class="ruby-identifier">v</span>
413 286:           <span class="ruby-keyword kw">end</span>
414 287:         <span class="ruby-keyword kw">end</span>
415 288: 
416 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>
417 290:           <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:progress_bar</span>] = <span class="ruby-keyword kw">false</span>
418 291:           <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:output_format</span>] = <span class="ruby-identifier">:json</span>
419 292:         <span class="ruby-keyword kw">end</span>
420 293: 
421 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>
422 295:           <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;all&quot;</span>
423 296:             <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:force_display_mode</span>] = <span class="ruby-identifier">:always</span>
424 297:           <span class="ruby-keyword kw">else</span>
425 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>
426 299:           <span class="ruby-keyword kw">end</span>
427 300: 
428 301:           <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;--display has to be one of 'ok', 'all' or 'failed'&quot;</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>])
429 302:         <span class="ruby-keyword kw">end</span>
430 303:       <span class="ruby-keyword kw">end</span></pre>
431                                         </div>
432                                         
433                                 </div>
434
435                                 
436                         </div>
437
438                 
439                         <div id="extract-hosts-from-array-method" class="method-detail ">
440                                 <a name="M000442"></a>
441
442                                 <div class="method-heading">
443                                 
444                                         <span class="method-name">extract_hosts_from_array</span><span
445                                                 class="method-args">(hosts)</span>
446                                         <span class="method-click-advice">click to toggle source</span>
447                                 
448                                 </div>
449
450                                 <div class="method-description">
451                                         
452                                         <p>
453 Given an array of something, make sure each is a string chomp off any new
454 lines and return just the array of hosts
455 </p>
456                                         
457
458                                         
459                                         <div class="method-source-code"
460                                                 id="extract-hosts-from-array-source">
461 <pre>
462     <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 29</span>
463 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>)
464 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>
465 31:           <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;#{host} should be a string&quot;</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>)
466 32:           <span class="ruby-identifier">host</span>.<span class="ruby-identifier">chomp</span>
467 33:         <span class="ruby-keyword kw">end</span>
468 34:       <span class="ruby-keyword kw">end</span></pre>
469                                         </div>
470                                         
471                                 </div>
472
473                                 
474                         </div>
475
476                 
477                         <div id="extract-hosts-from-json-method" class="method-detail ">
478                                 <a name="M000441"></a>
479
480                                 <div class="method-heading">
481                                 
482                                         <span class="method-name">extract_hosts_from_json</span><span
483                                                 class="method-args">(json)</span>
484                                         <span class="method-click-advice">click to toggle source</span>
485                                 
486                                 </div>
487
488                                 <div class="method-description">
489                                         
490                                         <p>
491 Parse JSON output as produced by printrpc and extract the
492 &#8220;sender&#8221; of each rpc response
493 </p>
494 <p>
495 The simplist valid JSON based data would be:
496 </p>
497 <p>
498 [
499 </p>
500 <pre>
501  {&quot;sender&quot; =&gt; &quot;example.com&quot;},
502  {&quot;sender&quot; =&gt; &quot;another.com&quot;}
503 </pre>
504 <p>
505 ]
506 </p>
507                                         
508
509                                         
510                                         <div class="method-source-code"
511                                                 id="extract-hosts-from-json-source">
512 <pre>
513     <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 14</span>
514 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>)
515 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>)
516 16: 
517 17:         <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;JSON hosts list is not an array&quot;</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>)
518 18: 
519 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>
520 20:           <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;JSON host list is not an array of Hashes&quot;</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>)
521 21:           <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;JSON host list does not have senders in it&quot;</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">&quot;sender&quot;</span>)
522 22: 
523 23:           <span class="ruby-identifier">host</span>[<span class="ruby-value str">&quot;sender&quot;</span>]
524 24:         <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">uniq</span>
525 25:       <span class="ruby-keyword kw">end</span></pre>
526                                         </div>
527                                         
528                                 </div>
529
530                                 
531                         </div>
532
533                 
534                         <div id="old-rpcresults-method" class="method-detail ">
535                                 <a name="M000451"></a>
536
537                                 <div class="method-heading">
538                                 
539                                         <span class="method-name">old_rpcresults</span><span
540                                                 class="method-args">(result, flags = {})</span>
541                                         <span class="method-click-advice">click to toggle source</span>
542                                 
543                                 </div>
544
545                                 <div class="method-description">
546                                         
547                                         <p>
548 Backward compatible display block for results without a <a
549 href="../DDL.html">DDL</a>
550 </p>
551                                         
552
553                                         
554                                         <div class="method-source-code"
555                                                 id="old-rpcresults-source">
556 <pre>
557      <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 202</span>
558 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> = {})
559 203:         <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">&quot;&quot;</span>
560 204: 
561 205:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:flatten</span>]
562 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>
563 207:             <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-value">1</span>
564 208:               <span class="ruby-identifier">data</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:data</span>]
565 209: 
566 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>)
567 211:                 <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">pretty_inspect</span>
568 212:               <span class="ruby-keyword kw">else</span>
569 213:                 <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">data</span>
570 214:               <span class="ruby-keyword kw">end</span>
571 215:             <span class="ruby-keyword kw">else</span>
572 216:               <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">pretty_inspect</span>
573 217:             <span class="ruby-keyword kw">end</span>
574 218:           <span class="ruby-keyword kw">end</span>
575 219: 
576 220:           <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;&quot;</span>
577 221:         <span class="ruby-keyword kw">else</span>
578 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>
579 223: 
580 224:             <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:verbose</span>]
581 225:               <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;%-40s: %s\n&quot;</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>]]
582 226: 
583 227:               <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-value">1</span>
584 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">&quot;\n&quot;</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">&quot;    #{m}&quot;</span>}
585 229:                 <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n\n&quot;</span>
586 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>
587 231:                 <span class="ruby-comment cmt"># dont print anything, no useful data to display</span>
588 232:                 <span class="ruby-comment cmt"># past what was already shown</span>
589 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>
590 234:                 <span class="ruby-comment cmt"># dont print anything, no useful data to display</span>
591 235:                 <span class="ruby-comment cmt"># past what was already shown</span>
592 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>
593 237:                 <span class="ruby-comment cmt"># dont print anything, no useful data to display</span>
594 238:                 <span class="ruby-comment cmt"># past what was already shown</span>
595 239:               <span class="ruby-keyword kw">else</span>
596 240:                 <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;    #{r[:statusmsg]}&quot;</span>
597 241:               <span class="ruby-keyword kw">end</span>
598 242:             <span class="ruby-keyword kw">else</span>
599 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>
600 244:                 <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;%-40s %s\n&quot;</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>])]
601 245:               <span class="ruby-keyword kw">end</span>
602 246:             <span class="ruby-keyword kw">end</span>
603 247:           <span class="ruby-keyword kw">end</span>
604 248:         <span class="ruby-keyword kw">end</span>
605 249: 
606 250:         <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;&quot;</span>
607 251:       <span class="ruby-keyword kw">end</span></pre>
608                                         </div>
609                                         
610                                 </div>
611
612                                 
613                         </div>
614
615                 
616                         <div id="rpcresults-method" class="method-detail ">
617                                 <a name="M000444"></a>
618
619                                 <div class="method-heading">
620                                 
621                                         <span class="method-name">rpcresults</span><span
622                                                 class="method-args">(result, flags = {})</span>
623                                         <span class="method-click-advice">click to toggle source</span>
624                                 
625                                 </div>
626
627                                 <div class="method-description">
628                                         
629                                         <p>
630 Returns a blob of text representing the results in a standard way
631 </p>
632 <p>
633 It tries hard to do sane things so you often should not need to write your
634 own display functions
635 </p>
636 <p>
637 If the agent you are getting results for has a <a
638 href="../DDL.html">DDL</a> it will use the hints in there to do the right
639 thing specifically it will look at the values of display in the <a
640 href="../DDL.html">DDL</a> to choose when to show results
641 </p>
642 <p>
643 If you do not have a <a href="../DDL.html">DDL</a> you can pass these
644 flags:
645 </p>
646 <pre>
647    printrpc exim.mailq, :flatten =&gt; true
648    printrpc exim.mailq, :verbose =&gt; true
649 </pre>
650 <p>
651 If you&#8217;ve asked it to flatten the result it will not print sender
652 hostnames, it will just print the result as if it&#8217;s one huge result,
653 handy for things like showing a combined mailq.
654 </p>
655                                         
656
657                                         
658                                         <div class="method-source-code"
659                                                 id="rpcresults-source">
660 <pre>
661      <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 54</span>
662  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> = {})
663  55:         <span class="ruby-identifier">flags</span> = {<span class="ruby-identifier">:verbose</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">:flatten</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">:format</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:console</span>, <span class="ruby-identifier">:force_display_mode</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>}.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">flags</span>)
664  56: 
665  57:         <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">&quot;&quot;</span>
666  58:         <span class="ruby-identifier">ddl</span> = <span class="ruby-keyword kw">nil</span>
667  59: 
668  60:         <span class="ruby-comment cmt"># if running in verbose mode, just use the old style print</span>
669  61:         <span class="ruby-comment cmt"># no need for all the DDL helpers obfuscating the result</span>
670  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>
671  63:           <span class="ruby-keyword kw">if</span> <span class="ruby-constant">STDOUT</span>.<span class="ruby-identifier">tty?</span>
672  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>)
673  65:           <span class="ruby-keyword kw">else</span>
674  66:             <span class="ruby-identifier">result_text</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">to_json</span>
675  67:           <span class="ruby-keyword kw">end</span>
676  68:         <span class="ruby-keyword kw">else</span>
677  69:           <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:verbose</span>]
678  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>)
679  71:           <span class="ruby-keyword kw">else</span>
680  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>
681  73:               <span class="ruby-keyword kw">begin</span>
682  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>)
683  75: 
684  76:                 <span class="ruby-identifier">sender</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:sender</span>]
685  77:                 <span class="ruby-identifier">status</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statuscode</span>]
686  78:                 <span class="ruby-identifier">message</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:statusmsg</span>]
687  79:                 <span class="ruby-identifier">result</span> = <span class="ruby-identifier">r</span>[<span class="ruby-identifier">:data</span>]
688  80: 
689  81:                 <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:force_display_mode</span>]
690  82:                   <span class="ruby-identifier">display</span> = <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:force_display_mode</span>]
691  83:                 <span class="ruby-keyword kw">else</span>
692  84:                   <span class="ruby-identifier">display</span> = <span class="ruby-identifier">ddl</span>[<span class="ruby-identifier">:display</span>]
693  85:                 <span class="ruby-keyword kw">end</span>
694  86: 
695  87:                 <span class="ruby-comment cmt"># appand the results only according to what the DDL says</span>
696  88:                 <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">display</span>
697  89:                   <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:ok</span>
698  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>
699  91:                       <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</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>)
700  92:                     <span class="ruby-keyword kw">end</span>
701  93: 
702  94:                   <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:failed</span>
703  95:                     <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
704  96:                       <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</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>)
705  97:                     <span class="ruby-keyword kw">end</span>
706  98: 
707  99:                   <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:always</span>
708 100:                     <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</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>)
709 101: 
710 102:                   <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:flatten</span>
711 103:                     <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">text_for_flattened_result</span>(<span class="ruby-identifier">status</span>, <span class="ruby-identifier">result</span>)
712 104: 
713 105:                 <span class="ruby-keyword kw">end</span>
714 106:               <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>
715 107:                 <span class="ruby-comment cmt"># no DDL so just do the old style print unchanged for</span>
716 108:                 <span class="ruby-comment cmt"># backward compat</span>
717 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>)
718 110:               <span class="ruby-keyword kw">end</span>
719 111:             <span class="ruby-keyword kw">end</span>
720 112:           <span class="ruby-keyword kw">end</span>
721 113:         <span class="ruby-keyword kw">end</span>
722 114: 
723 115:         <span class="ruby-identifier">result_text</span>
724 116:       <span class="ruby-keyword kw">end</span></pre>
725                                         </div>
726                                         
727                                 </div>
728
729                                 
730                         </div>
731
732                 
733                         <div id="text-for-flattened-result-method" class="method-detail ">
734                                 <a name="M000450"></a>
735
736                                 <div class="method-heading">
737                                 
738                                         <span class="method-name">text_for_flattened_result</span><span
739                                                 class="method-args">(status, result)</span>
740                                         <span class="method-click-advice">click to toggle source</span>
741                                 
742                                 </div>
743
744                                 <div class="method-description">
745                                         
746                                         <p>
747 Returns text representing a flattened result of only good data
748 </p>
749                                         
750
751                                         
752                                         <div class="method-source-code"
753                                                 id="text-for-flattened-result-source">
754 <pre>
755      <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 189</span>
756 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>)
757 190:         <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">&quot;&quot;</span>
758 191: 
759 192:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">1</span>
760 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>)
761 194:             <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">pretty_inspect</span>
762 195:           <span class="ruby-keyword kw">else</span>
763 196:             <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">result</span>
764 197:           <span class="ruby-keyword kw">end</span>
765 198:         <span class="ruby-keyword kw">end</span>
766 199:       <span class="ruby-keyword kw">end</span></pre>
767                                         </div>
768                                         
769                                 </div>
770
771                                 
772                         </div>
773
774                 
775                         <div id="text-for-result-method" class="method-detail ">
776                                 <a name="M000445"></a>
777
778                                 <div class="method-heading">
779                                 
780                                         <span class="method-name">text_for_result</span><span
781                                                 class="method-args">(sender, status, msg, result, ddl)</span>
782                                         <span class="method-click-advice">click to toggle source</span>
783                                 
784                                 </div>
785
786                                 <div class="method-description">
787                                         
788                                         <p>
789 Return text representing a result
790 </p>
791                                         
792
793                                         
794                                         <div class="method-source-code"
795                                                 id="text-for-result-source">
796 <pre>
797      <span class="ruby-comment cmt"># File lib/mcollective/rpc/helpers.rb, line 119</span>
798 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>)
799 120:         <span class="ruby-identifier">statusses</span> = [<span class="ruby-value str">&quot;&quot;</span>,
800 121:                      <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-value str">&quot;Request Aborted&quot;</span>),
801 122:                      <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:yellow</span>, <span class="ruby-value str">&quot;Unknown Action&quot;</span>),
802 123:                      <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:yellow</span>, <span class="ruby-value str">&quot;Missing Request Data&quot;</span>),
803 124:                      <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:yellow</span>, <span class="ruby-value str">&quot;Invalid Request Data&quot;</span>),
804 125:                      <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-value str">&quot;Unknown Request Status&quot;</span>)]
805 126: 
806 127:         <span class="ruby-identifier">result_text</span> = <span class="ruby-value str">&quot;%-40s %s\n&quot;</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">sender</span>, <span class="ruby-identifier">statusses</span>[<span class="ruby-identifier">status</span>]]
807 128:         <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;   %s\n&quot;</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">&quot;OK&quot;</span>
808 129: 
809 130:         <span class="ruby-comment cmt"># only print good data, ignore data that results from failure</span>
810 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>
811 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>)
812 133:             <span class="ruby-comment cmt"># figure out the lengths of the display as strings, we'll use</span>
813 134:             <span class="ruby-comment cmt"># it later to correctly justify the output</span>
814 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>
815 136:               <span class="ruby-keyword kw">begin</span>
816 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>
817 138:               <span class="ruby-keyword kw">rescue</span>
818 139:                 <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span>
819 140:               <span class="ruby-keyword kw">end</span>
820 141:             <span class="ruby-keyword kw">end</span>
821 142: 
822 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>
823 144:               <span class="ruby-comment cmt"># get all the output fields nicely lined up with a</span>
824 145:               <span class="ruby-comment cmt"># 3 space front padding</span>
825 146:               <span class="ruby-keyword kw">begin</span>
826 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>]
827 148:               <span class="ruby-keyword kw">rescue</span>
828 149:                 <span class="ruby-identifier">display_as</span> = <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>
829 150:               <span class="ruby-keyword kw">end</span>
830 151: 
831 152:               <span class="ruby-identifier">display_length</span> = <span class="ruby-identifier">display_as</span>.<span class="ruby-identifier">size</span>
832 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>
833 154:               <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot; &quot;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">padding</span>
834 155: 
835 156:               <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{display_as}:&quot;</span>
836 157: 
837 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>)
838 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">&quot;\n&quot;</span>)
839 160: 
840 161:                 <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lines</span>.<span class="ruby-identifier">empty?</span>
841 162:                   <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span>
842 163:                 <span class="ruby-keyword kw">else</span>
843 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>
844 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">&quot; &quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">padtxt</span> = <span class="ruby-value str">&quot; &quot;</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>)
845 166: 
846 167:                     <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{padtxt}#{line}\n&quot;</span>
847 168:                   <span class="ruby-keyword kw">end</span>
848 169:                 <span class="ruby-keyword kw">end</span>
849 170:               <span class="ruby-keyword kw">else</span>
850 171:                 <span class="ruby-identifier">padding</span> = <span class="ruby-value str">&quot; &quot;</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>)
851 172:                 <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot; &quot;</span> <span class="ruby-operator">&lt;&lt;</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">&quot;\n&quot;</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">padding</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span>
852 173:               <span class="ruby-keyword kw">end</span>
853 174:             <span class="ruby-keyword kw">end</span>
854 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>
855 176:             <span class="ruby-comment cmt"># for status 1 we dont want to show half baked</span>
856 177:             <span class="ruby-comment cmt"># data by default since the DDL will supply all the defaults</span>
857 178:             <span class="ruby-comment cmt"># it just doesnt look right</span>
858 179:           <span class="ruby-keyword kw">else</span>
859 180:             <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n\t&quot;</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">&quot;\n&quot;</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n\t&quot;</span>)
860 181:           <span class="ruby-keyword kw">end</span>
861 182:         <span class="ruby-keyword kw">end</span>
862 183: 
863 184:         <span class="ruby-identifier">result_text</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span>
864 185:         <span class="ruby-identifier">result_text</span>
865 186:       <span class="ruby-keyword kw">end</span></pre>
866                                         </div>
867                                         
868                                 </div>
869
870                                 
871                         </div>
872
873                 
874                 </div>
875         
876
877         </div>
878
879
880         <div id="rdoc-debugging-section-dump" class="debugging-section">
881         
882                 <p>Disabled; run with --debug to generate this.</p>
883         
884         </div>
885
886         <div id="validator-badges">
887                 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
888                 <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
889                         Rdoc Generator</a> 1.1.6</small>.</p>
890         </div>
891
892 </body>
893 </html>
894