1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
8
<title>Class: TaskEngine</title>
10
<link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
12
<script src="./js/jquery.js" type="text/javascript"
13
charset="utf-8"></script>
14
<script src="./js/thickbox-compressed.js" type="text/javascript"
15
charset="utf-8"></script>
16
<script src="./js/quicksearch.js" type="text/javascript"
17
charset="utf-8"></script>
18
<script src="./js/darkfish.js" type="text/javascript"
19
charset="utf-8"></script>
25
<div id="home-metadata">
26
<div id="home-section" class="section">
27
<h3 class="section-header">
28
<a href="./index.html">Home</a>
29
<a href="./index.html#classes">Classes</a>
30
<a href="./index.html#methods">Methods</a>
35
<div id="file-metadata">
36
<div id="file-list-section" class="section">
37
<h3 class="section-header">In Files</h3>
38
<div class="section-body">
41
<li><a href="./__/Neptune/task_engine_rb.html?TB_iframe=true&height=550&width=785"
42
class="thickbox" title="../Neptune/task_engine.rb">../Neptune/task_engine.rb</a></li>
51
<div id="class-metadata">
55
<div id="parent-class-section" class="section">
56
<h3 class="section-header">Parent</h3>
58
<p class="link"><a href="Object.html">Object</a></p>
63
<!-- Namespace Contents -->
66
<!-- Method Quickref -->
68
<div id="method-list-section" class="section">
69
<h3 class="section-header">Methods</h3>
70
<ul class="link-list">
72
<li><a href="#method-c-new">::new</a></li>
74
<li><a href="#method-i-app_needs_uploading-3F">#app_needs_uploading?</a></li>
76
<li><a href="#method-i-build_app_via_oration">#build_app_via_oration</a></li>
78
<li><a href="#method-i-engine_name">#engine_name</a></li>
80
<li><a href="#method-i-get_app_url">#get_app_url</a></li>
82
<li><a href="#method-i-push">#push</a></li>
84
<li><a href="#method-i-run_task">#run_task</a></li>
86
<li><a href="#method-i-save_output_to_datastore">#save_output_to_datastore</a></li>
88
<li><a href="#method-i-to_s">#to_s</a></li>
90
<li><a href="#method-i-upload_app">#upload_app</a></li>
92
<li><a href="#method-i-wait_for_task_to_finish">#wait_for_task_to_finish</a></li>
98
<!-- Included Modules -->
102
<div id="project-metadata">
106
<div id="classindex-section" class="section project-section">
107
<h3 class="section-header">Class/Module Index
108
<span class="search-toggle"><img src="./images/find.png"
109
height="16" width="16" alt="[+]"
110
title="show/hide quicksearch" /></span></h3>
111
<form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
113
<legend>Quicksearch</legend>
114
<input type="text" name="quicksearch" value=""
115
class="quicksearch-field" />
119
<ul class="link-list">
121
<li><a href="./AppControllerClient.html">AppControllerClient</a></li>
123
<li><a href="./BadConfigurationException.html">BadConfigurationException</a></li>
125
<li><a href="./BlobServer.html">BlobServer</a></li>
127
<li><a href="./Collectd.html">Collectd</a></li>
129
<li><a href="./CronHelper.html">CronHelper</a></li>
131
<li><a href="./Djinn.html">Djinn</a></li>
133
<li><a href="./DjinnJobData.html">DjinnJobData</a></li>
135
<li><a href="./DjinnServer.html">DjinnServer</a></li>
137
<li><a href="./Ejabberd.html">Ejabberd</a></li>
139
<li><a href="./EngineFactory.html">EngineFactory</a></li>
141
<li><a href="./GodInterface.html">GodInterface</a></li>
143
<li><a href="./GoogleAppEnginePullQueue.html">GoogleAppEnginePullQueue</a></li>
145
<li><a href="./GoogleAppEnginePushQueue.html">GoogleAppEnginePushQueue</a></li>
147
<li><a href="./HAProxy.html">HAProxy</a></li>
149
<li><a href="./HelperFunctions.html">HelperFunctions</a></li>
151
<li><a href="./JSONClient.html">JSONClient</a></li>
153
<li><a href="./LoadBalancer.html">LoadBalancer</a></li>
155
<li><a href="./Monitoring.html">Monitoring</a></li>
157
<li><a href="./NeptuneJobData.html">NeptuneJobData</a></li>
159
<li><a href="./Nginx.html">Nginx</a></li>
161
<li><a href="./Object.html">Object</a></li>
163
<li><a href="./PbServer.html">PbServer</a></li>
165
<li><a href="./QueueFactory.html">QueueFactory</a></li>
167
<li><a href="./RabbitMQ.html">RabbitMQ</a></li>
169
<li><a href="./Repo.html">Repo</a></li>
171
<li><a href="./TaskEngine.html">TaskEngine</a></li>
173
<li><a href="./TaskEngineAppScale.html">TaskEngineAppScale</a></li>
175
<li><a href="./TaskEngineGoogleAppEngine.html">TaskEngineGoogleAppEngine</a></li>
177
<li><a href="./TaskQueue.html">TaskQueue</a></li>
179
<li><a href="./TaskQueueAzureQueue.html">TaskQueueAzureQueue</a></li>
181
<li><a href="./TaskQueueGoogleAppEngine.html">TaskQueueGoogleAppEngine</a></li>
183
<li><a href="./TaskQueueRabbitMQ.html">TaskQueueRabbitMQ</a></li>
185
<li><a href="./TaskQueueSQS.html">TaskQueueSQS</a></li>
187
<li><a href="./UserAppClient.html">UserAppClient</a></li>
189
<li><a href="./ZKInterface.html">ZKInterface</a></li>
192
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
199
<div id="documentation">
200
<h1 class="class">TaskEngine</h1>
202
<div id="description">
214
<div id="public-class-method-details" class="method-section section">
215
<h3 class="section-header">Public Class Methods</h3>
218
<div id="new-method" class="method-detail ">
219
<a name="method-c-new"></a>
222
<div class="method-heading">
223
<span class="method-name">new</span><span
224
class="method-args">(credentials)</span>
225
<span class="method-click-advice">click to toggle source</span>
229
<div class="method-description">
235
<div class="method-source-code"
238
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 3</span>
239
def initialize(credentials)
240
raise <span class="ruby-constant">NotImplementedError</span>
254
<div id="public-instance-method-details" class="method-section section">
255
<h3 class="section-header">Public Instance Methods</h3>
258
<div id="app_needs_uploading-3F-method" class="method-detail ">
259
<a name="method-i-app_needs_uploading-3F"></a>
262
<div class="method-heading">
263
<span class="method-name">app_needs_uploading?</span><span
264
class="method-args">(job_data)</span>
265
<span class="method-click-advice">click to toggle source</span>
269
<div class="method-description">
275
<div class="method-source-code"
276
id="app_needs_uploading-3F-source">
278
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 25</span>
279
def app_needs_uploading?(job_data)
280
raise <span class="ruby-constant">NotImplementedError</span>
292
<div id="build_app_via_oration-method" class="method-detail ">
293
<a name="method-i-build_app_via_oration"></a>
296
<div class="method-heading">
297
<span class="method-name">build_app_via_oration</span><span
298
class="method-args">(job_data, dir)</span>
299
<span class="method-click-advice">click to toggle source</span>
303
<div class="method-description">
309
<div class="method-source-code"
310
id="build_app_via_oration-source">
312
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 30</span>
313
def build_app_via_oration(job_data, dir)
314
<span class="ruby-constant">Djinn</span>.log_debug(<span class="ruby-string">"building app via oration"</span>)
315
<span class="ruby-constant">Djinn</span>.log_debug("job data is #{job_data.inspect}")
316
file = job_data[<span class="ruby-string">'@code'</span>]
317
output = dir + <span class="ruby-string">"/appengine-app"</span>
319
<span class="ruby-comment"># TODO(cgb) - definitely check the return val here</span>
320
<span class="ruby-constant">Djinn</span>.log_run("oration --file #{file} --function #{@function} " +
321
"--appid #{@appid} --output #{output}")
334
<div id="engine_name-method" class="method-detail ">
335
<a name="method-i-engine_name"></a>
338
<div class="method-heading">
339
<span class="method-name">engine_name</span><span
340
class="method-args">()</span>
341
<span class="method-click-advice">click to toggle source</span>
345
<div class="method-description">
351
<div class="method-source-code"
352
id="engine_name-source">
354
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 100</span>
356
raise <span class="ruby-constant">NotImplementedError</span>
368
<div id="get_app_url-method" class="method-detail ">
369
<a name="method-i-get_app_url"></a>
372
<div class="method-heading">
373
<span class="method-name">get_app_url</span><span
374
class="method-args">(job_data)</span>
375
<span class="method-click-advice">click to toggle source</span>
379
<div class="method-description">
385
<div class="method-source-code"
386
id="get_app_url-source">
388
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 48</span>
389
def get_app_url(job_data)
390
raise <span class="ruby-constant">NotImplementedError</span>
402
<div id="push-method" class="method-detail ">
403
<a name="method-i-push"></a>
406
<div class="method-heading">
407
<span class="method-name">push</span><span
408
class="method-args">(job_data)</span>
409
<span class="method-click-advice">click to toggle source</span>
413
<div class="method-description">
419
<div class="method-source-code"
422
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 8</span>
424
dir = <span class="ruby-constant">Djinn</span>.create_temp_dir()
425
<span class="ruby-constant">Djinn</span>.copy_code_to_dir(job_data, dir)
427
if app_needs_uploading?(job_data)
428
app_location = build_app_via_oration(job_data, dir)
429
upload_app(job_data, app_location)
432
job_data[<span class="ruby-string">'@host'</span>] = get_app_url(job_data)
433
task_id = run_task(job_data)
434
wait_for_task_to_finish(job_data, task_id)
435
save_output_to_datastore(job_data)
436
<span class="ruby-constant">Djinn</span>.cleanup(dir)
448
<div id="run_task-method" class="method-detail ">
449
<a name="method-i-run_task"></a>
452
<div class="method-heading">
453
<span class="method-name">run_task</span><span
454
class="method-args">(job_data)</span>
455
<span class="method-click-advice">click to toggle source</span>
459
<div class="method-description">
465
<div class="method-source-code"
466
id="run_task-source">
468
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 53</span>
469
def run_task(job_data)
470
<span class="ruby-constant">Djinn</span>.log_debug("running a task in #{engine_name()}")
471
host = job_data[<span class="ruby-string">'@host'</span>]
473
if job_data[<span class="ruby-string">'@argv'</span>].nil? or job_data[<span class="ruby-string">'@argv'</span>].empty?
476
inputs = job_data[<span class="ruby-string">'@argv'</span>]
479
return <span class="ruby-constant">Djinn</span>.execute_task(host, job_data[<span class="ruby-string">'@function'</span>], inputs,
480
job_data[<span class="ruby-string">'@output'</span>])
492
<div id="save_output_to_datastore-method" class="method-detail ">
493
<a name="method-i-save_output_to_datastore"></a>
496
<div class="method-heading">
497
<span class="method-name">save_output_to_datastore</span><span
498
class="method-args">(job_data)</span>
499
<span class="method-click-advice">click to toggle source</span>
503
<div class="method-description">
509
<div class="method-source-code"
510
id="save_output_to_datastore-source">
512
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 75</span>
513
def save_output_to_datastore(job_data)
514
<span class="ruby-constant">Djinn</span>.log_debug("copying output from #{engine_name()} to remote datastore")
516
host = job_data[<span class="ruby-string">'@host'</span>]
517
output_location = job_data[<span class="ruby-string">'@output'</span>]
518
output = <span class="ruby-constant">Djinn</span>.get_output(host, output_location)
520
<span class="ruby-constant">Djinn</span>.log_debug("got output from #{engine_name()} app at [#{host}], " +
521
"stored at [#{output_location}], storing to remote datastore")
523
local_output = "/tmp/babel-#{rand()}.txt"
524
<span class="ruby-constant">HelperFunctions</span>.write_file(local_output, output)
525
<span class="ruby-constant">Djinn</span>.save_output(local_output, job_data)
527
return if <span class="ruby-constant">DEBUG</span>
528
<span class="ruby-constant">Djinn</span>.log_debug("cleaning up local output at #{local_output}")
529
<span class="ruby-constant">FileUtils</span>.rm_f(local_output)
541
<div id="to_s-method" class="method-detail ">
542
<a name="method-i-to_s"></a>
545
<div class="method-heading">
546
<span class="method-name">to_s</span><span
547
class="method-args">()</span>
548
<span class="method-click-advice">click to toggle source</span>
552
<div class="method-description">
558
<div class="method-source-code"
561
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 95</span>
563
return "Engine type: #{engine_name()}"
575
<div id="upload_app-method" class="method-detail ">
576
<a name="method-i-upload_app"></a>
579
<div class="method-heading">
580
<span class="method-name">upload_app</span><span
581
class="method-args">(job_data, app_location)</span>
582
<span class="method-click-advice">click to toggle source</span>
586
<div class="method-description">
592
<div class="method-source-code"
593
id="upload_app-source">
595
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 43</span>
596
def upload_app(job_data, app_location)
597
raise <span class="ruby-constant">NotImplementedError</span>
609
<div id="wait_for_task_to_finish-method" class="method-detail ">
610
<a name="method-i-wait_for_task_to_finish"></a>
613
<div class="method-heading">
614
<span class="method-name">wait_for_task_to_finish</span><span
615
class="method-args">(job_data, task_id)</span>
616
<span class="method-click-advice">click to toggle source</span>
620
<div class="method-description">
626
<div class="method-source-code"
627
id="wait_for_task_to_finish-source">
629
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 68</span>
630
def wait_for_task_to_finish(job_data, task_id)
631
<span class="ruby-constant">Djinn</span>.log_debug("waiting for #{engine_name()} task to finish")
632
host = job_data[<span class="ruby-string">'@host'</span>]
633
<span class="ruby-constant">Djinn</span>.wait_for_task_to_complete(host, task_id)
650
<div id="validator-badges">
651
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
652
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
653
Rdoc Generator</a> 2</small>.</p>