Update version according to OSCI-856
[packages/precise/mcollective.git] / doc / MCollective / Client.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::Client</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/client_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
32                                                         class="thickbox" title="lib/mcollective/client.rb">lib/mcollective/client.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="#M000494">::new</a></li>
63                                         
64                                         <li><a href="#M000495">#collective</a></li>
65                                         
66                                         <li><a href="#M000498">#createreq</a></li>
67                                         
68                                         <li><a href="#M000496">#disconnect</a></li>
69                                         
70                                         <li><a href="#M000502">#discover</a></li>
71                                         
72                                         <li><a href="#M000512">#discovered_req</a></li>
73                                         
74                                         <li><a href="#M000513">#display_stats</a></li>
75                                         
76                                         <li><a href="#M000501">#receive</a></li>
77                                         
78                                         <li><a href="#M000503">#req</a></li>
79                                         
80                                         <li><a href="#M000497">#sendreq</a></li>
81                                         
82                                         <li><a href="#M000509">#start_publisher</a></li>
83                                         
84                                         <li><a href="#M000510">#start_receiver</a></li>
85                                         
86                                         <li><a href="#M000499">#subscribe</a></li>
87                                         
88                                         <li><a href="#M000505">#threaded_req</a></li>
89                                         
90                                         <li><a href="#M000500">#unsubscribe</a></li>
91                                         
92                                         <li><a href="#M000504">#unthreaded_req</a></li>
93                                         
94                                         <li><a href="#M000511">#update_stat</a></li>
95                                         
96                                 </ul>
97                         </div>
98                         
99
100                         <!-- Included Modules -->
101                         
102                 </div>
103
104                 <div id="project-metadata">
105                         
106                         
107                         <div id="fileindex-section" class="section project-section">
108                                 <h3 class="section-header">Files</h3>
109                                 <ul>
110                                 
111                                         <li class="file"><a href="../COPYING.html">COPYING</a></li>
112                                 
113                                         <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
114                                 
115                                         <li class="file"><a href="../README.html">README</a></li>
116                                 
117                                         <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
118                                 
119                                         <li class="file"><a href="../etc/client_cfg_dist.html">client.cfg.dist</a></li>
120                                 
121                                         <li class="file"><a href="../etc/data-help_erb.html">data-help.erb</a></li>
122                                 
123                                         <li class="file"><a href="../etc/discovery-help_erb.html">discovery-help.erb</a></li>
124                                 
125                                         <li class="file"><a href="../etc/facts_yaml_dist.html">facts.yaml.dist</a></li>
126                                 
127                                         <li class="file"><a href="../etc/metadata-help_erb.html">metadata-help.erb</a></li>
128                                 
129                                         <li class="file"><a href="../etc/msg-help_erb.html">msg-help.erb</a></li>
130                                 
131                                         <li class="file"><a href="../etc/rpc-help_erb.html">rpc-help.erb</a></li>
132                                 
133                                         <li class="file"><a href="../etc/server_cfg_dist.html">server.cfg.dist</a></li>
134                                 
135                                         <li class="file"><a href="../etc/ssl/PLACEHOLDER.html">PLACEHOLDER</a></li>
136                                 
137                                         <li class="file"><a href="../etc/ssl/clients/PLACEHOLDER.html">PLACEHOLDER</a></li>
138                                 
139                                         <li class="file"><a href="../lib/mcollective/generators/templates/action_snippet_erb.html">action_snippet.erb</a></li>
140                                 
141                                         <li class="file"><a href="../lib/mcollective/generators/templates/data_input_snippet_erb.html">data_input_snippet.erb</a></li>
142                                 
143                                         <li class="file"><a href="../lib/mcollective/generators/templates/ddl_erb.html">ddl.erb</a></li>
144                                 
145                                         <li class="file"><a href="../lib/mcollective/generators/templates/plugin_erb.html">plugin.erb</a></li>
146                                 
147                                         <li class="file"><a href="../lib/mcollective/locales/en_yml.html">en.yml</a></li>
148                                 
149                                         <li class="file"><a href="../mcollective_init.html">mcollective.init</a></li>
150                                 
151                                 </ul>
152                         </div>
153                         
154
155                         <div id="classindex-section" class="section project-section">
156                                 <h3 class="section-header">Class Index
157                                         <span class="search-toggle"><img src="../images/find.png"
158                                                 height="16" width="16" alt="[+]"
159                                                 title="show/hide quicksearch" /></span></h3>
160                                 <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
161                                 <fieldset>
162                                         <legend>Quicksearch</legend>
163                                         <input type="text" name="quicksearch" value=""
164                                                 class="quicksearch-field" />
165                                 </fieldset>
166                                 </form>
167
168                                 <ul class="link-list">
169                                 
170                                         <li><a href="../MCollective.html">MCollective</a></li>
171                                 
172                                         <li><a href="../MCollective/Agent.html">MCollective::Agent</a></li>
173                                 
174                                         <li><a href="../MCollective/Agents.html">MCollective::Agents</a></li>
175                                 
176                                         <li><a href="../MCollective/Aggregate.html">MCollective::Aggregate</a></li>
177                                 
178                                         <li><a href="../MCollective/Aggregate/Base.html">MCollective::Aggregate::Base</a></li>
179                                 
180                                         <li><a href="../MCollective/Aggregate/Result.html">MCollective::Aggregate::Result</a></li>
181                                 
182                                         <li><a href="../MCollective/Aggregate/Result/Base.html">MCollective::Aggregate::Result::Base</a></li>
183                                 
184                                         <li><a href="../MCollective/Aggregate/Result/CollectionResult.html">MCollective::Aggregate::Result::CollectionResult</a></li>
185                                 
186                                         <li><a href="../MCollective/Aggregate/Result/NumericResult.html">MCollective::Aggregate::Result::NumericResult</a></li>
187                                 
188                                         <li><a href="../MCollective/Application.html">MCollective::Application</a></li>
189                                 
190                                         <li><a href="../MCollective/Applications.html">MCollective::Applications</a></li>
191                                 
192                                         <li><a href="../MCollective/Cache.html">MCollective::Cache</a></li>
193                                 
194                                         <li><a href="../MCollective/Client.html">MCollective::Client</a></li>
195                                 
196                                         <li><a href="../MCollective/CodedError.html">MCollective::CodedError</a></li>
197                                 
198                                         <li><a href="../MCollective/Config.html">MCollective::Config</a></li>
199                                 
200                                         <li><a href="../MCollective/Connector.html">MCollective::Connector</a></li>
201                                 
202                                         <li><a href="../MCollective/Connector/Base.html">MCollective::Connector::Base</a></li>
203                                 
204                                         <li><a href="../MCollective/DDL.html">MCollective::DDL</a></li>
205                                 
206                                         <li><a href="../MCollective/DDL/AgentDDL.html">MCollective::DDL::AgentDDL</a></li>
207                                 
208                                         <li><a href="../MCollective/DDL/Base.html">MCollective::DDL::Base</a></li>
209                                 
210                                         <li><a href="../MCollective/DDL/DataDDL.html">MCollective::DDL::DataDDL</a></li>
211                                 
212                                         <li><a href="../MCollective/DDL/DiscoveryDDL.html">MCollective::DDL::DiscoveryDDL</a></li>
213                                 
214                                         <li><a href="../MCollective/DDL/ValidatorDDL.html">MCollective::DDL::ValidatorDDL</a></li>
215                                 
216                                         <li><a href="../MCollective/DDLValidationError.html">MCollective::DDLValidationError</a></li>
217                                 
218                                         <li><a href="../MCollective/Data.html">MCollective::Data</a></li>
219                                 
220                                         <li><a href="../MCollective/Data/Base.html">MCollective::Data::Base</a></li>
221                                 
222                                         <li><a href="../MCollective/Data/Result.html">MCollective::Data::Result</a></li>
223                                 
224                                         <li><a href="../MCollective/Discovery.html">MCollective::Discovery</a></li>
225                                 
226                                         <li><a href="../MCollective/Facts.html">MCollective::Facts</a></li>
227                                 
228                                         <li><a href="../MCollective/Facts/Base.html">MCollective::Facts::Base</a></li>
229                                 
230                                         <li><a href="../MCollective/Generators.html">MCollective::Generators</a></li>
231                                 
232                                         <li><a href="../MCollective/Generators/AgentGenerator.html">MCollective::Generators::AgentGenerator</a></li>
233                                 
234                                         <li><a href="../MCollective/Generators/Base.html">MCollective::Generators::Base</a></li>
235                                 
236                                         <li><a href="../MCollective/Generators/DataGenerator.html">MCollective::Generators::DataGenerator</a></li>
237                                 
238                                         <li><a href="../MCollective/InvalidRPCData.html">MCollective::InvalidRPCData</a></li>
239                                 
240                                         <li><a href="../MCollective/Log.html">MCollective::Log</a></li>
241                                 
242                                         <li><a href="../MCollective/Logger.html">MCollective::Logger</a></li>
243                                 
244                                         <li><a href="../MCollective/Logger/Base.html">MCollective::Logger::Base</a></li>
245                                 
246                                         <li><a href="../MCollective/Logger/Console_logger.html">MCollective::Logger::Console_logger</a></li>
247                                 
248                                         <li><a href="../MCollective/Logger/File_logger.html">MCollective::Logger::File_logger</a></li>
249                                 
250                                         <li><a href="../MCollective/Logger/Syslog_logger.html">MCollective::Logger::Syslog_logger</a></li>
251                                 
252                                         <li><a href="../MCollective/Matcher.html">MCollective::Matcher</a></li>
253                                 
254                                         <li><a href="../MCollective/Matcher/Parser.html">MCollective::Matcher::Parser</a></li>
255                                 
256                                         <li><a href="../MCollective/Matcher/Scanner.html">MCollective::Matcher::Scanner</a></li>
257                                 
258                                         <li><a href="../MCollective/Message.html">MCollective::Message</a></li>
259                                 
260                                         <li><a href="../MCollective/MissingRPCData.html">MCollective::MissingRPCData</a></li>
261                                 
262                                         <li><a href="../MCollective/MsgDoesNotMatchRequestID.html">MCollective::MsgDoesNotMatchRequestID</a></li>
263                                 
264                                         <li><a href="../MCollective/MsgTTLExpired.html">MCollective::MsgTTLExpired</a></li>
265                                 
266                                         <li><a href="../MCollective/NotTargettedAtUs.html">MCollective::NotTargettedAtUs</a></li>
267                                 
268                                         <li><a href="../MCollective/Optionparser.html">MCollective::Optionparser</a></li>
269                                 
270                                         <li><a href="../MCollective/PluginManager.html">MCollective::PluginManager</a></li>
271                                 
272                                         <li><a href="../MCollective/PluginPackager.html">MCollective::PluginPackager</a></li>
273                                 
274                                         <li><a href="../MCollective/PluginPackager/AgentDefinition.html">MCollective::PluginPackager::AgentDefinition</a></li>
275                                 
276                                         <li><a href="../MCollective/PluginPackager/StandardDefinition.html">MCollective::PluginPackager::StandardDefinition</a></li>
277                                 
278                                         <li><a href="../MCollective/RPC.html">MCollective::RPC</a></li>
279                                 
280                                         <li><a href="../MCollective/RPC/ActionRunner.html">MCollective::RPC::ActionRunner</a></li>
281                                 
282                                         <li><a href="../MCollective/RPC/Agent.html">MCollective::RPC::Agent</a></li>
283                                 
284                                         <li><a href="../MCollective/RPC/Audit.html">MCollective::RPC::Audit</a></li>
285                                 
286                                         <li><a href="../MCollective/RPC/Client.html">MCollective::RPC::Client</a></li>
287                                 
288                                         <li><a href="../MCollective/RPC/Helpers.html">MCollective::RPC::Helpers</a></li>
289                                 
290                                         <li><a href="../MCollective/RPC/Progress.html">MCollective::RPC::Progress</a></li>
291                                 
292                                         <li><a href="../MCollective/RPC/Reply.html">MCollective::RPC::Reply</a></li>
293                                 
294                                         <li><a href="../MCollective/RPC/Request.html">MCollective::RPC::Request</a></li>
295                                 
296                                         <li><a href="../MCollective/RPC/Result.html">MCollective::RPC::Result</a></li>
297                                 
298                                         <li><a href="../MCollective/RPC/Stats.html">MCollective::RPC::Stats</a></li>
299                                 
300                                         <li><a href="../MCollective/RPCAborted.html">MCollective::RPCAborted</a></li>
301                                 
302                                         <li><a href="../MCollective/RPCError.html">MCollective::RPCError</a></li>
303                                 
304                                         <li><a href="../MCollective/Registration.html">MCollective::Registration</a></li>
305                                 
306                                         <li><a href="../MCollective/Registration/Base.html">MCollective::Registration::Base</a></li>
307                                 
308                                         <li><a href="../MCollective/Runner.html">MCollective::Runner</a></li>
309                                 
310                                         <li><a href="../MCollective/RunnerStats.html">MCollective::RunnerStats</a></li>
311                                 
312                                         <li><a href="../MCollective/SSL.html">MCollective::SSL</a></li>
313                                 
314                                         <li><a href="../MCollective/Security.html">MCollective::Security</a></li>
315                                 
316                                         <li><a href="../MCollective/Security/Base.html">MCollective::Security::Base</a></li>
317                                 
318                                         <li><a href="../MCollective/SecurityValidationFailed.html">MCollective::SecurityValidationFailed</a></li>
319                                 
320                                         <li><a href="../MCollective/Shell.html">MCollective::Shell</a></li>
321                                 
322                                         <li><a href="../MCollective/Translatable.html">MCollective::Translatable</a></li>
323                                 
324                                         <li><a href="../MCollective/UnixDaemon.html">MCollective::UnixDaemon</a></li>
325                                 
326                                         <li><a href="../MCollective/UnknownRPCAction.html">MCollective::UnknownRPCAction</a></li>
327                                 
328                                         <li><a href="../MCollective/UnknownRPCError.html">MCollective::UnknownRPCError</a></li>
329                                 
330                                         <li><a href="../MCollective/Util.html">MCollective::Util</a></li>
331                                 
332                                         <li><a href="../MCollective/Validator.html">MCollective::Validator</a></li>
333                                 
334                                         <li><a href="../MCollective/ValidatorError.html">MCollective::ValidatorError</a></li>
335                                 
336                                         <li><a href="../MCollective/WindowsDaemon.html">MCollective::WindowsDaemon</a></li>
337                                 
338                                         <li><a href="../Array.html">Array</a></li>
339                                 
340                                         <li><a href="../Dir.html">Dir</a></li>
341                                 
342                                         <li><a href="../Object.html">Object</a></li>
343                                 
344                                         <li><a href="../String.html">String</a></li>
345                                 
346                                         <li><a href="../Symbol.html">Symbol</a></li>
347                                 
348                                 </ul>
349                                 <div id="no-class-search-results" style="display: none;">No matching classes.</div>
350                         </div>
351
352                         
353                 </div>
354         </div>
355
356         <div id="documentation">
357                 <h1 class="class">MCollective::Client</h1>
358
359                 <div id="description">
360                         <p>
361 Helpers for writing clients that can talk to agents, do discovery and so
362 forth
363 </p>
364
365                 </div>
366
367                 <!-- Constants -->
368                 
369
370                 <!-- Attributes -->
371                 
372                 <div id="attribute-method-details" class="method-section section">
373                         <h3 class="section-header">Attributes</h3>
374
375                         
376                         <div id="options-attribute-method" class="method-detail">
377                                 <a name="options"></a>
378                                 
379                                 <a name="options="></a>
380                                 
381                                 <div class="method-heading attribute-method-heading">
382                                         <span class="method-name">options</span><span
383                                                 class="attribute-access-type">[RW]</span>
384                                 </div>
385
386                                 <div class="method-description">
387                                 
388                                 <p class="missing-docs">(Not documented)</p>
389                                 
390                                 </div>
391                         </div>
392                         
393                         <div id="stats-attribute-method" class="method-detail">
394                                 <a name="stats"></a>
395                                 
396                                 <a name="stats="></a>
397                                 
398                                 <div class="method-heading attribute-method-heading">
399                                         <span class="method-name">stats</span><span
400                                                 class="attribute-access-type">[RW]</span>
401                                 </div>
402
403                                 <div class="method-description">
404                                 
405                                 <p class="missing-docs">(Not documented)</p>
406                                 
407                                 </div>
408                         </div>
409                         
410                         <div id="discoverer-attribute-method" class="method-detail">
411                                 <a name="discoverer"></a>
412                                 
413                                 <a name="discoverer="></a>
414                                 
415                                 <div class="method-heading attribute-method-heading">
416                                         <span class="method-name">discoverer</span><span
417                                                 class="attribute-access-type">[RW]</span>
418                                 </div>
419
420                                 <div class="method-description">
421                                 
422                                 <p class="missing-docs">(Not documented)</p>
423                                 
424                                 </div>
425                         </div>
426                         
427                 </div>
428                 
429
430                 <!-- Methods -->
431                 
432                 <div id="public-class-method-details" class="method-section section">
433                         <h3 class="section-header">Public Class Methods</h3>
434
435                 
436                         <div id="new-method" class="method-detail ">
437                                 <a name="M000494"></a>
438
439                                 <div class="method-heading">
440                                 
441                                         <span class="method-name">new</span><span
442                                                 class="method-args">(configfile)</span>
443                                         <span class="method-click-advice">click to toggle source</span>
444                                 
445                                 </div>
446
447                                 <div class="method-description">
448                                         
449                                         <p class="missing-docs">(Not documented)</p>
450                                         
451
452                                         
453                                         <div class="method-source-code"
454                                                 id="new-source">
455 <pre>
456     <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 6</span>
457  6:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">configfile</span>)
458  7:       <span class="ruby-ivar">@config</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>
459  8:       <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">loadconfig</span>(<span class="ruby-identifier">configfile</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">configured</span>
460  9: 
461 10:       <span class="ruby-ivar">@connection</span> = <span class="ruby-constant">PluginManager</span>[<span class="ruby-value str">&quot;connector_plugin&quot;</span>]
462 11:       <span class="ruby-ivar">@security</span> = <span class="ruby-constant">PluginManager</span>[<span class="ruby-value str">&quot;security_plugin&quot;</span>]
463 12: 
464 13:       <span class="ruby-ivar">@security</span>.<span class="ruby-identifier">initiated_by</span> = <span class="ruby-identifier">:client</span>
465 14:       <span class="ruby-ivar">@options</span> = <span class="ruby-keyword kw">nil</span>
466 15:       <span class="ruby-ivar">@subscriptions</span> = {}
467 16: 
468 17:       <span class="ruby-ivar">@discoverer</span> = <span class="ruby-constant">Discovery</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
469 18:       <span class="ruby-ivar">@connection</span>.<span class="ruby-identifier">connect</span>
470 19:     <span class="ruby-keyword kw">end</span></pre>
471                                         </div>
472                                         
473                                 </div>
474
475                                 
476                         </div>
477
478                 
479                 </div>
480         
481                 <div id="public-instance-method-details" class="method-section section">
482                         <h3 class="section-header">Public Instance Methods</h3>
483
484                 
485                         <div id="collective-method" class="method-detail ">
486                                 <a name="M000495"></a>
487
488                                 <div class="method-heading">
489                                 
490                                         <span class="method-name">collective</span><span
491                                                 class="method-args">()</span>
492                                         <span class="method-click-advice">click to toggle source</span>
493                                 
494                                 </div>
495
496                                 <div class="method-description">
497                                         
498                                         <p>
499 Returns the configured main collective if no specific collective is
500 specified as options
501 </p>
502                                         
503
504                                         
505                                         <div class="method-source-code"
506                                                 id="collective-source">
507 <pre>
508     <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 23</span>
509 23:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collective</span>
510 24:       <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:collective</span>].<span class="ruby-identifier">nil?</span>
511 25:         <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">main_collective</span>
512 26:       <span class="ruby-keyword kw">else</span>
513 27:         <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:collective</span>]
514 28:       <span class="ruby-keyword kw">end</span>
515 29:     <span class="ruby-keyword kw">end</span></pre>
516                                         </div>
517                                         
518                                 </div>
519
520                                 
521                         </div>
522
523                 
524                         <div id="createreq-method" class="method-detail ">
525                                 <a name="M000498"></a>
526
527                                 <div class="method-heading">
528                                 
529                                         <span class="method-name">createreq</span><span
530                                                 class="method-args">(msg, agent, filter ={})</span>
531                                         <span class="method-click-advice">click to toggle source</span>
532                                 
533                                 </div>
534
535                                 <div class="method-description">
536                                         
537                                         <p class="missing-docs">(Not documented)</p>
538                                         
539
540                                         
541                                         <div class="method-source-code"
542                                                 id="createreq-source">
543 <pre>
544     <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 48</span>
545 48:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">createreq</span>(<span class="ruby-identifier">msg</span>, <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">filter</span> ={})
546 49:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">msg</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Message</span>)
547 50:         <span class="ruby-identifier">request</span> = <span class="ruby-identifier">msg</span>
548 51:         <span class="ruby-identifier">agent</span> = <span class="ruby-identifier">request</span>.<span class="ruby-identifier">agent</span>
549 52:       <span class="ruby-keyword kw">else</span>
550 53:         <span class="ruby-identifier">ttl</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:ttl</span>] <span class="ruby-operator">||</span> <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">ttl</span>
551 54:         <span class="ruby-identifier">request</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">msg</span>, <span class="ruby-keyword kw">nil</span>, {<span class="ruby-identifier">:agent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:request</span>, <span class="ruby-identifier">:collective</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">collective</span>, <span class="ruby-identifier">:filter</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">filter</span>, <span class="ruby-identifier">:ttl</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ttl</span>})
552 55:         <span class="ruby-identifier">request</span>.<span class="ruby-identifier">reply_to</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:reply_to</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:reply_to</span>]
553 56:       <span class="ruby-keyword kw">end</span>
554 57: 
555 58:       <span class="ruby-identifier">request</span>.<span class="ruby-identifier">encode!</span>
556 59:       <span class="ruby-identifier">subscribe</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">:reply</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">request</span>.<span class="ruby-identifier">reply_to</span>
557 60:       <span class="ruby-identifier">request</span>
558 61:     <span class="ruby-keyword kw">end</span></pre>
559                                         </div>
560                                         
561                                 </div>
562
563                                 
564                         </div>
565
566                 
567                         <div id="disconnect-method" class="method-detail ">
568                                 <a name="M000496"></a>
569
570                                 <div class="method-heading">
571                                 
572                                         <span class="method-name">disconnect</span><span
573                                                 class="method-args">()</span>
574                                         <span class="method-click-advice">click to toggle source</span>
575                                 
576                                 </div>
577
578                                 <div class="method-description">
579                                         
580                                         <p>
581 Disconnects cleanly from the middleware
582 </p>
583                                         
584
585                                         
586                                         <div class="method-source-code"
587                                                 id="disconnect-source">
588 <pre>
589     <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 32</span>
590 32:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnect</span>
591 33:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;Disconnecting from the middleware&quot;</span>)
592 34:       <span class="ruby-ivar">@connection</span>.<span class="ruby-identifier">disconnect</span>
593 35:     <span class="ruby-keyword kw">end</span></pre>
594                                         </div>
595                                         
596                                 </div>
597
598                                 
599                         </div>
600
601                 
602                         <div id="discover-method" class="method-detail ">
603                                 <a name="M000502"></a>
604
605                                 <div class="method-heading">
606                                 
607                                         <span class="method-name">discover</span><span
608                                                 class="method-args">(filter, timeout, limit=0)</span>
609                                         <span class="method-click-advice">click to toggle source</span>
610                                 
611                                 </div>
612
613                                 <div class="method-description">
614                                         
615                                         <p>
616 Performs a discovery of nodes matching the filter passed returns an array
617 of nodes
618 </p>
619 <p>
620 An integer limit can be supplied this will have the effect of the discovery
621 being cancelled soon as it reached the requested limit of hosts
622 </p>
623                                         
624
625                                         
626                                         <div class="method-source-code"
627                                                 id="discover-source">
628 <pre>
629      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 117</span>
630 117:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">discover</span>(<span class="ruby-identifier">filter</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-identifier">limit</span>=<span class="ruby-value">0</span>)
631 118:       <span class="ruby-identifier">discovered</span> = <span class="ruby-ivar">@discoverer</span>.<span class="ruby-identifier">discover</span>(<span class="ruby-identifier">filter</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-identifier">limit</span>)
632 119:     <span class="ruby-keyword kw">end</span></pre>
633                                         </div>
634                                         
635                                 </div>
636
637                                 
638                         </div>
639
640                 
641                         <div id="discovered-req-method" class="method-detail ">
642                                 <a name="M000512"></a>
643
644                                 <div class="method-heading">
645                                 
646                                         <span class="method-name">discovered_req</span><span
647                                                 class="method-args">(body, agent, options=false)</span>
648                                         <span class="method-click-advice">click to toggle source</span>
649                                 
650                                 </div>
651
652                                 <div class="method-description">
653                                         
654                                         <p class="missing-docs">(Not documented)</p>
655                                         
656
657                                         
658                                         <div class="method-source-code"
659                                                 id="discovered-req-source">
660 <pre>
661      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 233</span>
662 233:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">discovered_req</span>(<span class="ruby-identifier">body</span>, <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">options</span>=<span class="ruby-keyword kw">false</span>)
663 234:       <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Client#discovered_req has been removed, please port your agent and client to the SimpleRPC framework&quot;</span>
664 235:     <span class="ruby-keyword kw">end</span></pre>
665                                         </div>
666                                         
667                                 </div>
668
669                                 
670                         </div>
671
672                 
673                         <div id="display-stats-method" class="method-detail ">
674                                 <a name="M000513"></a>
675
676                                 <div class="method-heading">
677                                 
678                                         <span class="method-name">display_stats</span><span
679                                                 class="method-args">(stats, options=false, caption="stomp call summary")</span>
680                                         <span class="method-click-advice">click to toggle source</span>
681                                 
682                                 </div>
683
684                                 <div class="method-description">
685                                         
686                                         <p>
687 Prints out the stats returns from req and <a
688 href="Client.html#M000512">discovered_req</a> in a nice way
689 </p>
690                                         
691
692                                         
693                                         <div class="method-source-code"
694                                                 id="display-stats-source">
695 <pre>
696      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 238</span>
697 238:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">display_stats</span>(<span class="ruby-identifier">stats</span>, <span class="ruby-identifier">options</span>=<span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">caption</span>=<span class="ruby-value str">&quot;stomp call summary&quot;</span>)
698 239:       <span class="ruby-identifier">options</span> = <span class="ruby-ivar">@options</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>
699 240: 
700 241:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:verbose</span>]
701 242:         <span class="ruby-identifier">puts</span>(<span class="ruby-node">&quot;\n---- #{caption} ----&quot;</span>)
702 243: 
703 244:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:discovered</span>]
704 245:           <span class="ruby-identifier">puts</span>(<span class="ruby-node">&quot;           Nodes: #{stats[:discovered]} / #{stats[:responses]}&quot;</span>)
705 246:         <span class="ruby-keyword kw">else</span>
706 247:           <span class="ruby-identifier">puts</span>(<span class="ruby-node">&quot;           Nodes: #{stats[:responses]}&quot;</span>)
707 248:         <span class="ruby-keyword kw">end</span>
708 249: 
709 250:         <span class="ruby-identifier">printf</span>(<span class="ruby-value str">&quot;      Start Time: %s\n&quot;</span>, <span class="ruby-constant">Time</span>.<span class="ruby-identifier">at</span>(<span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:starttime</span>]))
710 251:         <span class="ruby-identifier">printf</span>(<span class="ruby-value str">&quot;  Discovery Time: %.2fms\n&quot;</span>, <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:discoverytime</span>] <span class="ruby-operator">*</span> <span class="ruby-value">1000</span>)
711 252:         <span class="ruby-identifier">printf</span>(<span class="ruby-value str">&quot;      Agent Time: %.2fms\n&quot;</span>, <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:blocktime</span>] <span class="ruby-operator">*</span> <span class="ruby-value">1000</span>)
712 253:         <span class="ruby-identifier">printf</span>(<span class="ruby-value str">&quot;      Total Time: %.2fms\n&quot;</span>, <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:totaltime</span>] <span class="ruby-operator">*</span> <span class="ruby-value">1000</span>)
713 254: 
714 255:       <span class="ruby-keyword kw">else</span>
715 256:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:discovered</span>]
716 257:           <span class="ruby-identifier">printf</span>(<span class="ruby-value str">&quot;\nFinished processing %d / %d hosts in %.2f ms\n\n&quot;</span>, <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:responses</span>], <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:discovered</span>], <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:blocktime</span>] <span class="ruby-operator">*</span> <span class="ruby-value">1000</span>)
717 258:         <span class="ruby-keyword kw">else</span>
718 259:           <span class="ruby-identifier">printf</span>(<span class="ruby-value str">&quot;\nFinished processing %d hosts in %.2f ms\n\n&quot;</span>, <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:responses</span>], <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:blocktime</span>] <span class="ruby-operator">*</span> <span class="ruby-value">1000</span>)
719 260:         <span class="ruby-keyword kw">end</span>
720 261:       <span class="ruby-keyword kw">end</span>
721 262: 
722 263:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:noresponsefrom</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
723 264:         <span class="ruby-identifier">puts</span>(<span class="ruby-value str">&quot;\nNo response from:\n&quot;</span>)
724 265: 
725 266:         <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:noresponsefrom</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
726 267:           <span class="ruby-identifier">puts</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">%</span> <span class="ruby-value">4</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
727 268:           <span class="ruby-identifier">printf</span>(<span class="ruby-value str">&quot;%30s&quot;</span>, <span class="ruby-identifier">c</span>)
728 269:         <span class="ruby-keyword kw">end</span>
729 270: 
730 271:         <span class="ruby-identifier">puts</span>
731 272:       <span class="ruby-keyword kw">end</span>
732 273:     <span class="ruby-keyword kw">end</span></pre>
733                                         </div>
734                                         
735                                 </div>
736
737                                 
738                         </div>
739
740                 
741                         <div id="receive-method" class="method-detail ">
742                                 <a name="M000501"></a>
743
744                                 <div class="method-heading">
745                                 
746                                         <span class="method-name">receive</span><span
747                                                 class="method-args">(requestid = nil)</span>
748                                         <span class="method-click-advice">click to toggle source</span>
749                                 
750                                 </div>
751
752                                 <div class="method-description">
753                                         
754                                         <p>
755 Blocking call that waits for ever for a message to arrive.
756 </p>
757 <p>
758 If you give it a requestid this means you&#8217;ve previously send a
759 request with that ID and now you just want replies that matches that id, in
760 that case the current connection will just ignore all messages not directed
761 at it and keep waiting for more till it finds a matching message.
762 </p>
763                                         
764
765                                         
766                                         <div class="method-source-code"
767                                                 id="receive-source">
768 <pre>
769      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 88</span>
770  88:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">receive</span>(<span class="ruby-identifier">requestid</span> = <span class="ruby-keyword kw">nil</span>)
771  89:       <span class="ruby-identifier">reply</span> = <span class="ruby-keyword kw">nil</span>
772  90: 
773  91:       <span class="ruby-keyword kw">begin</span>
774  92:         <span class="ruby-identifier">reply</span> = <span class="ruby-ivar">@connection</span>.<span class="ruby-identifier">receive</span>
775  93:         <span class="ruby-identifier">reply</span>.<span class="ruby-identifier">type</span> = <span class="ruby-identifier">:reply</span>
776  94:         <span class="ruby-identifier">reply</span>.<span class="ruby-identifier">expected_msgid</span> = <span class="ruby-identifier">requestid</span>
777  95: 
778  96:         <span class="ruby-identifier">reply</span>.<span class="ruby-identifier">decode!</span>
779  97:         <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">reply</span>.<span class="ruby-identifier">requestid</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">requestid</span>
780  98:           <span class="ruby-identifier">raise</span>(<span class="ruby-constant">MsgDoesNotMatchRequestID</span>, <span class="ruby-node">&quot;Message reqid #{reply.requestid} does not match our reqid #{requestid}&quot;</span>)
781  99:         <span class="ruby-keyword kw">end</span>
782 100:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">SecurityValidationFailed</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
783 101:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">warn</span>(<span class="ruby-value str">&quot;Ignoring a message that did not pass security validations&quot;</span>)
784 102:         <span class="ruby-keyword kw">retry</span>
785 103:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">MsgDoesNotMatchRequestID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
786 104:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Ignoring a message for some other client : #{e.message}&quot;</span>)
787 105:         <span class="ruby-keyword kw">retry</span>
788 106:       <span class="ruby-keyword kw">end</span>
789 107: 
790 108:       <span class="ruby-identifier">reply</span>
791 109:     <span class="ruby-keyword kw">end</span></pre>
792                                         </div>
793                                         
794                                 </div>
795
796                                 
797                         </div>
798
799                 
800                         <div id="req-method" class="method-detail ">
801                                 <a name="M000503"></a>
802
803                                 <div class="method-heading">
804                                 
805                                         <span class="method-name">req</span><span
806                                                 class="method-args">(body, agent=nil, options=false, waitfor=0, &block)</span>
807                                         <span class="method-click-advice">click to toggle source</span>
808                                 
809                                 </div>
810
811                                 <div class="method-description">
812                                         
813                                         <p>
814 Send a request, performs the passed block for each response
815 </p>
816 <p>
817 times = req(&#8220;status&#8221;, &#8220;mcollectived&#8221;, options,
818 client) {|resp|
819 </p>
820 <pre>
821   pp resp
822 </pre>
823 <p>
824 }
825 </p>
826 <p>
827 It returns a hash of times and timeouts for discovery and total run is
828 taken from the options hash which in turn is generally built using <a
829 href="Optionparser.html">MCollective::Optionparser</a>
830 </p>
831                                         
832
833                                         
834                                         <div class="method-source-code"
835                                                 id="req-source">
836 <pre>
837      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 129</span>
838 129:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">req</span>(<span class="ruby-identifier">body</span>, <span class="ruby-identifier">agent</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span>=<span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">waitfor</span>=<span class="ruby-value">0</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
839 130:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">body</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Message</span>)
840 131:         <span class="ruby-identifier">agent</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">agent</span>
841 132:         <span class="ruby-identifier">waitfor</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">discovered_hosts</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">||</span> <span class="ruby-value">0</span>
842 133:         <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">options</span>
843 134:       <span class="ruby-keyword kw">end</span>
844 135: 
845 136:       <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">options</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>
846 137:       <span class="ruby-identifier">threaded</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:threaded</span>]
847 138:       <span class="ruby-identifier">timeout</span> = <span class="ruby-ivar">@discoverer</span>.<span class="ruby-identifier">discovery_timeout</span>(<span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:timeout</span>], <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>])
848 139:       <span class="ruby-identifier">request</span> = <span class="ruby-identifier">createreq</span>(<span class="ruby-identifier">body</span>, <span class="ruby-identifier">agent</span>, <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>])
849 140:       <span class="ruby-identifier">publish_timeout</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:publish_timeout</span>]
850 141:       <span class="ruby-identifier">stat</span> = {<span class="ruby-identifier">:starttime</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">to_f</span>, <span class="ruby-identifier">:discoverytime</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-identifier">:blocktime</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-identifier">:totaltime</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>}
851 142:       <span class="ruby-constant">STDOUT</span>.<span class="ruby-identifier">sync</span> = <span class="ruby-keyword kw">true</span>
852 143:       <span class="ruby-identifier">hosts_responded</span> = <span class="ruby-value">0</span>
853 144: 
854 145: 
855 146:       <span class="ruby-keyword kw">begin</span>
856 147:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">threaded</span>
857 148:           <span class="ruby-identifier">hosts_responded</span> = <span class="ruby-identifier">threaded_req</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">publish_timeout</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-identifier">waitfor</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
858 149:         <span class="ruby-keyword kw">else</span>
859 150:           <span class="ruby-identifier">hosts_responded</span> = <span class="ruby-identifier">unthreaded_req</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">publish_timeout</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-identifier">waitfor</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
860 151:         <span class="ruby-keyword kw">end</span>
861 152:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Interrupt</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
862 153:       <span class="ruby-keyword kw">ensure</span>
863 154:         <span class="ruby-identifier">unsubscribe</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">:reply</span>)
864 155:       <span class="ruby-keyword kw">end</span>
865 156: 
866 157:       <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">update_stat</span>(<span class="ruby-identifier">stat</span>, <span class="ruby-identifier">hosts_responded</span>, <span class="ruby-identifier">request</span>.<span class="ruby-identifier">requestid</span>)
867 158:     <span class="ruby-keyword kw">end</span></pre>
868                                         </div>
869                                         
870                                 </div>
871
872                                 
873                         </div>
874
875                 
876                         <div id="sendreq-method" class="method-detail ">
877                                 <a name="M000497"></a>
878
879                                 <div class="method-heading">
880                                 
881                                         <span class="method-name">sendreq</span><span
882                                                 class="method-args">(msg, agent, filter = {})</span>
883                                         <span class="method-click-advice">click to toggle source</span>
884                                 
885                                 </div>
886
887                                 <div class="method-description">
888                                         
889                                         <p>
890 Sends a request and returns the generated request id, doesn&#8217;t wait
891 for responses and doesn&#8217;t execute any passed in code blocks for
892 responses
893 </p>
894                                         
895
896                                         
897                                         <div class="method-source-code"
898                                                 id="sendreq-source">
899 <pre>
900     <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 39</span>
901 39:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendreq</span>(<span class="ruby-identifier">msg</span>, <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">filter</span> = {})
902 40:       <span class="ruby-identifier">request</span> = <span class="ruby-identifier">createreq</span>(<span class="ruby-identifier">msg</span>, <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">filter</span>)
903 41: 
904 42:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending request #{request.requestid} to the #{request.agent} agent with ttl #{request.ttl} in collective #{request.collective}&quot;</span>)
905 43: 
906 44:       <span class="ruby-identifier">request</span>.<span class="ruby-identifier">publish</span>
907 45:       <span class="ruby-identifier">request</span>.<span class="ruby-identifier">requestid</span>
908 46:     <span class="ruby-keyword kw">end</span></pre>
909                                         </div>
910                                         
911                                 </div>
912
913                                 
914                         </div>
915
916                 
917                         <div id="start-publisher-method" class="method-detail ">
918                                 <a name="M000509"></a>
919
920                                 <div class="method-heading">
921                                 
922                                         <span class="method-name">start_publisher</span><span
923                                                 class="method-args">(request, publish_timeout)</span>
924                                         <span class="method-click-advice">click to toggle source</span>
925                                 
926                                 </div>
927
928                                 <div class="method-description">
929                                         
930                                         <p>
931 Starts the request publishing routine
932 </p>
933                                         
934
935                                         
936                                         <div class="method-source-code"
937                                                 id="start-publisher-source">
938 <pre>
939      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 191</span>
940 191:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_publisher</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">publish_timeout</span>)
941 192:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Starting publishing with publish timeout of #{publish_timeout}&quot;</span>)
942 193:       <span class="ruby-keyword kw">begin</span>
943 194:         <span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-identifier">publish_timeout</span>) <span class="ruby-keyword kw">do</span>
944 195:           <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending request #{request.requestid} to the #{request.agent} agent with ttl #{request.ttl} in collective #{request.collective}&quot;</span>)
945 196:           <span class="ruby-identifier">request</span>.<span class="ruby-identifier">publish</span>
946 197:         <span class="ruby-keyword kw">end</span>
947 198:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
948 199:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">warn</span>(<span class="ruby-value str">&quot;Could not publish all messages. Publishing timed out.&quot;</span>)
949 200:       <span class="ruby-keyword kw">end</span>
950 201:     <span class="ruby-keyword kw">end</span></pre>
951                                         </div>
952                                         
953                                 </div>
954
955                                 
956                         </div>
957
958                 
959                         <div id="start-receiver-method" class="method-detail ">
960                                 <a name="M000510"></a>
961
962                                 <div class="method-heading">
963                                 
964                                         <span class="method-name">start_receiver</span><span
965                                                 class="method-args">(requestid, waitfor, timeout, &block)</span>
966                                         <span class="method-click-advice">click to toggle source</span>
967                                 
968                                 </div>
969
970                                 <div class="method-description">
971                                         
972                                         <p>
973 Starts the response receiver routine Expected to return the amount of
974 received responses.
975 </p>
976                                         
977
978                                         
979                                         <div class="method-source-code"
980                                                 id="start-receiver-source">
981 <pre>
982      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 205</span>
983 205:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_receiver</span>(<span class="ruby-identifier">requestid</span>, <span class="ruby-identifier">waitfor</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
984 206:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Starting response receiver with timeout of #{timeout}&quot;</span>)
985 207:       <span class="ruby-identifier">hosts_responded</span> = <span class="ruby-value">0</span>
986 208:       <span class="ruby-keyword kw">begin</span>
987 209:         <span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-identifier">timeout</span>) <span class="ruby-keyword kw">do</span>
988 210:           <span class="ruby-keyword kw">begin</span>
989 211:             <span class="ruby-identifier">resp</span> = <span class="ruby-identifier">receive</span>(<span class="ruby-identifier">requestid</span>)
990 212:             <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">resp</span>.<span class="ruby-identifier">payload</span>
991 213:             <span class="ruby-identifier">hosts_responded</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
992 214:           <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">waitfor</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">hosts_responded</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">waitfor</span>)
993 215:         <span class="ruby-keyword kw">end</span>
994 216:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
995 217:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">warn</span>(<span class="ruby-node">&quot;Could not receive all responses. Expected : #{waitfor}. Received : #{hosts_responded}&quot;</span>)
996 218:       <span class="ruby-keyword kw">end</span>
997 219: 
998 220:       <span class="ruby-identifier">hosts_responded</span>
999 221:     <span class="ruby-keyword kw">end</span></pre>
1000                                         </div>
1001                                         
1002                                 </div>
1003
1004                                 
1005                         </div>
1006
1007                 
1008                         <div id="subscribe-method" class="method-detail ">
1009                                 <a name="M000499"></a>
1010
1011                                 <div class="method-heading">
1012                                 
1013                                         <span class="method-name">subscribe</span><span
1014                                                 class="method-args">(agent, type)</span>
1015                                         <span class="method-click-advice">click to toggle source</span>
1016                                 
1017                                 </div>
1018
1019                                 <div class="method-description">
1020                                         
1021                                         <p class="missing-docs">(Not documented)</p>
1022                                         
1023
1024                                         
1025                                         <div class="method-source-code"
1026                                                 id="subscribe-source">
1027 <pre>
1028     <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 63</span>
1029 63:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">subscribe</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">type</span>)
1030 64:       <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@subscriptions</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">agent</span>)
1031 65:         <span class="ruby-identifier">subscription</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">make_subscriptions</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">collective</span>)
1032 66:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Subscribing to #{type} target for agent #{agent}&quot;</span>)
1033 67: 
1034 68:         <span class="ruby-constant">Util</span>.<span class="ruby-identifier">subscribe</span>(<span class="ruby-identifier">subscription</span>)
1035 69:         <span class="ruby-ivar">@subscriptions</span>[<span class="ruby-identifier">agent</span>] = <span class="ruby-value">1</span>
1036 70:       <span class="ruby-keyword kw">end</span>
1037 71:     <span class="ruby-keyword kw">end</span></pre>
1038                                         </div>
1039                                         
1040                                 </div>
1041
1042                                 
1043                         </div>
1044
1045                 
1046                         <div id="threaded-req-method" class="method-detail ">
1047                                 <a name="M000505"></a>
1048
1049                                 <div class="method-heading">
1050                                 
1051                                         <span class="method-name">threaded_req</span><span
1052                                                 class="method-args">(request, publish_timeout, timeout, waitfor, &block)</span>
1053                                         <span class="method-click-advice">click to toggle source</span>
1054                                 
1055                                 </div>
1056
1057                                 <div class="method-description">
1058                                         
1059                                         <p>
1060 Starts the client receiver and publisher in threads. This is activated when
1061 the &#8216;threader_client&#8217; configuration option is set.
1062 </p>
1063                                         
1064
1065                                         
1066                                         <div class="method-source-code"
1067                                                 id="threaded-req-source">
1068 <pre>
1069      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 170</span>
1070 170:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">threaded_req</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">publish_timeout</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-identifier">waitfor</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
1071 171:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;Starting threaded client&quot;</span>)
1072 172:       <span class="ruby-identifier">publisher</span> = <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1073 173:         <span class="ruby-identifier">start_publisher</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">publish_timeout</span>)
1074 174:       <span class="ruby-keyword kw">end</span>
1075 175: 
1076 176:       <span class="ruby-comment cmt"># When the client is threaded we add the publishing timeout to</span>
1077 177:       <span class="ruby-comment cmt"># the agent timeout so that the receiver doesn't time out before</span>
1078 178:       <span class="ruby-comment cmt"># publishing has finished in cases where publish_timeout &gt;= timeout.</span>
1079 179:       <span class="ruby-identifier">total_timeout</span> = <span class="ruby-identifier">publish_timeout</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">timeout</span>
1080 180:       <span class="ruby-identifier">hosts_responded</span> = <span class="ruby-value">0</span>
1081 181: 
1082 182:       <span class="ruby-identifier">receiver</span> = <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1083 183:         <span class="ruby-identifier">hosts_responded</span> = <span class="ruby-identifier">start_receiver</span>(<span class="ruby-identifier">request</span>.<span class="ruby-identifier">requestid</span>, <span class="ruby-identifier">waitfor</span>, <span class="ruby-identifier">total_timeout</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
1084 184:       <span class="ruby-keyword kw">end</span>
1085 185: 
1086 186:       <span class="ruby-identifier">receiver</span>.<span class="ruby-identifier">join</span>
1087 187:       <span class="ruby-identifier">hosts_responded</span>
1088 188:     <span class="ruby-keyword kw">end</span></pre>
1089                                         </div>
1090                                         
1091                                 </div>
1092
1093                                 
1094                         </div>
1095
1096                 
1097                         <div id="unsubscribe-method" class="method-detail ">
1098                                 <a name="M000500"></a>
1099
1100                                 <div class="method-heading">
1101                                 
1102                                         <span class="method-name">unsubscribe</span><span
1103                                                 class="method-args">(agent, type)</span>
1104                                         <span class="method-click-advice">click to toggle source</span>
1105                                 
1106                                 </div>
1107
1108                                 <div class="method-description">
1109                                         
1110                                         <p class="missing-docs">(Not documented)</p>
1111                                         
1112
1113                                         
1114                                         <div class="method-source-code"
1115                                                 id="unsubscribe-source">
1116 <pre>
1117     <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 73</span>
1118 73:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unsubscribe</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">type</span>)
1119 74:       <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@subscriptions</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">agent</span>)
1120 75:         <span class="ruby-identifier">subscription</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">make_subscriptions</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">collective</span>)
1121 76:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Unsubscribing #{type} target for #{agent}&quot;</span>)
1122 77: 
1123 78:         <span class="ruby-constant">Util</span>.<span class="ruby-identifier">unsubscribe</span>(<span class="ruby-identifier">subscription</span>)
1124 79:         <span class="ruby-ivar">@subscriptions</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">agent</span>)
1125 80:       <span class="ruby-keyword kw">end</span>
1126 81:     <span class="ruby-keyword kw">end</span></pre>
1127                                         </div>
1128                                         
1129                                 </div>
1130
1131                                 
1132                         </div>
1133
1134                 
1135                         <div id="unthreaded-req-method" class="method-detail ">
1136                                 <a name="M000504"></a>
1137
1138                                 <div class="method-heading">
1139                                 
1140                                         <span class="method-name">unthreaded_req</span><span
1141                                                 class="method-args">(request, publish_timeout, timeout, waitfor, &block)</span>
1142                                         <span class="method-click-advice">click to toggle source</span>
1143                                 
1144                                 </div>
1145
1146                                 <div class="method-description">
1147                                         
1148                                         <p>
1149 Starts the client receiver and publisher unthreaded. This is the default
1150 client behaviour.
1151 </p>
1152                                         
1153
1154                                         
1155                                         <div class="method-source-code"
1156                                                 id="unthreaded-req-source">
1157 <pre>
1158      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 162</span>
1159 162:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unthreaded_req</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">publish_timeout</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-identifier">waitfor</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
1160 163:       <span class="ruby-identifier">start_publisher</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">publish_timeout</span>)
1161 164:       <span class="ruby-identifier">start_receiver</span>(<span class="ruby-identifier">request</span>.<span class="ruby-identifier">requestid</span>, <span class="ruby-identifier">waitfor</span>, <span class="ruby-identifier">timeout</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
1162 165:     <span class="ruby-keyword kw">end</span></pre>
1163                                         </div>
1164                                         
1165                                 </div>
1166
1167                                 
1168                         </div>
1169
1170                 
1171                         <div id="update-stat-method" class="method-detail ">
1172                                 <a name="M000511"></a>
1173
1174                                 <div class="method-heading">
1175                                 
1176                                         <span class="method-name">update_stat</span><span
1177                                                 class="method-args">(stat, hosts_responded, requestid)</span>
1178                                         <span class="method-click-advice">click to toggle source</span>
1179                                 
1180                                 </div>
1181
1182                                 <div class="method-description">
1183                                         
1184                                         <p class="missing-docs">(Not documented)</p>
1185                                         
1186
1187                                         
1188                                         <div class="method-source-code"
1189                                                 id="update-stat-source">
1190 <pre>
1191      <span class="ruby-comment cmt"># File lib/mcollective/client.rb, line 223</span>
1192 223:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">update_stat</span>(<span class="ruby-identifier">stat</span>, <span class="ruby-identifier">hosts_responded</span>, <span class="ruby-identifier">requestid</span>)
1193 224:       <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:totaltime</span>] = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:starttime</span>]
1194 225:       <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:blocktime</span>] = <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:totaltime</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:discoverytime</span>]
1195 226:       <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:responses</span>] = <span class="ruby-identifier">hosts_responded</span>
1196 227:       <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:noresponsefrom</span>] = []
1197 228:       <span class="ruby-identifier">stat</span>[<span class="ruby-identifier">:requestid</span>] = <span class="ruby-identifier">requestid</span>
1198 229: 
1199 230:       <span class="ruby-ivar">@stats</span> = <span class="ruby-identifier">stat</span>
1200 231:     <span class="ruby-keyword kw">end</span></pre>
1201                                         </div>
1202                                         
1203                                 </div>
1204
1205                                 
1206                         </div>
1207
1208                 
1209                 </div>
1210         
1211
1212         </div>
1213
1214
1215         <div id="rdoc-debugging-section-dump" class="debugging-section">
1216         
1217                 <p>Disabled; run with --debug to generate this.</p>
1218         
1219         </div>
1220
1221         <div id="validator-badges">
1222                 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1223                 <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
1224                         Rdoc Generator</a> 1.1.6</small>.</p>
1225         </div>
1226
1227 </body>
1228 </html>
1229