aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--_sources/protocol.txt6
-rw-r--r--api.html2
-rw-r--r--contributing.html4
-rw-r--r--exceptions.html7
-rw-r--r--genindex.html35
-rw-r--r--jobmanager.html5
-rw-r--r--objects.invbin828 -> 880 bytes
-rw-r--r--protocol.html2
-rw-r--r--receiver.html12
-rw-r--r--router.html63
-rw-r--r--searchindex.js2
-rw-r--r--sender.html8
-rw-r--r--utils.html11
-rw-r--r--utils/classes.html20
-rw-r--r--utils/messages.html20
-rw-r--r--utils/timeutils.html12
16 files changed, 150 insertions, 59 deletions
diff --git a/_sources/protocol.txt b/_sources/protocol.txt
index 86491dc..e468b06 100644
--- a/_sources/protocol.txt
+++ b/_sources/protocol.txt
@@ -5,7 +5,7 @@ EventMQ Protocol Specification
5 5
6Goals 6Goals
7===== 7=====
8The EventMQ Protocol (eMQP) defines a reliable service-oriented request-reply and pub-sub dialog between a set of clients, a broker, and a set of workers. This goal is to 8The EventMQ Protocol (eMQP) defines a reliable service-oriented request-reply and pub-sub dialog between a set of clients, a broker, and a set of workers. This goal is to
9 9
10The goals are to: 10The goals are to:
11 11
@@ -13,7 +13,7 @@ The goals are to:
13 * Allow requests to be routed to workers by an abstracted service name. 13 * Allow requests to be routed to workers by an abstracted service name.
14 * Detect disconnected peers through heartbeating. 14 * Detect disconnected peers through heartbeating.
15 * Allow for message tracing and debugging. 15 * Allow for message tracing and debugging.
16 16
17 17
18License 18License
19======= 19=======
@@ -69,7 +69,7 @@ FRAME Value Description
69====== ============== =========== 69====== ============== ===========
700 _EMPTY_ leave empty 700 _EMPTY_ leave empty
711 eMQP/1.0 Protocol version 711 eMQP/1.0 Protocol version
722 READY command 722 REQUEST command
733 _MSGID_ A unique id for the msg 733 _MSGID_ A unique id for the msg
744 _QUEUE_NAME_ the name of the queue the worker belongs to 744 _QUEUE_NAME_ the name of the queue the worker belongs to
755 _HEADERS_ dictionary of headers. can be an empty set 755 _HEADERS_ dictionary of headers. can be an empty set
diff --git a/api.html b/api.html
index efffff6..3ea0a56 100644
--- a/api.html
+++ b/api.html
@@ -150,7 +150,7 @@
150<li class="toctree-l1"><a class="reference internal" href="utils.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul> 150<li class="toctree-l1"><a class="reference internal" href="utils.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul>
151<li class="toctree-l2"><a class="reference internal" href="utils/classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 151<li class="toctree-l2"><a class="reference internal" href="utils/classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
152<li class="toctree-l2"><a class="reference internal" href="utils/messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 152<li class="toctree-l2"><a class="reference internal" href="utils/messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
153<li class="toctree-l2"><a class="reference internal" href="utils/timeutils.html"><code class="docutils literal"><span class="pre">time</span></code> &#8211; Time Utilites</a></li> 153<li class="toctree-l2"><a class="reference internal" href="utils/timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li>
154</ul> 154</ul>
155</li> 155</li>
156</ul> 156</ul>
diff --git a/contributing.html b/contributing.html
index e618bf3..79d9616 100644
--- a/contributing.html
+++ b/contributing.html
@@ -32,7 +32,7 @@
32 32
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/> 33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34 <link rel="next" title="EventMQ Protocol Specification" href="protocol.html"/> 34 <link rel="next" title="EventMQ Protocol Specification" href="protocol.html"/>
35 <link rel="prev" title="messagesMessage Utilities" href="utils/messages.html"/> 35 <link rel="prev" title="timeutils – Time Utilites" href="utils/timeutils.html"/>
36 36
37 37
38 <script src="_static/js/modernizr.min.js"></script> 38 <script src="_static/js/modernizr.min.js"></script>
@@ -160,7 +160,7 @@
160 <a href="protocol.html" class="btn btn-neutral float-right" title="EventMQ Protocol Specification" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a> 160 <a href="protocol.html" class="btn btn-neutral float-right" title="EventMQ Protocol Specification" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
161 161
162 162
163 <a href="utils/messages.html" class="btn btn-neutral" title="messages – Message Utilities" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a> 163 <a href="utils/timeutils.html" class="btn btn-neutral" title="timeutils – Time Utilites" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
164 164
165 </div> 165 </div>
166 166
diff --git a/exceptions.html b/exceptions.html
index 54ea13a..1aa304f 100644
--- a/exceptions.html
+++ b/exceptions.html
@@ -162,6 +162,13 @@ be subclasses of <a class="reference internal" href="#eventmq.exceptions.EventMQ
162<dd><p>Raised when there is a problem with the structure of the message</p> 162<dd><p>Raised when there is a problem with the structure of the message</p>
163</dd></dl> 163</dd></dl>
164 164
165<dl class="exception">
166<dt id="eventmq.exceptions.PeerGoneAwayError">
167<em class="property">exception </em><code class="descclassname">eventmq.exceptions.</code><code class="descname">PeerGoneAwayError</code><a class="headerlink" href="#eventmq.exceptions.PeerGoneAwayError" title="Permalink to this definition">¶</a></dt>
168<dd><p>Raised when attempting to contact a peer that no longer exists (i.e. when
169sending a message to it)</p>
170</dd></dl>
171
165</div> 172</div>
166 173
167 174
diff --git a/genindex.html b/genindex.html
index 5085fff..72ddf99 100644
--- a/genindex.html
+++ b/genindex.html
@@ -130,6 +130,7 @@
130 130
131<div class="genindex-jumpbox"> 131<div class="genindex-jumpbox">
132 <a href="#_"><strong>_</strong></a> 132 <a href="#_"><strong>_</strong></a>
133 | <a href="#A"><strong>A</strong></a>
133 | <a href="#C"><strong>C</strong></a> 134 | <a href="#C"><strong>C</strong></a>
134 | <a href="#E"><strong>E</strong></a> 135 | <a href="#E"><strong>E</strong></a>
135 | <a href="#G"><strong>G</strong></a> 136 | <a href="#G"><strong>G</strong></a>
@@ -192,10 +193,26 @@
192 </dl></td> 193 </dl></td>
193</tr></table> 194</tr></table>
194 195
196<h2 id="A">A</h2>
197<table style="width: 100%" class="indextable genindextable"><tr>
198 <td style="width: 33%" valign="top"><dl>
199
200 <dt><a href="router.html#eventmq.router.Router.add_worker">add_worker() (eventmq.router.Router method)</a>
201 </dt>
202
203 </dl></td>
204</tr></table>
205
195<h2 id="C">C</h2> 206<h2 id="C">C</h2>
196<table style="width: 100%" class="indextable genindextable"><tr> 207<table style="width: 100%" class="indextable genindextable"><tr>
197 <td style="width: 33%" valign="top"><dl> 208 <td style="width: 33%" valign="top"><dl>
198 209
210 <dt><a href="router.html#eventmq.router.Router.clean_up_dead_workers">clean_up_dead_workers() (eventmq.router.Router method)</a>
211 </dt>
212
213 </dl></td>
214 <td style="width: 33%" valign="top"><dl>
215
199 <dt><a href="receiver.html#eventmq.receiver.Receiver.connect">connect() (eventmq.receiver.Receiver method)</a> 216 <dt><a href="receiver.html#eventmq.receiver.Receiver.connect">connect() (eventmq.receiver.Receiver method)</a>
200 </dt> 217 </dt>
201 218
@@ -371,14 +388,10 @@
371 </dt> 388 </dt>
372 389
373 </dl></dd> 390 </dl></dd>
374
375 <dt><a href="router.html#eventmq.router.Router.on_inform">on_inform() (eventmq.router.Router method)</a>
376 </dt>
377
378 </dl></td> 391 </dl></td>
379 <td style="width: 33%" valign="top"><dl> 392 <td style="width: 33%" valign="top"><dl>
380 393
381 <dt><a href="router.html#eventmq.router.Router.on_receive_reply">on_receive_reply() (eventmq.router.Router method)</a> 394 <dt><a href="router.html#eventmq.router.Router.on_inform">on_inform() (eventmq.router.Router method)</a>
382 </dt> 395 </dt>
383 396
384 397
@@ -400,6 +413,10 @@
400 </dt> 413 </dt>
401 414
402 415
416 <dt><a href="exceptions.html#eventmq.exceptions.PeerGoneAwayError">PeerGoneAwayError</a>
417 </dt>
418
419
403 <dt><a href="poller.html#eventmq.poller.Poller.poll">poll() (eventmq.poller.Poller method)</a> 420 <dt><a href="poller.html#eventmq.poller.Poller.poll">poll() (eventmq.poller.Poller method)</a>
404 </dt> 421 </dt>
405 422
@@ -413,6 +430,10 @@
413 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.process_message">process_message() (eventmq.jobmanager.JobManager method)</a> 430 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.process_message">process_message() (eventmq.jobmanager.JobManager method)</a>
414 </dt> 431 </dt>
415 432
433
434 <dt><a href="router.html#eventmq.router.Router.process_worker_message">process_worker_message() (eventmq.router.Router method)</a>
435 </dt>
436
416 </dl></td> 437 </dl></td>
417</tr></table> 438</tr></table>
418 439
@@ -474,6 +495,10 @@
474<table style="width: 100%" class="indextable genindextable"><tr> 495<table style="width: 100%" class="indextable genindextable"><tr>
475 <td style="width: 33%" valign="top"><dl> 496 <td style="width: 33%" valign="top"><dl>
476 497
498 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.seconds_until">seconds_until() (in module eventmq.utils.timeutils)</a>
499 </dt>
500
501
477 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send">send() (eventmq.utils.classes.ZMQSendMixin method)</a> 502 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send">send() (eventmq.utils.classes.ZMQSendMixin method)</a>
478 </dt> 503 </dt>
479 504
diff --git a/jobmanager.html b/jobmanager.html
index d5982e8..5f3da63 100644
--- a/jobmanager.html
+++ b/jobmanager.html
@@ -176,7 +176,10 @@ generated.</td>
176<dl class="method"> 176<dl class="method">
177<dt id="eventmq.jobmanager.JobManager.on_heartbeat"> 177<dt id="eventmq.jobmanager.JobManager.on_heartbeat">
178<code class="descname">on_heartbeat</code><span class="sig-paren">(</span><em>msgid</em>, <em>message</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.on_heartbeat" title="Permalink to this definition">¶</a></dt> 178<code class="descname">on_heartbeat</code><span class="sig-paren">(</span><em>msgid</em>, <em>message</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.on_heartbeat" title="Permalink to this definition">¶</a></dt>
179<dd></dd></dl> 179<dd><p>a placeholder for a noop command. The actual &#8216;logic&#8217; for HEARTBEAT is
180in <code class="xref py py-meth docutils literal"><span class="pre">self.process_message()</span></code> as every message is counted as a
181HEARTBEAT</p>
182</dd></dl>
180 183
181<dl class="method"> 184<dl class="method">
182<dt id="eventmq.jobmanager.JobManager.process_message"> 185<dt id="eventmq.jobmanager.JobManager.process_message">
diff --git a/objects.inv b/objects.inv
index cdb69ba..5094e55 100644
--- a/objects.inv
+++ b/objects.inv
Binary files differ
diff --git a/protocol.html b/protocol.html
index f73208b..1aff716 100644
--- a/protocol.html
+++ b/protocol.html
@@ -255,7 +255,7 @@
255<td>Protocol version</td> 255<td>Protocol version</td>
256</tr> 256</tr>
257<tr class="row-even"><td>2</td> 257<tr class="row-even"><td>2</td>
258<td>READY</td> 258<td>REQUEST</td>
259<td>command</td> 259<td>command</td>
260</tr> 260</tr>
261<tr class="row-odd"><td>3</td> 261<tr class="row-odd"><td>3</td>
diff --git a/receiver.html b/receiver.html
index db2bf61..2f53114 100644
--- a/receiver.html
+++ b/receiver.html
@@ -147,11 +147,6 @@
147<dt id="eventmq.receiver.Receiver"> 147<dt id="eventmq.receiver.Receiver">
148<em class="property">class </em><code class="descclassname">eventmq.receiver.</code><code class="descname">Receiver</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.receiver.Receiver" title="Permalink to this definition">¶</a></dt> 148<em class="property">class </em><code class="descclassname">eventmq.receiver.</code><code class="descname">Receiver</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.receiver.Receiver" title="Permalink to this definition">¶</a></dt>
149<dd><p>Receives messages and pass them to a on_recv.</p> 149<dd><p>Receives messages and pass them to a on_recv.</p>
150<div class="admonition note">
151<p class="first admonition-title">Note</p>
152<p class="last">Polling with this reciever is currently only available via an eventloop
153(<code class="xref py py-mod docutils literal"><span class="pre">zmq.eventloop</span></code>).</p>
154</div>
155<dl class="attribute"> 150<dl class="attribute">
156<dt id="eventmq.receiver.Receiver.name"> 151<dt id="eventmq.receiver.Receiver.name">
157<code class="descname">name</code><a class="headerlink" href="#eventmq.receiver.Receiver.name" title="Permalink to this definition">¶</a></dt> 152<code class="descname">name</code><a class="headerlink" href="#eventmq.receiver.Receiver.name" title="Permalink to this definition">¶</a></dt>
@@ -167,8 +162,7 @@
167<dl class="attribute"> 162<dl class="attribute">
168<dt id="eventmq.receiver.Receiver.zsocket"> 163<dt id="eventmq.receiver.Receiver.zsocket">
169<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.receiver.Receiver.zsocket" title="Permalink to this definition">¶</a></dt> 164<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.receiver.Receiver.zsocket" title="Permalink to this definition">¶</a></dt>
170<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a> &#8211; socket wrapped up in a 165<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a></p>
171<code class="xref py py-class docutils literal"><span class="pre">zmqstream.ZMQStream</span></code></p>
172</dd></dl> 166</dd></dl>
173 167
174<dl class="method"> 168<dl class="method">
@@ -189,10 +183,6 @@ generated</li>
189socket</li> 183socket</li>
190<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REP</span></code> or 184<li><strong>socket</strong> (<a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a>) &#8211; Should be one of <code class="xref py py-attr docutils literal"><span class="pre">zmq.REP</span></code> or
191<code class="xref py py-attr docutils literal"><span class="pre">zmq.ROUTER</span></code>. By default a <cite>ROUTER</cite> is used</li> 185<code class="xref py py-attr docutils literal"><span class="pre">zmq.ROUTER</span></code>. By default a <cite>ROUTER</cite> is used</li>
192<li><strong>skip_zmqstream</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)"><em>bool</em></a>) &#8211; If set to true, skip creating the zmqstream
193socket. Callable is unused and optional when this is True</li>
194<li><strong>on_recv</strong> &#8211; REQUIRED for zmqstream mode. A function or method to call
195when a message is received</li>
196</ul> 186</ul>
197</td> 187</td>
198</tr> 188</tr>
diff --git a/router.html b/router.html
index 8c8c96b..a98b4c3 100644
--- a/router.html
+++ b/router.html
@@ -147,11 +147,38 @@
147<dt id="eventmq.router.Router"> 147<dt id="eventmq.router.Router">
148<em class="property">class </em><code class="descclassname">eventmq.router.</code><code class="descname">Router</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router" title="Permalink to this definition">¶</a></dt> 148<em class="property">class </em><code class="descclassname">eventmq.router.</code><code class="descname">Router</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router" title="Permalink to this definition">¶</a></dt>
149<dd><p>A simple router of messages</p> 149<dd><p>A simple router of messages</p>
150<p>This router uses tornado&#8217;s eventloop.</p> 150<dl class="method">
151<dt id="eventmq.router.Router.add_worker">
152<code class="descname">add_worker</code><span class="sig-paren">(</span><em>id</em>, <em>queues=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.add_worker" title="Permalink to this definition">¶</a></dt>
153<dd><p>Adds a worker to worker queues</p>
154<table class="docutils field-list" frame="void" rules="none">
155<col class="field-name" />
156<col class="field-body" />
157<tbody valign="top">
158<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
159<li><strong>worker_id</strong> &#8211; unique id of the worker to add</li>
160<li><strong>queues</strong> &#8211; queue or queues this worker should be a member of</li>
161</ul>
162</td>
163</tr>
164</tbody>
165</table>
166</dd></dl>
167
168<dl class="method">
169<dt id="eventmq.router.Router.clean_up_dead_workers">
170<code class="descname">clean_up_dead_workers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.clean_up_dead_workers" title="Permalink to this definition">¶</a></dt>
171<dd><p>Loops through the worker queues and removes any workers who haven&#8217;t
172responded in HEARTBEAT_TIMEOUT</p>
173</dd></dl>
174
151<dl class="method"> 175<dl class="method">
152<dt id="eventmq.router.Router.on_heartbeat"> 176<dt id="eventmq.router.Router.on_heartbeat">
153<code class="descname">on_heartbeat</code><span class="sig-paren">(</span><em>sender</em>, <em>msgid</em>, <em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.on_heartbeat" title="Permalink to this definition">¶</a></dt> 177<code class="descname">on_heartbeat</code><span class="sig-paren">(</span><em>sender</em>, <em>msgid</em>, <em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.on_heartbeat" title="Permalink to this definition">¶</a></dt>
154<dd></dd></dl> 178<dd><p>a placeholder for a noop command. The actual &#8216;logic&#8217; for HEARTBEAT is
179in <code class="xref py py-meth docutils literal"><span class="pre">self.process_worker_message()</span></code> because any message from a worker
180counts as a HEARTBEAT</p>
181</dd></dl>
155 182
156<dl class="method"> 183<dl class="method">
157<dt id="eventmq.router.Router.on_inform"> 184<dt id="eventmq.router.Router.on_inform">
@@ -160,8 +187,16 @@
160</dd></dl> 187</dd></dl>
161 188
162<dl class="method"> 189<dl class="method">
163<dt id="eventmq.router.Router.on_receive_reply"> 190<dt id="eventmq.router.Router.on_receive_request">
164<code class="descname">on_receive_reply</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.on_receive_reply" title="Permalink to this definition">¶</a></dt> 191<code class="descname">on_receive_request</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.on_receive_request" title="Permalink to this definition">¶</a></dt>
192<dd><p>This function is called when a message comes in from the client socket.
193It then calls <cite>on_command</cite>. If <cite>on_command</cite> isn&#8217;t found, then a
194warning is created.</p>
195</dd></dl>
196
197<dl class="method">
198<dt id="eventmq.router.Router.process_worker_message">
199<code class="descname">process_worker_message</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.process_worker_message" title="Permalink to this definition">¶</a></dt>
165<dd><p>This method is called when a message comes in from the worker socket. 200<dd><p>This method is called when a message comes in from the worker socket.
166It then calls <cite>on_command</cite>. If <cite>on_command</cite> isn&#8217;t found, then a warning 201It then calls <cite>on_command</cite>. If <cite>on_command</cite> isn&#8217;t found, then a warning
167is created.</p> 202is created.</p>
@@ -172,14 +207,6 @@ is created.</p>
172</dd></dl> 207</dd></dl>
173 208
174<dl class="method"> 209<dl class="method">
175<dt id="eventmq.router.Router.on_receive_request">
176<code class="descname">on_receive_request</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.on_receive_request" title="Permalink to this definition">¶</a></dt>
177<dd><p>This function is called when a message comes in from the client socket.
178It then calls <cite>on_command</cite>. If <cite>on_command</cite> isn&#8217;t found, then a
179warning is created.</p>
180</dd></dl>
181
182<dl class="method">
183<dt id="eventmq.router.Router.send_ack"> 210<dt id="eventmq.router.Router.send_ack">
184<code class="descname">send_ack</code><span class="sig-paren">(</span><em>socket</em>, <em>recipient</em>, <em>msgid</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.send_ack" title="Permalink to this definition">¶</a></dt> 211<code class="descname">send_ack</code><span class="sig-paren">(</span><em>socket</em>, <em>recipient</em>, <em>msgid</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.send_ack" title="Permalink to this definition">¶</a></dt>
185<dd><p>Sends an ACK response</p> 212<dd><p>Sends an ACK response</p>
@@ -190,6 +217,18 @@ warning is created.</p>
190<code class="descname">send_heartbeat</code><span class="sig-paren">(</span><em>socket</em>, <em>recipient</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.send_heartbeat" title="Permalink to this definition">¶</a></dt> 217<code class="descname">send_heartbeat</code><span class="sig-paren">(</span><em>socket</em>, <em>recipient</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.send_heartbeat" title="Permalink to this definition">¶</a></dt>
191<dd><p>Custom send heartbeat method to take into account the recipient that is 218<dd><p>Custom send heartbeat method to take into account the recipient that is
192needed when building messages</p> 219needed when building messages</p>
220<table class="docutils field-list" frame="void" rules="none">
221<col class="field-name" />
222<col class="field-body" />
223<tbody valign="top">
224<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
225<li><strong>socket</strong> (<a class="reference external" href="https://docs.python.org/library/socket.html#module-socket" title="(in Python v2.7)"><em>socket</em></a>) &#8211; the socket to send the heartbeat with</li>
226<li><strong>recipient</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Worker I</li>
227</ul>
228</td>
229</tr>
230</tbody>
231</table>
193</dd></dl> 232</dd></dl>
194 233
195<dl class="method"> 234<dl class="method">
diff --git a/searchindex.js b/searchindex.js
index 5b489bc..3c9c761 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
Search.setIndex({envversion:46,filenames:["api","contributing","exceptions","index","jobmanager","poller","protocol","receiver","router","sender","utils","utils/classes","utils/messages","utils/timeutils"],objects:{"eventmq.exceptions":{EventMQError:[2,5,1,""],InvalidMessageError:[2,5,1,""],MessageError:[2,5,1,""]},"eventmq.jobmanager":{JobManager:[4,4,1,""]},"eventmq.jobmanager.JobManager":{"__init__":[4,2,1,""],on_ack:[4,2,1,""],on_heartbeat:[4,2,1,""],process_message:[4,2,1,""],reset:[4,2,1,""],send_inform:[4,2,1,""],start:[4,2,1,""]},"eventmq.poller":{Poller:[5,4,1,""]},"eventmq.poller.Poller":{"__init__":[5,2,1,""],poll:[5,2,1,""],register:[5,2,1,""],unregister:[5,2,1,""]},"eventmq.receiver":{Receiver:[7,4,1,""]},"eventmq.receiver.Receiver":{"__init__":[7,2,1,""],connect:[7,2,1,""],listen:[7,2,1,""],name:[7,1,1,""],ready:[7,1,1,""],zcontext:[7,1,1,""],zsocket:[7,1,1,""]},"eventmq.router":{Router:[8,4,1,""]},"eventmq.router.Router":{on_heartbeat:[8,2,1,""],on_inform:[8,2,1,""],on_receive_reply:[8,2,1,""],on_receive_request:[8,2,1,""],send_ack:[8,2,1,""],send_heartbeat:[8,2,1,""],send_workers_heartbeats:[8,2,1,""],start:[8,2,1,""]},"eventmq.sender":{Sender:[9,4,1,""]},"eventmq.sender.Sender":{"__init__":[9,2,1,""],connect:[9,2,1,""],listen:[9,2,1,""],name:[9,1,1,""],ready:[9,1,1,""],rebuild:[9,2,1,""],zcontext:[9,1,1,""],zsocket:[9,1,1,""]},"eventmq.utils":{classes:[11,0,0,"-"],messages:[12,0,0,"-"],random_characters:[10,3,1,""],timeutils:[13,0,0,"-"]},"eventmq.utils.classes":{HeartbeatMixin:[11,4,1,""],ZMQReceiveMixin:[11,4,1,""],ZMQSendMixin:[11,4,1,""]},"eventmq.utils.classes.HeartbeatMixin":{"__init__":[11,2,1,""],"__weakref__":[11,1,1,""],is_dead:[11,2,1,""],reset_heartbeat_counters:[11,2,1,""],send_heartbeat:[11,2,1,""]},"eventmq.utils.classes.ZMQReceiveMixin":{"__weakref__":[11,1,1,""],recv:[11,2,1,""],recv_multipart:[11,2,1,""]},"eventmq.utils.classes.ZMQSendMixin":{"__weakref__":[11,1,1,""],send:[11,2,1,""],send_multipart:[11,2,1,""]},"eventmq.utils.messages":{generate_msgid:[12,3,1,""],parse_message:[12,3,1,""],parse_router_message:[12,3,1,""],send_emqp_message:[12,3,1,""],send_emqp_router_message:[12,3,1,""]},"eventmq.utils.timeutils":{monotonic:[13,3,1,""],timestamp:[13,3,1,""]},eventmq:{exceptions:[2,0,0,"-"],jobmanager:[4,0,0,"-"],poller:[5,0,0,"-"],receiver:[7,0,0,"-"],router:[8,0,0,"-"],sender:[9,0,0,"-"],utils:[10,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","class","Python class"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:function","4":"py:class","5":"py:exception"},terms:{"0mq":[6,11],"__init__":[4,5,7,9,11],"__weakref__":11,"_empty_":6,"_headers_":6,"_issu":[],"_msg_":6,"_msgid_":6,"_queue_name_":6,"_recipient_id":11,"_sourc":[],"_topic_name_":6,"_unix_ts_":6,"abstract":6,"case":6,"class":[],"default":[4,6,7,9],"float":11,"function":[7,8],"import":1,"int":5,"long":5,"new":8,"public":6,"return":[1,5,7,9,10,11,12],"true":[6,7,9,11],"while":6,about:[4,6],absolut:1,accept:6,account:[8,12],ack:[6,8],ackd_msgid:4,acknowledg:6,act:6,actual:4,addr:[4,7,9],address:[],after:6,agre:6,all:[2,4,6,7,9,11],allow:6,alpha:6,and_data:12,ani:6,api:[],appear:5,applic:6,architectur:[],aren:[],arg:[4,5,7,8,9,11,12],around:[],attr:5,automat:11,avail:[7,9],awaiting_ack:4,back:[6,11],backend_addr:8,base:[2,5],basi:6,been:11,befor:[5,6],begin:[4,8],belong:6,below:6,between:6,bool:[7,9,11],both:[5,6],broker:6,build:[8,9],built:6,bulid:7,call:[4,5,7,8],callabl:7,can:[6,12],chang:6,charact:10,check:[7,9,11],client:[],close:4,code:[1,3],com:[],come:8,comma:6,command:[4,6,11,12],complet:6,compon:6,connction:[7,9],connect:[4,6,7,8,9,11,12],consist:6,contain:[6,10],content:[],context:[7,9],convers:6,convienc:[5,11],count:6,counter:11,creat:[7,8,9,10],csv:6,current:[4,7,9],custom:8,data:12,deal:10,dealer:9,death:11,debug:6,def:8,defeat:6,defin:[6,7,9,11],deliv:6,describ:6,descript:6,detail:6,detect:6,determin:6,devic:[5,11,12],dialog:6,dict:5,dictionari:[5,6],differ:1,directli:[5,11],disconnect:6,distribut:6,doesn:5,dure:9,either:6,els:[1,6],empti:6,emqp:[],encount:2,end:11,enderlab:[],ensur:[4,6],even:6,event:5,eventloop:[4,7,8,9],eventmqerror:2,except:[],execut:6,explicitli:11,expos:4,extra:6,fail:6,fair:6,fals:[4,6,7,9,11],few:1,field:6,find:11,finish:6,first:6,fit:6,flag:5,follow:6,form:4,format:[6,12],found:8,foundat:6,frame:[],free:6,from:[2,4,5,6,8],frontend_addr:8,gener:[4,5,6,7,9,12],generate_msgid:12,github:[],gmtime:[],gnu:6,goal:[],good:11,guarante:6,guarente:[],hand:10,handl:[6,8],happen:[5,9],have:[11,12],header:[],heartbeat:[],heartbeati:11,heartbeatmixin:11,heavi:6,here:6,hope:6,how:5,html:6,http:6,ident:[6,11],ietf:6,implement:[6,11],impli:6,includ:6,incom:[],index:3,inform:[4,6,8],inherit:2,insert:[6,11],instal:1,instanc:4,interpret:6,interv:6,invalidmessageerror:2,is_dead:11,isn:8,issu:[1,3,6],iter:5,job:[],jobmanag:[],kei:[5,6],kwarg:[4,5,7,8,9,11],languag:[],later:6,least:6,leav:6,length:10,let:6,licens:[],like:[10,11],list:11,listen:[4,7,8,9],look:11,loop:5,mai:[6,11],main:4,make:10,malform:2,manag:[],mani:[6,9],manual:6,master:6,merchant:6,messag:[],message_bodi:12,message_id:12,messageerror:2,met:11,meta:12,method:[4,5,7,8,11],mode:7,modifi:6,modul:[3,10],monoton:[11,13],more:[6,10],msg:[4,6,8,12],msg_id:[],msgid:[4,8],multipart:[6,11],must:[6,11],name:[4,6,7,8,9],need:[8,9],next:5,none:[7,9,11,12],note:[4,7,9],now:11,object:[5,11],occur:11,on_ack:4,on_command:[4,8],on_heartbeat:[4,8],on_inform:8,on_receive_repli:8,on_receive_request:8,on_recv:7,onc:6,onli:[7,9],onlin:8,option:[4,6,7,9,12],org:6,orient:6,origin:6,other:6,otherwis:[4,7,9,11],out:11,own:11,page:3,param:11,paramet:[4,5,7,8,9,11,12],pars:[4,12],parse_messag:12,parse_router_messag:12,part:[6,12],particular:[6,9],pass:[6,7,8],peer:[6,11],pictur:6,poll:[5,7,9],poller:[],pollin:5,pollout:5,pool:6,portion:4,possibl:1,practic:11,prefix:12,prepend:6,pretti:6,problem:2,process:[4,6,9],process_messag:4,prop:[],properti:[7,9],protocol:[],protocol_vers:11,provid:[8,11],pub:6,publish:6,purpos:6,queue:[6,8],rais:[2,7,9,12],random:[10,12],random_charact:10,raw:11,raw_messag:[],readi:[6,7,9],rebuild:9,receiv:[],recent:6,reciev:7,recip:[],recipi:[8,11,12],recipient_id:12,recommend:6,reconnect:9,recv:11,recv_multipart:11,redistribut:6,refer:11,regist:[5,8],regular:6,rel:1,reliabl:6,remain:5,remov:6,reopen:4,rep:7,repli:[6,12],req:9,request:[],requir:[6,7],requri:6,reset:[4,11],reset_heartbeat_count:11,resourc:[4,6],respond:6,respons:[4,7,8,9],restart:[6,9],retri:6,rfc2119:6,rfc:6,robin:6,roughli:9,round:6,rout:[6,8],router:[],run:4,same:9,search:3,see:[5,6],self:9,send:[4,6,8,9,11,12],send_ack:8,send_emqp_messag:12,send_emqp_router_messag:12,send_heartbeat:[8,11],send_inform:4,send_messag:[],send_multipart:11,send_raw:[],send_workers_heartbeat:8,sender:[],sender_id:12,sent:[6,11],seper:6,serv:6,server:[4,6],servic:6,set:[4,5,6,7,9,11],shall:6,should:[2,5,6,7,9],shown:6,simpl:[8,10],singl:6,skip:[7,9,11],skip_zmqstream:[7,9],socket:[4,5,6,7,8,9,11,12],softwar:6,some:[10,11,12],someon:6,someth:[9,11],somewher:1,sourc:[1,3],spawn:4,specif:[],specifi:[6,10,11],start:[4,7,8,9],state:11,statu:6,stop:6,str:[4,7,8,9,11,12],string:[4,6,7,8,9,12],structur:2,sub:6,subclass:2,subject:6,subset:6,success:6,system:1,take:[4,8,9,12],task:4,tcp:[4,8],term:6,thei:[],them:7,thi:[2,4,5,6,7,8,9,10,11],thing:[4,9,10,11,12],threshold:11,through:6,time:6,timeout:5,timestamp:[6,13],timeutil:11,timezon:[],tip:1,tool:6,topic:[],topolog:[],tornado:[4,8],trace:6,track:11,tupl:[5,11,12],type:[6,7,9],typecast:5,typeerror:7,undefin:5,under:6,uniqu:[4,6],univers:[],unix:6,unless:[4,7,9],unregist:5,unus:7,upon:6,usual:8,utilit:[],uuid:[4,7,9],valid:6,valu:[5,6,11,12],variabl:11,version:[1,6,11],via:[7,9],wait:5,warn:8,warranti:6,weak:11,web:6,well:6,when:[1,2,6,7,8,9,11],where:6,which:6,wish:12,without:[6,9],word:6,work:[1,11],worker:[],worri:6,wrap:[7,9],you:[1,6,9,11,12],your:[6,11],zcontext:[7,9],zeromq:6,zmq:[5,6,7,9,11,12],zmqreceivemixin:11,zmqsendmixin:11,zmqstream:[7,9],zsocket:[7,9]},titles:["API Documentation","Contributing to EventMQ","<code class=\"docutils literal\"><span class=\"pre\">exceptions</span></code> &#8211; Exceptions","EventMQ Documentation","<code class=\"docutils literal\"><span class=\"pre\">jobmanager</span></code> &#8211; Job Manager","<code class=\"docutils literal\"><span class=\"pre\">poller</span></code> &#8211; Poller","EventMQ Protocol Specification","<code class=\"docutils literal\"><span class=\"pre\">receiver</span></code> &#8211; Receiver","<code class=\"docutils literal\"><span class=\"pre\">router</span></code> &#8211; Router","<code class=\"docutils literal\"><span class=\"pre\">sender</span></code> &#8211; Sender","<code class=\"docutils literal\"><span class=\"pre\">utils</span></code> &#8211; Utilities","<code class=\"docutils literal\"><span class=\"pre\">classes</span></code> &#8211; Utility Classes","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Message Utilities","<code class=\"docutils literal\"><span class=\"pre\">timeutils</span></code> &#8211; Time Utilites"],titleterms:{"class":11,address:6,api:0,architectur:6,client:6,contribut:1,document:[0,3],emqp:6,eventmq:[1,3,6],except:2,frame:6,global:6,goal:6,header:6,heartbeat:6,indic:3,job:4,jobmanag:4,languag:6,licens:6,manag:4,messag:12,poller:5,protocol:6,receiv:7,request:6,router:[6,8],sender:9,specif:6,tabl:3,time:13,timeutil:13,topolog:6,util:[10,11,12],utilit:13,welcom:[],worker:6}}) \ No newline at end of file Search.setIndex({envversion:46,filenames:["api","contributing","exceptions","index","jobmanager","poller","protocol","receiver","router","sender","utils","utils/classes","utils/messages","utils/timeutils"],objects:{"eventmq.exceptions":{EventMQError:[2,5,1,""],InvalidMessageError:[2,5,1,""],MessageError:[2,5,1,""],PeerGoneAwayError:[2,5,1,""]},"eventmq.jobmanager":{JobManager:[4,4,1,""]},"eventmq.jobmanager.JobManager":{"__init__":[4,2,1,""],on_ack:[4,2,1,""],on_heartbeat:[4,2,1,""],process_message:[4,2,1,""],reset:[4,2,1,""],send_inform:[4,2,1,""],start:[4,2,1,""]},"eventmq.poller":{Poller:[5,4,1,""]},"eventmq.poller.Poller":{"__init__":[5,2,1,""],poll:[5,2,1,""],register:[5,2,1,""],unregister:[5,2,1,""]},"eventmq.receiver":{Receiver:[7,4,1,""]},"eventmq.receiver.Receiver":{"__init__":[7,2,1,""],connect:[7,2,1,""],listen:[7,2,1,""],name:[7,1,1,""],ready:[7,1,1,""],zcontext:[7,1,1,""],zsocket:[7,1,1,""]},"eventmq.router":{Router:[8,4,1,""]},"eventmq.router.Router":{add_worker:[8,2,1,""],clean_up_dead_workers:[8,2,1,""],on_heartbeat:[8,2,1,""],on_inform:[8,2,1,""],on_receive_request:[8,2,1,""],process_worker_message:[8,2,1,""],send_ack:[8,2,1,""],send_heartbeat:[8,2,1,""],send_workers_heartbeats:[8,2,1,""],start:[8,2,1,""]},"eventmq.sender":{Sender:[9,4,1,""]},"eventmq.sender.Sender":{"__init__":[9,2,1,""],connect:[9,2,1,""],listen:[9,2,1,""],name:[9,1,1,""],ready:[9,1,1,""],rebuild:[9,2,1,""],zcontext:[9,1,1,""],zsocket:[9,1,1,""]},"eventmq.utils":{classes:[11,0,0,"-"],messages:[12,0,0,"-"],random_characters:[10,3,1,""],timeutils:[13,0,0,"-"]},"eventmq.utils.classes":{HeartbeatMixin:[11,4,1,""],ZMQReceiveMixin:[11,4,1,""],ZMQSendMixin:[11,4,1,""]},"eventmq.utils.classes.HeartbeatMixin":{"__init__":[11,2,1,""],"__weakref__":[11,1,1,""],is_dead:[11,2,1,""],reset_heartbeat_counters:[11,2,1,""],send_heartbeat:[11,2,1,""]},"eventmq.utils.classes.ZMQReceiveMixin":{"__weakref__":[11,1,1,""],recv:[11,2,1,""],recv_multipart:[11,2,1,""]},"eventmq.utils.classes.ZMQSendMixin":{"__weakref__":[11,1,1,""],send:[11,2,1,""],send_multipart:[11,2,1,""]},"eventmq.utils.messages":{generate_msgid:[12,3,1,""],parse_message:[12,3,1,""],parse_router_message:[12,3,1,""],send_emqp_message:[12,3,1,""],send_emqp_router_message:[12,3,1,""]},"eventmq.utils.timeutils":{monotonic:[13,3,1,""],seconds_until:[13,3,1,""],timestamp:[13,3,1,""]},eventmq:{exceptions:[2,0,0,"-"],jobmanager:[4,0,0,"-"],poller:[5,0,0,"-"],receiver:[7,0,0,"-"],router:[8,0,0,"-"],sender:[9,0,0,"-"],utils:[10,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","class","Python class"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:function","4":"py:class","5":"py:exception"},terms:{"0mq":[6,11],"__init__":[4,5,7,9,11],"__weakref__":11,"_empty_":6,"_headers_":6,"_issu":[],"_msg_":6,"_msgid_":6,"_queue_name_":6,"_recipient_id":11,"_sourc":[],"_topic_name_":6,"_unix_ts_":6,"abstract":6,"case":[6,13],"class":[],"default":[4,6,7,9],"float":[11,13],"function":8,"import":1,"int":5,"long":5,"new":8,"public":6,"return":[1,5,7,9,10,11,12,13],"true":[6,7,9,11],"while":6,about:[4,6],absolut:1,accept:6,account:[8,12],ack:[6,8],ackd_msgid:4,acknowledg:6,act:6,actual:[4,8],add:8,add_work:8,addr:[4,7,9],address:[],after:6,agre:6,all:[2,4,6,7,9,11],allow:6,alpha:6,and_data:12,ani:[6,8],api:[],appear:5,applic:6,architectur:[],aren:[],arg:[4,5,7,8,9,11],arithmet:13,around:[],attempt:2,attr:5,automat:11,avail:[],awaiting_ack:4,back:[6,11],backend_addr:8,base:[2,5],basi:6,becaus:8,been:11,befor:[5,6],begin:[4,8],belong:6,below:6,between:6,bool:[7,9,11],boot:13,both:[5,6],broker:6,build:[8,9],built:6,bulid:7,calcul:13,call:[4,5,8],callabl:7,can:[6,12],chang:6,charact:10,check:[7,9,11],clean_up_dead_work:8,client:[],close:[4,13],code:[1,3],com:[],come:8,comma:6,command:[4,6,8,11,12],complet:6,compon:6,connction:[7,9],connect:[4,6,7,8,9,11,12],consist:6,contact:2,contain:[6,10],content:[],context:[7,9],convers:6,convienc:[5,11],count:[4,6,8,13],counter:11,creat:[8,9,10],csv:6,current:4,custom:8,data:12,deal:10,dealer:9,death:11,debug:6,def:8,defeat:6,defin:[6,7,9,11],deliv:6,describ:6,descript:6,detail:6,detect:6,determin:6,devic:[5,11,12],dialog:6,dict:5,dictionari:[5,6],differ:1,directli:[5,11],disconnect:6,distribut:6,doesn:5,down:13,dst:13,dure:9,either:6,els:[1,6],empti:6,emqp:[],encount:2,end:11,enderlab:[],ensur:[4,6],even:6,event:5,eventloop:4,eventmqerror:2,everi:4,except:[],execut:6,exist:2,explicitli:11,expos:4,extra:6,fail:6,fair:6,fals:[4,6,7,9,11],few:1,field:6,find:11,finish:6,first:6,fit:6,flag:5,follow:6,form:4,format:[6,12],found:8,foundat:6,frame:[],free:6,from:[2,4,5,6,8,13],frontend_addr:8,gener:[4,5,6,7,9,12],generate_msgid:12,github:[],gmtime:[],gnu:6,goal:[],good:11,guarante:6,guarente:[],hand:10,handl:[6,8],happen:[5,9],have:[11,12],haven:8,header:[],heartbeat:[],heartbeat_timeout:8,heartbeati:11,heartbeatmixin:11,heavi:6,here:6,hope:6,how:5,html:6,http:6,ident:[6,11],ietf:6,implement:[6,11],impli:6,includ:6,incom:[],index:3,inform:[4,6,8],inherit:2,insert:[6,11],instal:1,instanc:4,interpret:6,interv:6,invalidmessageerror:2,is_dead:11,isn:8,issu:[1,3,6],iter:5,job:[],jobmanag:[],kei:[5,6],kwarg:[4,5,7,8,9,11],languag:[],later:6,least:6,leav:6,length:10,let:6,licens:[],like:[10,11],list:11,listen:[4,7,8,9],logic:[4,8],longer:2,look:11,loop:[5,8],mai:[6,11],main:4,make:10,malform:2,manag:[],mani:[6,9],manual:6,master:6,member:8,merchant:6,mess:13,messag:[],message_bodi:12,message_id:12,messageerror:2,met:11,meta:12,method:[4,5,8,11],mode:[],modifi:6,modul:[3,10],monoton:[11,13],more:[6,10],msg:[4,6,8,12],msg_id:[],msgid:[4,8],multipart:[6,11],must:[6,11],name:[4,6,7,8,9],need:[8,9],never:13,next:5,none:[7,8,9,11,12],noop:[4,8],note:[4,7,9],now:11,number:13,object:[5,11],occur:11,on_ack:4,on_command:[4,8],on_heartbeat:[4,8],on_inform:8,on_receive_repli:[],on_receive_request:8,on_recv:7,onc:6,onli:[],onlin:8,option:[4,6,7,9,12],org:6,orient:6,origin:6,other:6,otherwis:[4,7,9,11],out:11,own:11,page:3,param:[],paramet:[4,5,7,8,9,11,12],pars:[4,12],parse_messag:12,parse_router_messag:12,part:[6,12],particular:[6,9],pass:[6,7,8],peer:[2,6,11],peergoneawayerror:2,pictur:6,placehold:[4,8],poll:5,poller:[],pollin:5,pollout:5,pool:6,portion:4,possibl:1,practic:11,prefix:12,prepend:6,pretti:6,problem:2,process:[4,6,9],process_messag:4,process_worker_messag:8,prop:[],properti:[7,9],protocol:[],protocol_vers:11,provid:[8,11],pub:6,publish:6,purpos:6,queue:[6,8],rais:[2,7,9,12],random:[10,12],random_charact:10,raw:11,raw_messag:[],readi:[6,7,9],rebuild:9,receiv:[],recent:6,reciev:[],recip:[],recipi:[8,11,12],recipient_id:12,recommend:6,reconnect:9,recv:11,recv_multipart:11,redistribut:6,refer:11,regist:[5,8],regular:6,rel:1,reliabl:6,remain:5,remov:[6,8],reopen:4,rep:7,repli:[6,12],req:9,request:[],requir:6,requri:6,reset:[4,11],reset_heartbeat_count:11,resourc:[4,6],respond:[6,8],respons:[4,7,8,9],restart:[6,9],retri:6,rfc2119:6,rfc:6,robin:6,roughli:9,round:6,rout:[6,8],router:[],run:4,same:9,search:3,second:13,seconds_until:13,see:[5,6],self:[4,8,9],send:[2,4,6,8,9,11,12],send_ack:8,send_emqp_messag:12,send_emqp_router_messag:12,send_heartbeat:[8,11],send_inform:4,send_messag:[],send_multipart:11,send_raw:[],send_workers_heartbeat:8,sender:[],sender_id:12,sent:[6,11],seper:6,serv:6,server:[4,6],servic:6,set:[4,5,6,9,11],shall:6,should:[2,5,6,7,8,9],shown:6,simpl:[8,10],sinc:13,singl:6,skip:[9,11],skip_zmqstream:9,socket:[4,5,6,7,8,9,11,12],softwar:6,some:[10,11,12],someon:6,someth:[9,11,13],somewher:1,sourc:[1,3],spawn:4,specif:[],specifi:[6,10,11],start:[4,7,8,9],state:11,statu:6,stop:6,str:[4,7,8,9,10,11,12],string:[4,6,7,8,9,12],structur:2,sub:6,subclass:2,subject:6,subset:6,subtract:13,success:6,system:1,take:[4,8,9,12],task:4,tcp:[4,8],term:6,thei:[],them:7,thi:[2,4,5,6,7,8,9,10,11,13],thing:[4,9,10,11,12],threshold:11,through:[6,8],time:[],timeout:5,timestamp:[6,13],timeutil:[],timezon:[],tip:1,tool:6,topic:[],topolog:[],tornado:4,trace:6,track:11,tupl:[5,11,12],type:[6,7,9,10,11],typecast:5,typeerror:7,undefin:5,under:6,uniqu:[4,6,8],univers:[],unix:6,unless:[4,7,9],unregist:5,until:13,unus:[],upon:6,usual:8,utilit:[],uuid:[4,7,9],valid:6,valu:[5,6,11,12,13],variabl:11,version:[1,6,11],via:[],wait:5,warn:8,warranti:6,weak:11,web:6,well:6,when:[1,2,6,7,8,9,11],where:[6,13],which:6,who:8,wish:12,without:[6,9],word:6,work:[1,11],worker:[],worker_id:8,worri:6,would:13,wrap:[],you:[1,6,9,11,12],your:[6,11],zcontext:[7,9],zeromq:6,zmq:[5,6,7,9,11,12],zmqreceivemixin:11,zmqsendmixin:11,zmqstream:9,zsocket:[7,9]},titles:["API Documentation","Contributing to EventMQ","<code class=\"docutils literal\"><span class=\"pre\">exceptions</span></code> &#8211; Exceptions","EventMQ Documentation","<code class=\"docutils literal\"><span class=\"pre\">jobmanager</span></code> &#8211; Job Manager","<code class=\"docutils literal\"><span class=\"pre\">poller</span></code> &#8211; Poller","EventMQ Protocol Specification","<code class=\"docutils literal\"><span class=\"pre\">receiver</span></code> &#8211; Receiver","<code class=\"docutils literal\"><span class=\"pre\">router</span></code> &#8211; Router","<code class=\"docutils literal\"><span class=\"pre\">sender</span></code> &#8211; Sender","<code class=\"docutils literal\"><span class=\"pre\">utils</span></code> &#8211; Utilities","<code class=\"docutils literal\"><span class=\"pre\">classes</span></code> &#8211; Utility Classes","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Message Utilities","<code class=\"docutils literal\"><span class=\"pre\">timeutils</span></code> &#8211; Time Utilites"],titleterms:{"class":11,address:6,api:0,architectur:6,client:6,contribut:1,document:[0,3],emqp:6,eventmq:[1,3,6],except:2,frame:6,global:6,goal:6,header:6,heartbeat:6,indic:3,job:4,jobmanag:4,languag:6,licens:6,manag:4,messag:12,poller:5,protocol:6,receiv:7,request:6,router:[6,8],sender:9,specif:6,tabl:3,time:13,timeutil:13,topolog:6,util:[10,11,12],utilit:13,welcom:[],worker:6}}) \ No newline at end of file
diff --git a/sender.html b/sender.html
index 9e4c0b6..d9463d4 100644
--- a/sender.html
+++ b/sender.html
@@ -147,11 +147,6 @@
147<dt id="eventmq.sender.Sender"> 147<dt id="eventmq.sender.Sender">
148<em class="property">class </em><code class="descclassname">eventmq.sender.</code><code class="descname">Sender</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.sender.Sender" title="Permalink to this definition">¶</a></dt> 148<em class="property">class </em><code class="descclassname">eventmq.sender.</code><code class="descname">Sender</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.sender.Sender" title="Permalink to this definition">¶</a></dt>
149<dd><p>Sends messages to a particular socket</p> 149<dd><p>Sends messages to a particular socket</p>
150<div class="admonition note">
151<p class="first admonition-title">Note</p>
152<p class="last">Polling with this sender is currently only available via an eventloop
153(<code class="xref py py-mod docutils literal"><span class="pre">zmq.eventloop</span></code>)</p>
154</div>
155<dl class="attribute"> 150<dl class="attribute">
156<dt id="eventmq.sender.Sender.name"> 151<dt id="eventmq.sender.Sender.name">
157<code class="descname">name</code><a class="headerlink" href="#eventmq.sender.Sender.name" title="Permalink to this definition">¶</a></dt> 152<code class="descname">name</code><a class="headerlink" href="#eventmq.sender.Sender.name" title="Permalink to this definition">¶</a></dt>
@@ -167,8 +162,7 @@
167<dl class="attribute"> 162<dl class="attribute">
168<dt id="eventmq.sender.Sender.zsocket"> 163<dt id="eventmq.sender.Sender.zsocket">
169<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.sender.Sender.zsocket" title="Permalink to this definition">¶</a></dt> 164<code class="descname">zsocket</code><a class="headerlink" href="#eventmq.sender.Sender.zsocket" title="Permalink to this definition">¶</a></dt>
170<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a> &#8211; socket wrapped up in a 165<dd><p><a class="reference external" href="http://pyzmq.readthedocs.org/en/v15.0.0/api/zmq.html#zmq.Socket" title="(in PyZMQ v15.0.0)"><code class="xref py py-class docutils literal"><span class="pre">zmq.Socket</span></code></a></p>
171<code class="xref py py-class docutils literal"><span class="pre">zmqstream.ZMQStream</span></code></p>
172</dd></dl> 166</dd></dl>
173 167
174<dl class="method"> 168<dl class="method">
diff --git a/utils.html b/utils.html
index 308b3c8..b6c8a30 100644
--- a/utils.html
+++ b/utils.html
@@ -159,7 +159,16 @@ like creating message more simple.</p>
159<dl class="function"> 159<dl class="function">
160<dt id="eventmq.utils.random_characters"> 160<dt id="eventmq.utils.random_characters">
161<code class="descclassname">eventmq.utils.</code><code class="descname">random_characters</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.random_characters" title="Permalink to this definition">¶</a></dt> 161<code class="descclassname">eventmq.utils.</code><code class="descname">random_characters</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.random_characters" title="Permalink to this definition">¶</a></dt>
162<dd><p>Returns some random characters of a specified length</p> 162<dd><table class="docutils field-list" frame="void" rules="none">
163<col class="field-name" />
164<col class="field-body" />
165<tbody valign="top">
166<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">some random characters of a specified length</td>
167</tr>
168<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)">str</a></td>
169</tr>
170</tbody>
171</table>
163</dd></dl> 172</dd></dl>
164 173
165</div> 174</div>
diff --git a/utils/classes.html b/utils/classes.html
index 7e3ebcd..15ed5e6 100644
--- a/utils/classes.html
+++ b/utils/classes.html
@@ -93,7 +93,7 @@
93<li class="toctree-l2 current"><a class="reference internal" href="../utils.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current"> 93<li class="toctree-l2 current"><a class="reference internal" href="../utils.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current">
94<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 94<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
95<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 95<li class="toctree-l3"><a class="reference internal" href="messages.html"><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
96<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">time</span></code> &#8211; Time Utilites</a></li> 96<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li>
97</ul> 97</ul>
98</li> 98</li>
99</ul> 99</ul>
@@ -169,21 +169,23 @@
169<dl class="method"> 169<dl class="method">
170<dt id="eventmq.utils.classes.HeartbeatMixin.is_dead"> 170<dt id="eventmq.utils.classes.HeartbeatMixin.is_dead">
171<code class="descname">is_dead</code><span class="sig-paren">(</span><em>now=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.HeartbeatMixin.is_dead" title="Permalink to this definition">¶</a></dt> 171<code class="descname">is_dead</code><span class="sig-paren">(</span><em>now=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.HeartbeatMixin.is_dead" title="Permalink to this definition">¶</a></dt>
172<dd><p>Checks the counters for the heartbeats to find out if the thresholds 172<dd><p>Checks the heartbeat counters to find out if the thresholds have been
173have been met.</p> 173met.</p>
174<table class="docutils field-list" frame="void" rules="none"> 174<table class="docutils field-list" frame="void" rules="none">
175<col class="field-name" /> 175<col class="field-name" />
176<col class="field-body" /> 176<col class="field-body" />
177<tbody valign="top"> 177<tbody valign="top">
178<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>now</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#float" title="(in Python v2.7)"><em>float</em></a>) &#8211; The time to use to check if death has occurred. If</td> 178<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>now</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#float" title="(in Python v2.7)"><em>float</em></a>) &#8211; The time to use to check if death has occurred. If
179this value is None, then <code class="xref py py-func docutils literal"><span class="pre">utils.timeutils.monotonic()</span></code>
180is used.</td>
181</tr>
182<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">True if the connection to the peer has died, otherwise
183False</td>
184</tr>
185<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/library/functions.html#bool" title="(in Python v2.7)">bool</a></td>
179</tr> 186</tr>
180</tbody> 187</tbody>
181</table> 188</table>
182<p>:param this value is None, then <code class="xref py py-func docutils literal"><span class="pre">utils.timeutils.monotonic()</span></code> is used.:</p>
183<dl class="docutils">
184<dt>Returns (bool) True if the connection to the peer has died, otherwise</dt>
185<dd>False</dd>
186</dl>
187</dd></dl> 189</dd></dl>
188 190
189<dl class="method"> 191<dl class="method">
diff --git a/utils/messages.html b/utils/messages.html
index c0d4e60..347920b 100644
--- a/utils/messages.html
+++ b/utils/messages.html
@@ -32,7 +32,7 @@
32 32
33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/> 33 <link rel="top" title="EventMQ 0 documentation" href="../index.html"/>
34 <link rel="up" title="utils – Utilities" href="../utils.html"/> 34 <link rel="up" title="utils – Utilities" href="../utils.html"/>
35 <link rel="next" title="Contributing to EventMQ" href="../contributing.html"/> 35 <link rel="next" title="timeutils Time Utilites" href="timeutils.html"/>
36 <link rel="prev" title="classes – Utility Classes" href="classes.html"/> 36 <link rel="prev" title="classes – Utility Classes" href="classes.html"/>
37 37
38 38
@@ -93,6 +93,7 @@
93<li class="toctree-l2 current"><a class="reference internal" href="../utils.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current"> 93<li class="toctree-l2 current"><a class="reference internal" href="../utils.html"><code class="docutils literal"><span class="pre">utils</span></code> &#8211; Utilities</a><ul class="current">
94<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li> 94<li class="toctree-l3"><a class="reference internal" href="classes.html"><code class="docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes</a></li>
95<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li> 95<li class="toctree-l3 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">messages</span></code> &#8211; Message Utilities</a></li>
96<li class="toctree-l3"><a class="reference internal" href="timeutils.html"><code class="docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites</a></li>
96</ul> 97</ul>
97</li> 98</li>
98</ul> 99</ul>
@@ -200,9 +201,20 @@ parts.</p>
200<dt id="eventmq.utils.messages.send_emqp_message"> 201<dt id="eventmq.utils.messages.send_emqp_message">
201<code class="descclassname">eventmq.utils.messages.</code><code class="descname">send_emqp_message</code><span class="sig-paren">(</span><em>socket</em>, <em>command</em>, <em>message=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.messages.send_emqp_message" title="Permalink to this definition">¶</a></dt> 202<code class="descclassname">eventmq.utils.messages.</code><code class="descname">send_emqp_message</code><span class="sig-paren">(</span><em>socket</em>, <em>command</em>, <em>message=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.messages.send_emqp_message" title="Permalink to this definition">¶</a></dt>
202<dd><p>Formats and sends an eMQP message</p> 203<dd><p>Formats and sends an eMQP message</p>
203<p>Args:</p> 204<table class="docutils field-list" frame="void" rules="none">
205<col class="field-name" />
206<col class="field-body" />
207<tbody valign="top">
208<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
209<li><strong>socket</strong> &#8211; </li>
210<li><strong>command</strong> &#8211; </li>
211<li><strong>message</strong> &#8211; </li>
212</ul>
213</td>
214</tr>
215</tbody>
216</table>
204<p>Raises:</p> 217<p>Raises:</p>
205<p>Returns</p>
206</dd></dl> 218</dd></dl>
207 219
208<dl class="function"> 220<dl class="function">
@@ -237,7 +249,7 @@ used by a <code class="xref py py-attr docutils literal"><span class="pre">zmq.R
237 249
238 <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> 250 <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
239 251
240 <a href="../contributing.html" class="btn btn-neutral float-right" title="Contributing to EventMQ" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a> 252 <a href="timeutils.html" class="btn btn-neutral float-right" title="timeutils – Time Utilites" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
241 253
242 254
243 <a href="classes.html" class="btn btn-neutral" title="classes – Utility Classes" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a> 255 <a href="classes.html" class="btn btn-neutral" title="classes – Utility Classes" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
diff --git a/utils/timeutils.html b/utils/timeutils.html
index 3f5a73e..fc44e97 100644
--- a/utils/timeutils.html
+++ b/utils/timeutils.html
@@ -152,7 +152,17 @@
152<dl class="function"> 152<dl class="function">
153<dt id="eventmq.utils.timeutils.monotonic"> 153<dt id="eventmq.utils.timeutils.monotonic">
154<code class="descclassname">eventmq.utils.timeutils.</code><code class="descname">monotonic</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.timeutils.monotonic" title="Permalink to this definition">¶</a></dt> 154<code class="descclassname">eventmq.utils.timeutils.</code><code class="descname">monotonic</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.timeutils.monotonic" title="Permalink to this definition">¶</a></dt>
155<dd></dd></dl> 155<dd><p>Returns (float) seconds since boot, or something close to it. This value
156will never count down so it&#8217;s useful for cases where DST would mess up
157time.time() arithmetic (e.g. heartbeats).</p>
158</dd></dl>
159
160<dl class="function">
161<dt id="eventmq.utils.timeutils.seconds_until">
162<code class="descclassname">eventmq.utils.timeutils.</code><code class="descname">seconds_until</code><span class="sig-paren">(</span><em>ts</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.timeutils.seconds_until" title="Permalink to this definition">¶</a></dt>
163<dd><p>Calculates the number of seconds until <cite>ts</cite> by subtracting it from
164time.time()</p>
165</dd></dl>
156 166
157<dl class="function"> 167<dl class="function">
158<dt id="eventmq.utils.timeutils.timestamp"> 168<dt id="eventmq.utils.timeutils.timestamp">