aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjason2016-01-22 16:13:14 -0700
committerjason2016-01-22 16:13:14 -0700
commit3b4c07b188d1530be556b51eacae99b97ef0e9ff (patch)
treef718b280ec66d0582cf5125dbeaf93888a935160
parente37b3e9b8889d539bf943eb76b8d02f18d645b01 (diff)
downloadeventmq-3b4c07b188d1530be556b51eacae99b97ef0e9ff.tar.gz
eventmq-3b4c07b188d1530be556b51eacae99b97ef0e9ff.zip
updates for docs
-rw-r--r--_sources/getting_started.txt11
-rw-r--r--_sources/glossary.txt7
-rw-r--r--_sources/protocol.txt57
-rw-r--r--client/messages.html51
-rw-r--r--contributing.html14
-rw-r--r--genindex.html166
-rw-r--r--getting_started.html197
-rw-r--r--glossary.html196
-rw-r--r--index.html5
-rw-r--r--jobmanager.html74
-rw-r--r--objects.invbin963 -> 1163 bytes
-rw-r--r--protocol.html204
-rw-r--r--receiver.html17
-rw-r--r--router.html125
-rw-r--r--searchindex.js2
-rw-r--r--sender.html17
-rw-r--r--utils.html1
-rw-r--r--utils/classes.html112
-rw-r--r--utils/messages.html1
-rw-r--r--utils/timeutils.html43
20 files changed, 1189 insertions, 111 deletions
diff --git a/_sources/getting_started.txt b/_sources/getting_started.txt
new file mode 100644
index 0000000..167ca0f
--- /dev/null
+++ b/_sources/getting_started.txt
@@ -0,0 +1,11 @@
1Getting Started
2===============
3
4To run a simple messaging system run the following
5
6pip install -r requirements.
7
8ln -s path/to/eventmq/eventmq /home/vagrant/.virtualenvs/lib/python2.7/site-packages/eventmq
9
10path/to/eventmq/bin/router - run the router
11path/to/eventmq/bin/worker - run a worker. run this command more than once to run more than one worker.
diff --git a/_sources/glossary.txt b/_sources/glossary.txt
new file mode 100644
index 0000000..d33fbc5
--- /dev/null
+++ b/_sources/glossary.txt
@@ -0,0 +1,7 @@
1********
2Glossary
3********
4
5D
6===
7device - The broker and anything that helps the broker (scheduler, jobmanager).
diff --git a/_sources/protocol.txt b/_sources/protocol.txt
index e468b06..ddbcfcc 100644
--- a/_sources/protocol.txt
+++ b/_sources/protocol.txt
@@ -1,4 +1,4 @@
1****************************** 1/****************************e
2EventMQ Protocol Specification 2EventMQ Protocol Specification
3****************************** 3******************************
4*The status of this document is alpha and subject to heavy change* 4*The status of this document is alpha and subject to heavy change*
@@ -86,10 +86,53 @@ FRAME Value Description
862 PUBLISH command 862 PUBLISH command
873 _MSGID_ A unique id for the msg 873 _MSGID_ A unique id for the msg
884 _TOPIC_NAME_ the name of the queue the worker belongs to 884 _TOPIC_NAME_ the name of the queue the worker belongs to
895 _HEADERS_ dictionary of headers. can be an empty set 895 _HEADERS_ csv list of headers
906 _MSG_ The message to send 906 _MSG_ The message to send
91====== ============== =========== 91====== ============== ===========
92 92
93A **SCHEDULE** command consists of a 7-frame multipart message, formatted as follows.
94
95====== ============== ===========
96FRAME Value Description
97====== ============== ===========
980 _EMPTY_ leave empty
991 eMQP/1.0 Protocol version
1002 SCHEDULE command
1013 _MSGID_ A unique id for the msg
1024 _TOPIC_NAME_ name of queue that the job should run in
1035 _HEADERS_ csv list of headers for this message
1046 _MSG_ The message to send
105====== ============== ===========
106
107An **UNSCHEDULE** command consists of a 7-frame multipart message, formatted as follows.
108
109====== ============== ===========
110FRAME Value Description
111====== ============== ===========
1120 _EMPTY_ leave empty
1131 eMQP/1.0 Protocol version
1142 UNSCHEDULE command
1153 _MSGID_ A unique id for the msg
1164 _TOPIC_NAME_ ignored for this command, broadcasted to all queues
1175 _HEADERS_ csv list of headers for this message
1186 _MSG_ The message to send
119====== ============== ===========
120
121eMQP / Scheduler
122----------------
123An **INFORM** command consists of a 6-frame multipart message, formatted as follows.
124
125====== ============== ===========
126FRAME Value Description
127====== ============== ===========
1280 _EMPTY_ leave empty
1291 eMQP/1.0 Protocol version
1302 INFORM command
1313 _MSGID_ A unique id for the msg
1324 _QUEUE_NAME_ csv seperated names of queue the worker belongs to
1335 scheduler type of peer connecting
134====== ============== ===========
135
93eMQP / Worker 136eMQP / Worker
94------------- 137-------------
95An **INFORM** command consists of a 5-frame multipart message, formatted as follows. 138An **INFORM** command consists of a 5-frame multipart message, formatted as follows.
@@ -102,6 +145,7 @@ FRAME Value Description
1022 INFORM command 1452 INFORM command
1033 _MSGID_ A unique id for the msg 1463 _MSGID_ A unique id for the msg
1044 _QUEUE_NAME_ csv seperated names of queue the worker belongs to 1474 _QUEUE_NAME_ csv seperated names of queue the worker belongs to
1485 worker type of peer connecting
105====== ============== =========== 149====== ============== ===========
106 150
107A **READY** frame consists of a 4-frame multipart message, formatted as follows. 151A **READY** frame consists of a 4-frame multipart message, formatted as follows.
@@ -154,13 +198,16 @@ Heartbeating
154------------ 198------------
155 * HEARTBEAT commands are valid at any time after an INFORM command 199 * HEARTBEAT commands are valid at any time after an INFORM command
156 * Any command except DISCONNECT act as a heartbeat. Peers SHOULD NOT send HEARTBEAT commands while sending other commands. 200 * Any command except DISCONNECT act as a heartbeat. Peers SHOULD NOT send HEARTBEAT commands while sending other commands.
157 * Both worker and broker MUST send heartbeats at regular and agreed-upon intervals. 201 * Worker and broker MUST send heartbeats at regular and agreed-upon intervals.
202 * Scheduler and broker MUST send heartbeats at regular and agreed-upon intervals.
158 * If the worker detects that the broker disconnected it SHOULD restart the conversation. 203 * If the worker detects that the broker disconnected it SHOULD restart the conversation.
159 * If the broker detects that a worker has disconnected it should stop sending it a message of any type. 204 * If the broker detects that a worker has disconnected it should stop sending it a message of any type.
205 * If the scheduler detects that the broker disconnects it SHOULD restart the conversation.
206 * If the broker detects that a scheduler has disconnected it should ??????????.
160 207
161Request Headers 208REQUEST Headers
162--------------- 209---------------
163Headers MUST be 0 to many comma seperated values inserted into the header field. If there are no headers requried, send an empty string MUST be sent where headers are required. 210Headers MUST be 0 to many comma seperated values inserted into the header field. If there are no headers required, send an empty string MUST be sent where headers are required.
164 211
165Below is a table which defines and describes the headers. 212Below is a table which defines and describes the headers.
166 213
diff --git a/client/messages.html b/client/messages.html
index 4b9647f..744397a 100644
--- a/client/messages.html
+++ b/client/messages.html
@@ -226,6 +226,34 @@ that would otherwise overwhelm a box that has to do it all alone.
226</dd></dl> 226</dd></dl>
227 227
228<dl class="function"> 228<dl class="function">
229<dt id="eventmq.client.messages.schedule">
230<code class="descclassname">eventmq.client.messages.</code><code class="descname">schedule</code><span class="sig-paren">(</span><em>socket</em>, <em>func</em>, <em>interval_secs</em>, <em>args=()</em>, <em>kwargs=None</em>, <em>class_args=()</em>, <em>class_kwargs=None</em>, <em>headers=('guarantee'</em>, <em>)</em>, <em>queue='default'</em>, <em>unschedule=False</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.client.messages.schedule" title="Permalink to this definition">¶</a></dt>
231<dd><p>Execute a task on a defined interval.</p>
232<table class="docutils field-list" frame="void" rules="none">
233<col class="field-name" />
234<col class="field-body" />
235<tbody valign="top">
236<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
237<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; eventmq socket to use for sending the message</li>
238<li><strong>func</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#callable" title="(in Python v2.7)"><em>callable</em></a>) &#8211; the callable to be scheduled on a worker</li>
239<li><strong>minutes</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; minutes to wait in between executions</li>
240<li><strong>args</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id9"><span class="problematic" id="id10">*</span></a>args to pass to the callable</li>
241<li><strong>kwargs</strong> (<a class="reference external" href="https://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id11"><span class="problematic" id="id12">**</span></a>kwargs to pass to the callable</li>
242<li><strong>class_args</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of <a href="#id13"><span class="problematic" id="id14">*</span></a>args to pass to the class (if applicable)</li>
243<li><strong>class_kwargs</strong> (<a class="reference external" href="https://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; dict of <a href="#id15"><span class="problematic" id="id16">**</span></a>kwargs to pass to the class (if
244applicable)</li>
245<li><strong>headers</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of strings denoting enabled headers. Default:
246guarantee is enabled to ensure the scheduler schedules the job.</li>
247<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of the queue to use when executing the job. The
248default value is the default queue.</li>
249</ul>
250</td>
251</tr>
252</tbody>
253</table>
254</dd></dl>
255
256<dl class="function">
229<dt id="eventmq.client.messages.send_request"> 257<dt id="eventmq.client.messages.send_request">
230<code class="descclassname">eventmq.client.messages.</code><code class="descname">send_request</code><span class="sig-paren">(</span><em>socket</em>, <em>message</em>, <em>reply_requested=False</em>, <em>guarantee=False</em>, <em>retry_count=0</em>, <em>queue=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.client.messages.send_request" title="Permalink to this definition">¶</a></dt> 258<code class="descclassname">eventmq.client.messages.</code><code class="descname">send_request</code><span class="sig-paren">(</span><em>socket</em>, <em>message</em>, <em>reply_requested=False</em>, <em>guarantee=False</em>, <em>retry_count=0</em>, <em>queue=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.client.messages.send_request" title="Permalink to this definition">¶</a></dt>
231<dd><p>Send a REQUEST command.</p> 259<dd><p>Send a REQUEST command.</p>
@@ -276,6 +304,29 @@ configured default queue name</li>
276</table> 304</table>
277</dd></dl> 305</dd></dl>
278 306
307<dl class="function">
308<dt id="eventmq.client.messages.send_schedule_request">
309<code class="descclassname">eventmq.client.messages.</code><code class="descname">send_schedule_request</code><span class="sig-paren">(</span><em>socket</em>, <em>interval_secs</em>, <em>message</em>, <em>headers=()</em>, <em>queue=None</em>, <em>unschedule=False</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.client.messages.send_schedule_request" title="Permalink to this definition">¶</a></dt>
310<dd><p>Send a SCHEDULE or UNSCHEDULE command.</p>
311<p>Queues a message requesting that something happens on an
312interval for the scheduler.</p>
313<table class="docutils field-list" frame="void" rules="none">
314<col class="field-name" />
315<col class="field-body" />
316<tbody valign="top">
317<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
318<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; </li>
319<li><strong>interval_secs</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; </li>
320<li><strong>message</strong> &#8211; Message to send socket.</li>
321<li><strong>headers</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of headers for the message</li>
322<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; name of queue the job should be executed in</li>
323</ul>
324</td>
325</tr>
326</tbody>
327</table>
328</dd></dl>
329
279</div> 330</div>
280 331
281 332
diff --git a/contributing.html b/contributing.html
index 79d9616..acdb2b0 100644
--- a/contributing.html
+++ b/contributing.html
@@ -31,7 +31,7 @@
31 31
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="Goals" href="protocol.html"/>
35 <link rel="prev" title="timeutils – Time Utilites" href="utils/timeutils.html"/> 35 <link rel="prev" title="timeutils – Time Utilites" href="utils/timeutils.html"/>
36 36
37 37
@@ -84,7 +84,10 @@
84 <ul class="current"> 84 <ul class="current">
85<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li> 85<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li>
86<li class="toctree-l1 current"><a class="current reference internal" href="">Contributing to EventMQ</a><ul> 86<li class="toctree-l1 current"><a class="current reference internal" href="">Contributing to EventMQ</a><ul>
87<li class="toctree-l2"><a class="reference internal" href="protocol.html">EventMQ Protocol Specification</a></li> 87<li class="toctree-l2"><a class="reference internal" href="protocol.html">Goals</a></li>
88<li class="toctree-l2"><a class="reference internal" href="protocol.html#license">License</a></li>
89<li class="toctree-l2"><a class="reference internal" href="protocol.html#language">Language</a></li>
90<li class="toctree-l2"><a class="reference internal" href="protocol.html#architecture">Architecture</a></li>
88<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li> 91<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li>
89<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li> 92<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li>
90</ul> 93</ul>
@@ -143,7 +146,10 @@
143</div></blockquote> 146</div></blockquote>
144<div class="toctree-wrapper compound"> 147<div class="toctree-wrapper compound">
145<ul> 148<ul>
146<li class="toctree-l1"><a class="reference internal" href="protocol.html">EventMQ Protocol Specification</a></li> 149<li class="toctree-l1"><a class="reference internal" href="protocol.html">Goals</a></li>
150<li class="toctree-l1"><a class="reference internal" href="protocol.html#license">License</a></li>
151<li class="toctree-l1"><a class="reference internal" href="protocol.html#language">Language</a></li>
152<li class="toctree-l1"><a class="reference internal" href="protocol.html#architecture">Architecture</a></li>
147<li class="toctree-l1"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li> 153<li class="toctree-l1"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li>
148<li class="toctree-l1"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li> 154<li class="toctree-l1"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li>
149</ul> 155</ul>
@@ -157,7 +163,7 @@
157 163
158 <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> 164 <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
159 165
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> 166 <a href="protocol.html" class="btn btn-neutral float-right" title="Goals" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
161 167
162 168
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> 169 <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>
diff --git a/genindex.html b/genindex.html
index f0f6527..f1aa454 100644
--- a/genindex.html
+++ b/genindex.html
@@ -145,10 +145,12 @@
145 | <a href="#N"><strong>N</strong></a> 145 | <a href="#N"><strong>N</strong></a>
146 | <a href="#O"><strong>O</strong></a> 146 | <a href="#O"><strong>O</strong></a>
147 | <a href="#P"><strong>P</strong></a> 147 | <a href="#P"><strong>P</strong></a>
148 | <a href="#Q"><strong>Q</strong></a>
148 | <a href="#R"><strong>R</strong></a> 149 | <a href="#R"><strong>R</strong></a>
149 | <a href="#S"><strong>S</strong></a> 150 | <a href="#S"><strong>S</strong></a>
150 | <a href="#T"><strong>T</strong></a> 151 | <a href="#T"><strong>T</strong></a>
151 | <a href="#U"><strong>U</strong></a> 152 | <a href="#U"><strong>U</strong></a>
153 | <a href="#W"><strong>W</strong></a>
152 | <a href="#Z"><strong>Z</strong></a> 154 | <a href="#Z"><strong>Z</strong></a>
153 155
154</div> 156</div>
@@ -176,15 +178,23 @@
176 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__init__">(eventmq.utils.classes.HeartbeatMixin method)</a> 178 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__init__">(eventmq.utils.classes.HeartbeatMixin method)</a>
177 </dt> 179 </dt>
178 180
181
182 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter.__init__">(eventmq.utils.timeutils.IntervalIter method)</a>
183 </dt>
184
179 </dl></dd> 185 </dl></dd>
180 </dl></td> 186 </dl></td>
181 <td style="width: 33%" valign="top"><dl> 187 <td style="width: 33%" valign="top"><dl>
182 188
183 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__weakref__">__weakref__ (eventmq.utils.classes.HeartbeatMixin attribute)</a> 189 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.__weakref__">__weakref__ (eventmq.utils.classes.EMQPService attribute)</a>
184 </dt> 190 </dt>
185 191
186 <dd><dl> 192 <dd><dl>
187 193
194 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.__weakref__">(eventmq.utils.classes.HeartbeatMixin attribute)</a>
195 </dt>
196
197
188 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.__weakref__">(eventmq.utils.classes.ZMQReceiveMixin attribute)</a> 198 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQReceiveMixin.__weakref__">(eventmq.utils.classes.ZMQReceiveMixin attribute)</a>
189 </dt> 199 </dt>
190 200
@@ -192,6 +202,10 @@
192 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.__weakref__">(eventmq.utils.classes.ZMQSendMixin attribute)</a> 202 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.__weakref__">(eventmq.utils.classes.ZMQSendMixin attribute)</a>
193 </dt> 203 </dt>
194 204
205
206 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter.__weakref__">(eventmq.utils.timeutils.IntervalIter attribute)</a>
207 </dt>
208
195 </dl></dd> 209 </dl></dd>
196 </dl></td> 210 </dl></td>
197</tr></table> 211</tr></table>
@@ -200,9 +214,23 @@
200<table style="width: 100%" class="indextable genindextable"><tr> 214<table style="width: 100%" class="indextable genindextable"><tr>
201 <td style="width: 33%" valign="top"><dl> 215 <td style="width: 33%" valign="top"><dl>
202 216
217 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.active_jobs">active_jobs (eventmq.jobmanager.JobManager attribute)</a>
218 </dt>
219
220
221 <dt><a href="router.html#eventmq.router.Router.add_scheduler">add_scheduler() (eventmq.router.Router method)</a>
222 </dt>
223
224 </dl></td>
225 <td style="width: 33%" valign="top"><dl>
226
203 <dt><a href="router.html#eventmq.router.Router.add_worker">add_worker() (eventmq.router.Router method)</a> 227 <dt><a href="router.html#eventmq.router.Router.add_worker">add_worker() (eventmq.router.Router method)</a>
204 </dt> 228 </dt>
205 229
230
231 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.available_workers">available_workers (eventmq.jobmanager.JobManager attribute)</a>
232 </dt>
233
206 </dl></td> 234 </dl></td>
207</tr></table> 235</tr></table>
208 236
@@ -220,6 +248,10 @@
220<table style="width: 100%" class="indextable genindextable"><tr> 248<table style="width: 100%" class="indextable genindextable"><tr>
221 <td style="width: 33%" valign="top"><dl> 249 <td style="width: 33%" valign="top"><dl>
222 250
251 <dt><a href="router.html#eventmq.router.Router.clean_up_dead_schedulers">clean_up_dead_schedulers() (eventmq.router.Router method)</a>
252 </dt>
253
254
223 <dt><a href="router.html#eventmq.router.Router.clean_up_dead_workers">clean_up_dead_workers() (eventmq.router.Router method)</a> 255 <dt><a href="router.html#eventmq.router.Router.clean_up_dead_workers">clean_up_dead_workers() (eventmq.router.Router method)</a>
224 </dt> 256 </dt>
225 257
@@ -252,6 +284,10 @@
252<table style="width: 100%" class="indextable genindextable"><tr> 284<table style="width: 100%" class="indextable genindextable"><tr>
253 <td style="width: 33%" valign="top"><dl> 285 <td style="width: 33%" valign="top"><dl>
254 286
287 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService">EMQPService (class in eventmq.utils.classes)</a>
288 </dt>
289
290
255 <dt><a href="client.html#module-eventmq.client">eventmq.client (module)</a> 291 <dt><a href="client.html#module-eventmq.client">eventmq.client (module)</a>
256 </dt> 292 </dt>
257 293
@@ -275,12 +311,12 @@
275 <dt><a href="receiver.html#module-eventmq.receiver">eventmq.receiver (module)</a> 311 <dt><a href="receiver.html#module-eventmq.receiver">eventmq.receiver (module)</a>
276 </dt> 312 </dt>
277 313
314 </dl></td>
315 <td style="width: 33%" valign="top"><dl>
278 316
279 <dt><a href="router.html#module-eventmq.router">eventmq.router (module)</a> 317 <dt><a href="router.html#module-eventmq.router">eventmq.router (module)</a>
280 </dt> 318 </dt>
281 319
282 </dl></td>
283 <td style="width: 33%" valign="top"><dl>
284 320
285 <dt><a href="sender.html#module-eventmq.sender">eventmq.sender (module)</a> 321 <dt><a href="sender.html#module-eventmq.sender">eventmq.sender (module)</a>
286 </dt> 322 </dt>
@@ -342,6 +378,10 @@
342<table style="width: 100%" class="indextable genindextable"><tr> 378<table style="width: 100%" class="indextable genindextable"><tr>
343 <td style="width: 33%" valign="top"><dl> 379 <td style="width: 33%" valign="top"><dl>
344 380
381 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.IntervalIter">IntervalIter (class in eventmq.utils.timeutils)</a>
382 </dt>
383
384
345 <dt><a href="exceptions.html#eventmq.exceptions.InvalidMessageError">InvalidMessageError</a> 385 <dt><a href="exceptions.html#eventmq.exceptions.InvalidMessageError">InvalidMessageError</a>
346 </dt> 386 </dt>
347 387
@@ -351,6 +391,10 @@
351 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.is_dead">is_dead() (eventmq.utils.classes.HeartbeatMixin method)</a> 391 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.is_dead">is_dead() (eventmq.utils.classes.HeartbeatMixin method)</a>
352 </dt> 392 </dt>
353 393
394
395 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.is_heartbeat_enabled">is_heartbeat_enabled (eventmq.utils.classes.EMQPService attribute)</a>
396 </dt>
397
354 </dl></td> 398 </dl></td>
355</tr></table> 399</tr></table>
356 400
@@ -361,10 +405,14 @@
361 <dt><a href="client/messages.html#eventmq.client.messages.job">job() (in module eventmq.client.messages)</a> 405 <dt><a href="client/messages.html#eventmq.client.messages.job">job() (in module eventmq.client.messages)</a>
362 </dt> 406 </dt>
363 407
408
409 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager">JobManager (class in eventmq.jobmanager)</a>
410 </dt>
411
364 </dl></td> 412 </dl></td>
365 <td style="width: 33%" valign="top"><dl> 413 <td style="width: 33%" valign="top"><dl>
366 414
367 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager">JobManager (class in eventmq.jobmanager)</a> 415 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.jobmanager_main">jobmanager_main() (eventmq.jobmanager.JobManager method)</a>
368 </dt> 416 </dt>
369 417
370 </dl></td> 418 </dl></td>
@@ -406,11 +454,15 @@
406<table style="width: 100%" class="indextable genindextable"><tr> 454<table style="width: 100%" class="indextable genindextable"><tr>
407 <td style="width: 33%" valign="top"><dl> 455 <td style="width: 33%" valign="top"><dl>
408 456
409 <dt><a href="receiver.html#eventmq.receiver.Receiver.name">name (eventmq.receiver.Receiver attribute)</a> 457 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.name">name (eventmq.jobmanager.JobManager attribute)</a>
410 </dt> 458 </dt>
411 459
412 <dd><dl> 460 <dd><dl>
413 461
462 <dt><a href="receiver.html#eventmq.receiver.Receiver.name">(eventmq.receiver.Receiver attribute)</a>
463 </dt>
464
465
414 <dt><a href="sender.html#eventmq.sender.Sender.name">(eventmq.sender.Sender attribute)</a> 466 <dt><a href="sender.html#eventmq.sender.Sender.name">(eventmq.sender.Sender attribute)</a>
415 </dt> 467 </dt>
416 468
@@ -422,7 +474,7 @@
422<table style="width: 100%" class="indextable genindextable"><tr> 474<table style="width: 100%" class="indextable genindextable"><tr>
423 <td style="width: 33%" valign="top"><dl> 475 <td style="width: 33%" valign="top"><dl>
424 476
425 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.on_ack">on_ack() (eventmq.jobmanager.JobManager method)</a> 477 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.on_ack">on_ack() (eventmq.utils.classes.EMQPService method)</a>
426 </dt> 478 </dt>
427 479
428 480
@@ -439,12 +491,12 @@
439 <dt><a href="router.html#eventmq.router.Router.on_inform">on_inform() (eventmq.router.Router method)</a> 491 <dt><a href="router.html#eventmq.router.Router.on_inform">on_inform() (eventmq.router.Router method)</a>
440 </dt> 492 </dt>
441 493
442 </dl></td>
443 <td style="width: 33%" valign="top"><dl>
444 494
445 <dt><a href="router.html#eventmq.router.Router.on_ready">on_ready() (eventmq.router.Router method)</a> 495 <dt><a href="router.html#eventmq.router.Router.on_ready">on_ready() (eventmq.router.Router method)</a>
446 </dt> 496 </dt>
447 497
498 </dl></td>
499 <td style="width: 33%" valign="top"><dl>
448 500
449 <dt><a href="router.html#eventmq.router.Router.on_receive_request">on_receive_request() (eventmq.router.Router method)</a> 501 <dt><a href="router.html#eventmq.router.Router.on_receive_request">on_receive_request() (eventmq.router.Router method)</a>
450 </dt> 502 </dt>
@@ -453,6 +505,10 @@
453 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.on_request">on_request() (eventmq.jobmanager.JobManager method)</a> 505 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.on_request">on_request() (eventmq.jobmanager.JobManager method)</a>
454 </dt> 506 </dt>
455 507
508
509 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.outgoing">outgoing (eventmq.jobmanager.JobManager attribute)</a>
510 </dt>
511
456 </dl></td> 512 </dl></td>
457</tr></table> 513</tr></table>
458 514
@@ -482,7 +538,7 @@
482 </dt> 538 </dt>
483 539
484 540
485 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.process_message">process_message() (eventmq.jobmanager.JobManager method)</a> 541 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.process_message">process_message() (eventmq.utils.classes.EMQPService method)</a>
486 </dt> 542 </dt>
487 543
488 544
@@ -492,6 +548,22 @@
492 </dl></td> 548 </dl></td>
493</tr></table> 549</tr></table>
494 550
551<h2 id="Q">Q</h2>
552<table style="width: 100%" class="indextable genindextable"><tr>
553 <td style="width: 33%" valign="top"><dl>
554
555 <dt><a href="router.html#eventmq.router.Router.queue_message">queue_message() (eventmq.router.Router method)</a>
556 </dt>
557
558 </dl></td>
559 <td style="width: 33%" valign="top"><dl>
560
561 <dt><a href="router.html#eventmq.router.Router.queues">queues (eventmq.router.Router attribute)</a>
562 </dt>
563
564 </dl></td>
565</tr></table>
566
495<h2 id="R">R</h2> 567<h2 id="R">R</h2>
496<table style="width: 100%" class="indextable genindextable"><tr> 568<table style="width: 100%" class="indextable genindextable"><tr>
497 <td style="width: 33%" valign="top"><dl> 569 <td style="width: 33%" valign="top"><dl>
@@ -514,6 +586,10 @@
514 </dt> 586 </dt>
515 587
516 588
589 <dt><a href="router.html#eventmq.router.Router.received_disconnect">received_disconnect (eventmq.router.Router attribute)</a>
590 </dt>
591
592
517 <dt><a href="receiver.html#eventmq.receiver.Receiver">Receiver (class in eventmq.receiver)</a> 593 <dt><a href="receiver.html#eventmq.receiver.Receiver">Receiver (class in eventmq.receiver)</a>
518 </dt> 594 </dt>
519 595
@@ -536,17 +612,27 @@
536 </dt> 612 </dt>
537 613
538 614
539 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.reset">reset() (eventmq.jobmanager.JobManager method)</a> 615 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.reset">reset() (eventmq.utils.classes.EMQPService method)</a>
540 </dt> 616 </dt>
541 617
542 618
543 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.reset_heartbeat_counters">reset_heartbeat_counters() (eventmq.utils.classes.HeartbeatMixin method)</a> 619 <dt><a href="router.html#eventmq.router.Router.reset_heartbeat_counters">reset_heartbeat_counters() (eventmq.router.Router method)</a>
544 </dt> 620 </dt>
545 621
622 <dd><dl>
623
624 <dt><a href="utils/classes.html#eventmq.utils.classes.HeartbeatMixin.reset_heartbeat_counters">(eventmq.utils.classes.HeartbeatMixin method)</a>
625 </dt>
626
627 </dl></dd>
546 628
547 <dt><a href="router.html#eventmq.router.Router">Router (class in eventmq.router)</a> 629 <dt><a href="router.html#eventmq.router.Router">Router (class in eventmq.router)</a>
548 </dt> 630 </dt>
549 631
632
633 <dt><a href="router.html#eventmq.router.Router.router_main">router_main() (eventmq.router.Router method)</a>
634 </dt>
635
550 </dl></td> 636 </dl></td>
551</tr></table> 637</tr></table>
552 638
@@ -554,6 +640,18 @@
554<table style="width: 100%" class="indextable genindextable"><tr> 640<table style="width: 100%" class="indextable genindextable"><tr>
555 <td style="width: 33%" valign="top"><dl> 641 <td style="width: 33%" valign="top"><dl>
556 642
643 <dt><a href="client/messages.html#eventmq.client.messages.schedule">schedule() (in module eventmq.client.messages)</a>
644 </dt>
645
646
647 <dt><a href="router.html#eventmq.router.Router.scheduler_queue">scheduler_queue (eventmq.router.Router attribute)</a>
648 </dt>
649
650
651 <dt><a href="router.html#eventmq.router.Router.schedulers">schedulers (eventmq.router.Router attribute)</a>
652 </dt>
653
654
557 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.seconds_until">seconds_until() (in module eventmq.utils.timeutils)</a> 655 <dt><a href="utils/timeutils.html#eventmq.utils.timeutils.seconds_until">seconds_until() (in module eventmq.utils.timeutils)</a>
558 </dt> 656 </dt>
559 657
@@ -583,12 +681,12 @@
583 </dt> 681 </dt>
584 682
585 </dl></dd> 683 </dl></dd>
684 </dl></td>
685 <td style="width: 33%" valign="top"><dl>
586 686
587 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.send_inform">send_inform() (eventmq.jobmanager.JobManager method)</a> 687 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.send_inform">send_inform() (eventmq.utils.classes.EMQPService method)</a>
588 </dt> 688 </dt>
589 689
590 </dl></td>
591 <td style="width: 33%" valign="top"><dl>
592 690
593 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send_multipart">send_multipart() (eventmq.utils.classes.ZMQSendMixin method)</a> 691 <dt><a href="utils/classes.html#eventmq.utils.classes.ZMQSendMixin.send_multipart">send_multipart() (eventmq.utils.classes.ZMQSendMixin method)</a>
594 </dt> 692 </dt>
@@ -602,6 +700,14 @@
602 </dt> 700 </dt>
603 701
604 702
703 <dt><a href="client/messages.html#eventmq.client.messages.send_schedule_request">send_schedule_request() (in module eventmq.client.messages)</a>
704 </dt>
705
706
707 <dt><a href="router.html#eventmq.router.Router.send_schedulers_heartbeats">send_schedulers_heartbeats() (eventmq.router.Router method)</a>
708 </dt>
709
710
605 <dt><a href="router.html#eventmq.router.Router.send_workers_heartbeats">send_workers_heartbeats() (eventmq.router.Router method)</a> 711 <dt><a href="router.html#eventmq.router.Router.send_workers_heartbeats">send_workers_heartbeats() (eventmq.router.Router method)</a>
606 </dt> 712 </dt>
607 713
@@ -610,12 +716,12 @@
610 </dt> 716 </dt>
611 717
612 718
613 <dt><a href="jobmanager.html#eventmq.jobmanager.JobManager.start">start() (eventmq.jobmanager.JobManager method)</a> 719 <dt><a href="router.html#eventmq.router.Router.start">start() (eventmq.router.Router method)</a>
614 </dt> 720 </dt>
615 721
616 <dd><dl> 722 <dd><dl>
617 723
618 <dt><a href="router.html#eventmq.router.Router.start">(eventmq.router.Router method)</a> 724 <dt><a href="utils/classes.html#eventmq.utils.classes.EMQPService.start">(eventmq.utils.classes.EMQPService method)</a>
619 </dt> 725 </dt>
620 726
621 </dl></dd> 727 </dl></dd>
@@ -636,12 +742,40 @@
636<table style="width: 100%" class="indextable genindextable"><tr> 742<table style="width: 100%" class="indextable genindextable"><tr>
637 <td style="width: 33%" valign="top"><dl> 743 <td style="width: 33%" valign="top"><dl>
638 744
745 <dt><a href="receiver.html#eventmq.receiver.Receiver.unbind">unbind() (eventmq.receiver.Receiver method)</a>
746 </dt>
747
748 <dd><dl>
749
750 <dt><a href="sender.html#eventmq.sender.Sender.unbind">(eventmq.sender.Sender method)</a>
751 </dt>
752
753 </dl></dd>
754 </dl></td>
755 <td style="width: 33%" valign="top"><dl>
756
639 <dt><a href="poller.html#eventmq.poller.Poller.unregister">unregister() (eventmq.poller.Poller method)</a> 757 <dt><a href="poller.html#eventmq.poller.Poller.unregister">unregister() (eventmq.poller.Poller method)</a>
640 </dt> 758 </dt>
641 759
642 </dl></td> 760 </dl></td>
643</tr></table> 761</tr></table>
644 762
763<h2 id="W">W</h2>
764<table style="width: 100%" class="indextable genindextable"><tr>
765 <td style="width: 33%" valign="top"><dl>
766
767 <dt><a href="router.html#eventmq.router.Router.waiting_messages">waiting_messages (eventmq.router.Router attribute)</a>
768 </dt>
769
770 </dl></td>
771 <td style="width: 33%" valign="top"><dl>
772
773 <dt><a href="router.html#eventmq.router.Router.workers">workers (eventmq.router.Router attribute)</a>
774 </dt>
775
776 </dl></td>
777</tr></table>
778
645<h2 id="Z">Z</h2> 779<h2 id="Z">Z</h2>
646<table style="width: 100%" class="indextable genindextable"><tr> 780<table style="width: 100%" class="indextable genindextable"><tr>
647 <td style="width: 33%" valign="top"><dl> 781 <td style="width: 33%" valign="top"><dl>
diff --git a/getting_started.html b/getting_started.html
new file mode 100644
index 0000000..5b254f8
--- /dev/null
+++ b/getting_started.html
@@ -0,0 +1,197 @@
1
2
3<!DOCTYPE html>
4<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
5<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
6<head>
7 <meta charset="utf-8">
8
9 <meta name="viewport" content="width=device-width, initial-scale=1.0">
10
11 <title>Getting Started &mdash; EventMQ 0 documentation</title>
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
28
29
30
31
32
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34
35
36 <script src="_static/js/modernizr.min.js"></script>
37
38</head>
39
40<body class="wy-body-for-nav" role="document">
41
42 <div class="wy-grid-for-nav">
43
44
45 <nav data-toggle="wy-nav-shift" class="wy-nav-side">
46 <div class="wy-side-scroll">
47 <div class="wy-side-nav-search">
48
49
50
51 <a href="index.html" class="icon icon-home"> EventMQ
52
53
54
55 </a>
56
57
58
59
60 <div class="version">
61 0
62 </div>
63
64
65
66
67<div role="search">
68 <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
69 <input type="text" name="q" placeholder="Search docs" />
70 <input type="hidden" name="check_keywords" value="yes" />
71 <input type="hidden" name="area" value="default" />
72 </form>
73</div>
74
75
76 </div>
77
78 <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
79
80
81
82 <ul>
83<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li>
84<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a></li>
85</ul>
86
87
88
89 </div>
90 </div>
91 </nav>
92
93 <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
94
95
96 <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
97 <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
98 <a href="index.html">EventMQ</a>
99 </nav>
100
101
102
103 <div class="wy-nav-content">
104 <div class="rst-content">
105
106
107
108
109
110
111<div role="navigation" aria-label="breadcrumbs navigation">
112 <ul class="wy-breadcrumbs">
113 <li><a href="index.html">Docs</a> &raquo;</li>
114
115 <li>Getting Started</li>
116 <li class="wy-breadcrumbs-aside">
117
118
119 <a href="_sources/getting_started.txt" rel="nofollow"> View page source</a>
120
121
122 </li>
123 </ul>
124 <hr/>
125</div>
126 <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
127 <div itemprop="articleBody">
128
129 <div class="section" id="getting-started">
130<h1>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h1>
131<p>To run a simple messaging system run the following</p>
132<p>pip install -r requirements.</p>
133<p>ln -s path/to/eventmq/eventmq /home/vagrant/.virtualenvs/lib/python2.7/site-packages/eventmq</p>
134<p>path/to/eventmq/bin/router - run the router
135path/to/eventmq/bin/worker - run a worker. run this command more than once to run more than one worker.</p>
136</div>
137
138
139 </div>
140 </div>
141 <footer>
142
143
144 <hr/>
145
146 <div role="contentinfo">
147 <p>
148 &copy; Copyright 2015, eventboard.io.
149
150 </p>
151 </div>
152 Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
153
154</footer>
155
156 </div>
157 </div>
158
159 </section>
160
161 </div>
162
163
164
165
166
167 <script type="text/javascript">
168 var DOCUMENTATION_OPTIONS = {
169 URL_ROOT:'./',
170 VERSION:'0',
171 COLLAPSE_INDEX:false,
172 FILE_SUFFIX:'.html',
173 HAS_SOURCE: true
174 };
175 </script>
176 <script type="text/javascript" src="_static/jquery.js"></script>
177 <script type="text/javascript" src="_static/underscore.js"></script>
178 <script type="text/javascript" src="_static/doctools.js"></script>
179
180
181
182
183
184 <script type="text/javascript" src="_static/js/theme.js"></script>
185
186
187
188
189 <script type="text/javascript">
190 jQuery(function () {
191 SphinxRtdTheme.StickyNav.enable();
192 });
193 </script>
194
195
196</body>
197</html> \ No newline at end of file
diff --git a/glossary.html b/glossary.html
new file mode 100644
index 0000000..d49f7f6
--- /dev/null
+++ b/glossary.html
@@ -0,0 +1,196 @@
1
2
3<!DOCTYPE html>
4<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
5<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
6<head>
7 <meta charset="utf-8">
8
9 <meta name="viewport" content="width=device-width, initial-scale=1.0">
10
11 <title>Glossary &mdash; EventMQ 0 documentation</title>
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
28
29
30
31
32
33 <link rel="top" title="EventMQ 0 documentation" href="index.html"/>
34
35
36 <script src="_static/js/modernizr.min.js"></script>
37
38</head>
39
40<body class="wy-body-for-nav" role="document">
41
42 <div class="wy-grid-for-nav">
43
44
45 <nav data-toggle="wy-nav-shift" class="wy-nav-side">
46 <div class="wy-side-scroll">
47 <div class="wy-side-nav-search">
48
49
50
51 <a href="index.html" class="icon icon-home"> EventMQ
52
53
54
55 </a>
56
57
58
59
60 <div class="version">
61 0
62 </div>
63
64
65
66
67<div role="search">
68 <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
69 <input type="text" name="q" placeholder="Search docs" />
70 <input type="hidden" name="check_keywords" value="yes" />
71 <input type="hidden" name="area" value="default" />
72 </form>
73</div>
74
75
76 </div>
77
78 <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
79
80
81
82 <ul>
83<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li>
84<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a></li>
85</ul>
86
87
88
89 </div>
90 </div>
91 </nav>
92
93 <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
94
95
96 <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
97 <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
98 <a href="index.html">EventMQ</a>
99 </nav>
100
101
102
103 <div class="wy-nav-content">
104 <div class="rst-content">
105
106
107
108
109
110
111<div role="navigation" aria-label="breadcrumbs navigation">
112 <ul class="wy-breadcrumbs">
113 <li><a href="index.html">Docs</a> &raquo;</li>
114
115 <li>Glossary</li>
116 <li class="wy-breadcrumbs-aside">
117
118
119 <a href="_sources/glossary.txt" rel="nofollow"> View page source</a>
120
121
122 </li>
123 </ul>
124 <hr/>
125</div>
126 <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
127 <div itemprop="articleBody">
128
129 <div class="section" id="glossary">
130<h1>Glossary<a class="headerlink" href="#glossary" title="Permalink to this headline">¶</a></h1>
131<div class="section" id="d">
132<h2>D<a class="headerlink" href="#d" title="Permalink to this headline">¶</a></h2>
133<p>device - The broker and anything that helps the broker (scheduler, jobmanager).</p>
134</div>
135</div>
136
137
138 </div>
139 </div>
140 <footer>
141
142
143 <hr/>
144
145 <div role="contentinfo">
146 <p>
147 &copy; Copyright 2015, eventboard.io.
148
149 </p>
150 </div>
151 Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
152
153</footer>
154
155 </div>
156 </div>
157
158 </section>
159
160 </div>
161
162
163
164
165
166 <script type="text/javascript">
167 var DOCUMENTATION_OPTIONS = {
168 URL_ROOT:'./',
169 VERSION:'0',
170 COLLAPSE_INDEX:false,
171 FILE_SUFFIX:'.html',
172 HAS_SOURCE: true
173 };
174 </script>
175 <script type="text/javascript" src="_static/jquery.js"></script>
176 <script type="text/javascript" src="_static/underscore.js"></script>
177 <script type="text/javascript" src="_static/doctools.js"></script>
178
179
180
181
182
183 <script type="text/javascript" src="_static/js/theme.js"></script>
184
185
186
187
188 <script type="text/javascript">
189 jQuery(function () {
190 SphinxRtdTheme.StickyNav.enable();
191 });
192 </script>
193
194
195</body>
196</html> \ No newline at end of file
diff --git a/index.html b/index.html
index 87da31e..d806a1e 100644
--- a/index.html
+++ b/index.html
@@ -143,7 +143,10 @@
143</ul> 143</ul>
144</li> 144</li>
145<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a><ul> 145<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a><ul>
146<li class="toctree-l2"><a class="reference internal" href="protocol.html">EventMQ Protocol Specification</a></li> 146<li class="toctree-l2"><a class="reference internal" href="protocol.html">Goals</a></li>
147<li class="toctree-l2"><a class="reference internal" href="protocol.html#license">License</a></li>
148<li class="toctree-l2"><a class="reference internal" href="protocol.html#language">Language</a></li>
149<li class="toctree-l2"><a class="reference internal" href="protocol.html#architecture">Architecture</a></li>
147<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li> 150<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li>
148<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li> 151<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq/issues">Issues</a></li>
149</ul> 152</ul>
diff --git a/jobmanager.html b/jobmanager.html
index 638acd6..1553d9e 100644
--- a/jobmanager.html
+++ b/jobmanager.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2 current"><a class="current reference internal" href=""><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
@@ -167,10 +168,32 @@ generated.</td>
167</table> 168</table>
168</dd></dl> 169</dd></dl>
169 170
171<dl class="attribute">
172<dt id="eventmq.jobmanager.JobManager.active_jobs">
173<code class="descname">active_jobs</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.jobmanager.JobManager.active_jobs" title="Permalink to this definition">¶</a></dt>
174<dd><p>Jobs that are running should be stored in <cite>active_jobs</cite>. There
175should always be at most <cite>available_workers</cite> count of active jobs.
176this point the manager should wait for a slot to free up.</p>
177</dd></dl>
178
179<dl class="attribute">
180<dt id="eventmq.jobmanager.JobManager.available_workers">
181<code class="descname">available_workers</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.jobmanager.JobManager.available_workers" title="Permalink to this definition">¶</a></dt>
182<dd><p>Number of workers that are available to have a job executed. This
183number changes as workers become busy with jobs</p>
184</dd></dl>
185
170<dl class="method"> 186<dl class="method">
171<dt id="eventmq.jobmanager.JobManager.on_ack"> 187<dt id="eventmq.jobmanager.JobManager.jobmanager_main">
172<code class="descname">on_ack</code><span class="sig-paren">(</span><em>msgid</em>, <em>ackd_msgid</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.on_ack" title="Permalink to this definition">¶</a></dt> 188<code class="descname">jobmanager_main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.jobmanager_main" title="Permalink to this definition">¶</a></dt>
173<dd><p>Sets <code class="xref py py-attr docutils literal"><span class="pre">awaiting_ack</span></code> to False</p> 189<dd><p>Kick off jobmanager with logging and settings import</p>
190</dd></dl>
191
192<dl class="attribute">
193<dt id="eventmq.jobmanager.JobManager.name">
194<code class="descname">name</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.jobmanager.JobManager.name" title="Permalink to this definition">¶</a></dt>
195<dd><p>Define the name of this JobManager instance. Useful to know when
196referring to the logs.</p>
174</dd></dl> 197</dd></dl>
175 198
176<dl class="method"> 199<dl class="method">
@@ -213,31 +236,12 @@ HEARTBEAT</p>
213</dl> 236</dl>
214</dd></dl> 237</dd></dl>
215 238
216<dl class="method"> 239<dl class="attribute">
217<dt id="eventmq.jobmanager.JobManager.process_message"> 240<dt id="eventmq.jobmanager.JobManager.outgoing">
218<code class="descname">process_message</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.process_message" title="Permalink to this definition">¶</a></dt> 241<code class="descname">outgoing</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.jobmanager.JobManager.outgoing" title="Permalink to this definition">¶</a></dt>
219<dd><p>Processes a message</p> 242<dd><p>JobManager starts out by INFORMing the router of it&#8217;s existance,
220<table class="docutils field-list" frame="void" rules="none"> 243then telling the router that it is READY. The reply will be the unit
221<col class="field-name" /> 244of work.</p>
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"><strong>msg</strong> &#8211; The message received from the socket to parse and process.
225Processing takes form of calling an <cite>on_COMMAND</cite> method.</td>
226</tr>
227</tbody>
228</table>
229</dd></dl>
230
231<dl class="method">
232<dt id="eventmq.jobmanager.JobManager.reset">
233<code class="descname">reset</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.reset" title="Permalink to this definition">¶</a></dt>
234<dd><p>Resets the current connection by closing and reopening the socket</p>
235</dd></dl>
236
237<dl class="method">
238<dt id="eventmq.jobmanager.JobManager.send_inform">
239<code class="descname">send_inform</code><span class="sig-paren">(</span><em>queue=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.send_inform" title="Permalink to this definition">¶</a></dt>
240<dd><p>Send an INFORM command</p>
241</dd></dl> 245</dd></dl>
242 246
243<dl class="method"> 247<dl class="method">
@@ -247,20 +251,6 @@ Processing takes form of calling an <cite>on_COMMAND</cite> method.</td>
247for another REQUEST message.</p> 251for another REQUEST message.</p>
248</dd></dl> 252</dd></dl>
249 253
250<dl class="method">
251<dt id="eventmq.jobmanager.JobManager.start">
252<code class="descname">start</code><span class="sig-paren">(</span><em>addr='tcp://127.0.0.1:47291'</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.jobmanager.JobManager.start" title="Permalink to this definition">¶</a></dt>
253<dd><p>Connect to <cite>addr</cite> and begin listening for job requests</p>
254<table class="docutils field-list" frame="void" rules="none">
255<col class="field-name" />
256<col class="field-body" />
257<tbody valign="top">
258<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to connect to</td>
259</tr>
260</tbody>
261</table>
262</dd></dl>
263
264</dd></dl> 254</dd></dl>
265 255
266</div> 256</div>
diff --git a/objects.inv b/objects.inv
index 40f65ba..5b59fb8 100644
--- a/objects.inv
+++ b/objects.inv
Binary files differ
diff --git a/protocol.html b/protocol.html
index 1aff716..221bae0 100644
--- a/protocol.html
+++ b/protocol.html
@@ -8,7 +8,7 @@
8 8
9 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 9 <meta name="viewport" content="width=device-width, initial-scale=1.0">
10 10
11 <title>EventMQ Protocol Specification &mdash; EventMQ 0 documentation</title> 11 <title>Goals &mdash; EventMQ 0 documentation</title>
12 12
13 13
14 14
@@ -84,20 +84,18 @@
84 <ul class="current"> 84 <ul class="current">
85<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li> 85<li class="toctree-l1"><a class="reference internal" href="api.html">API Documentation</a></li>
86<li class="toctree-l1 current"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="contributing.html">Contributing to EventMQ</a><ul class="current">
87<li class="toctree-l2 current"><a class="current reference internal" href="">EventMQ Protocol Specification</a><ul> 87<li class="toctree-l2 current"><a class="current reference internal" href="">Goals</a></li>
88<li class="toctree-l3"><a class="reference internal" href="#goals">Goals</a></li> 88<li class="toctree-l2"><a class="reference internal" href="#license">License</a></li>
89<li class="toctree-l3"><a class="reference internal" href="#license">License</a></li> 89<li class="toctree-l2"><a class="reference internal" href="#language">Language</a></li>
90<li class="toctree-l3"><a class="reference internal" href="#language">Language</a></li> 90<li class="toctree-l2"><a class="reference internal" href="#architecture">Architecture</a><ul>
91<li class="toctree-l3"><a class="reference internal" href="#architecture">Architecture</a><ul> 91<li class="toctree-l3"><a class="reference internal" href="#topology">Topology</a></li>
92<li class="toctree-l4"><a class="reference internal" href="#topology">Topology</a></li> 92<li class="toctree-l3"><a class="reference internal" href="#router-addressing">ROUTER Addressing</a></li>
93<li class="toctree-l4"><a class="reference internal" href="#router-addressing">ROUTER Addressing</a></li> 93<li class="toctree-l3"><a class="reference internal" href="#global-frames">Global Frames</a></li>
94<li class="toctree-l4"><a class="reference internal" href="#global-frames">Global Frames</a></li> 94<li class="toctree-l3"><a class="reference internal" href="#emqp-client">eMQP / Client</a></li>
95<li class="toctree-l4"><a class="reference internal" href="#emqp-client">eMQP / Client</a></li> 95<li class="toctree-l3"><a class="reference internal" href="#emqp-scheduler">eMQP / Scheduler</a></li>
96<li class="toctree-l4"><a class="reference internal" href="#emqp-worker">eMQP / Worker</a></li> 96<li class="toctree-l3"><a class="reference internal" href="#emqp-worker">eMQP / Worker</a></li>
97<li class="toctree-l4"><a class="reference internal" href="#heartbeating">Heartbeating</a></li> 97<li class="toctree-l3"><a class="reference internal" href="#heartbeating">Heartbeating</a></li>
98<li class="toctree-l4"><a class="reference internal" href="#request-headers">Request Headers</a></li> 98<li class="toctree-l3"><a class="reference internal" href="#request-headers">REQUEST Headers</a></li>
99</ul>
100</li>
101</ul> 99</ul>
102</li> 100</li>
103<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li> 101<li class="toctree-l2"><a class="reference external" href="https://github.com/enderlabs/eventmq">Source Code</a></li>
@@ -136,7 +134,7 @@
136 134
137 <li><a href="contributing.html">Contributing to EventMQ</a> &raquo;</li> 135 <li><a href="contributing.html">Contributing to EventMQ</a> &raquo;</li>
138 136
139 <li>EventMQ Protocol Specification</li> 137 <li>Goals</li>
140 <li class="wy-breadcrumbs-aside"> 138 <li class="wy-breadcrumbs-aside">
141 139
142 140
@@ -150,11 +148,12 @@
150 <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> 148 <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
151 <div itemprop="articleBody"> 149 <div itemprop="articleBody">
152 150
153 <div class="section" id="eventmq-protocol-specification"> 151 <p>/<strong>**************************e
154<h1>EventMQ Protocol Specification<a class="headerlink" href="#eventmq-protocol-specification" title="Permalink to this headline">¶</a></h1> 152EventMQ Protocol Specification
155<p><em>The status of this document is alpha and subject to heavy change</em></p> 153****************************</strong>
154<em>The status of this document is alpha and subject to heavy change</em></p>
156<div class="section" id="goals"> 155<div class="section" id="goals">
157<h2>Goals<a class="headerlink" href="#goals" title="Permalink to this headline">¶</a></h2> 156<h1>Goals<a class="headerlink" href="#goals" title="Permalink to this headline">¶</a></h1>
158<p>The 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</p> 157<p>The 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</p>
159<p>The goals are to:</p> 158<p>The goals are to:</p>
160<blockquote> 159<blockquote>
@@ -167,32 +166,32 @@
167</div></blockquote> 166</div></blockquote>
168</div> 167</div>
169<div class="section" id="license"> 168<div class="section" id="license">
170<h2>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h2> 169<h1>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h1>
171<p>This Specification is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</p> 170<p>This Specification is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</p>
172<p>This Specification is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p> 171<p>This Specification is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
173</div> 172</div>
174<div class="section" id="language"> 173<div class="section" id="language">
175<h2>Language<a class="headerlink" href="#language" title="Permalink to this headline">¶</a></h2> 174<h1>Language<a class="headerlink" href="#language" title="Permalink to this headline">¶</a></h1>
176<p>The key words &#8220;MUST&#8221;, &#8220;MUST NOT&#8221;, &#8220;REQUIRED&#8221;, &#8220;SHALL&#8221;, &#8220;SHALL NOT&#8221;, &#8220;SHOULD&#8221;, &#8220;SHOULD NOT&#8221;, &#8220;RECOMMENDED&#8221;, &#8220;MAY&#8221;, and &#8220;OPTIONAL&#8221; in this document are to be interpreted as described in RFC 2119[[1](<a class="reference external" href="http://tools.ietf.org/html/rfc2119">http://tools.ietf.org/html/rfc2119</a>)].</p> 175<p>The key words &#8220;MUST&#8221;, &#8220;MUST NOT&#8221;, &#8220;REQUIRED&#8221;, &#8220;SHALL&#8221;, &#8220;SHALL NOT&#8221;, &#8220;SHOULD&#8221;, &#8220;SHOULD NOT&#8221;, &#8220;RECOMMENDED&#8221;, &#8220;MAY&#8221;, and &#8220;OPTIONAL&#8221; in this document are to be interpreted as described in RFC 2119[[1](<a class="reference external" href="http://tools.ietf.org/html/rfc2119">http://tools.ietf.org/html/rfc2119</a>)].</p>
177</div> 176</div>
178<div class="section" id="architecture"> 177<div class="section" id="architecture">
179<h2>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline">¶</a></h2> 178<h1>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline">¶</a></h1>
180<p>insert pretty picture here</p> 179<p>insert pretty picture here</p>
181<div class="section" id="topology"> 180<div class="section" id="topology">
182<h3>Topology<a class="headerlink" href="#topology" title="Permalink to this headline">¶</a></h3> 181<h2>Topology<a class="headerlink" href="#topology" title="Permalink to this headline">¶</a></h2>
183<p>eMQP connects a set of client applications (e.g. web servers), a broker, and a pool of workers. Clients connect to the broker as well as the workers.</p> 182<p>eMQP connects a set of client applications (e.g. web servers), a broker, and a pool of workers. Clients connect to the broker as well as the workers.</p>
184<p>&#8216;Clients&#8217; is defined as application issuing requests and &#8216;workers&#8217; as applications that process these requests. (Workers consist of a <cite>JobManager</cite> and a pool of <cite>Worker</cite> resources where the job executes.)</p> 183<p>&#8216;Clients&#8217; is defined as application issuing requests and &#8216;workers&#8217; as applications that process these requests. (Workers consist of a <cite>JobManager</cite> and a pool of <cite>Worker</cite> resources where the job executes.)</p>
185<p>The EventMQ broker handles a set of named queues. The broker SHOULD serve clients on a fair request and MAY deliver requests to workers on any basis, including 0MQ&#8217;s built-in round robin or least-recently used.</p> 184<p>The EventMQ broker handles a set of named queues. The broker SHOULD serve clients on a fair request and MAY deliver requests to workers on any basis, including 0MQ&#8217;s built-in round robin or least-recently used.</p>
186</div> 185</div>
187<div class="section" id="router-addressing"> 186<div class="section" id="router-addressing">
188<h3>ROUTER Addressing<a class="headerlink" href="#router-addressing" title="Permalink to this headline">¶</a></h3> 187<h2>ROUTER Addressing<a class="headerlink" href="#router-addressing" title="Permalink to this headline">¶</a></h2>
189<p>In the case of request-reply, the broker MUST use a ROUTER socket to accept requests from both clients and workers. The broker MAY use a seperate socket implementing a subset of eMQP, or MAY use a single socket implementing all of eMQP.</p> 188<p>In the case of request-reply, the broker MUST use a ROUTER socket to accept requests from both clients and workers. The broker MAY use a seperate socket implementing a subset of eMQP, or MAY use a single socket implementing all of eMQP.</p>
190<p>From the 0MQ manual[[2](<a class="reference external" href="http://api.zeromq.org/master:zmq-socket">http://api.zeromq.org/master:zmq-socket</a>)] 189<p>From the 0MQ manual[[2](<a class="reference external" href="http://api.zeromq.org/master:zmq-socket">http://api.zeromq.org/master:zmq-socket</a>)]
191&gt; When receiving messages a ROUTER socket shall prepend a message part containing the identity of the originating peer to the message before passing it to the application. When sending messages a ROUTER socket shall remove the first part of the message and use it to determine the identity of the peer the message shall be routed to.</p> 190&gt; When receiving messages a ROUTER socket shall prepend a message part containing the identity of the originating peer to the message before passing it to the application. When sending messages a ROUTER socket shall remove the first part of the message and use it to determine the identity of the peer the message shall be routed to.</p>
192<p>This extra frame is not shown in the specifications below.</p> 191<p>This extra frame is not shown in the specifications below.</p>
193</div> 192</div>
194<div class="section" id="global-frames"> 193<div class="section" id="global-frames">
195<h3>Global Frames<a class="headerlink" href="#global-frames" title="Permalink to this headline">¶</a></h3> 194<h2>Global Frames<a class="headerlink" href="#global-frames" title="Permalink to this headline">¶</a></h2>
196<p>An <strong>ACK</strong> command consists of a 4-frame multipart message, formatted as follows.</p> 195<p>An <strong>ACK</strong> command consists of a 4-frame multipart message, formatted as follows.</p>
197<table border="1" class="docutils"> 196<table border="1" class="docutils">
198<colgroup> 197<colgroup>
@@ -231,7 +230,7 @@
231</table> 230</table>
232</div> 231</div>
233<div class="section" id="emqp-client"> 232<div class="section" id="emqp-client">
234<h3>eMQP / Client<a class="headerlink" href="#emqp-client" title="Permalink to this headline">¶</a></h3> 233<h2>eMQP / Client<a class="headerlink" href="#emqp-client" title="Permalink to this headline">¶</a></h2>
235<p>A <strong>REQUEST</strong> command consists of a 7-frame multipart message, formatted as follows.</p> 234<p>A <strong>REQUEST</strong> command consists of a 7-frame multipart message, formatted as follows.</p>
236<table border="1" class="docutils"> 235<table border="1" class="docutils">
237<colgroup> 236<colgroup>
@@ -312,7 +311,7 @@
312</tr> 311</tr>
313<tr class="row-odd"><td>5</td> 312<tr class="row-odd"><td>5</td>
314<td>_HEADERS_</td> 313<td>_HEADERS_</td>
315<td>dictionary of headers. can be an empty set</td> 314<td>csv list of headers</td>
316</tr> 315</tr>
317<tr class="row-even"><td>6</td> 316<tr class="row-even"><td>6</td>
318<td>_MSG_</td> 317<td>_MSG_</td>
@@ -320,9 +319,140 @@
320</tr> 319</tr>
321</tbody> 320</tbody>
322</table> 321</table>
322<p>A <strong>SCHEDULE</strong> command consists of a 7-frame multipart message, formatted as follows.</p>
323<table border="1" class="docutils">
324<colgroup>
325<col width="10%" />
326<col width="23%" />
327<col width="67%" />
328</colgroup>
329<thead valign="bottom">
330<tr class="row-odd"><th class="head">FRAME</th>
331<th class="head">Value</th>
332<th class="head">Description</th>
333</tr>
334</thead>
335<tbody valign="top">
336<tr class="row-even"><td>0</td>
337<td>_EMPTY_</td>
338<td>leave empty</td>
339</tr>
340<tr class="row-odd"><td>1</td>
341<td>eMQP/1.0</td>
342<td>Protocol version</td>
343</tr>
344<tr class="row-even"><td>2</td>
345<td>SCHEDULE</td>
346<td>command</td>
347</tr>
348<tr class="row-odd"><td>3</td>
349<td>_MSGID_</td>
350<td>A unique id for the msg</td>
351</tr>
352<tr class="row-even"><td>4</td>
353<td>_TOPIC_NAME_</td>
354<td>name of queue that the job should run in</td>
355</tr>
356<tr class="row-odd"><td>5</td>
357<td>_HEADERS_</td>
358<td>csv list of headers for this message</td>
359</tr>
360<tr class="row-even"><td>6</td>
361<td>_MSG_</td>
362<td>The message to send</td>
363</tr>
364</tbody>
365</table>
366<p>An <strong>UNSCHEDULE</strong> command consists of a 7-frame multipart message, formatted as follows.</p>
367<table border="1" class="docutils">
368<colgroup>
369<col width="8%" />
370<col width="20%" />
371<col width="72%" />
372</colgroup>
373<thead valign="bottom">
374<tr class="row-odd"><th class="head">FRAME</th>
375<th class="head">Value</th>
376<th class="head">Description</th>
377</tr>
378</thead>
379<tbody valign="top">
380<tr class="row-even"><td>0</td>
381<td>_EMPTY_</td>
382<td>leave empty</td>
383</tr>
384<tr class="row-odd"><td>1</td>
385<td>eMQP/1.0</td>
386<td>Protocol version</td>
387</tr>
388<tr class="row-even"><td>2</td>
389<td>UNSCHEDULE</td>
390<td>command</td>
391</tr>
392<tr class="row-odd"><td>3</td>
393<td>_MSGID_</td>
394<td>A unique id for the msg</td>
395</tr>
396<tr class="row-even"><td>4</td>
397<td>_TOPIC_NAME_</td>
398<td>ignored for this command, broadcasted to all queues</td>
399</tr>
400<tr class="row-odd"><td>5</td>
401<td>_HEADERS_</td>
402<td>csv list of headers for this message</td>
403</tr>
404<tr class="row-even"><td>6</td>
405<td>_MSG_</td>
406<td>The message to send</td>
407</tr>
408</tbody>
409</table>
410</div>
411<div class="section" id="emqp-scheduler">
412<h2>eMQP / Scheduler<a class="headerlink" href="#emqp-scheduler" title="Permalink to this headline">¶</a></h2>
413<p>An <strong>INFORM</strong> command consists of a 6-frame multipart message, formatted as follows.</p>
414<table border="1" class="docutils">
415<colgroup>
416<col width="9%" />
417<col width="20%" />
418<col width="71%" />
419</colgroup>
420<thead valign="bottom">
421<tr class="row-odd"><th class="head">FRAME</th>
422<th class="head">Value</th>
423<th class="head">Description</th>
424</tr>
425</thead>
426<tbody valign="top">
427<tr class="row-even"><td>0</td>
428<td>_EMPTY_</td>
429<td>leave empty</td>
430</tr>
431<tr class="row-odd"><td>1</td>
432<td>eMQP/1.0</td>
433<td>Protocol version</td>
434</tr>
435<tr class="row-even"><td>2</td>
436<td>INFORM</td>
437<td>command</td>
438</tr>
439<tr class="row-odd"><td>3</td>
440<td>_MSGID_</td>
441<td>A unique id for the msg</td>
442</tr>
443<tr class="row-even"><td>4</td>
444<td>_QUEUE_NAME_</td>
445<td>csv seperated names of queue the worker belongs to</td>
446</tr>
447<tr class="row-odd"><td>5</td>
448<td>scheduler</td>
449<td>type of peer connecting</td>
450</tr>
451</tbody>
452</table>
323</div> 453</div>
324<div class="section" id="emqp-worker"> 454<div class="section" id="emqp-worker">
325<h3>eMQP / Worker<a class="headerlink" href="#emqp-worker" title="Permalink to this headline">¶</a></h3> 455<h2>eMQP / Worker<a class="headerlink" href="#emqp-worker" title="Permalink to this headline">¶</a></h2>
326<p>An <strong>INFORM</strong> command consists of a 5-frame multipart message, formatted as follows.</p> 456<p>An <strong>INFORM</strong> command consists of a 5-frame multipart message, formatted as follows.</p>
327<table border="1" class="docutils"> 457<table border="1" class="docutils">
328<colgroup> 458<colgroup>
@@ -357,6 +487,10 @@
357<td>_QUEUE_NAME_</td> 487<td>_QUEUE_NAME_</td>
358<td>csv seperated names of queue the worker belongs to</td> 488<td>csv seperated names of queue the worker belongs to</td>
359</tr> 489</tr>
490<tr class="row-odd"><td>5</td>
491<td>worker</td>
492<td>type of peer connecting</td>
493</tr>
360</tbody> 494</tbody>
361</table> 495</table>
362<p>A <strong>READY</strong> frame consists of a 4-frame multipart message, formatted as follows.</p> 496<p>A <strong>READY</strong> frame consists of a 4-frame multipart message, formatted as follows.</p>
@@ -497,20 +631,23 @@
497</table> 631</table>
498</div> 632</div>
499<div class="section" id="heartbeating"> 633<div class="section" id="heartbeating">
500<h3>Heartbeating<a class="headerlink" href="#heartbeating" title="Permalink to this headline">¶</a></h3> 634<h2>Heartbeating<a class="headerlink" href="#heartbeating" title="Permalink to this headline">¶</a></h2>
501<blockquote> 635<blockquote>
502<div><ul class="simple"> 636<div><ul class="simple">
503<li>HEARTBEAT commands are valid at any time after an INFORM command</li> 637<li>HEARTBEAT commands are valid at any time after an INFORM command</li>
504<li>Any command except DISCONNECT act as a heartbeat. Peers SHOULD NOT send HEARTBEAT commands while sending other commands.</li> 638<li>Any command except DISCONNECT act as a heartbeat. Peers SHOULD NOT send HEARTBEAT commands while sending other commands.</li>
505<li>Both worker and broker MUST send heartbeats at regular and agreed-upon intervals.</li> 639<li>Worker and broker MUST send heartbeats at regular and agreed-upon intervals.</li>
640<li>Scheduler and broker MUST send heartbeats at regular and agreed-upon intervals.</li>
506<li>If the worker detects that the broker disconnected it SHOULD restart the conversation.</li> 641<li>If the worker detects that the broker disconnected it SHOULD restart the conversation.</li>
507<li>If the broker detects that a worker has disconnected it should stop sending it a message of any type.</li> 642<li>If the broker detects that a worker has disconnected it should stop sending it a message of any type.</li>
643<li>If the scheduler detects that the broker disconnects it SHOULD restart the conversation.</li>
644<li>If the broker detects that a scheduler has disconnected it should ??????????.</li>
508</ul> 645</ul>
509</div></blockquote> 646</div></blockquote>
510</div> 647</div>
511<div class="section" id="request-headers"> 648<div class="section" id="request-headers">
512<h3>Request Headers<a class="headerlink" href="#request-headers" title="Permalink to this headline">¶</a></h3> 649<h2>REQUEST Headers<a class="headerlink" href="#request-headers" title="Permalink to this headline">¶</a></h2>
513<p>Headers MUST be 0 to many comma seperated values inserted into the header field. If there are no headers requried, send an empty string MUST be sent where headers are required.</p> 650<p>Headers MUST be 0 to many comma seperated values inserted into the header field. If there are no headers required, send an empty string MUST be sent where headers are required.</p>
514<p>Below is a table which defines and describes the headers.</p> 651<p>Below is a table which defines and describes the headers.</p>
515<table border="1" class="docutils"> 652<table border="1" class="docutils">
516<colgroup> 653<colgroup>
@@ -551,7 +688,6 @@
551</table> 688</table>
552</div> 689</div>
553</div> 690</div>
554</div>
555 691
556 692
557 </div> 693 </div>
diff --git a/receiver.html b/receiver.html
index 2f53114..c72aa28 100644
--- a/receiver.html
+++ b/receiver.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
@@ -242,6 +243,22 @@ False</td>
242</table> 243</table>
243</dd></dl> 244</dd></dl>
244 245
246<dl class="method">
247<dt id="eventmq.receiver.Receiver.unbind">
248<code class="descname">unbind</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.receiver.Receiver.unbind" title="Permalink to this definition">¶</a></dt>
249<dd><p>Unbinds current socket</p>
250<table class="docutils field-list" frame="void" rules="none">
251<col class="field-name" />
252<col class="field-body" />
253<tbody valign="top">
254<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to disconnect from as a string</td>
255</tr>
256<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
257</tr>
258</tbody>
259</table>
260</dd></dl>
261
245</dd></dl> 262</dd></dl>
246 263
247</div> 264</div>
diff --git a/router.html b/router.html
index 1cacb79..0604f89 100644
--- a/router.html
+++ b/router.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
@@ -148,6 +149,20 @@
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<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> 150<dd><p>A simple router of messages</p>
150<dl class="method"> 151<dl class="method">
152<dt id="eventmq.router.Router.add_scheduler">
153<code class="descname">add_scheduler</code><span class="sig-paren">(</span><em>scheduler_id</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.add_scheduler" title="Permalink to this definition">¶</a></dt>
154<dd><p>Adds a scheduler to the queue to receive SCHEDULE commands</p>
155<table class="docutils field-list" frame="void" rules="none">
156<col class="field-name" />
157<col class="field-body" />
158<tbody valign="top">
159<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>scheduler_id</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; unique id of the scheduler to add</td>
160</tr>
161</tbody>
162</table>
163</dd></dl>
164
165<dl class="method">
151<dt id="eventmq.router.Router.add_worker"> 166<dt id="eventmq.router.Router.add_worker">
152<code class="descname">add_worker</code><span class="sig-paren">(</span><em>worker_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> 167<code class="descname">add_worker</code><span class="sig-paren">(</span><em>worker_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> 168<dd><p>Adds a worker to worker queues</p>
@@ -156,7 +171,7 @@
156<col class="field-body" /> 171<col class="field-body" />
157<tbody valign="top"> 172<tbody valign="top">
158<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> 173<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> 174<li><strong>worker_id</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#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> 175<li><strong>queues</strong> &#8211; queue or queues this worker should be a member of</li>
161</ul> 176</ul>
162</td> 177</td>
@@ -166,6 +181,13 @@
166</dd></dl> 181</dd></dl>
167 182
168<dl class="method"> 183<dl class="method">
184<dt id="eventmq.router.Router.clean_up_dead_schedulers">
185<code class="descname">clean_up_dead_schedulers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.clean_up_dead_schedulers" title="Permalink to this definition">¶</a></dt>
186<dd><p>Loops through the list of schedulers and remove any schedulers who
187the router hasn&#8217;t received a heartbeat in HEARTBEAT_TIMEOUT</p>
188</dd></dl>
189
190<dl class="method">
169<dt id="eventmq.router.Router.clean_up_dead_workers"> 191<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> 192<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 193<dd><p>Loops through the worker queues and removes any workers who haven&#8217;t
@@ -209,10 +231,7 @@ and announces itself.</p>
209<dl class="method"> 231<dl class="method">
210<dt id="eventmq.router.Router.on_receive_request"> 232<dt id="eventmq.router.Router.on_receive_request">
211<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> 233<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>
212<dd><p>This function is called when a message comes in from the client socket. 234<dd><table class="docutils field-list" frame="void" rules="none">
213It then calls <cite>on_command</cite>. If <cite>on_command</cite> isn&#8217;t found, then a
214warning is created.</p>
215<table class="docutils field-list" frame="void" rules="none">
216<col class="field-name" /> 235<col class="field-name" />
217<col class="field-body" /> 236<col class="field-body" />
218<tbody valign="top"> 237<tbody valign="top">
@@ -239,9 +258,70 @@ a warning is created.</p>
239</dd></dl> 258</dd></dl>
240 259
241<dl class="method"> 260<dl class="method">
261<dt id="eventmq.router.Router.queue_message">
262<code class="descname">queue_message</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.queue_message" title="Permalink to this definition">¶</a></dt>
263<dd><p>Add a message to the queue for processing later</p>
264</dd></dl>
265
266<dl class="attribute">
267<dt id="eventmq.router.Router.queues">
268<code class="descname">queues</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.queues" title="Permalink to this definition">¶</a></dt>
269<dd><p>JobManager address by queue name. The lists here are Last Recently
270Used queues where a worker is popped off when given a job, and
271appeneded when one finishes. There is one entry per available
272worker slot, so you may see duplicate addresses.</p>
273<p class="rubric">Example</p>
274<p>{&#8216;default&#8217;: [&#8216;w1&#8217;, &#8216;w2&#8217;, &#8216;w1&#8217;, &#8216;w4&#8217;]}</p>
275</dd></dl>
276
277<dl class="attribute">
278<dt id="eventmq.router.Router.received_disconnect">
279<code class="descname">received_disconnect</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.received_disconnect" title="Permalink to this definition">¶</a></dt>
280<dd><p>Set to True when the router should die.</p>
281</dd></dl>
282
283<dl class="method">
242<dt id="eventmq.router.Router.requeue_worker"> 284<dt id="eventmq.router.Router.requeue_worker">
243<code class="descname">requeue_worker</code><span class="sig-paren">(</span><em>worker_id</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.requeue_worker" title="Permalink to this definition">¶</a></dt> 285<code class="descname">requeue_worker</code><span class="sig-paren">(</span><em>worker_id</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.requeue_worker" title="Permalink to this definition">¶</a></dt>
244<dd><p>Add a worker back to the queue pool</p> 286<dd><p>Add a worker back to the pools for which it is a member of.</p>
287<div class="admonition note">
288<p class="first admonition-title">Note</p>
289<p class="last">This will (correctly) add duplicate items into the queues.</p>
290</div>
291</dd></dl>
292
293<dl class="method">
294<dt id="eventmq.router.Router.reset_heartbeat_counters">
295<code class="descname">reset_heartbeat_counters</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.reset_heartbeat_counters" title="Permalink to this definition">¶</a></dt>
296<dd><p>Reset all the counters for heartbeats back to 0</p>
297</dd></dl>
298
299<dl class="method">
300<dt id="eventmq.router.Router.router_main">
301<code class="descname">router_main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.router_main" title="Permalink to this definition">¶</a></dt>
302<dd><p>Kick off router with logging and settings import</p>
303</dd></dl>
304
305<dl class="attribute">
306<dt id="eventmq.router.Router.scheduler_queue">
307<code class="descname">scheduler_queue</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.scheduler_queue" title="Permalink to this definition">¶</a></dt>
308<dd><p><em>Queue for schedulers to use</em></p>
309</dd></dl>
310
311<dl class="attribute">
312<dt id="eventmq.router.Router.schedulers">
313<code class="descname">schedulers</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.schedulers" title="Permalink to this definition">¶</a></dt>
314<dd><p>Scheduler clients. Clients are able to send SCHEDULE commands that
315need to be routed to a scheduler, which will keep track of time and
316run the job.
317Contains dictionaries:</p>
318<blockquote>
319<div><dl class="docutils">
320<dt>self.schedulers[&lt;scheduler_zmq_id&gt;] = {</dt>
321<dd>&#8216;hb&#8217;: &lt;last_recv_heartbeat&gt;,</dd>
322</dl>
323<p>}</p>
324</div></blockquote>
245</dd></dl> 325</dd></dl>
246 326
247<dl class="method"> 327<dl class="method">
@@ -283,14 +363,20 @@ needed when building messages</p>
283</dd></dl> 363</dd></dl>
284 364
285<dl class="method"> 365<dl class="method">
366<dt id="eventmq.router.Router.send_schedulers_heartbeats">
367<code class="descname">send_schedulers_heartbeats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.send_schedulers_heartbeats" title="Permalink to this definition">¶</a></dt>
368<dd><p>Send HEARTBEATs to all registered schedulers</p>
369</dd></dl>
370
371<dl class="method">
286<dt id="eventmq.router.Router.send_workers_heartbeats"> 372<dt id="eventmq.router.Router.send_workers_heartbeats">
287<code class="descname">send_workers_heartbeats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.send_workers_heartbeats" title="Permalink to this definition">¶</a></dt> 373<code class="descname">send_workers_heartbeats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.send_workers_heartbeats" title="Permalink to this definition">¶</a></dt>
288<dd><p>Send heartbeats to all registered workers.</p> 374<dd><p>Send HEARTBEATs to all registered workers.</p>
289</dd></dl> 375</dd></dl>
290 376
291<dl class="method"> 377<dl class="method">
292<dt id="eventmq.router.Router.start"> 378<dt id="eventmq.router.Router.start">
293<code class="descname">start</code><span class="sig-paren">(</span><em>frontend_addr='tcp://127.0.0.1:47290'</em>, <em>backend_addr='tcp://127.0.0.1:47291'</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.start" title="Permalink to this definition">¶</a></dt> 379<code class="descname">start</code><span class="sig-paren">(</span><em>frontend_addr='tcp://127.0.0.1:47291'</em>, <em>backend_addr='tcp://127.0.0.1:47290'</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.router.Router.start" title="Permalink to this definition">¶</a></dt>
294<dd><p>Begin listening for connections on the provided connection strings</p> 380<dd><p>Begin listening for connections on the provided connection strings</p>
295<table class="docutils field-list" frame="void" rules="none"> 381<table class="docutils field-list" frame="void" rules="none">
296<col class="field-name" /> 382<col class="field-name" />
@@ -306,6 +392,29 @@ needed when building messages</p>
306</table> 392</table>
307</dd></dl> 393</dd></dl>
308 394
395<dl class="attribute">
396<dt id="eventmq.router.Router.waiting_messages">
397<code class="descname">waiting_messages</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.waiting_messages" title="Permalink to this definition">¶</a></dt>
398<dd><p>Message buffer. When messages can&#8217;t be sent because there are no
399workers available to take the job</p>
400</dd></dl>
401
402<dl class="attribute">
403<dt id="eventmq.router.Router.workers">
404<code class="descname">workers</code><em class="property"> = None</em><a class="headerlink" href="#eventmq.router.Router.workers" title="Permalink to this definition">¶</a></dt>
405<dd><p>List of queues by workers. Meta data about the worker such as the
406queue memebership and timestamp of last message received are stored
407here.</p>
408<dl class="docutils">
409<dt><strong>Keys</strong></dt>
410<dd><ul class="first last simple">
411<li>queues: list() of queues the worker belongs to</li>
412<li>hb: monotonic timestamp of the last received message from worker</li>
413</ul>
414</dd>
415</dl>
416</dd></dl>
417
309</dd></dl> 418</dd></dl>
310 419
311</div> 420</div>
diff --git a/searchindex.js b/searchindex.js
index e3d491a..7e31518 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
Search.setIndex({envversion:46,filenames:["api","client","client/messages","contributing","exceptions","index","jobmanager","poller","protocol","receiver","router","sender","style","utils","utils/classes","utils/messages","utils/timeutils"],objects:{"eventmq.client":{messages:[2,0,0,"-"]},"eventmq.client.messages":{build_module_path:[2,2,1,""],defer_job:[2,2,1,""],job:[2,2,1,""],send_request:[2,2,1,""]},"eventmq.exceptions":{EventMQError:[4,5,1,""],InvalidMessageError:[4,5,1,""],MessageError:[4,5,1,""],PeerGoneAwayError:[4,5,1,""]},"eventmq.jobmanager":{JobManager:[6,4,1,""]},"eventmq.jobmanager.JobManager":{"__init__":[6,3,1,""],on_ack:[6,3,1,""],on_heartbeat:[6,3,1,""],on_request:[6,3,1,""],process_message:[6,3,1,""],reset:[6,3,1,""],send_inform:[6,3,1,""],send_ready:[6,3,1,""],start:[6,3,1,""]},"eventmq.poller":{Poller:[7,4,1,""]},"eventmq.poller.Poller":{"__init__":[7,3,1,""],poll:[7,3,1,""],register:[7,3,1,""],unregister:[7,3,1,""]},"eventmq.receiver":{Receiver:[9,4,1,""]},"eventmq.receiver.Receiver":{"__init__":[9,3,1,""],connect:[9,3,1,""],listen:[9,3,1,""],name:[9,1,1,""],ready:[9,1,1,""],zcontext:[9,1,1,""],zsocket:[9,1,1,""]},"eventmq.router":{Router:[10,4,1,""]},"eventmq.router.Router":{add_worker:[10,3,1,""],clean_up_dead_workers:[10,3,1,""],on_heartbeat:[10,3,1,""],on_inform:[10,3,1,""],on_ready:[10,3,1,""],on_receive_request:[10,3,1,""],process_worker_message:[10,3,1,""],requeue_worker:[10,3,1,""],send_ack:[10,3,1,""],send_heartbeat:[10,3,1,""],send_workers_heartbeats:[10,3,1,""],start:[10,3,1,""]},"eventmq.sender":{Sender:[11,4,1,""]},"eventmq.sender.Sender":{"__init__":[11,3,1,""],connect:[11,3,1,""],listen:[11,3,1,""],name:[11,1,1,""],ready:[11,1,1,""],rebuild:[11,3,1,""],zcontext:[11,1,1,""],zsocket:[11,1,1,""]},"eventmq.utils":{classes:[14,0,0,"-"],messages:[15,0,0,"-"],random_characters:[13,2,1,""],timeutils:[16,0,0,"-"]},"eventmq.utils.classes":{HeartbeatMixin:[14,4,1,""],ZMQReceiveMixin:[14,4,1,""],ZMQSendMixin:[14,4,1,""]},"eventmq.utils.classes.HeartbeatMixin":{"__init__":[14,3,1,""],"__weakref__":[14,1,1,""],is_dead:[14,3,1,""],reset_heartbeat_counters:[14,3,1,""],send_heartbeat:[14,3,1,""]},"eventmq.utils.classes.ZMQReceiveMixin":{"__weakref__":[14,1,1,""],recv:[14,3,1,""],recv_multipart:[14,3,1,""]},"eventmq.utils.classes.ZMQSendMixin":{"__weakref__":[14,1,1,""],send:[14,3,1,""],send_multipart:[14,3,1,""]},"eventmq.utils.messages":{fwd_emqp_router_message:[15,2,1,""],generate_msgid:[15,2,1,""],parse_message:[15,2,1,""],parse_router_message:[15,2,1,""],send_emqp_message:[15,2,1,""],send_emqp_router_message:[15,2,1,""]},"eventmq.utils.timeutils":{monotonic:[16,2,1,""],seconds_until:[16,2,1,""],timestamp:[16,2,1,""]},eventmq:{client:[1,0,0,"-"],exceptions:[4,0,0,"-"],jobmanager:[6,0,0,"-"],poller:[7,0,0,"-"],receiver:[9,0,0,"-"],router:[10,0,0,"-"],sender:[11,0,0,"-"],utils:[13,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","function","Python function"],"3":["py","method","Python method"],"4":["py","class","Python class"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:attribute","2":"py:function","3":"py:method","4":"py:class","5":"py:exception"},terms:{"0mq":[8,14],"__init__":[6,7,9,11,14],"__weakref__":14,"_empty_":8,"_headers_":8,"_issu":[],"_msg_":8,"_msgid_":8,"_queue_name_":8,"_recipient_id":14,"_sourc":[],"_topic_name_":8,"_unix_ts_":8,"abstract":8,"case":[8,16],"class":[],"default":[2,6,8,9,11],"float":[14,16],"function":[2,10],"import":[2,3],"int":[2,7],"long":7,"new":10,"public":8,"return":[2,3,7,9,11,13,14,15,16],"true":[2,8,9,11,14],"while":8,about:[6,8,10],absolut:3,accept:8,account:[10,15],ack:[8,10],ackd_msgid:6,acknowledg:[8,10],act:[1,8],actual:[6,10],add:10,add_work:10,addr:[6,9,11],address:[],after:8,agre:8,all:[2,4,6,8,9,10,11,14],allow:8,alon:2,alpha:8,alreadi:10,alwai:2,and_data:15,ani:[2,8,10],announc:10,anoth:[6,10],api:[],appear:7,applic:[2,8],architectur:[],aren:[],arg2:2,arg3:2,arg:[2,6,7,9,10,11,14],arithmet:16,around:[],attempt:4,attr:7,automat:14,avail:[],awaiting_ack:6,back:[8,10,14],backend_addr:10,base:[4,7],basi:8,becaus:10,been:[2,14],befor:[2,7,8],begin:[6,10],belong:8,below:8,best:2,between:8,block:2,bool:[2,9,11,14],boot:16,both:[7,8],box:2,broker:8,build:[2,10,11],build_module_path:2,built:8,bulid:9,calcul:16,call:[6,7,10],callabl:[2,6,9],can:[1,2,8,15],chang:8,charact:13,check:[2,9,11,14],class_arg:[2,6],class_kwarg:[2,6],clean_up_dead_work:10,client:[],close:[6,16],code:[3,5],colon:2,column:12,com:[],come:[2,10],comma:8,command:[2,6,8,10,14,15],complet:8,compon:8,configur:2,connction:[9,11],connect:[6,8,9,10,11,14,15],consist:8,contact:4,contain:[1,8,13],content:[],context:[9,11],convers:8,convienc:[7,14],count:[6,8,10,16],counter:14,cpu:2,creat:[10,11,13],cross:12,csv:8,current:6,custom:10,data:15,deal:13,dealer:11,death:14,debug:8,decor:2,decrypt:2,def:[],defeat:8,defer:2,defer_job:2,defin:[8,9,11,14],deliv:8,describ:8,descript:8,detail:[2,8],detect:8,determin:8,devic:[7,14,15],dialog:8,dict:[2,6,7],dictionari:[7,8],did:2,differ:3,directli:[7,14],disabl:2,disconnect:8,distribut:8,doesn:7,dot:2,down:16,dst:16,dure:11,effort:2,either:8,els:[3,8],empti:8,emqp:[],enabl:2,encount:[2,4],end:[2,14],enderlab:[],ensur:[6,8],error:2,even:8,event:7,eventloop:6,eventmqerror:4,everi:6,except:[],execut:[2,8],exist:4,explicitli:14,expos:6,extra:8,fail:[2,8],failur:2,fair:8,fals:[2,6,8,9,11,14],few:3,field:8,file:12,find:14,finish:8,first:8,fit:8,flag:[2,7],follow:[2,8],form:6,format:[2,6,8,15],forward:15,found:10,foundat:8,frame:[],free:8,from:[4,6,7,8,10,16],frontend_addr:10,func:[2,6],fwd_emqp_router_messag:15,gener:[6,7,8,9,11,15],generate_msgid:15,github:[],give:2,gmtime:[],gnu:8,goal:[],good:14,guarante:[2,8],guarente:2,hand:13,handl:[6,8,10],happen:[7,10,11],have:[2,14,15],haven:10,header:[],heartbeat:[],heartbeat_timeout:10,heartbeati:14,heartbeatmixin:14,heavi:8,here:8,hope:8,how:[2,7],html:8,http:8,ident:8,identifi:10,ietf:8,immediatli:2,implement:[8,14],impli:8,includ:[2,8],incom:[],index:5,inform:[6,8,10],inherit:4,initi:2,insert:[8,14],instal:3,instanc:6,instanti:[2,6],interpret:8,interv:8,intes:2,invalidmessageerror:4,is_dead:14,isn:10,issu:[3,5,8],iter:7,itself:10,job:[],jobmanag:[],kei:[7,8],know:[2,10],kwarg2:2,kwarg:[2,6,7,9,10,11,14],languag:[],last:2,later:8,least:8,leav:8,length:13,let:8,licens:[],like:[6,13,14],list:[2,6,14],listen:[6,9,10,11],locat:2,log:2,logic:[6,10],longer:4,look:14,loop:[7,10],lower:10,mai:[2,8,14],main:6,make:13,malform:4,manag:[],mani:[2,8,11],manual:8,master:8,member:10,merchant:8,mess:16,messag:[],message_bodi:15,message_id:15,messageerror:4,met:14,meta:15,method:[2,6,7,10,14],mode:[],modifi:8,modul:[1,2,5,6,13],monoton:[14,16],more:[8,13],msg:[6,8,10,15],msg_id:[],msgid:[6,10],multipart:[8,14],must:[8,14],name:[2,6,8,9,10,11],need:[10,11],never:16,next:7,none:[2,6,9,10,11,14,15],noop:6,note:[6,9,11],now:14,number:16,object:[7,14],occur:14,on_ack:6,on_command:[6,10],on_heartbeat:[6,10],on_inform:10,on_readi:10,on_receive_repli:[],on_receive_request:10,on_recv:9,on_request:6,onc:8,onli:[],onlin:10,option:[2,6,8,9,11,15],org:8,orient:8,origin:8,other:[2,8],otherwis:[2,6,9,11,14],out:14,overwhelm:2,own:14,page:5,param:2,paramet:[2,6,7,9,10,11,14,15],pars:[6,15],parse_messag:15,parse_router_messag:15,part:[8,15],particular:[8,11],pass:[2,8,9],path:[2,6],payload:15,peer:[4,8,14],peergoneawayerror:4,pictur:8,placehold:[6,10],poll:7,poller:[],pollin:7,pollout:7,pool:[8,10],portion:6,possibl:3,practic:14,prefix:15,prepend:8,pretti:8,problem:4,process:[6,8,11],process_messag:6,process_worker_messag:10,prop:[],properti:[9,11],protocol:[],protocol_vers:14,provid:[10,14],pub:8,publish:8,purpos:8,queu:2,queue:[2,6,8,10],quick:2,rais:[2,4,9,11,15],random:[13,15],random_charact:13,raw:14,raw_messag:[],readi:[6,8,9,10,11],rebuild:11,receiv:[],recent:8,reciev:[],recip:[],recipi:[10,14,15],recipient_id:15,recommend:8,reconnect:11,recv:14,recv_multipart:14,redistribut:8,refer:14,regist:[7,10],regular:8,rel:3,reliabl:8,remain:7,remot:14,remov:[8,10],reopen:6,rep:9,repli:[2,8,15],reply_request:2,req:11,request:[],requeue_work:10,requir:8,requri:8,reset:[6,14],reset_heartbeat_count:14,resourc:[6,8],respond:[8,10],respons:[2,6,9,10,11],restart:[8,11],retri:[2,8],retry_count:2,rfc2119:8,rfc:8,robin:8,roughli:11,round:8,rout:[8,10],router:[],run:[2,6],same:11,search:5,second:16,seconds_until:16,see:[7,8],self:[6,10,11],send:[2,4,6,8,10,11,14,15],send_ack:10,send_emqp_messag:15,send_emqp_router_messag:15,send_heartbeat:[10,14],send_inform:6,send_messag:[],send_multipart:14,send_raw:[],send_readi:6,send_request:2,send_workers_heartbeat:10,sender:[],sender_id:15,sent:[8,10,14],seper:[2,8],serv:8,server:[6,8],servic:8,set:[2,6,7,8,11,14],shall:8,shalt:12,should:[2,4,7,8,9,10,11],shown:8,simpl:[10,13],sinc:16,singl:8,skip:[11,14],skip_zmqstream:11,socket:[2,6,7,8,9,10,11,14,15],softwar:8,some:[2,6,13,14,15],someon:8,someth:[2,11,14,16],somewher:3,sourc:[3,5],spawn:6,specif:[],specifi:[8,13,14],start:[6,9,10,11],state:14,statu:8,stop:8,str:[2,6,9,10,11,13,14,15],string:[2,6,8,9,10,11,15],structur:4,sub:8,subclass:4,subcmd:6,subcommand:[2,6],subject:8,subset:8,subtract:16,success:8,successfulli:2,system:3,take:[6,10,11,15],task:[2,6],tcp:[6,10],term:8,thei:2,them:9,thi:[1,2,4,6,7,8,9,10,11,13,14,16],thing:[2,6,11,13,14,15],thou:12,threshold:14,through:[8,10],thy:12,time:[],timeout:7,timestamp:[8,16],timeutil:[],timezon:[],tip:3,tool:8,topic:[],topolog:[],tornado:6,trace:8,track:14,tri:2,tupl:[7,14,15],type:[2,8,9,11,13,14],typecast:7,typeerror:9,undefin:7,under:8,uniqu:[6,8,10],univers:[],unix:8,unless:[6,9,11],unregist:7,until:16,untouch:[10,15],unus:[],upon:8,upstream:6,usual:[],utilit:[],uuid:[6,9,11],valid:8,valu:[2,7,8,14,15,16],variabl:14,version:[3,8,14],via:2,wait:[2,7],walk:6,warn:10,warranti:8,weak:14,web:8,well:8,went:2,when:[1,2,3,4,8,9,10,11,14],where:[2,8,16],which:8,who:[1,10],wish:[2,15],without:[8,11],word:8,work:[3,14],worker:[],worker_id:10,worri:8,would:[2,16],wrap:[],wrong:2,you:[2,3,8,11,14,15],your:[2,8,14],zcontext:[9,11],zeromq:8,zmq:[7,8,9,10,11,14,15],zmqreceivemixin:14,zmqsendmixin:14,zmqstream:11,zsocket:[9,11]},titles:["API Documentation","<code class=\"docutils literal\"><span class=\"pre\">client</span></code> &#8211; Client Utilities","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Client Messaging","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","Style Guide","<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":14,address:8,api:0,architectur:8,client:[1,2,8],contribut:3,document:[0,5],emqp:8,eventmq:[3,5,8],except:4,frame:8,global:8,goal:8,guid:12,header:8,heartbeat:8,indic:5,job:6,jobmanag:6,languag:8,licens:8,manag:6,messag:[2,15],poller:7,protocol:8,receiv:9,request:8,router:[8,10],sender:11,specif:8,style:12,tabl:5,time:16,timeutil:16,topolog:8,util:[1,13,14,15],utilit:16,welcom:[],worker:8}}) \ No newline at end of file Search.setIndex({envversion:46,filenames:["api","client","client/messages","contributing","exceptions","getting_started","glossary","index","jobmanager","poller","protocol","receiver","router","sender","style","utils","utils/classes","utils/messages","utils/timeutils"],objects:{"eventmq.client":{messages:[2,0,0,"-"]},"eventmq.client.messages":{build_module_path:[2,4,1,""],defer_job:[2,4,1,""],job:[2,4,1,""],schedule:[2,4,1,""],send_request:[2,4,1,""],send_schedule_request:[2,4,1,""]},"eventmq.exceptions":{EventMQError:[4,5,1,""],InvalidMessageError:[4,5,1,""],MessageError:[4,5,1,""],PeerGoneAwayError:[4,5,1,""]},"eventmq.jobmanager":{JobManager:[8,3,1,""]},"eventmq.jobmanager.JobManager":{"__init__":[8,2,1,""],active_jobs:[8,1,1,""],available_workers:[8,1,1,""],jobmanager_main:[8,2,1,""],name:[8,1,1,""],on_heartbeat:[8,2,1,""],on_request:[8,2,1,""],outgoing:[8,1,1,""],send_ready:[8,2,1,""]},"eventmq.poller":{Poller:[9,3,1,""]},"eventmq.poller.Poller":{"__init__":[9,2,1,""],poll:[9,2,1,""],register:[9,2,1,""],unregister:[9,2,1,""]},"eventmq.receiver":{Receiver:[11,3,1,""]},"eventmq.receiver.Receiver":{"__init__":[11,2,1,""],connect:[11,2,1,""],listen:[11,2,1,""],name:[11,1,1,""],ready:[11,1,1,""],unbind:[11,2,1,""],zcontext:[11,1,1,""],zsocket:[11,1,1,""]},"eventmq.router":{Router:[12,3,1,""]},"eventmq.router.Router":{add_scheduler:[12,2,1,""],add_worker:[12,2,1,""],clean_up_dead_schedulers:[12,2,1,""],clean_up_dead_workers:[12,2,1,""],on_heartbeat:[12,2,1,""],on_inform:[12,2,1,""],on_ready:[12,2,1,""],on_receive_request:[12,2,1,""],process_worker_message:[12,2,1,""],queue_message:[12,2,1,""],queues:[12,1,1,""],received_disconnect:[12,1,1,""],requeue_worker:[12,2,1,""],reset_heartbeat_counters:[12,2,1,""],router_main:[12,2,1,""],scheduler_queue:[12,1,1,""],schedulers:[12,1,1,""],send_ack:[12,2,1,""],send_heartbeat:[12,2,1,""],send_schedulers_heartbeats:[12,2,1,""],send_workers_heartbeats:[12,2,1,""],start:[12,2,1,""],waiting_messages:[12,1,1,""],workers:[12,1,1,""]},"eventmq.sender":{Sender:[13,3,1,""]},"eventmq.sender.Sender":{"__init__":[13,2,1,""],connect:[13,2,1,""],listen:[13,2,1,""],name:[13,1,1,""],ready:[13,1,1,""],rebuild:[13,2,1,""],unbind:[13,2,1,""],zcontext:[13,1,1,""],zsocket:[13,1,1,""]},"eventmq.utils":{classes:[16,0,0,"-"],messages:[17,0,0,"-"],random_characters:[15,4,1,""],timeutils:[18,0,0,"-"]},"eventmq.utils.classes":{EMQPService:[16,3,1,""],HeartbeatMixin:[16,3,1,""],ZMQReceiveMixin:[16,3,1,""],ZMQSendMixin:[16,3,1,""]},"eventmq.utils.classes.EMQPService":{"__weakref__":[16,1,1,""],is_heartbeat_enabled:[16,1,1,""],on_ack:[16,2,1,""],process_message:[16,2,1,""],reset:[16,2,1,""],send_inform:[16,2,1,""],start:[16,2,1,""]},"eventmq.utils.classes.HeartbeatMixin":{"__init__":[16,2,1,""],"__weakref__":[16,1,1,""],is_dead:[16,2,1,""],reset_heartbeat_counters:[16,2,1,""],send_heartbeat:[16,2,1,""]},"eventmq.utils.classes.ZMQReceiveMixin":{"__weakref__":[16,1,1,""],recv:[16,2,1,""],recv_multipart:[16,2,1,""]},"eventmq.utils.classes.ZMQSendMixin":{"__weakref__":[16,1,1,""],send:[16,2,1,""],send_multipart:[16,2,1,""]},"eventmq.utils.messages":{fwd_emqp_router_message:[17,4,1,""],generate_msgid:[17,4,1,""],parse_message:[17,4,1,""],parse_router_message:[17,4,1,""],send_emqp_message:[17,4,1,""],send_emqp_router_message:[17,4,1,""]},"eventmq.utils.timeutils":{IntervalIter:[18,3,1,""],monotonic:[18,4,1,""],seconds_until:[18,4,1,""],timestamp:[18,4,1,""]},"eventmq.utils.timeutils.IntervalIter":{"__init__":[18,2,1,""],"__weakref__":[18,1,1,""]},eventmq:{client:[1,0,0,"-"],exceptions:[4,0,0,"-"],jobmanager:[8,0,0,"-"],poller:[9,0,0,"-"],receiver:[11,0,0,"-"],router:[12,0,0,"-"],sender:[13,0,0,"-"],utils:[15,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","class","Python class"],"4":["py","function","Python function"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:class","4":"py:function","5":"py:exception"},terms:{"0mq":[10,16],"5min":18,"__init__":[8,9,11,13,16,18],"__weakref__":[16,18],"_empty_":10,"_headers_":10,"_issu":[],"_msg_":10,"_msgid_":10,"_queue_name_":10,"_recipient_id":16,"_sourc":[],"_topic_name_":10,"_unix_ts_":10,"abstract":10,"case":[10,18],"class":[],"default":[2,8,10,11,12,13,16],"float":[16,18],"function":2,"import":[2,3,8,12],"int":[2,9,18],"long":[9,16],"new":12,"public":10,"return":[2,3,9,11,13,15,16,17,18],"true":[2,10,11,12,13,16],"while":10,abl:12,about:[8,10,12],absolut:3,accept:[10,16],account:[12,17],ack:[10,12],ackd_msgid:16,acknowledg:[10,12],act:[1,10],activ:8,active_job:8,actual:[8,12],add:12,add_schedul:12,add_work:12,addr:[11,13,16],address:[],after:10,agre:10,all:[2,4,8,10,11,12,13,16],allow:10,alon:2,alpha:10,alreadi:12,also:16,alwai:[2,8],and_data:17,ani:[2,10,12],announc:12,anoth:[8,12],anyth:6,api:[],appear:9,appened:12,applic:[2,10],architectur:[],aren:[],arg2:2,arg3:2,arg:[2,8,9,11,12,13,16],argument:16,arithmet:18,around:[],assum:18,attempt:4,attr:9,automat:16,avail:[8,12],available_work:8,awaiting_ack:16,back:[10,12,16],backend_addr:12,base:[4,9],basi:10,becaus:12,becom:8,been:[2,16],befor:[2,9,10],begin:[12,16],belong:[10,12],below:10,best:2,between:[2,10],bin:5,block:2,bool:[2,11,13,16],boot:18,both:[9,10],box:2,broadcast:10,broker:[6,10,16],buffer:12,build:[2,12,13],build_module_path:2,built:10,bulid:11,busi:8,calcul:18,call:[9,12,16],callabl:[2,8,11],can:[1,2,10,12,16,17],certain:16,chang:[8,10],charact:15,check:[2,11,13,16],class_arg:[2,8],class_kwarg:[2,8],clean_up_dead_schedul:12,clean_up_dead_work:12,client:[],clock:18,close:[16,18],code:[3,7,16],colon:2,column:14,com:[],come:[2,12],comma:10,command:[2,5,8,10,12,16,17],complet:10,compon:10,configur:2,connction:[11,13],connect:[10,11,12,13,16,17],consist:10,contact:4,contain:[1,10,12,15],content:[],context:[11,13],convers:10,convienc:[9,16],correctli:12,count:[8,10,12,18],counter:[12,16],cpu:2,creat:[12,13,15],cross:14,csv:10,current:[11,13,16],custom:12,data:[12,17],deal:15,dealer:13,death:16,debug:10,decor:2,decrypt:2,def:[],defeat:10,defer:2,defer_job:2,defin:[2,8,10,11,13,16,18],deliv:10,denot:2,describ:10,descript:10,detail:[2,10],detect:10,determin:10,devic:[6,9,16,17],dialog:10,dict:[2,8,9],dictionari:[9,10,12],did:2,die:12,differ:3,directli:[9,16],disabl:2,disconnect:[10,11],distribut:10,doe:16,doesn:9,dot:2,down:18,dst:18,duplic:12,dure:13,effort:2,either:[10,16],els:[3,10],empti:10,emqp:[],emqpservic:16,enabl:[2,16],encount:[2,4],end:[2,16],enderlab:[],ensur:[2,8,10],entri:12,error:2,even:10,event:[9,16],eventloop:8,eventmqerror:4,everi:8,exampl:[12,16,18],except:[],execut:[2,8,10,18],exist:[4,8],explicitli:16,expos:8,extra:10,fail:[2,10],failur:2,fair:10,fals:[2,10,11,13,16],few:3,field:10,file:14,find:16,finish:[10,12],first:[10,16],fit:10,flag:[2,9],follow:[2,5,10,16],form:16,format:[2,8,10,17],forward:17,found:12,foundat:10,frame:[],free:[8,10],from:[4,9,10,11,12,13,16,18],frontend_addr:12,func:[2,8],fwd_emqp_router_messag:17,gener:[8,9,10,11,13,17],generate_msgid:17,github:[],give:2,given:12,gmtime:[],gnu:10,goal:[],good:16,guarante:[2,10],guarente:2,hand:15,handl:[8,10,12],happen:[2,9,12,13],hasn:12,have:[2,8,16,17],haven:12,header:[],heartbeat:[],heartbeat_timeout:12,heartbeati:16,heartbeatmixin:16,heavi:10,help:6,helper:16,here:[10,12],home:5,hope:10,how:[2,9],html:10,http:10,ident:10,identifi:12,ietf:10,ignor:[10,16],immediatli:2,implement:[10,16],impli:10,includ:[2,10],incom:[],index:7,inform:[8,10,12,16],inform_typ:[],inherit:4,initi:2,insert:[10,16],instal:[3,5],instanc:8,instanti:[2,8],interpret:10,interv:[2,10,18],interval_min:[],interval_sec:[2,18],intervalit:18,intes:2,invalidmessageerror:4,is_dead:16,is_heartbeat_en:16,isn:[12,16],issu:[3,7,10],item:12,iter:9,itself:12,job:[],jobmanag:[],jobmanager_main:8,keep:12,kei:[9,10,12],kick:[8,12],know:[2,8,12],kwarg2:2,kwarg:[2,8,9,11,12,13,16],languag:[],last:[2,12],last_recv_heartbeat:12,later:[10,12],least:10,leav:10,length:15,let:10,lib:5,licens:[],like:[8,15,16],list:[2,8,10,12,16,18],listen:[11,12,13,16],locat:2,log:[2,8,12],logic:[8,12],longer:4,look:16,loop:[9,12,16],lower:12,mai:[2,10,12,16],main:8,make:15,malform:4,manag:[],mani:[2,10,13],manual:10,master:10,match:16,member:12,memebership:12,merchant:10,mess:18,messag:[],message_bodi:17,message_id:17,messageerror:4,met:16,meta:[12,17],method:[2,8,9,12,16],minut:2,mode:[],modifi:10,modul:[1,2,7,8,15],monoton:[12,16,18],more:[5,10,15,16],most:8,msg:[8,10,12,16,17],msg_id:[],msgid:[8,12,16],multipart:[10,16],must:[10,16],name:[2,8,10,11,12,13],need:[12,13],never:18,next:[9,18],none:[2,8,11,12,13,16,17],noop:8,note:[8,11,13],now:16,number:[8,18],numer:18,object:[9,16,18],occur:16,off:[8,12],on_ack:16,on_command:[12,16],on_emqp_command:16,on_heartbeat:[8,12],on_inform:12,on_readi:12,on_receive_repli:[],on_receive_request:12,on_recv:11,on_request:8,on_schedul:16,onc:[5,10],onli:[],onlin:12,option:[2,8,10,11,13,17],org:10,orient:10,origin:10,other:[2,10],otherwis:[2,8,11,13,16],out:[8,16],outgo:[8,16],overwhelm:2,own:16,packag:5,page:7,param:2,paramet:[2,8,9,11,12,13,16,17,18],pars:[16,17],parse_messag:17,parse_router_messag:17,part:[10,17],particular:[10,13],pass:[2,10,11],path:[2,5,8],payload:17,peer:[4,10,16],peergoneawayerror:4,per:12,pictur:10,pip:5,placehold:[8,12],point:8,poll:9,poller:[],pollin:9,pollout:9,pool:[10,12],pop:12,portion:8,possibl:3,practic:16,prefix:17,prepend:10,pretti:10,problem:4,process:[10,12,13,16],process_messag:[8,16],process_worker_messag:12,prop:[],properti:[11,13,16],protocol:[],protocol_vers:16,provid:[12,16],pub:10,publish:10,purpos:10,py2:18,py3:18,python2:5,queu:2,queue:[2,10,12,16],queue_messag:12,quick:2,rais:[2,4,11,13,16,17],random:[15,17],random_charact:15,raw:16,raw_messag:[],readi:[8,10,11,12,13],rebuild:13,receiv:[],received_disconnect:12,recent:[10,12],reciev:[],recip:[],recipi:[12,16,17],recipient_id:17,recommend:10,reconnect:13,recv:16,recv_multipart:16,redistribut:10,refer:[8,16,18],regist:[9,12],regular:10,rel:3,reliabl:10,remain:9,remot:16,remov:[10,12],reopen:16,rep:11,repli:[2,8,10,17],reply_request:2,repres:18,req:13,request:[],requeue_work:12,requir:[5,10],requri:[],reset:[12,16],reset_heartbeat_count:[12,16],resourc:[8,10],respond:[10,12,16],respons:[2,8,11,12,13],restart:[10,13],retri:[2,10],retry_count:2,rfc2119:10,rfc:10,robin:10,roughli:13,round:10,rout:[10,12],router:[],router_main:12,run:[2,5,8,10,12,16],sake:18,same:13,schedul:[],scheduler_id:12,scheduler_queu:12,scheduler_zmq_id:12,search:7,second:18,seconds_until:18,see:[9,10,12,16],self:[8,12,13,16],send:[2,4,8,10,12,13,16,17],send_ack:12,send_emqp_messag:17,send_emqp_router_messag:17,send_heartbeat:[12,16],send_inform:16,send_messag:[],send_multipart:16,send_raw:[],send_readi:8,send_request:2,send_schedule_request:2,send_schedulers_heartbeat:12,send_workers_heartbeat:12,sender:[],sender_id:17,sent:[10,12,16],seper:[2,10],serv:10,server:[8,10],servic:[10,16],service_typ:16,set:[2,8,9,10,12,13,16],shall:10,shalt:14,should:[2,4,8,9,10,11,12,13,16],shown:10,simpl:[5,12,15],sinc:18,singl:10,site:5,skip:[13,16],skip_zmqstream:13,slot:[8,12],socket:[2,9,10,11,12,13,16,17],softwar:10,some:[2,8,15,16,17],someon:10,someth:[2,13,16,18],somewher:3,sourc:[3,7],spawn:8,specif:[],specifi:[10,15,16],start:[],start_valu:18,state:16,statu:10,stop:10,store:[8,12],str:[2,8,11,12,13,15,16,17],string:[2,10,11,12,13,16,17],structur:4,sub:10,subclass:4,subcmd:8,subcommand:[2,8],subject:10,subset:10,subtract:18,success:10,successfulli:2,system:[3,5],take:[12,13,16,17],task:[2,8],tcp:12,tell:8,term:10,than:5,thei:[2,16],them:11,thi:[1,2,4,5,8,9,10,11,12,13,15,16,18],thing:[2,8,13,15,16,17],thou:14,threshold:16,through:[10,12],thy:14,time:[],timeout:9,timestamp:[10,12,18],timeutil:[],timezon:[],tip:3,tool:10,topic:[],topolog:[],tornado:8,trace:10,track:[12,16],tri:2,tupl:[9,16,17],type:[2,10,11,13,15,16],type_:16,typecast:9,typeerror:11,unbind:[11,13],undefin:9,under:10,uniqu:[8,10,12],unit:8,univers:[],unix:10,unless:[8,11,13],unregist:9,unschedul:[2,10],until:18,untouch:[12,17],unus:[],updat:16,upon:10,upstream:8,usag:18,usual:16,utilit:[],utlitii:16,uuid:[8,11,13],vagrant:5,valid:10,valu:[2,9,10,16,17,18],valueerror:16,variabl:16,version:[3,10,16],via:[2,18],virtualenv:5,wait:[2,8,9],waiting_messag:12,walk:8,want:16,warn:12,warranti:10,weak:[16,18],web:10,well:10,went:2,when:[1,2,3,4,8,10,11,12,13,16],where:[2,10,12,16,18],which:[10,12,16],who:[1,12],wish:[2,17],without:[10,13],word:10,work:[3,8,16],worker:[],worker_id:12,worri:10,would:[2,16,18],wrap:[],wrong:2,you:[2,3,10,12,13,16,17],your:[2,10,16],zcontext:[11,13],zeromq:10,zmq:[9,10,11,12,13,16,17],zmqreceivemixin:16,zmqsendmixin:16,zmqstream:13,zsocket:[11,13]},titles:["API Documentation","<code class=\"docutils literal\"><span class=\"pre\">client</span></code> &#8211; Client Utilities","<code class=\"docutils literal\"><span class=\"pre\">messages</span></code> &#8211; Client Messaging","Contributing to EventMQ","<code class=\"docutils literal\"><span class=\"pre\">exceptions</span></code> &#8211; Exceptions","Getting Started","Glossary","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","Goals","<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","Style Guide","<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":16,address:10,api:0,architectur:10,client:[1,2,10],contribut:3,document:[0,7],emqp:10,eventmq:[3,7],except:4,frame:10,get:5,global:10,glossari:6,goal:10,guid:14,header:10,heartbeat:10,indic:7,job:8,jobmanag:8,languag:10,licens:10,manag:8,messag:[2,17],poller:9,protocol:[],receiv:11,request:10,router:[10,12],schedul:10,sender:13,specif:[],start:5,style:14,tabl:7,time:18,timeutil:18,topolog:10,util:[1,15,16,17],utilit:18,welcom:[],worker:10}}) \ No newline at end of file
diff --git a/sender.html b/sender.html
index d9463d4..6b49cdf 100644
--- a/sender.html
+++ b/sender.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
@@ -264,6 +265,22 @@ socket</li>
264</table> 265</table>
265</dd></dl> 266</dd></dl>
266 267
268<dl class="method">
269<dt id="eventmq.sender.Sender.unbind">
270<code class="descname">unbind</code><span class="sig-paren">(</span><em>addr</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.sender.Sender.unbind" title="Permalink to this definition">¶</a></dt>
271<dd><p>Unbinds current socket</p>
272<table class="docutils field-list" frame="void" rules="none">
273<col class="field-name" />
274<col class="field-body" />
275<tbody valign="top">
276<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Address to unbind from as a string</td>
277</tr>
278<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-class docutils literal"><span class="pre">Exception</span></code></td>
279</tr>
280</tbody>
281</table>
282</dd></dl>
283
267</dd></dl> 284</dd></dl>
268 285
269</div> 286</div>
diff --git a/utils.html b/utils.html
index b6c8a30..8d3adad 100644
--- a/utils.html
+++ b/utils.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2"><a class="reference internal" href="jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
diff --git a/utils/classes.html b/utils/classes.html
index 4730048..af14fda 100644
--- a/utils/classes.html
+++ b/utils/classes.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="../client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2"><a class="reference internal" href="../jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2"><a class="reference internal" href="../jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="../poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="../poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
@@ -151,6 +152,117 @@
151<h1><code class="xref py py-mod docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes<a class="headerlink" href="#classes-utility-classes" title="Permalink to this headline">¶</a></h1> 152<h1><code class="xref py py-mod docutils literal"><span class="pre">classes</span></code> &#8211; Utility Classes<a class="headerlink" href="#classes-utility-classes" title="Permalink to this headline">¶</a></h1>
152<p>Defines some classes to use when implementing ZMQ devices</p> 153<p>Defines some classes to use when implementing ZMQ devices</p>
153<dl class="class"> 154<dl class="class">
155<dt id="eventmq.utils.classes.EMQPService">
156<em class="property">class </em><code class="descclassname">eventmq.utils.classes.</code><code class="descname">EMQPService</code><a class="headerlink" href="#eventmq.utils.classes.EMQPService" title="Permalink to this definition">¶</a></dt>
157<dd><p>Helper for devices that connect to brokers.</p>
158<p>Implements utility methods for sending EMQP messages for the following
159EMQP commands.</p>
160<blockquote>
161<div><ul class="simple">
162<li>INFORM</li>
163</ul>
164</div></blockquote>
165<p>Also implements utlitiy methods for managing long-running processes.</p>
166<dl class="docutils">
167<dt>To use you must define:</dt>
168<dd><ul class="first last simple">
169<li><cite>self.outgoing</cite> - socket where messages can be sent to the Router</li>
170<li><cite>self.SERVICE_TYPE</cite> - defines the service type for INFORM. See
171<a class="reference internal" href="#eventmq.utils.classes.EMQPService.send_inform" title="eventmq.utils.classes.EMQPService.send_inform"><code class="xref py py-meth docutils literal"><span class="pre">send_inform()</span></code></a> for more information.</li>
172<li><cite>self.poller</cite> - the poller that <cite>self.outgoing</cite> will be using.
173Usually: <cite>self.poller = eventmq.poller.Poller()</cite></li>
174</ul>
175</dd>
176</dl>
177<p>When messages are received from the router, they are processed in
178<a class="reference internal" href="#eventmq.utils.classes.EMQPService.process_message" title="eventmq.utils.classes.EMQPService.process_message"><code class="xref py py-meth docutils literal"><span class="pre">process_message()</span></code></a> which then calls <cite>on_COMMAND</cite>. This should be used
179in the event loop so if you want to respond to the SCHEDULE command, you
180would define the method <cite>on_schedule</cite> in your service class.</p>
181<p>See the code for <code class="xref py py-class docutils literal"><span class="pre">Scheduler</span></code> and <code class="xref py py-class docutils literal"><span class="pre">JobManager</span></code> for examples.</p>
182<dl class="attribute">
183<dt id="eventmq.utils.classes.EMQPService.__weakref__">
184<code class="descname">__weakref__</code><a class="headerlink" href="#eventmq.utils.classes.EMQPService.__weakref__" title="Permalink to this definition">¶</a></dt>
185<dd><p>list of weak references to the object (if defined)</p>
186</dd></dl>
187
188<dl class="attribute">
189<dt id="eventmq.utils.classes.EMQPService.is_heartbeat_enabled">
190<code class="descname">is_heartbeat_enabled</code><a class="headerlink" href="#eventmq.utils.classes.EMQPService.is_heartbeat_enabled" title="Permalink to this definition">¶</a></dt>
191<dd><p>Property to check if heartbeating is enabled. Useful when certain
192properties must be updated for heartbeating
193:returns: bool - True if heartbeating is enabled, False if it isn&#8217;t</p>
194</dd></dl>
195
196<dl class="method">
197<dt id="eventmq.utils.classes.EMQPService.on_ack">
198<code class="descname">on_ack</code><span class="sig-paren">(</span><em>msgid</em>, <em>ackd_msgid</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.EMQPService.on_ack" title="Permalink to this definition">¶</a></dt>
199<dd><p>Sets <code class="xref py py-attr docutils literal"><span class="pre">awaiting_ack</span></code> to False</p>
200</dd></dl>
201
202<dl class="method">
203<dt id="eventmq.utils.classes.EMQPService.process_message">
204<code class="descname">process_message</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.EMQPService.process_message" title="Permalink to this definition">¶</a></dt>
205<dd><p>Processes a message. Processing takes form of calling an
206<cite>on_EMQP_COMMAND</cite> method. The method must accept <cite>msgid</cite> and <cite>message</cite>
207as the first arguments.</p>
208<table class="docutils field-list" frame="void" rules="none">
209<col class="field-name" />
210<col class="field-body" />
211<tbody valign="top">
212<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>msg</strong> &#8211; The message received from the socket to parse and process.</td>
213</tr>
214</tbody>
215</table>
216</dd></dl>
217
218<dl class="method">
219<dt id="eventmq.utils.classes.EMQPService.reset">
220<code class="descname">reset</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.EMQPService.reset" title="Permalink to this definition">¶</a></dt>
221<dd><p>Resets the current connection by closing and reopening the socket</p>
222</dd></dl>
223
224<dl class="method">
225<dt id="eventmq.utils.classes.EMQPService.send_inform">
226<code class="descname">send_inform</code><span class="sig-paren">(</span><em>queue=None</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.EMQPService.send_inform" title="Permalink to this definition">¶</a></dt>
227<dd><p>Queues an INFORM command to <cite>self.outgoing</cite>.</p>
228<table class="docutils field-list" frame="void" rules="none">
229<col class="field-name" />
230<col class="field-body" />
231<tbody valign="top">
232<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
233<li><strong>type</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Either &#8216;worker&#8217; or &#8216;scheduler&#8217;</li>
234<li><strong>queue</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; <ul>
235<li>For &#8216;worker&#8217; type, the queues the worker is listening on</li>
236<li>Ignored for &#8216;scheduler&#8217; type</li>
237</ul>
238</li>
239</ul>
240</td>
241</tr>
242<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><p class="first last"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code> &#8211; When <cite>type_</cite> does not match a specified type</p>
243</td>
244</tr>
245</tbody>
246</table>
247</dd></dl>
248
249<dl class="method">
250<dt id="eventmq.utils.classes.EMQPService.start">
251<code class="descname">start</code><span class="sig-paren">(</span><em>addr</em>, <em>queues='default'</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.EMQPService.start" title="Permalink to this definition">¶</a></dt>
252<dd><p>Connect to <cite>addr</cite> and begin listening for job requests</p>
253<table class="docutils field-list" frame="void" rules="none">
254<col class="field-name" />
255<col class="field-body" />
256<tbody valign="top">
257<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addr</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; connection string to connect to</td>
258</tr>
259</tbody>
260</table>
261</dd></dl>
262
263</dd></dl>
264
265<dl class="class">
154<dt id="eventmq.utils.classes.HeartbeatMixin"> 266<dt id="eventmq.utils.classes.HeartbeatMixin">
155<em class="property">class </em><code class="descclassname">eventmq.utils.classes.</code><code class="descname">HeartbeatMixin</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.HeartbeatMixin" title="Permalink to this definition">¶</a></dt> 267<em class="property">class </em><code class="descclassname">eventmq.utils.classes.</code><code class="descname">HeartbeatMixin</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.classes.HeartbeatMixin" title="Permalink to this definition">¶</a></dt>
156<dd><p>Provides methods for implementing heartbeats</p> 268<dd><p>Provides methods for implementing heartbeats</p>
diff --git a/utils/messages.html b/utils/messages.html
index b83d630..08a6c1e 100644
--- a/utils/messages.html
+++ b/utils/messages.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="../client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2"><a class="reference internal" href="../jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2"><a class="reference internal" href="../jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="../poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="../poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
diff --git a/utils/timeutils.html b/utils/timeutils.html
index fc44e97..087322b 100644
--- a/utils/timeutils.html
+++ b/utils/timeutils.html
@@ -84,6 +84,7 @@
84 84
85 <ul class="current"> 85 <ul class="current">
86<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current"> 86<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Documentation</a><ul class="current">
87<li class="toctree-l2"><a class="reference internal" href="../client.html"><code class="docutils literal"><span class="pre">client</span></code> &#8211; Client Utilities</a></li>
87<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li> 88<li class="toctree-l2"><a class="reference internal" href="../exceptions.html"><code class="docutils literal"><span class="pre">exceptions</span></code> &#8211; Exceptions</a></li>
88<li class="toctree-l2"><a class="reference internal" href="../jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li> 89<li class="toctree-l2"><a class="reference internal" href="../jobmanager.html"><code class="docutils literal"><span class="pre">jobmanager</span></code> &#8211; Job Manager</a></li>
89<li class="toctree-l2"><a class="reference internal" href="../poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li> 90<li class="toctree-l2"><a class="reference internal" href="../poller.html"><code class="docutils literal"><span class="pre">poller</span></code> &#8211; Poller</a></li>
@@ -149,6 +150,48 @@
149 150
150 <span class="target" id="module-eventmq.utils.timeutils"></span><div class="section" id="timeutils-time-utilites"> 151 <span class="target" id="module-eventmq.utils.timeutils"></span><div class="section" id="timeutils-time-utilites">
151<h1><code class="xref py py-mod docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites<a class="headerlink" href="#timeutils-time-utilites" title="Permalink to this headline">¶</a></h1> 152<h1><code class="xref py py-mod docutils literal"><span class="pre">timeutils</span></code> &#8211; Time Utilites<a class="headerlink" href="#timeutils-time-utilites" title="Permalink to this headline">¶</a></h1>
153<dl class="class">
154<dt id="eventmq.utils.timeutils.IntervalIter">
155<em class="property">class </em><code class="descclassname">eventmq.utils.timeutils.</code><code class="descname">IntervalIter</code><span class="sig-paren">(</span><em>start_value</em>, <em>interval_secs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.timeutils.IntervalIter" title="Permalink to this definition">¶</a></dt>
156<dd><p>represents an interval (in seconds) and it&#8217;s <cite>next()</cite> execution time</p>
157<dl class="docutils">
158<dt>Usage:</dt>
159<dd><p class="first"># interval of 5min using monotonic clock (assume it starts at 0 for the
160# sake of the example)
161interval = IntervalIter(monotonic, 300)
162# Py2</p>
163<p>interval.next() # 300
164interval.next() # 600</p>
165<p class="last"># Py3
166next(interval) # 300
167next(interval) # 600</p>
168</dd>
169</dl>
170<dl class="method">
171<dt id="eventmq.utils.timeutils.IntervalIter.__init__">
172<code class="descname">__init__</code><span class="sig-paren">(</span><em>start_value</em>, <em>interval_secs</em><span class="sig-paren">)</span><a class="headerlink" href="#eventmq.utils.timeutils.IntervalIter.__init__" title="Permalink to this definition">¶</a></dt>
173<dd><table class="docutils field-list" frame="void" rules="none">
174<col class="field-name" />
175<col class="field-body" />
176<tbody valign="top">
177<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
178<li><strong>start_value</strong> (<em>numeric</em>) &#8211; via <a class="reference internal" href="#eventmq.utils.timeutils.monotonic" title="eventmq.utils.timeutils.monotonic"><code class="xref py py-func docutils literal"><span class="pre">monotonic()</span></code></a> or <a class="reference internal" href="#eventmq.utils.timeutils.timestamp" title="eventmq.utils.timeutils.timestamp"><code class="xref py py-func docutils literal"><span class="pre">timestamp()</span></code></a></li>
179<li><strong>interval_secs</strong> (<a class="reference external" href="https://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; </li>
180</ul>
181</td>
182</tr>
183</tbody>
184</table>
185</dd></dl>
186
187<dl class="attribute">
188<dt id="eventmq.utils.timeutils.IntervalIter.__weakref__">
189<code class="descname">__weakref__</code><a class="headerlink" href="#eventmq.utils.timeutils.IntervalIter.__weakref__" title="Permalink to this definition">¶</a></dt>
190<dd><p>list of weak references to the object (if defined)</p>
191</dd></dl>
192
193</dd></dl>
194
152<dl class="function"> 195<dl class="function">
153<dt id="eventmq.utils.timeutils.monotonic"> 196<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> 197<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>