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">
6 <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8 <title>Class: MCollective::Client</title>
10 <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
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>
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">
31 <li><a href="../lib/mcollective/client_rb.html?TB_iframe=true&height=550&width=785"
32 class="thickbox" title="lib/mcollective/client.rb">lib/mcollective/client.rb</a></li>
41 <div id="class-metadata">
45 <div id="parent-class-section" class="section">
46 <h3 class="section-header">Parent</h3>
48 <p class="link"><a href="../Object.html">Object</a></p>
53 <!-- Namespace Contents -->
56 <!-- Method Quickref -->
58 <div id="method-list-section" class="section">
59 <h3 class="section-header">Methods</h3>
60 <ul class="link-list">
62 <li><a href="#M000494">::new</a></li>
64 <li><a href="#M000495">#collective</a></li>
66 <li><a href="#M000498">#createreq</a></li>
68 <li><a href="#M000496">#disconnect</a></li>
70 <li><a href="#M000502">#discover</a></li>
72 <li><a href="#M000512">#discovered_req</a></li>
74 <li><a href="#M000513">#display_stats</a></li>
76 <li><a href="#M000501">#receive</a></li>
78 <li><a href="#M000503">#req</a></li>
80 <li><a href="#M000497">#sendreq</a></li>
82 <li><a href="#M000509">#start_publisher</a></li>
84 <li><a href="#M000510">#start_receiver</a></li>
86 <li><a href="#M000499">#subscribe</a></li>
88 <li><a href="#M000505">#threaded_req</a></li>
90 <li><a href="#M000500">#unsubscribe</a></li>
92 <li><a href="#M000504">#unthreaded_req</a></li>
94 <li><a href="#M000511">#update_stat</a></li>
100 <!-- Included Modules -->
104 <div id="project-metadata">
107 <div id="fileindex-section" class="section project-section">
108 <h3 class="section-header">Files</h3>
111 <li class="file"><a href="../COPYING.html">COPYING</a></li>
113 <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
115 <li class="file"><a href="../README.html">README</a></li>
117 <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
119 <li class="file"><a href="../etc/client_cfg_dist.html">client.cfg.dist</a></li>
121 <li class="file"><a href="../etc/data-help_erb.html">data-help.erb</a></li>
123 <li class="file"><a href="../etc/discovery-help_erb.html">discovery-help.erb</a></li>
125 <li class="file"><a href="../etc/facts_yaml_dist.html">facts.yaml.dist</a></li>
127 <li class="file"><a href="../etc/metadata-help_erb.html">metadata-help.erb</a></li>
129 <li class="file"><a href="../etc/msg-help_erb.html">msg-help.erb</a></li>
131 <li class="file"><a href="../etc/rpc-help_erb.html">rpc-help.erb</a></li>
133 <li class="file"><a href="../etc/server_cfg_dist.html">server.cfg.dist</a></li>
135 <li class="file"><a href="../etc/ssl/PLACEHOLDER.html">PLACEHOLDER</a></li>
137 <li class="file"><a href="../etc/ssl/clients/PLACEHOLDER.html">PLACEHOLDER</a></li>
139 <li class="file"><a href="../lib/mcollective/generators/templates/action_snippet_erb.html">action_snippet.erb</a></li>
141 <li class="file"><a href="../lib/mcollective/generators/templates/data_input_snippet_erb.html">data_input_snippet.erb</a></li>
143 <li class="file"><a href="../lib/mcollective/generators/templates/ddl_erb.html">ddl.erb</a></li>
145 <li class="file"><a href="../lib/mcollective/generators/templates/plugin_erb.html">plugin.erb</a></li>
147 <li class="file"><a href="../lib/mcollective/locales/en_yml.html">en.yml</a></li>
149 <li class="file"><a href="../mcollective_init.html">mcollective.init</a></li>
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">
162 <legend>Quicksearch</legend>
163 <input type="text" name="quicksearch" value=""
164 class="quicksearch-field" />
168 <ul class="link-list">
170 <li><a href="../MCollective.html">MCollective</a></li>
172 <li><a href="../MCollective/Agent.html">MCollective::Agent</a></li>
174 <li><a href="../MCollective/Agents.html">MCollective::Agents</a></li>
176 <li><a href="../MCollective/Aggregate.html">MCollective::Aggregate</a></li>
178 <li><a href="../MCollective/Aggregate/Base.html">MCollective::Aggregate::Base</a></li>
180 <li><a href="../MCollective/Aggregate/Result.html">MCollective::Aggregate::Result</a></li>
182 <li><a href="../MCollective/Aggregate/Result/Base.html">MCollective::Aggregate::Result::Base</a></li>
184 <li><a href="../MCollective/Aggregate/Result/CollectionResult.html">MCollective::Aggregate::Result::CollectionResult</a></li>
186 <li><a href="../MCollective/Aggregate/Result/NumericResult.html">MCollective::Aggregate::Result::NumericResult</a></li>
188 <li><a href="../MCollective/Application.html">MCollective::Application</a></li>
190 <li><a href="../MCollective/Applications.html">MCollective::Applications</a></li>
192 <li><a href="../MCollective/Cache.html">MCollective::Cache</a></li>
194 <li><a href="../MCollective/Client.html">MCollective::Client</a></li>
196 <li><a href="../MCollective/CodedError.html">MCollective::CodedError</a></li>
198 <li><a href="../MCollective/Config.html">MCollective::Config</a></li>
200 <li><a href="../MCollective/Connector.html">MCollective::Connector</a></li>
202 <li><a href="../MCollective/Connector/Base.html">MCollective::Connector::Base</a></li>
204 <li><a href="../MCollective/DDL.html">MCollective::DDL</a></li>
206 <li><a href="../MCollective/DDL/AgentDDL.html">MCollective::DDL::AgentDDL</a></li>
208 <li><a href="../MCollective/DDL/Base.html">MCollective::DDL::Base</a></li>
210 <li><a href="../MCollective/DDL/DataDDL.html">MCollective::DDL::DataDDL</a></li>
212 <li><a href="../MCollective/DDL/DiscoveryDDL.html">MCollective::DDL::DiscoveryDDL</a></li>
214 <li><a href="../MCollective/DDL/ValidatorDDL.html">MCollective::DDL::ValidatorDDL</a></li>
216 <li><a href="../MCollective/DDLValidationError.html">MCollective::DDLValidationError</a></li>
218 <li><a href="../MCollective/Data.html">MCollective::Data</a></li>
220 <li><a href="../MCollective/Data/Base.html">MCollective::Data::Base</a></li>
222 <li><a href="../MCollective/Data/Result.html">MCollective::Data::Result</a></li>
224 <li><a href="../MCollective/Discovery.html">MCollective::Discovery</a></li>
226 <li><a href="../MCollective/Facts.html">MCollective::Facts</a></li>
228 <li><a href="../MCollective/Facts/Base.html">MCollective::Facts::Base</a></li>
230 <li><a href="../MCollective/Generators.html">MCollective::Generators</a></li>
232 <li><a href="../MCollective/Generators/AgentGenerator.html">MCollective::Generators::AgentGenerator</a></li>
234 <li><a href="../MCollective/Generators/Base.html">MCollective::Generators::Base</a></li>
236 <li><a href="../MCollective/Generators/DataGenerator.html">MCollective::Generators::DataGenerator</a></li>
238 <li><a href="../MCollective/InvalidRPCData.html">MCollective::InvalidRPCData</a></li>
240 <li><a href="../MCollective/Log.html">MCollective::Log</a></li>
242 <li><a href="../MCollective/Logger.html">MCollective::Logger</a></li>
244 <li><a href="../MCollective/Logger/Base.html">MCollective::Logger::Base</a></li>
246 <li><a href="../MCollective/Logger/Console_logger.html">MCollective::Logger::Console_logger</a></li>
248 <li><a href="../MCollective/Logger/File_logger.html">MCollective::Logger::File_logger</a></li>
250 <li><a href="../MCollective/Logger/Syslog_logger.html">MCollective::Logger::Syslog_logger</a></li>
252 <li><a href="../MCollective/Matcher.html">MCollective::Matcher</a></li>
254 <li><a href="../MCollective/Matcher/Parser.html">MCollective::Matcher::Parser</a></li>
256 <li><a href="../MCollective/Matcher/Scanner.html">MCollective::Matcher::Scanner</a></li>
258 <li><a href="../MCollective/Message.html">MCollective::Message</a></li>
260 <li><a href="../MCollective/MissingRPCData.html">MCollective::MissingRPCData</a></li>
262 <li><a href="../MCollective/MsgDoesNotMatchRequestID.html">MCollective::MsgDoesNotMatchRequestID</a></li>
264 <li><a href="../MCollective/MsgTTLExpired.html">MCollective::MsgTTLExpired</a></li>
266 <li><a href="../MCollective/NotTargettedAtUs.html">MCollective::NotTargettedAtUs</a></li>
268 <li><a href="../MCollective/Optionparser.html">MCollective::Optionparser</a></li>
270 <li><a href="../MCollective/PluginManager.html">MCollective::PluginManager</a></li>
272 <li><a href="../MCollective/PluginPackager.html">MCollective::PluginPackager</a></li>
274 <li><a href="../MCollective/PluginPackager/AgentDefinition.html">MCollective::PluginPackager::AgentDefinition</a></li>
276 <li><a href="../MCollective/PluginPackager/StandardDefinition.html">MCollective::PluginPackager::StandardDefinition</a></li>
278 <li><a href="../MCollective/RPC.html">MCollective::RPC</a></li>
280 <li><a href="../MCollective/RPC/ActionRunner.html">MCollective::RPC::ActionRunner</a></li>
282 <li><a href="../MCollective/RPC/Agent.html">MCollective::RPC::Agent</a></li>
284 <li><a href="../MCollective/RPC/Audit.html">MCollective::RPC::Audit</a></li>
286 <li><a href="../MCollective/RPC/Client.html">MCollective::RPC::Client</a></li>
288 <li><a href="../MCollective/RPC/Helpers.html">MCollective::RPC::Helpers</a></li>
290 <li><a href="../MCollective/RPC/Progress.html">MCollective::RPC::Progress</a></li>
292 <li><a href="../MCollective/RPC/Reply.html">MCollective::RPC::Reply</a></li>
294 <li><a href="../MCollective/RPC/Request.html">MCollective::RPC::Request</a></li>
296 <li><a href="../MCollective/RPC/Result.html">MCollective::RPC::Result</a></li>
298 <li><a href="../MCollective/RPC/Stats.html">MCollective::RPC::Stats</a></li>
300 <li><a href="../MCollective/RPCAborted.html">MCollective::RPCAborted</a></li>
302 <li><a href="../MCollective/RPCError.html">MCollective::RPCError</a></li>
304 <li><a href="../MCollective/Registration.html">MCollective::Registration</a></li>
306 <li><a href="../MCollective/Registration/Base.html">MCollective::Registration::Base</a></li>
308 <li><a href="../MCollective/Runner.html">MCollective::Runner</a></li>
310 <li><a href="../MCollective/RunnerStats.html">MCollective::RunnerStats</a></li>
312 <li><a href="../MCollective/SSL.html">MCollective::SSL</a></li>
314 <li><a href="../MCollective/Security.html">MCollective::Security</a></li>
316 <li><a href="../MCollective/Security/Base.html">MCollective::Security::Base</a></li>
318 <li><a href="../MCollective/SecurityValidationFailed.html">MCollective::SecurityValidationFailed</a></li>
320 <li><a href="../MCollective/Shell.html">MCollective::Shell</a></li>
322 <li><a href="../MCollective/Translatable.html">MCollective::Translatable</a></li>
324 <li><a href="../MCollective/UnixDaemon.html">MCollective::UnixDaemon</a></li>
326 <li><a href="../MCollective/UnknownRPCAction.html">MCollective::UnknownRPCAction</a></li>
328 <li><a href="../MCollective/UnknownRPCError.html">MCollective::UnknownRPCError</a></li>
330 <li><a href="../MCollective/Util.html">MCollective::Util</a></li>
332 <li><a href="../MCollective/Validator.html">MCollective::Validator</a></li>
334 <li><a href="../MCollective/ValidatorError.html">MCollective::ValidatorError</a></li>
336 <li><a href="../MCollective/WindowsDaemon.html">MCollective::WindowsDaemon</a></li>
338 <li><a href="../Array.html">Array</a></li>
340 <li><a href="../Dir.html">Dir</a></li>
342 <li><a href="../Object.html">Object</a></li>
344 <li><a href="../String.html">String</a></li>
346 <li><a href="../Symbol.html">Symbol</a></li>
349 <div id="no-class-search-results" style="display: none;">No matching classes.</div>
356 <div id="documentation">
357 <h1 class="class">MCollective::Client</h1>
359 <div id="description">
361 Helpers for writing clients that can talk to agents, do discovery and so
372 <div id="attribute-method-details" class="method-section section">
373 <h3 class="section-header">Attributes</h3>
376 <div id="options-attribute-method" class="method-detail">
377 <a name="options"></a>
379 <a name="options="></a>
381 <div class="method-heading attribute-method-heading">
382 <span class="method-name">options</span><span
383 class="attribute-access-type">[RW]</span>
386 <div class="method-description">
388 <p class="missing-docs">(Not documented)</p>
393 <div id="stats-attribute-method" class="method-detail">
396 <a name="stats="></a>
398 <div class="method-heading attribute-method-heading">
399 <span class="method-name">stats</span><span
400 class="attribute-access-type">[RW]</span>
403 <div class="method-description">
405 <p class="missing-docs">(Not documented)</p>
410 <div id="discoverer-attribute-method" class="method-detail">
411 <a name="discoverer"></a>
413 <a name="discoverer="></a>
415 <div class="method-heading attribute-method-heading">
416 <span class="method-name">discoverer</span><span
417 class="attribute-access-type">[RW]</span>
420 <div class="method-description">
422 <p class="missing-docs">(Not documented)</p>
432 <div id="public-class-method-details" class="method-section section">
433 <h3 class="section-header">Public Class Methods</h3>
436 <div id="new-method" class="method-detail ">
437 <a name="M000494"></a>
439 <div class="method-heading">
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>
447 <div class="method-description">
449 <p class="missing-docs">(Not documented)</p>
453 <div class="method-source-code"
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>
461 10: <span class="ruby-ivar">@connection</span> = <span class="ruby-constant">PluginManager</span>[<span class="ruby-value str">"connector_plugin"</span>]
462 11: <span class="ruby-ivar">@security</span> = <span class="ruby-constant">PluginManager</span>[<span class="ruby-value str">"security_plugin"</span>]
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> = {}
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>
481 <div id="public-instance-method-details" class="method-section section">
482 <h3 class="section-header">Public Instance Methods</h3>
485 <div id="collective-method" class="method-detail ">
486 <a name="M000495"></a>
488 <div class="method-heading">
490 <span class="method-name">collective</span><span
491 class="method-args">()</span>
492 <span class="method-click-advice">click to toggle source</span>
496 <div class="method-description">
499 Returns the configured main collective if no specific collective is
505 <div class="method-source-code"
506 id="collective-source">
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>
524 <div id="createreq-method" class="method-detail ">
525 <a name="M000498"></a>
527 <div class="method-heading">
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>
535 <div class="method-description">
537 <p class="missing-docs">(Not documented)</p>
541 <div class="method-source-code"
542 id="createreq-source">
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">></span> <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:request</span>, <span class="ruby-identifier">:collective</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">collective</span>, <span class="ruby-identifier">:filter</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">filter</span>, <span class="ruby-identifier">:ttl</span> =<span class="ruby-operator">></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>
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>
567 <div id="disconnect-method" class="method-detail ">
568 <a name="M000496"></a>
570 <div class="method-heading">
572 <span class="method-name">disconnect</span><span
573 class="method-args">()</span>
574 <span class="method-click-advice">click to toggle source</span>
578 <div class="method-description">
581 Disconnects cleanly from the middleware
586 <div class="method-source-code"
587 id="disconnect-source">
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">"Disconnecting from the middleware"</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>
602 <div id="discover-method" class="method-detail ">
603 <a name="M000502"></a>
605 <div class="method-heading">
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>
613 <div class="method-description">
616 Performs a discovery of nodes matching the filter passed returns an array
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
626 <div class="method-source-code"
627 id="discover-source">
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>
641 <div id="discovered-req-method" class="method-detail ">
642 <a name="M000512"></a>
644 <div class="method-heading">
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>
652 <div class="method-description">
654 <p class="missing-docs">(Not documented)</p>
658 <div class="method-source-code"
659 id="discovered-req-source">
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">"Client#discovered_req has been removed, please port your agent and client to the SimpleRPC framework"</span>
664 235: <span class="ruby-keyword kw">end</span></pre>
673 <div id="display-stats-method" class="method-detail ">
674 <a name="M000513"></a>
676 <div class="method-heading">
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>
684 <div class="method-description">
687 Prints out the stats returns from req and <a
688 href="Client.html#M000512">discovered_req</a> in a nice way
693 <div class="method-source-code"
694 id="display-stats-source">
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">"stomp call summary"</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>
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">"\n---- #{caption} ----"</span>)
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">" Nodes: #{stats[:discovered]} / #{stats[:responses]}"</span>)
705 246: <span class="ruby-keyword kw">else</span>
706 247: <span class="ruby-identifier">puts</span>(<span class="ruby-node">" Nodes: #{stats[:responses]}"</span>)
707 248: <span class="ruby-keyword kw">end</span>
709 250: <span class="ruby-identifier">printf</span>(<span class="ruby-value str">" Start Time: %s\n"</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">" Discovery Time: %.2fms\n"</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">" Agent Time: %.2fms\n"</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">" Total Time: %.2fms\n"</span>, <span class="ruby-identifier">stats</span>[<span class="ruby-identifier">:totaltime</span>] <span class="ruby-operator">*</span> <span class="ruby-value">1000</span>)
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">"\nFinished processing %d / %d hosts in %.2f ms\n\n"</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">"\nFinished processing %d hosts in %.2f ms\n\n"</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>
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">></span> <span class="ruby-value">0</span>
723 264: <span class="ruby-identifier">puts</span>(<span class="ruby-value str">"\nNo response from:\n"</span>)
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">"%30s"</span>, <span class="ruby-identifier">c</span>)
728 269: <span class="ruby-keyword kw">end</span>
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>
741 <div id="receive-method" class="method-detail ">
742 <a name="M000501"></a>
744 <div class="method-heading">
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>
752 <div class="method-description">
755 Blocking call that waits for ever for a message to arrive.
758 If you give it a requestid this means you’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.
766 <div class="method-source-code"
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>
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>
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">"Message reqid #{reply.requestid} does not match our reqid #{requestid}"</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">></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">"Ignoring a message that did not pass security validations"</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">></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">"Ignoring a message for some other client : #{e.message}"</span>)
787 105: <span class="ruby-keyword kw">retry</span>
788 106: <span class="ruby-keyword kw">end</span>
790 108: <span class="ruby-identifier">reply</span>
791 109: <span class="ruby-keyword kw">end</span></pre>
800 <div id="req-method" class="method-detail ">
801 <a name="M000503"></a>
803 <div class="method-heading">
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>
811 <div class="method-description">
814 Send a request, performs the passed block for each response
817 times = req(“status”, “mcollectived”, options,
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>
834 <div class="method-source-code"
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">&</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>
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">></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">></span> <span class="ruby-value">0</span>, <span class="ruby-identifier">:blocktime</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>, <span class="ruby-identifier">:totaltime</span> =<span class="ruby-operator">></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>
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">&</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">&</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">></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>
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>
876 <div id="sendreq-method" class="method-detail ">
877 <a name="M000497"></a>
879 <div class="method-heading">
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>
887 <div class="method-description">
890 Sends a request and returns the generated request id, doesn’t wait
891 for responses and doesn’t execute any passed in code blocks for
897 <div class="method-source-code"
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>)
904 42: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">"Sending request #{request.requestid} to the #{request.agent} agent with ttl #{request.ttl} in collective #{request.collective}"</span>)
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>
917 <div id="start-publisher-method" class="method-detail ">
918 <a name="M000509"></a>
920 <div class="method-heading">
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>
928 <div class="method-description">
931 Starts the request publishing routine
936 <div class="method-source-code"
937 id="start-publisher-source">
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">"Starting publishing with publish timeout of #{publish_timeout}"</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">"Sending request #{request.requestid} to the #{request.agent} agent with ttl #{request.ttl} in collective #{request.collective}"</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">></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">"Could not publish all messages. Publishing timed out."</span>)
949 200: <span class="ruby-keyword kw">end</span>
950 201: <span class="ruby-keyword kw">end</span></pre>
959 <div id="start-receiver-method" class="method-detail ">
960 <a name="M000510"></a>
962 <div class="method-heading">
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>
970 <div class="method-description">
973 Starts the response receiver routine Expected to return the amount of
979 <div class="method-source-code"
980 id="start-receiver-source">
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">&</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">"Starting response receiver with timeout of #{timeout}"</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"><</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">></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">"Could not receive all responses. Expected : #{waitfor}. Received : #{hosts_responded}"</span>)
996 218: <span class="ruby-keyword kw">end</span>
998 220: <span class="ruby-identifier">hosts_responded</span>
999 221: <span class="ruby-keyword kw">end</span></pre>
1008 <div id="subscribe-method" class="method-detail ">
1009 <a name="M000499"></a>
1011 <div class="method-heading">
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>
1019 <div class="method-description">
1021 <p class="missing-docs">(Not documented)</p>
1025 <div class="method-source-code"
1026 id="subscribe-source">
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">"Subscribing to #{type} target for agent #{agent}"</span>)
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>
1046 <div id="threaded-req-method" class="method-detail ">
1047 <a name="M000505"></a>
1049 <div class="method-heading">
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>
1057 <div class="method-description">
1060 Starts the client receiver and publisher in threads. This is activated when
1061 the ‘threader_client’ configuration option is set.
1066 <div class="method-source-code"
1067 id="threaded-req-source">
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">&</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">"Starting threaded client"</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>
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 >= 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>
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">&</span><span class="ruby-identifier">block</span>)
1084 184: <span class="ruby-keyword kw">end</span>
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>
1097 <div id="unsubscribe-method" class="method-detail ">
1098 <a name="M000500"></a>
1100 <div class="method-heading">
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>
1108 <div class="method-description">
1110 <p class="missing-docs">(Not documented)</p>
1114 <div class="method-source-code"
1115 id="unsubscribe-source">
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">"Unsubscribing #{type} target for #{agent}"</span>)
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>
1135 <div id="unthreaded-req-method" class="method-detail ">
1136 <a name="M000504"></a>
1138 <div class="method-heading">
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>
1146 <div class="method-description">
1149 Starts the client receiver and publisher unthreaded. This is the default
1155 <div class="method-source-code"
1156 id="unthreaded-req-source">
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">&</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">&</span><span class="ruby-identifier">block</span>)
1162 165: <span class="ruby-keyword kw">end</span></pre>
1171 <div id="update-stat-method" class="method-detail ">
1172 <a name="M000511"></a>
1174 <div class="method-heading">
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>
1182 <div class="method-description">
1184 <p class="missing-docs">(Not documented)</p>
1188 <div class="method-source-code"
1189 id="update-stat-source">
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>
1199 230: <span class="ruby-ivar">@stats</span> = <span class="ruby-identifier">stat</span>
1200 231: <span class="ruby-keyword kw">end</span></pre>
1215 <div id="rdoc-debugging-section-dump" class="debugging-section">
1217 <p>Disabled; run with --debug to generate this.</p>
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>