pho 0.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +9 -0
- data/Rakefile +2 -1
- data/bin/talis_store +263 -0
- data/doc/rdoc/classes/Pho.html +3 -21
- data/doc/rdoc/classes/Pho/Analyzers.html +22 -0
- data/doc/rdoc/classes/Pho/DatatypeProperty.html +42 -10
- data/doc/rdoc/classes/Pho/Etags.html +102 -30
- data/doc/rdoc/classes/Pho/Facet/Results.html +81 -7
- data/doc/rdoc/classes/Pho/Facet/Term.html +13 -2
- data/doc/rdoc/classes/Pho/FieldPredicateMap.html +233 -30
- data/doc/rdoc/classes/Pho/FieldWeighting.html +38 -10
- data/doc/rdoc/classes/Pho/Job.html +488 -9
- data/doc/rdoc/classes/Pho/JobUpdate.html +141 -0
- data/doc/rdoc/classes/Pho/Jobs.html +538 -0
- data/doc/rdoc/classes/Pho/Namespaces.html +33 -2
- data/doc/rdoc/classes/Pho/QueryProfile.html +162 -20
- data/doc/rdoc/classes/Pho/RDFCollection.html +200 -60
- data/doc/rdoc/classes/Pho/Snapshot.html +162 -36
- data/doc/rdoc/classes/Pho/Status.html +59 -8
- data/doc/rdoc/classes/Pho/Store.html +589 -253
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/CHANGES.html +24 -1
- data/doc/rdoc/files/lib/pho/field_predicate_map_rb.html +1 -1
- data/doc/rdoc/files/lib/pho/job_rb.html +1 -1
- data/doc/rdoc/files/lib/pho/snapshot_rb.html +2 -1
- data/doc/rdoc/files/lib/pho/status_rb.html +1 -1
- data/doc/rdoc/files/lib/pho/store_rb.html +1 -1
- data/doc/rdoc/files/lib/pho_rb.html +2 -1
- data/doc/rdoc/fr_class_index.html +2 -0
- data/doc/rdoc/fr_method_index.html +85 -68
- data/lib/pho.rb +18 -10
- data/lib/pho/field_predicate_map.rb +6 -1
- data/lib/pho/job.rb +326 -6
- data/lib/pho/snapshot.rb +46 -19
- data/lib/pho/store.rb +22 -56
- data/tests/tc_job.rb +262 -0
- data/tests/tc_jobcontrol.rb +159 -12
- data/tests/tc_snapshots.rb +57 -28
- data/tests/ts_pho.rb +1 -0
- metadata +9 -110
- data/doc/rdoc/classes/Pho/DatatypeProperty.src/M000034.html +0 -21
- data/doc/rdoc/classes/Pho/DatatypeProperty.src/M000035.html +0 -29
- data/doc/rdoc/classes/Pho/Etags.src/M000088.html +0 -23
- data/doc/rdoc/classes/Pho/Etags.src/M000089.html +0 -28
- data/doc/rdoc/classes/Pho/Etags.src/M000090.html +0 -21
- data/doc/rdoc/classes/Pho/Etags.src/M000091.html +0 -18
- data/doc/rdoc/classes/Pho/Etags.src/M000092.html +0 -18
- data/doc/rdoc/classes/Pho/Etags.src/M000093.html +0 -18
- data/doc/rdoc/classes/Pho/Facet/Results.src/M000001.html +0 -20
- data/doc/rdoc/classes/Pho/Facet/Results.src/M000002.html +0 -27
- data/doc/rdoc/classes/Pho/Facet/Results.src/M000003.html +0 -54
- data/doc/rdoc/classes/Pho/Facet/Term.src/M000004.html +0 -20
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000005.html +0 -38
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000006.html +0 -28
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000007.html +0 -20
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000008.html +0 -18
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000009.html +0 -23
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000010.html +0 -23
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000011.html +0 -18
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000012.html +0 -18
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000013.html +0 -18
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000014.html +0 -18
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000015.html +0 -18
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000016.html +0 -21
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000017.html +0 -21
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000018.html +0 -38
- data/doc/rdoc/classes/Pho/FieldPredicateMap.src/M000019.html +0 -18
- data/doc/rdoc/classes/Pho/FieldWeighting.src/M000075.html +0 -20
- data/doc/rdoc/classes/Pho/FieldWeighting.src/M000076.html +0 -26
- data/doc/rdoc/classes/Pho/Job.src/M000074.html +0 -21
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000024.html +0 -39
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000025.html +0 -24
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000026.html +0 -20
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000027.html +0 -18
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000028.html +0 -18
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000029.html +0 -21
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000030.html +0 -18
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000031.html +0 -18
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000032.html +0 -38
- data/doc/rdoc/classes/Pho/QueryProfile.src/M000033.html +0 -18
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000077.html +0 -23
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000078.html +0 -22
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000079.html +0 -24
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000080.html +0 -23
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000081.html +0 -18
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000082.html +0 -22
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000083.html +0 -22
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000084.html +0 -26
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000085.html +0 -23
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000086.html +0 -18
- data/doc/rdoc/classes/Pho/RDFCollection.src/M000087.html +0 -18
- data/doc/rdoc/classes/Pho/Snapshot.src/M000070.html +0 -31
- data/doc/rdoc/classes/Pho/Snapshot.src/M000071.html +0 -21
- data/doc/rdoc/classes/Pho/Snapshot.src/M000072.html +0 -18
- data/doc/rdoc/classes/Pho/Snapshot.src/M000073.html +0 -37
- data/doc/rdoc/classes/Pho/Status.src/M000020.html +0 -20
- data/doc/rdoc/classes/Pho/Status.src/M000021.html +0 -31
- data/doc/rdoc/classes/Pho/Status.src/M000022.html +0 -18
- data/doc/rdoc/classes/Pho/Status.src/M000023.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000036.html +0 -22
- data/doc/rdoc/classes/Pho/Store.src/M000037.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000038.html +0 -25
- data/doc/rdoc/classes/Pho/Store.src/M000039.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000040.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000041.html +0 -28
- data/doc/rdoc/classes/Pho/Store.src/M000042.html +0 -23
- data/doc/rdoc/classes/Pho/Store.src/M000043.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000044.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000045.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000046.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000047.html +0 -23
- data/doc/rdoc/classes/Pho/Store.src/M000048.html +0 -22
- data/doc/rdoc/classes/Pho/Store.src/M000049.html +0 -26
- data/doc/rdoc/classes/Pho/Store.src/M000050.html +0 -24
- data/doc/rdoc/classes/Pho/Store.src/M000051.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000052.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000053.html +0 -25
- data/doc/rdoc/classes/Pho/Store.src/M000054.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000055.html +0 -30
- data/doc/rdoc/classes/Pho/Store.src/M000056.html +0 -21
- data/doc/rdoc/classes/Pho/Store.src/M000057.html +0 -23
- data/doc/rdoc/classes/Pho/Store.src/M000058.html +0 -28
- data/doc/rdoc/classes/Pho/Store.src/M000059.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000060.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000061.html +0 -18
- data/doc/rdoc/classes/Pho/Store.src/M000062.html +0 -31
- data/doc/rdoc/classes/Pho/Store.src/M000063.html +0 -21
- data/doc/rdoc/classes/Pho/Store.src/M000064.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000065.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000066.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000067.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000068.html +0 -20
- data/doc/rdoc/classes/Pho/Store.src/M000069.html +0 -20
data/doc/rdoc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Mon, 06 Apr 2009 16:00:04 +0100
|
data/doc/rdoc/files/CHANGES.html
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Sat Apr 04 19:19:08 +0100 2009</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -72,6 +72,29 @@
|
|
72
72
|
<p>
|
73
73
|
Brief notes on significant changes and additions in each release
|
74
74
|
</p>
|
75
|
+
<h2>Version 0.4</h2>
|
76
|
+
<ul>
|
77
|
+
<li>Added support for reading Job lifecycle data exposed in Talis Platform
|
78
|
+
Release 21
|
79
|
+
|
80
|
+
</li>
|
81
|
+
<li>Added constants for 2 new analysers added in Talis Platform Release 21
|
82
|
+
|
83
|
+
</li>
|
84
|
+
<li>Refactored job submission code to move methods from the Store class onto
|
85
|
+
the Jobs and Job classes instead. This brings that code in line with the
|
86
|
+
patterns used elsewhere
|
87
|
+
|
88
|
+
</li>
|
89
|
+
<li>Re-implemented snapshot reading code to use RDF/XML rather than scraping
|
90
|
+
the HTML
|
91
|
+
|
92
|
+
</li>
|
93
|
+
<li>Added a fledgling command-line tool for working with the platform
|
94
|
+
"pho_store"
|
95
|
+
|
96
|
+
</li>
|
97
|
+
</ul>
|
75
98
|
<h2>Version 0.3</h2>
|
76
99
|
<ul>
|
77
100
|
<li>Added support for QueryProfiles, Facets
|
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Fri Apr 03 19:09:15 +0100 2009</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -74,6 +74,7 @@
|
|
74
74
|
|
75
75
|
<div class="name-list">
|
76
76
|
digest/md5
|
77
|
+
tmpdir
|
77
78
|
</div>
|
78
79
|
</div>
|
79
80
|
|
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Thu Apr 02 17:22:46 +0100 2009</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -85,6 +85,7 @@
|
|
85
85
|
pho/query_profile
|
86
86
|
pho/status
|
87
87
|
pho/facet
|
88
|
+
pho/job
|
88
89
|
pho/rdf_collection
|
89
90
|
</div>
|
90
91
|
</div>
|
@@ -30,6 +30,8 @@
|
|
30
30
|
<a href="classes/Pho/FieldPredicateMap.html">Pho::FieldPredicateMap</a><br />
|
31
31
|
<a href="classes/Pho/FieldWeighting.html">Pho::FieldWeighting</a><br />
|
32
32
|
<a href="classes/Pho/Job.html">Pho::Job</a><br />
|
33
|
+
<a href="classes/Pho/JobUpdate.html">Pho::JobUpdate</a><br />
|
34
|
+
<a href="classes/Pho/Jobs.html">Pho::Jobs</a><br />
|
33
35
|
<a href="classes/Pho/Namespaces.html">Pho::Namespaces</a><br />
|
34
36
|
<a href="classes/Pho/QueryProfile.html">Pho::QueryProfile</a><br />
|
35
37
|
<a href="classes/Pho/RDFCollection.html">Pho::RDFCollection</a><br />
|
@@ -20,99 +20,116 @@
|
|
20
20
|
<div id="index">
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
22
22
|
<div id="index-entries">
|
23
|
-
<a href="classes/Pho/QueryProfile.html#M000027"><< (Pho::QueryProfile)</a><br />
|
24
23
|
<a href="classes/Pho/FieldPredicateMap.html#M000008"><< (Pho::FieldPredicateMap)</a><br />
|
25
|
-
<a href="classes/Pho/
|
26
|
-
<a href="classes/Pho/Etags.html#
|
27
|
-
<a href="classes/Pho/
|
28
|
-
<a href="classes/Pho/Store.html#
|
29
|
-
<a href="classes/Pho/Store.html#
|
30
|
-
<a href="classes/Pho/
|
31
|
-
<a href="classes/Pho/
|
24
|
+
<a href="classes/Pho/QueryProfile.html#M000027"><< (Pho::QueryProfile)</a><br />
|
25
|
+
<a href="classes/Pho/Etags.html#M000107">add (Pho::Etags)</a><br />
|
26
|
+
<a href="classes/Pho/Etags.html#M000108">add_from_response (Pho::Etags)</a><br />
|
27
|
+
<a href="classes/Pho/Store.html#M000062">augment (Pho::Store)</a><br />
|
28
|
+
<a href="classes/Pho/Store.html#M000061">augment_uri (Pho::Store)</a><br />
|
29
|
+
<a href="classes/Pho/Snapshot.html#M000081">backup (Pho::Snapshot)</a><br />
|
30
|
+
<a href="classes/Pho/Jobs.html#M000040">build_job_request (Pho::Jobs)</a><br />
|
31
|
+
<a href="classes/Pho/Store.html#M000048">build_uri (Pho::Store)</a><br />
|
32
|
+
<a href="classes/Pho/Job.html#M000087">completed? (Pho::Job)</a><br />
|
33
|
+
<a href="classes/Pho/Store.html#M000063">configure_headers_for_conditional_get (Pho::Store)</a><br />
|
32
34
|
<a href="classes/Pho/FieldPredicateMap.html#M000006">create_mapping (Pho::FieldPredicateMap)</a><br />
|
33
35
|
<a href="classes/Pho/QueryProfile.html#M000025">create_weighting (Pho::QueryProfile)</a><br />
|
34
|
-
<a href="classes/Pho/Store.html#
|
35
|
-
<a href="classes/Pho/Store.html#
|
36
|
-
<a href="classes/Pho/
|
37
|
-
<a href="classes/Pho/
|
38
|
-
<a href="classes/Pho/
|
39
|
-
<a href="classes/Pho/Etags.html#M000092">get (Pho::Etags)</a><br />
|
40
|
-
<a href="classes/Pho/FieldPredicateMap.html#M000013">get_by_name (Pho::FieldPredicateMap)</a><br />
|
36
|
+
<a href="classes/Pho/Store.html#M000066">delete_item (Pho::Store)</a><br />
|
37
|
+
<a href="classes/Pho/Store.html#M000052">describe (Pho::Store)</a><br />
|
38
|
+
<a href="classes/Pho/Store.html#M000059">facet (Pho::Store)</a><br />
|
39
|
+
<a href="classes/Pho/RDFCollection.html#M000099">failures (Pho::RDFCollection)</a><br />
|
40
|
+
<a href="classes/Pho/Etags.html#M000109">get (Pho::Etags)</a><br />
|
41
41
|
<a href="classes/Pho/QueryProfile.html#M000028">get_by_name (Pho::QueryProfile)</a><br />
|
42
|
+
<a href="classes/Pho/FieldPredicateMap.html#M000013">get_by_name (Pho::FieldPredicateMap)</a><br />
|
42
43
|
<a href="classes/Pho/FieldPredicateMap.html#M000014">get_by_uri (Pho::FieldPredicateMap)</a><br />
|
43
|
-
<a href="classes/Pho/RDFCollection.html#
|
44
|
-
<a href="classes/Pho/Store.html#
|
45
|
-
<a href="classes/Pho/Store.html#
|
44
|
+
<a href="classes/Pho/RDFCollection.html#M000103">get_fail_file_for (Pho::RDFCollection)</a><br />
|
45
|
+
<a href="classes/Pho/Store.html#M000073">get_field_predicate_map (Pho::Store)</a><br />
|
46
|
+
<a href="classes/Pho/Store.html#M000067">get_item (Pho::Store)</a><br />
|
47
|
+
<a href="classes/Pho/Store.html#M000068">get_job (Pho::Store)</a><br />
|
48
|
+
<a href="classes/Pho/Store.html#M000069">get_jobs (Pho::Store)</a><br />
|
46
49
|
<a href="classes/Pho/FieldPredicateMap.html#M000009">get_name (Pho::FieldPredicateMap)</a><br />
|
47
|
-
<a href="classes/Pho/RDFCollection.html#
|
50
|
+
<a href="classes/Pho/RDFCollection.html#M000104">get_ok_file_for (Pho::RDFCollection)</a><br />
|
48
51
|
<a href="classes/Pho/FieldPredicateMap.html#M000010">get_property_uri (Pho::FieldPredicateMap)</a><br />
|
49
|
-
<a href="classes/Pho/Store.html#
|
50
|
-
<a href="classes/Pho/Store.html#
|
51
|
-
<a href="classes/Pho/Store.html#
|
52
|
-
<a href="classes/Pho/Store.html#
|
53
|
-
<a href="classes/Pho/Etags.html#
|
54
|
-
<a href="classes/Pho/RDFCollection.html#
|
55
|
-
<a href="classes/Pho/QueryProfile.html#M000031">mapped_name? (Pho::QueryProfile)</a><br />
|
52
|
+
<a href="classes/Pho/Store.html#M000075">get_query_profile (Pho::Store)</a><br />
|
53
|
+
<a href="classes/Pho/Store.html#M000060">get_search_params (Pho::Store)</a><br />
|
54
|
+
<a href="classes/Pho/Store.html#M000072">get_snapshots (Pho::Store)</a><br />
|
55
|
+
<a href="classes/Pho/Store.html#M000071">get_status (Pho::Store)</a><br />
|
56
|
+
<a href="classes/Pho/Etags.html#M000110">has_tag? (Pho::Etags)</a><br />
|
57
|
+
<a href="classes/Pho/RDFCollection.html#M000098">list (Pho::RDFCollection)</a><br />
|
56
58
|
<a href="classes/Pho/FieldPredicateMap.html#M000011">mapped_name? (Pho::FieldPredicateMap)</a><br />
|
59
|
+
<a href="classes/Pho/QueryProfile.html#M000031">mapped_name? (Pho::QueryProfile)</a><br />
|
57
60
|
<a href="classes/Pho/FieldPredicateMap.html#M000012">mapped_uri? (Pho::FieldPredicateMap)</a><br />
|
58
|
-
<a href="classes/Pho/RDFCollection.html#M000077">new (Pho::RDFCollection)</a><br />
|
59
|
-
<a href="classes/Pho/Store.html#M000036">new (Pho::Store)</a><br />
|
60
|
-
<a href="classes/Pho/Status.html#M000020">new (Pho::Status)</a><br />
|
61
|
-
<a href="classes/Pho/DatatypeProperty.html#M000034">new (Pho::DatatypeProperty)</a><br />
|
62
|
-
<a href="classes/Pho/Etags.html#M000088">new (Pho::Etags)</a><br />
|
63
|
-
<a href="classes/Pho/FieldWeighting.html#M000075">new (Pho::FieldWeighting)</a><br />
|
64
|
-
<a href="classes/Pho/QueryProfile.html#M000026">new (Pho::QueryProfile)</a><br />
|
65
61
|
<a href="classes/Pho/FieldPredicateMap.html#M000007">new (Pho::FieldPredicateMap)</a><br />
|
62
|
+
<a href="classes/Pho/Job.html#M000082">new (Pho::Job)</a><br />
|
63
|
+
<a href="classes/Pho/RDFCollection.html#M000094">new (Pho::RDFCollection)</a><br />
|
64
|
+
<a href="classes/Pho/Status.html#M000020">new (Pho::Status)</a><br />
|
65
|
+
<a href="classes/Pho/FieldWeighting.html#M000092">new (Pho::FieldWeighting)</a><br />
|
66
|
+
<a href="classes/Pho/DatatypeProperty.html#M000044">new (Pho::DatatypeProperty)</a><br />
|
66
67
|
<a href="classes/Pho/Facet/Term.html#M000004">new (Pho::Facet::Term)</a><br />
|
67
|
-
<a href="classes/Pho/
|
68
|
+
<a href="classes/Pho/Store.html#M000046">new (Pho::Store)</a><br />
|
69
|
+
<a href="classes/Pho/Etags.html#M000105">new (Pho::Etags)</a><br />
|
70
|
+
<a href="classes/Pho/Snapshot.html#M000079">new (Pho::Snapshot)</a><br />
|
71
|
+
<a href="classes/Pho/QueryProfile.html#M000026">new (Pho::QueryProfile)</a><br />
|
68
72
|
<a href="classes/Pho/Facet/Results.html#M000001">new (Pho::Facet::Results)</a><br />
|
69
|
-
<a href="classes/Pho/RDFCollection.html#
|
70
|
-
<a href="classes/Pho/Snapshot.html#M000070">parse (Pho::Snapshot)</a><br />
|
73
|
+
<a href="classes/Pho/RDFCollection.html#M000101">new_files (Pho::RDFCollection)</a><br />
|
71
74
|
<a href="classes/Pho/Facet/Results.html#M000003">parse (Pho::Facet::Results)</a><br />
|
72
|
-
<a href="classes/Pho/Job.html#
|
73
|
-
<a href="classes/Pho/
|
74
|
-
<a href="classes/Pho/
|
75
|
-
<a href="classes/Pho/
|
75
|
+
<a href="classes/Pho/Job.html#M000084">parse (Pho::Job)</a><br />
|
76
|
+
<a href="classes/Pho/Snapshot.html#M000078">parse (Pho::Snapshot)</a><br />
|
77
|
+
<a href="classes/Pho/Job.html#M000085">progress_updates (Pho::Job)</a><br />
|
78
|
+
<a href="classes/Pho/Store.html#M000074">put_field_predicate_map (Pho::Store)</a><br />
|
79
|
+
<a href="classes/Pho/Store.html#M000076">put_query_profile (Pho::Store)</a><br />
|
80
|
+
<a href="classes/Pho/Snapshot.html#M000077">read_from_store (Pho::Snapshot)</a><br />
|
81
|
+
<a href="classes/Pho/QueryProfile.html#M000024">read_from_store (Pho::QueryProfile)</a><br />
|
76
82
|
<a href="classes/Pho/FieldPredicateMap.html#M000005">read_from_store (Pho::FieldPredicateMap)</a><br />
|
77
83
|
<a href="classes/Pho/Status.html#M000021">read_from_store (Pho::Status)</a><br />
|
78
|
-
<a href="classes/Pho/
|
79
|
-
<a href="classes/Pho/
|
84
|
+
<a href="classes/Pho/Facet/Results.html#M000002">read_from_store (Pho::Facet::Results)</a><br />
|
85
|
+
<a href="classes/Pho/Job.html#M000083">read_from_store (Pho::Job)</a><br />
|
86
|
+
<a href="classes/Pho/Jobs.html#M000034">read_from_store (Pho::Jobs)</a><br />
|
87
|
+
<a href="classes/Pho/Snapshot.html#M000080">read_md5 (Pho::Snapshot)</a><br />
|
80
88
|
<a href="classes/Pho/Status.html#M000022">readable? (Pho::Status)</a><br />
|
81
|
-
<a href="classes/Pho/Store.html#
|
82
|
-
<a href="classes/Pho/Store.html#M000060">reindex (Pho::Store)</a><br />
|
89
|
+
<a href="classes/Pho/Store.html#M000064">record_etags (Pho::Store)</a><br />
|
83
90
|
<a href="classes/Pho/QueryProfile.html#M000030">remove (Pho::QueryProfile)</a><br />
|
84
91
|
<a href="classes/Pho/FieldPredicateMap.html#M000015">remove (Pho::FieldPredicateMap)</a><br />
|
85
92
|
<a href="classes/Pho/FieldPredicateMap.html#M000016">remove_by_name (Pho::FieldPredicateMap)</a><br />
|
86
93
|
<a href="classes/Pho/QueryProfile.html#M000029">remove_by_name (Pho::QueryProfile)</a><br />
|
87
94
|
<a href="classes/Pho/FieldPredicateMap.html#M000017">remove_by_uri (Pho::FieldPredicateMap)</a><br />
|
88
|
-
<a href="classes/Pho/RDFCollection.html#
|
89
|
-
<a href="classes/Pho/
|
90
|
-
<a href="classes/Pho/
|
91
|
-
<a href="classes/Pho/
|
92
|
-
<a href="classes/Pho/
|
93
|
-
<a href="classes/Pho/Store.html#
|
94
|
-
<a href="classes/Pho/Store.html#
|
95
|
-
<a href="classes/Pho/Store.html#
|
96
|
-
<a href="classes/Pho/Store.html#
|
97
|
-
<a href="classes/Pho/Store.html#
|
98
|
-
<a href="classes/Pho/Store.html#
|
99
|
-
<a href="classes/Pho/
|
100
|
-
<a href="classes/Pho/
|
101
|
-
<a href="classes/Pho/
|
102
|
-
<a href="classes/Pho/Store.html#
|
103
|
-
<a href="classes/Pho/Store.html#
|
104
|
-
<a href="classes/Pho/
|
105
|
-
<a href="classes/Pho/Store.html#
|
106
|
-
<a href="classes/Pho/
|
107
|
-
<a href="classes/Pho/
|
108
|
-
<a href="classes/Pho/
|
109
|
-
<a href="classes/Pho/
|
110
|
-
<a href="classes/Pho/
|
95
|
+
<a href="classes/Pho/RDFCollection.html#M000097">reset (Pho::RDFCollection)</a><br />
|
96
|
+
<a href="classes/Pho/RDFCollection.html#M000096">retry_failures (Pho::RDFCollection)</a><br />
|
97
|
+
<a href="classes/Pho/Job.html#M000089">running? (Pho::Job)</a><br />
|
98
|
+
<a href="classes/Pho/Etags.html#M000106">save (Pho::Etags)</a><br />
|
99
|
+
<a href="classes/Pho/Store.html#M000058">search (Pho::Store)</a><br />
|
100
|
+
<a href="classes/Pho/Store.html#M000047">set_credentials (Pho::Store)</a><br />
|
101
|
+
<a href="classes/Pho/Store.html#M000057">sparql (Pho::Store)</a><br />
|
102
|
+
<a href="classes/Pho/Store.html#M000055">sparql_ask (Pho::Store)</a><br />
|
103
|
+
<a href="classes/Pho/Store.html#M000054">sparql_construct (Pho::Store)</a><br />
|
104
|
+
<a href="classes/Pho/Store.html#M000053">sparql_describe (Pho::Store)</a><br />
|
105
|
+
<a href="classes/Pho/Store.html#M000056">sparql_select (Pho::Store)</a><br />
|
106
|
+
<a href="classes/Pho/Job.html#M000086">started? (Pho::Job)</a><br />
|
107
|
+
<a href="classes/Pho/RDFCollection.html#M000095">store (Pho::RDFCollection)</a><br />
|
108
|
+
<a href="classes/Pho/Store.html#M000049">store_data (Pho::Store)</a><br />
|
109
|
+
<a href="classes/Pho/Store.html#M000050">store_file (Pho::Store)</a><br />
|
110
|
+
<a href="classes/Pho/Store.html#M000051">store_url (Pho::Store)</a><br />
|
111
|
+
<a href="classes/Pho/Jobs.html#M000039">submit_job (Pho::Jobs)</a><br />
|
112
|
+
<a href="classes/Pho/Store.html#M000070">submit_job (Pho::Store)</a><br />
|
113
|
+
<a href="classes/Pho/Jobs.html#M000036">submit_reindex (Pho::Jobs)</a><br />
|
114
|
+
<a href="classes/Pho/Jobs.html#M000035">submit_reset (Pho::Jobs)</a><br />
|
115
|
+
<a href="classes/Pho/Jobs.html#M000038">submit_restore (Pho::Jobs)</a><br />
|
116
|
+
<a href="classes/Pho/Jobs.html#M000037">submit_snapshot (Pho::Jobs)</a><br />
|
117
|
+
<a href="classes/Pho/RDFCollection.html#M000100">successes (Pho::RDFCollection)</a><br />
|
118
|
+
<a href="classes/Pho/Job.html#M000088">successful? (Pho::Job)</a><br />
|
119
|
+
<a href="classes/Pho/RDFCollection.html#M000102">summary (Pho::RDFCollection)</a><br />
|
111
120
|
<a href="classes/Pho/QueryProfile.html#M000032">to_rdf (Pho::QueryProfile)</a><br />
|
121
|
+
<a href="classes/Pho/FieldPredicateMap.html#M000018">to_rdf (Pho::FieldPredicateMap)</a><br />
|
122
|
+
<a href="classes/Pho/DatatypeProperty.html#M000045">to_rdf (Pho::DatatypeProperty)</a><br />
|
123
|
+
<a href="classes/Pho/FieldWeighting.html#M000093">to_rdf (Pho::FieldWeighting)</a><br />
|
112
124
|
<a href="classes/Pho/FieldPredicateMap.html#M000019">upload (Pho::FieldPredicateMap)</a><br />
|
113
125
|
<a href="classes/Pho/QueryProfile.html#M000033">upload (Pho::QueryProfile)</a><br />
|
114
|
-
<a href="classes/Pho/Store.html#
|
126
|
+
<a href="classes/Pho/Store.html#M000065">upload_item (Pho::Store)</a><br />
|
127
|
+
<a href="classes/Pho/Jobs.html#M000042">wait_for (Pho::Jobs)</a><br />
|
128
|
+
<a href="classes/Pho/Jobs.html#M000041">wait_for_submitted (Pho::Jobs)</a><br />
|
129
|
+
<a href="classes/Pho/Job.html#M000091">with_each (Pho::Job)</a><br />
|
130
|
+
<a href="classes/Pho/Job.html#M000090">with_first (Pho::Job)</a><br />
|
115
131
|
<a href="classes/Pho/Status.html#M000023">writeable? (Pho::Status)</a><br />
|
132
|
+
<a href="classes/Pho/Jobs.html#M000043">yield_job_update (Pho::Jobs)</a><br />
|
116
133
|
</div>
|
117
134
|
</div>
|
118
135
|
</body>
|
data/lib/pho.rb
CHANGED
@@ -11,6 +11,7 @@ require 'pho/field_predicate_map'
|
|
11
11
|
require 'pho/query_profile'
|
12
12
|
require 'pho/status'
|
13
13
|
require 'pho/facet'
|
14
|
+
require 'pho/job'
|
14
15
|
require 'pho/rdf_collection'
|
15
16
|
|
16
17
|
module Pho
|
@@ -19,19 +20,26 @@ module Pho
|
|
19
20
|
ACCEPT_JSON = { "Accept" => "application/json" }.freeze
|
20
21
|
|
21
22
|
RDF_XML = {"Content-Type"=>"application/rdf+xml"}.freeze
|
22
|
-
|
23
|
-
|
24
|
-
JOB_SNAPSHOT = "http://schemas.talis.com/2006/bigfoot/configuration#SnapshotJob".freeze
|
25
|
-
JOB_REINDEX = "http://schemas.talis.com/2006/bigfoot/configuration#ReindexJob".freeze
|
26
|
-
JOB_RESTORE = "http://schemas.talis.com/2006/bigfoot/configuration#RestoreJob".freeze
|
27
|
-
|
28
|
-
|
29
|
-
module Namespaces
|
23
|
+
|
24
|
+
class Namespaces
|
30
25
|
|
31
26
|
CONFIG = "http://schemas.talis.com/2006/bigfoot/configuration#"
|
32
27
|
FRAME = "http://schemas.talis.com/2006/frame/schema#"
|
33
28
|
FACET = "http://schemas.talis.com/2007/facet-results#"
|
34
|
-
|
29
|
+
RDF = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
30
|
+
RDFS = "http://www.w3.org/2000/01/rdf-schema#"
|
31
|
+
DC = "http://purl.org/dc/elements/1.1/"
|
32
|
+
DC_TERMS = "http://purl.org/dc/terms/"
|
33
|
+
|
34
|
+
MAPPING = {
|
35
|
+
"bf" => CONFIG,
|
36
|
+
"frm" => FRAME,
|
37
|
+
"rdf" => RDF,
|
38
|
+
"rdfs" => RDFS,
|
39
|
+
"dc" => DC,
|
40
|
+
"dcterms" => DC_TERMS
|
41
|
+
}
|
42
|
+
|
35
43
|
end
|
36
|
-
|
44
|
+
|
37
45
|
end
|
@@ -42,7 +42,12 @@ module Pho
|
|
42
42
|
#English analyzer without stop words and with accent support. This is identical to the standard English analyzer but all words are indexed plus any accented characters in the ISO Latin 1 character set are replaced by their unaccented equivalent
|
43
43
|
#See API documentation at http://n2.talis.com/wiki/Field_Predicate_Map for details of replacements
|
44
44
|
NORMALISE_STANDARD = "http://schemas.talis.com/2007/bigfoot/analyzers#norm-en".freeze
|
45
|
-
|
45
|
+
|
46
|
+
#English analyzer with porter stemming, case normalization, latin 1 normalization, and stop words removal
|
47
|
+
PORTER_NORMALIZE_STANDARD = "http://schemas.talis.com/2007/bigfoot/analyzers#porter-norm-en".freeze
|
48
|
+
|
49
|
+
#English analyzer with porter stemming, case normalization and latin 1 normalization.
|
50
|
+
PORTER_NO_STOP_WORD_STANDARD = "http://schemas.talis.com/2007/bigfoot/analyzers#porter-nostop-norm-en".freeze
|
46
51
|
end
|
47
52
|
|
48
53
|
#Captures information about a mapped datatype from a Field Predicate Map
|
data/lib/pho/job.rb
CHANGED
@@ -1,17 +1,337 @@
|
|
1
1
|
module Pho
|
2
|
+
|
3
|
+
#TODO job deletion
|
4
|
+
|
5
|
+
class Jobs
|
6
|
+
|
7
|
+
RESET = "http://schemas.talis.com/2006/bigfoot/configuration#ResetDataJob".freeze
|
8
|
+
SNAPSHOT = "http://schemas.talis.com/2006/bigfoot/configuration#SnapshotJob".freeze
|
9
|
+
REINDEX = "http://schemas.talis.com/2006/bigfoot/configuration#ReindexJob".freeze
|
10
|
+
RESTORE = "http://schemas.talis.com/2006/bigfoot/configuration#RestoreJob".freeze
|
11
|
+
|
12
|
+
#Reads the current list of scheduled jobs from the provided store. Returns an array of
|
13
|
+
#job names
|
14
|
+
#
|
15
|
+
# store:: store from which to read the scheduled job list
|
16
|
+
def Jobs.read_from_store(store)
|
17
|
+
resp = store.get_jobs()
|
18
|
+
if resp.status != 200
|
19
|
+
raise "Unable to read jobs from store. Status was {resp.status}"
|
20
|
+
end
|
21
|
+
jobs = Array.new
|
22
|
+
|
23
|
+
doc = REXML::Document.new(resp.content)
|
24
|
+
REXML::XPath.each(doc.root, "//bf:job", Pho::Namespaces::MAPPING).each do |el|
|
25
|
+
jobs << el.attributes["rdf:resource"]
|
26
|
+
end
|
27
|
+
return jobs
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
#Submit a reset job to the Platform
|
32
|
+
#
|
33
|
+
#This method submits the job, and will return an HTTP:Message indicating the
|
34
|
+
#response from the Platform. Client code should check this for success. As job
|
35
|
+
#processing may not be immediate, clients should determine the URI of the newly created
|
36
|
+
#job and then monitor the jobs status if they need to wait for the job to finish.
|
37
|
+
def Jobs.submit_reset(store, label="Reset my store", t=Time.now)
|
38
|
+
return submit_job(store, Pho::Jobs::RESET, label, t)
|
39
|
+
end
|
40
|
+
|
41
|
+
#Submit a reindex job to the Platform
|
42
|
+
#
|
43
|
+
#This method submits the job, and will return an HTTP:Message indicating the
|
44
|
+
#response from the Platform. Client code should check this for success. As job
|
45
|
+
#processing may not be immediate, clients should determine the URI of the newly created
|
46
|
+
#job and then monitor the jobs status if they need to wait for the job to finish.
|
47
|
+
def Jobs.submit_reindex(store, label="Reindex my store", t=Time.now)
|
48
|
+
return submit_job(store, Pho::Jobs::REINDEX, label, t)
|
49
|
+
end
|
50
|
+
|
51
|
+
#Submit a snapshot job to the Platform
|
52
|
+
#
|
53
|
+
#This method submits the job, and will return an HTTP:Message indicating the
|
54
|
+
#response from the Platform. Client code should check this for success. As job
|
55
|
+
#processing may not be immediate, clients should determine the URI of the newly created
|
56
|
+
#job and then monitor the jobs status if they need to wait for the job to finish.
|
57
|
+
def Jobs.submit_snapshot(store, label="Snapshot my store", t=Time.now)
|
58
|
+
return submit_job(store, Pho::Jobs::SNAPSHOT, label, t)
|
59
|
+
end
|
60
|
+
|
61
|
+
#Submit a restore job to the Platform
|
62
|
+
#
|
63
|
+
#This method submits the job, and will return an HTTP:Message indicating the
|
64
|
+
#response from the Platform. Client code should check this for success. As job
|
65
|
+
#processing may not be immediate, clients should determine the URI of the newly created
|
66
|
+
#job and then monitor the jobs status if they need to wait for the job to finish.
|
67
|
+
def Jobs.submit_restore(store, snapshot_uri, label="Restore my snapshot", t=Time.now)
|
68
|
+
return submit_job(store, Pho::Jobs::RESTORE, label, t, snapshot_uri)
|
69
|
+
end
|
70
|
+
|
71
|
+
#Generic submit job method
|
72
|
+
def Jobs.submit_job(store, jobtype, label, t=Time.now, snapshot_uri=nil)
|
73
|
+
store.submit_job( build_job_request(jobtype, label, t, snapshot_uri) )
|
74
|
+
end
|
75
|
+
|
76
|
+
# Construct an RDF/XML document containing a job request for submitting to the Platform.
|
77
|
+
#
|
78
|
+
# t:: a Time object, specifying the time at which the request should be carried out
|
79
|
+
def Jobs.build_job_request(type, label, t=Time.now, snapshot_uri=nil)
|
80
|
+
|
81
|
+
time = t.getutc.strftime("%Y-%m-%dT%H:%M:%SZ")
|
82
|
+
data = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" "
|
83
|
+
data << " xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\" "
|
84
|
+
data << " xmlns:bf=\"http://schemas.talis.com/2006/bigfoot/configuration#\"> "
|
85
|
+
data << " <bf:JobRequest>"
|
86
|
+
data << " <rdfs:label>#{label}</rdfs:label>"
|
87
|
+
data << " <bf:jobType rdf:resource=\"#{type}\"/>"
|
88
|
+
data << " <bf:startTime>#{time}</bf:startTime>"
|
89
|
+
|
90
|
+
if (snapshot_uri != nil)
|
91
|
+
data << " <bf:snapshotUri rdf:resource=\"#{snapshot_uri}\"/>"
|
92
|
+
end
|
93
|
+
|
94
|
+
data << " </bf:JobRequest>"
|
95
|
+
data << "</rdf:RDF>"
|
96
|
+
return data
|
97
|
+
end
|
98
|
+
|
99
|
+
#Wait for a newly submitted job to finish
|
100
|
+
def Jobs.wait_for_submitted(resp, store, interval=1, &block)
|
101
|
+
if resp.status != 201
|
102
|
+
raise "Unable to wait, job was not created. Status was #{resp.status}"
|
103
|
+
end
|
104
|
+
job_url = resp.header["Location"].first
|
105
|
+
return wait_for(job_url, store, interval, &block)
|
106
|
+
end
|
107
|
+
|
108
|
+
#Wait for the specified job to finish
|
109
|
+
#
|
110
|
+
#The method will repeatedly contact the Platform to determine whether the job has finished
|
111
|
+
#executing. The requests are made at configurable intervals (once a minute by default). If
|
112
|
+
#a block is supplied, then it is passed a reference to the Job (containing current progress
|
113
|
+
#updates) after each request. The Job object is returned once completed.
|
114
|
+
#
|
115
|
+
# uri:: URI of the job to wait for
|
116
|
+
# store:: the store on which the job is running
|
117
|
+
# interval:: the interval at which checks will be made, in minutes. Default is 1
|
118
|
+
def Jobs.wait_for(uri, store, interval=1, &block)
|
119
|
+
updates = 0
|
120
|
+
job = Job.read_from_store(uri, store)
|
121
|
+
updates = yield_job_update(job, updates, &block)
|
122
|
+
while !job.completed?
|
123
|
+
sleep interval*60
|
124
|
+
job = Job.read_from_store(uri, store)
|
125
|
+
updates = yield_job_update(job, updates, &block)
|
126
|
+
end
|
127
|
+
return job
|
128
|
+
end
|
129
|
+
|
130
|
+
protected
|
131
|
+
|
132
|
+
def Jobs.yield_job_update(job, updates)
|
133
|
+
if block_given?
|
134
|
+
if job.started?
|
135
|
+
|
136
|
+
#only yield start message if we've not seen any updates
|
137
|
+
if updates == 0
|
138
|
+
yield job, job.start_message, job.actual_start_time
|
139
|
+
end
|
140
|
+
|
141
|
+
if job.progress_updates.length > 0
|
142
|
+
unseen = job.progress_updates[updates, job.progress_updates.length]
|
143
|
+
unseen.each do |update|
|
144
|
+
yield job, update.message, update.time
|
145
|
+
end
|
146
|
+
updates = job.progress_updates.length
|
147
|
+
end
|
148
|
+
|
149
|
+
if job.completed?
|
150
|
+
yield job, job.completion_message, job.end_time
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
155
|
+
return updates
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
2
159
|
|
3
|
-
#
|
4
|
-
class
|
160
|
+
#Simple object encapsulating the status message and time for a job update
|
161
|
+
class JobUpdate
|
5
162
|
|
163
|
+
#the status message
|
164
|
+
attr_accessor :message
|
165
|
+
#the time at which the update was logged
|
166
|
+
attr_accessor :time
|
6
167
|
|
7
|
-
|
8
|
-
|
168
|
+
end
|
169
|
+
|
170
|
+
# A Platform Job
|
171
|
+
#
|
172
|
+
# Instances of this class encapsulate all of the core metadata relating to a Platform Job.
|
173
|
+
# This includes not only the timing information but also the completion status, etc.
|
174
|
+
#
|
175
|
+
# The class provides convenience methods for retrieving and parsing data about a specific
|
176
|
+
# Job from a platform store
|
177
|
+
class Job
|
178
|
+
|
179
|
+
SUCCESS = "http://schemas.talis.com/2006/bigfoot/configuration#success"
|
180
|
+
ABORTED = "http://schemas.talis.com/2006/bigfoot/configuration#aborted"
|
181
|
+
|
182
|
+
#URI of the job
|
183
|
+
attr_reader :uri
|
184
|
+
#Label associated with job
|
185
|
+
attr_reader :label
|
186
|
+
#Type of job
|
187
|
+
attr_reader :type
|
188
|
+
#Date-time that the job was created
|
189
|
+
attr_reader :created
|
190
|
+
#Date-time that the job will start
|
191
|
+
attr_reader :start_time
|
192
|
+
#Date-time that the job actually started
|
193
|
+
attr_accessor :actual_start_time
|
194
|
+
#URI of snapshot to load. (For RestoreJob only)
|
195
|
+
attr_accessor :snapshot_uri
|
196
|
+
#Message recorded at the time the job started
|
197
|
+
attr_accessor :start_message
|
198
|
+
#An array of JobUpdate instances. May be empty if no updates have been logged
|
199
|
+
attr_accessor :progress_updates
|
200
|
+
#URI indicating completion status of the job
|
201
|
+
attr_accessor :completion_status
|
202
|
+
#Completion message
|
203
|
+
attr_accessor :completion_message
|
204
|
+
#Date time that the job actually completed
|
205
|
+
attr_accessor :end_time
|
206
|
+
|
207
|
+
#Constructor. Used in the reading/parsing code
|
208
|
+
#
|
209
|
+
#uri:: a unique identifier for the job
|
210
|
+
#label:: a description of the job
|
211
|
+
#type:: the type of the job, e.g. Pho::Jobs::RESTORE
|
212
|
+
#created:: date-time the job was created in the system
|
213
|
+
#start_time:: scheduled start time for the job
|
214
|
+
def initialize(uri, label, type, start_time, created=nil)
|
215
|
+
@uri = uri
|
216
|
+
@label = label
|
217
|
+
@type = type
|
218
|
+
@created = created
|
219
|
+
@start_time = start_time
|
220
|
+
@progress_updates = Array.new
|
221
|
+
end
|
222
|
+
|
223
|
+
#Read a job from a store
|
224
|
+
#
|
225
|
+
#uri:: uri of the job to read
|
226
|
+
#store:: store from which the job will be read
|
227
|
+
def Job.read_from_store(uri, store)
|
228
|
+
resp = store.get_job(uri)
|
9
229
|
if resp.status != 200
|
10
|
-
|
230
|
+
raise "Unable to read job from store. Response code was #{resp.status}"
|
231
|
+
end
|
232
|
+
|
233
|
+
return parse(uri, resp.content)
|
234
|
+
end
|
235
|
+
|
236
|
+
#Parses job metadata returned from the platform as RDF/XML, creating a fully populated
|
237
|
+
#Job instance
|
238
|
+
#
|
239
|
+
#uri:: uri of the job to be parsed
|
240
|
+
#xml:: the RDF/XML text to be parsed
|
241
|
+
def Job.parse(uri, xml)
|
242
|
+
doc = REXML::Document.new(xml)
|
243
|
+
root = doc.root
|
244
|
+
|
245
|
+
#job_el = REXML::XPath.first(root, "rdf:Description[rdf:type]", Pho::Namespaces::MAPPING )
|
246
|
+
job_el = REXML::XPath.first(root, "//*[@rdf:about='#{uri}']", Pho::Namespaces::MAPPING )
|
247
|
+
uri = job_el.attributes["rdf:about"]
|
248
|
+
label = REXML::XPath.first(job_el, "rdfs:label", Pho::Namespaces::MAPPING ).text
|
249
|
+
type_el = REXML::XPath.first(job_el, "rdf:type", Pho::Namespaces::MAPPING )
|
250
|
+
type = type_el.attributes["rdf:resource"]
|
251
|
+
created = REXML::XPath.first(job_el, "dcterms:created", Pho::Namespaces::MAPPING ).text
|
252
|
+
start_time = REXML::XPath.first(job_el, "bf:startTime", Pho::Namespaces::MAPPING ).text
|
253
|
+
|
254
|
+
job = Job.new(uri, label, type, start_time, created)
|
255
|
+
if type == Pho::Jobs::RESTORE
|
256
|
+
with_first(job_el, "bf:snapshotUri") do |uri|
|
257
|
+
job.snapshot_uri = uri.attributes["rdf:resource"]
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
with_first(job_el, "bf:actualStartTime") do |el|
|
262
|
+
job.actual_start_time = el.text
|
263
|
+
end
|
264
|
+
with_first(job_el, "bf:startMessage") do |el|
|
265
|
+
job.start_message = el.text
|
266
|
+
end
|
267
|
+
with_first(job_el, "bf:completionMessage") do |el|
|
268
|
+
job.completion_message = el.text
|
269
|
+
end
|
270
|
+
with_first(job_el, "bf:endTime") do |el|
|
271
|
+
job.end_time = el.text
|
272
|
+
end
|
273
|
+
with_first(job_el, "bf:completionStatus") do |el|
|
274
|
+
job.completion_status = el.attributes["rdf:resource"]
|
275
|
+
end
|
276
|
+
with_each(job_el, "bf:progressUpdate") do |el|
|
277
|
+
update = JobUpdate.new
|
278
|
+
with_first(el, "bf:progressUpdateMessage") do |msg|
|
279
|
+
update.message = msg.text
|
280
|
+
end
|
281
|
+
with_first(el, "bf:progressUpdateTime") do |time|
|
282
|
+
update.time = time.text
|
283
|
+
end
|
284
|
+
job.progress_updates << update
|
11
285
|
end
|
12
|
-
|
286
|
+
|
287
|
+
return job
|
288
|
+
|
289
|
+
end
|
290
|
+
|
291
|
+
def progress_updates()
|
292
|
+
@progress_updates.sort! { |x,y|
|
293
|
+
x.time <=> y.time
|
294
|
+
}
|
295
|
+
return @progress_updates
|
296
|
+
end
|
297
|
+
|
298
|
+
#Has the job started?
|
299
|
+
def started?
|
300
|
+
return @actual_start_time != nil
|
301
|
+
end
|
302
|
+
|
303
|
+
#Has the job completed?
|
304
|
+
def completed?
|
305
|
+
return @completion_status != nil
|
306
|
+
end
|
307
|
+
|
308
|
+
#Was the job successful?
|
309
|
+
def successful?
|
310
|
+
return self.completed? && @completion_status == Pho::Job::SUCCESS
|
13
311
|
end
|
312
|
+
|
313
|
+
#Is the job still running?
|
314
|
+
def running?
|
315
|
+
return started? && !completed?
|
316
|
+
end
|
317
|
+
|
318
|
+
protected
|
319
|
+
|
320
|
+
def Job.with_first(el, xpath)
|
321
|
+
found_el = REXML::XPath.first(el, xpath, Pho::Namespaces::MAPPING)
|
322
|
+
if found_el != nil
|
323
|
+
yield found_el
|
324
|
+
end
|
325
|
+
end
|
14
326
|
|
327
|
+
def Job.with_each(el, xpath)
|
328
|
+
REXML::XPath.each(el, xpath, Pho::Namespaces::MAPPING) do |e|
|
329
|
+
root = e.document.root
|
330
|
+
uri = e.attributes["rdf:resource"]
|
331
|
+
ref_el = REXML::XPath.first(root, "//*[@rdf:about='#{uri}']", Pho::Namespaces::MAPPING)
|
332
|
+
yield ref_el
|
333
|
+
end
|
334
|
+
end
|
15
335
|
end
|
16
336
|
|
17
337
|
end
|