splunker 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/splunker/models/finders.rb +2 -2
- data/lib/splunker/models/resource.rb +5 -0
- data/lib/splunker/models/search/history.rb +7 -0
- data/lib/splunker/models/search/job.rb +14 -1
- data/lib/splunker/models/search/results.rb +7 -0
- data/lib/splunker/models/search/saved.rb +4 -1
- data/lib/splunker/models/subresource.rb +26 -0
- data/lib/splunker/models/xml_processor.rb +19 -0
- data/spec/fixtures/saved_history.xml +94 -0
- data/spec/unit/models/finders_spec.rb +3 -3
- data/spec/unit/models/search/history_spec.rb +19 -0
- data/spec/unit/models/search/job_spec.rb +40 -3
- data/spec/unit/models/search/results_spec.rb +22 -0
- data/spec/unit/models/subresource_spec.rb +47 -0
- data/spec/unit/models/xml_processor_spec.rb +19 -1
- metadata +13 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
@@ -19,14 +19,14 @@ module Splunker::Models
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def find_all(options)
|
22
|
+
def find_all(options={})
|
23
23
|
raise NotImplemented, "Not yet implemented!"
|
24
24
|
self.client.get @service_path, options
|
25
25
|
end
|
26
26
|
|
27
27
|
def find_by_id(object_id, options={})
|
28
28
|
object_path = "#{@service_path}/#{escape_object_id(object_id)}"
|
29
|
-
self.new(self.client.get(object_path))
|
29
|
+
self.new(self.client.get(object_path, options))
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -3,6 +3,7 @@ module Splunker
|
|
3
3
|
require 'cgi'
|
4
4
|
require 'splunker/models/finders'
|
5
5
|
require 'splunker/models/xml_processor'
|
6
|
+
require 'splunker/models/subresource'
|
6
7
|
|
7
8
|
class Resource
|
8
9
|
|
@@ -14,6 +15,10 @@ module Splunker
|
|
14
15
|
@service_path = path
|
15
16
|
end
|
16
17
|
|
18
|
+
def self.my_service_path
|
19
|
+
@service_path
|
20
|
+
end
|
21
|
+
|
17
22
|
def self.client
|
18
23
|
Splunker.client
|
19
24
|
end
|
@@ -2,7 +2,20 @@ module Splunker::Models
|
|
2
2
|
module Search
|
3
3
|
class Job < Splunker::Models::Resource
|
4
4
|
# http://docs.splunk.com/Documentation/Splunk/latest/RESTAPI/RESTsearch#search.2Fjobs.2F.7Bsearch_id.7D
|
5
|
-
service_path "jobs"
|
5
|
+
service_path "search/jobs"
|
6
|
+
|
7
|
+
def results
|
8
|
+
Results.find_as_subresource(Job.my_service_path, self.sid, "results")
|
9
|
+
end
|
10
|
+
=begin BIG FAT TODO
|
11
|
+
search/jobs/{search_id}/export
|
12
|
+
search/jobs/{search_id}/control
|
13
|
+
search/jobs/{search_id}/events
|
14
|
+
search/jobs/{search_id}/results_preview
|
15
|
+
search/jobs/{search_id}/search.log
|
16
|
+
search/jobs/{search_id}/summary
|
17
|
+
search/jobs/{search_id}/timeline
|
18
|
+
=end
|
6
19
|
end
|
7
20
|
end
|
8
21
|
end
|
@@ -4,10 +4,13 @@ module Splunker::Models
|
|
4
4
|
# http://docs.splunk.com/Documentation/Splunk/4.3.4/RESTAPI/RESTsearch#saved.2Fsearches.2F.7Bname.7D
|
5
5
|
service_path "saved/searches"
|
6
6
|
|
7
|
+
def history
|
8
|
+
History.find_as_subresource(Saved.my_service_path, self.title, "history")
|
9
|
+
end
|
10
|
+
|
7
11
|
=begin Can these actions be standardized?
|
8
12
|
def acknowledge; end
|
9
13
|
def dispatch; end
|
10
|
-
def history; end
|
11
14
|
def scheduled_times; end
|
12
15
|
def suppress; end
|
13
16
|
=end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Splunker::Models
|
2
|
+
module Subresource
|
3
|
+
module ClassMethods
|
4
|
+
def find_as_subresource(service_path, object_id, subresource, options={})
|
5
|
+
object_path = "#{service_path}/#{escape_object_id(object_id)}/#{subresource}"
|
6
|
+
self.new(self.client.get(object_path, options))
|
7
|
+
end
|
8
|
+
|
9
|
+
def where(options={})
|
10
|
+
raise NoMethodError, "Finders not available for subresources."
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_all(options={})
|
14
|
+
raise NoMethodError, "Finders not available for subresources."
|
15
|
+
end
|
16
|
+
|
17
|
+
def find_by_id(object_id, options={})
|
18
|
+
raise NoMethodError, "Finders not available for subresources."
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.included(base)
|
23
|
+
base.send(:extend, ClassMethods)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -25,6 +25,25 @@ module Splunker
|
|
25
25
|
hash
|
26
26
|
end
|
27
27
|
|
28
|
+
def process_results(hash, node)
|
29
|
+
# TODO: Process meta. Ugh.
|
30
|
+
hash["meta"] = Array(node.xpath("./meta").children)
|
31
|
+
|
32
|
+
# Process results, yay.
|
33
|
+
hash["results"] = []
|
34
|
+
|
35
|
+
node.xpath("./result").each do |r|
|
36
|
+
result = {}
|
37
|
+
r.xpath("./field").each do |f|
|
38
|
+
next unless f.attributes.include?("k")
|
39
|
+
result[f.attribute("k").value] = f.text.strip
|
40
|
+
end
|
41
|
+
hash["results"] << result
|
42
|
+
end
|
43
|
+
|
44
|
+
hash
|
45
|
+
end
|
46
|
+
|
28
47
|
def process_text(hash, node)
|
29
48
|
hash
|
30
49
|
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
<?xml-stylesheet type="text/xml" href="/static/atom.xsl"?>
|
2
|
+
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:s="http://dev.splunk.com/ns/rest" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
|
3
|
+
<title>50msclub</title>
|
4
|
+
<id>https://localhost:8089/servicesNS/wade/search/saved/searches</id>
|
5
|
+
<updated>2012-10-10T14:19:50-05:00</updated>
|
6
|
+
<generator version="128297"/>
|
7
|
+
<author>
|
8
|
+
<name>Splunk</name>
|
9
|
+
</author>
|
10
|
+
<link href="/servicesNS/wade/search/saved/searches/_new" rel="create"/>
|
11
|
+
<link href="/servicesNS/wade/search/saved/searches/_reload" rel="_reload"/>
|
12
|
+
<opensearch:totalResults>3</opensearch:totalResults>
|
13
|
+
<opensearch:itemsPerPage>30</opensearch:itemsPerPage>
|
14
|
+
<opensearch:startIndex>0</opensearch:startIndex>
|
15
|
+
<s:messages/>
|
16
|
+
<entry>
|
17
|
+
<title>scheduler__wade__search__50msclub_at_1349896500_9be96fb18ff7bb9a</title>
|
18
|
+
<id>https://localhost:8089/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896500_9be96fb18ff7bb9a</id>
|
19
|
+
<updated>2012-10-10T14:15:40-05:00</updated>
|
20
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896500_9be96fb18ff7bb9a" rel="alternate"/>
|
21
|
+
<author>
|
22
|
+
<name>wade</name>
|
23
|
+
</author>
|
24
|
+
<published>2012-10-10T14:15:00-05:00</published>
|
25
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896500_9be96fb18ff7bb9a" rel="list"/>
|
26
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896500_9be96fb18ff7bb9a/_reload" rel="_reload"/>
|
27
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896500_9be96fb18ff7bb9a" rel="edit"/>
|
28
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896500_9be96fb18ff7bb9a" rel="remove"/>
|
29
|
+
<content type="text/xml">
|
30
|
+
<s:dict>
|
31
|
+
<s:key name="eai:acl"><s:dict><s:key name="app">search</s:key><s:key name="can_change_perms">1</s:key><s:key name="can_list">1</s:key><s:key name="can_share_app">1</s:key><s:key name="can_share_global">0</s:key><s:key name="can_share_user">1</s:key><s:key name="can_write">1</s:key><s:key name="modifiable">1</s:key><s:key name="owner">wade</s:key><s:key name="perms"><s:dict><s:key name="read"><s:list><s:item>wade</s:item></s:list></s:key><s:key name="write"><s:list><s:item>wade</s:item></s:list></s:key></s:dict></s:key><s:key name="removable">0</s:key><s:key name="sharing">system</s:key></s:dict></s:key>
|
32
|
+
<s:key name="isDone">1</s:key>
|
33
|
+
<s:key name="isFinalized">0</s:key>
|
34
|
+
<s:key name="isRealTimeSearch">0</s:key>
|
35
|
+
<s:key name="isSaved">0</s:key>
|
36
|
+
<s:key name="isScheduled">1</s:key>
|
37
|
+
<s:key name="isZombie">0</s:key>
|
38
|
+
<s:key name="ttl">321</s:key>
|
39
|
+
</s:dict>
|
40
|
+
</content>
|
41
|
+
</entry>
|
42
|
+
<entry>
|
43
|
+
<title>scheduler__wade__search__50msclub_at_1349896200_1e5173a9ac1371bc</title>
|
44
|
+
<id>https://localhost:8089/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896200_1e5173a9ac1371bc</id>
|
45
|
+
<updated>2012-10-10T14:10:37-05:00</updated>
|
46
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896200_1e5173a9ac1371bc" rel="alternate"/>
|
47
|
+
<author>
|
48
|
+
<name>wade</name>
|
49
|
+
</author>
|
50
|
+
<published>2012-10-10T14:10:13-05:00</published>
|
51
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896200_1e5173a9ac1371bc" rel="list"/>
|
52
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896200_1e5173a9ac1371bc/_reload" rel="_reload"/>
|
53
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896200_1e5173a9ac1371bc" rel="edit"/>
|
54
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349896200_1e5173a9ac1371bc" rel="remove"/>
|
55
|
+
<content type="text/xml">
|
56
|
+
<s:dict>
|
57
|
+
<s:key name="eai:acl"><s:dict><s:key name="app">search</s:key><s:key name="can_change_perms">1</s:key><s:key name="can_list">1</s:key><s:key name="can_share_app">1</s:key><s:key name="can_share_global">0</s:key><s:key name="can_share_user">1</s:key><s:key name="can_write">1</s:key><s:key name="modifiable">1</s:key><s:key name="owner">wade</s:key><s:key name="perms"><s:dict><s:key name="read"><s:list><s:item>wade</s:item></s:list></s:key><s:key name="write"><s:list><s:item>wade</s:item></s:list></s:key></s:dict></s:key><s:key name="removable">0</s:key><s:key name="sharing">system</s:key></s:dict></s:key>
|
58
|
+
<s:key name="isDone">1</s:key>
|
59
|
+
<s:key name="isFinalized">0</s:key>
|
60
|
+
<s:key name="isRealTimeSearch">0</s:key>
|
61
|
+
<s:key name="isSaved">0</s:key>
|
62
|
+
<s:key name="isScheduled">1</s:key>
|
63
|
+
<s:key name="isZombie">0</s:key>
|
64
|
+
<s:key name="ttl">34</s:key>
|
65
|
+
</s:dict>
|
66
|
+
</content>
|
67
|
+
</entry>
|
68
|
+
<entry>
|
69
|
+
<title>scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531</title>
|
70
|
+
<id>https://localhost:8089/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531</id>
|
71
|
+
<updated>2012-10-10T12:30:51-05:00</updated>
|
72
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531" rel="alternate"/>
|
73
|
+
<author>
|
74
|
+
<name>wade</name>
|
75
|
+
</author>
|
76
|
+
<published>2012-10-10T12:30:32-05:00</published>
|
77
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531" rel="list"/>
|
78
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531/_reload" rel="_reload"/>
|
79
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531" rel="edit"/>
|
80
|
+
<link href="/servicesNS/nobody/search/search/jobs/scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531" rel="remove"/>
|
81
|
+
<content type="text/xml">
|
82
|
+
<s:dict>
|
83
|
+
<s:key name="eai:acl"><s:dict><s:key name="app">search</s:key><s:key name="can_change_perms">1</s:key><s:key name="can_list">1</s:key><s:key name="can_share_app">1</s:key><s:key name="can_share_global">0</s:key><s:key name="can_share_user">1</s:key><s:key name="can_write">1</s:key><s:key name="modifiable">1</s:key><s:key name="owner">wade</s:key><s:key name="perms"><s:dict><s:key name="read"><s:list><s:item>wade</s:item></s:list></s:key><s:key name="write"><s:list><s:item>wade</s:item></s:list></s:key></s:dict></s:key><s:key name="removable">0</s:key><s:key name="sharing">system</s:key></s:dict></s:key>
|
84
|
+
<s:key name="isDone">1</s:key>
|
85
|
+
<s:key name="isFinalized">0</s:key>
|
86
|
+
<s:key name="isRealTimeSearch">0</s:key>
|
87
|
+
<s:key name="isSaved">0</s:key>
|
88
|
+
<s:key name="isScheduled">1</s:key>
|
89
|
+
<s:key name="isZombie">0</s:key>
|
90
|
+
<s:key name="ttl">79853</s:key>
|
91
|
+
</s:dict>
|
92
|
+
</content>
|
93
|
+
</entry>
|
94
|
+
</feed>
|
@@ -11,17 +11,17 @@ describe Splunker::Models::Finders do
|
|
11
11
|
|
12
12
|
before(:each) do
|
13
13
|
object_path = "saved/searches/MyFinderTestSavedSearch"
|
14
|
-
resource.client.stub(:get).with(object_path).and_return(search_fixture)
|
14
|
+
resource.client.stub(:get).with(object_path,{}).and_return(search_fixture)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should find_by_id" do
|
18
|
-
a = resource.find_by_id("MyFinderTestSavedSearch")
|
18
|
+
a = resource.find_by_id("MyFinderTestSavedSearch", {})
|
19
19
|
a.should be_a(Splunker::Models::Search::Saved)
|
20
20
|
a.title.should eq("MySavedSearch")
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should find by id by default" do
|
24
|
-
a = resource.find("MyFinderTestSavedSearch")
|
24
|
+
a = resource.find("MyFinderTestSavedSearch", {})
|
25
25
|
a.should be_a(Splunker::Models::Search::Saved)
|
26
26
|
a.title.should eq("MySavedSearch")
|
27
27
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Splunker::Models::Search::History do
|
4
|
+
|
5
|
+
let(:resource_fixture) do
|
6
|
+
Nokogiri::XML(fixture("saved_history.xml"))
|
7
|
+
end
|
8
|
+
|
9
|
+
context "initialization" do
|
10
|
+
let(:history) do
|
11
|
+
Splunker::Models::Search::History.new(resource_fixture)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should load history" do
|
15
|
+
history.title.should eq("scheduler__wade__search__50msclub_at_1349890200_9c17278833a16531")
|
16
|
+
history.published.should eq("2012-10-10T12:30:32-05:00")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -9,17 +9,54 @@ describe Splunker::Models::Search::Job do
|
|
9
9
|
Nokogiri::XML(fixture("job_mysearch.xml"))
|
10
10
|
end
|
11
11
|
|
12
|
+
let(:job) do
|
13
|
+
resource.new(job_fixture)
|
14
|
+
end
|
15
|
+
|
12
16
|
# Covered in finders_spec, but I'm feeling redundant this morning.
|
13
17
|
context "searching" do
|
14
18
|
before(:each) do
|
15
|
-
object_path = "jobs/MyFinderTestJob"
|
16
|
-
resource.client.stub(:get).with(object_path).and_return(job_fixture)
|
19
|
+
object_path = "search/jobs/MyFinderTestJob"
|
20
|
+
resource.client.stub(:get).with(object_path, {}).and_return(job_fixture)
|
17
21
|
end
|
18
22
|
|
19
23
|
it "should find by id by default" do
|
20
|
-
a = resource.find("MyFinderTestJob")
|
24
|
+
a = resource.find("MyFinderTestJob", {})
|
21
25
|
a.should be_a(Splunker::Models::Search::Job)
|
22
26
|
a.title.should eq("search index")
|
23
27
|
end
|
24
28
|
end
|
29
|
+
|
30
|
+
context "loads sid" do
|
31
|
+
let(:job) do
|
32
|
+
resource.new(job_fixture)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should have an sid" do
|
36
|
+
job.sid.should eq("mysearch")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "subresources" do
|
41
|
+
let(:results_resource) do
|
42
|
+
Splunker::Models::Search::Results
|
43
|
+
end
|
44
|
+
|
45
|
+
let(:results_job_fixture) do
|
46
|
+
Nokogiri::XML(fixture("search_results_from_job.xml"))
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
before(:each) do
|
51
|
+
object_path = "search/jobs/mysearch/results"
|
52
|
+
resource.client.stub(:get).with(object_path, {}).and_return(results_job_fixture)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should load results" do
|
56
|
+
r = job.results
|
57
|
+
r.should be_a(Splunker::Models::Search::Results)
|
58
|
+
r.meta.should_not be_nil
|
59
|
+
r.results.first["median(time_total)"].should eq("280")
|
60
|
+
end
|
61
|
+
end
|
25
62
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Splunker::Models::Search::Job do
|
4
|
+
let(:resource) do
|
5
|
+
Splunker::Models::Search::Results
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:job_fixture) do
|
9
|
+
Nokogiri::XML(fixture("search_results_from_job.xml"))
|
10
|
+
end
|
11
|
+
|
12
|
+
context "initialization" do
|
13
|
+
let(:results) do
|
14
|
+
resource.new(job_fixture)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should load top level attributes" do
|
18
|
+
results.meta.should_not be_nil
|
19
|
+
results.results.first["median(time_total)"].should eq("280")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Splunker::Models::Finders do
|
4
|
+
let(:resource) do
|
5
|
+
Splunker::Models::Search::Results
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:search_fixture) do
|
9
|
+
Nokogiri::XML(fixture("search_results_from_job.xml"))
|
10
|
+
end
|
11
|
+
|
12
|
+
before(:each) do
|
13
|
+
object_path = "search/jobs/myjob/results"
|
14
|
+
resource.client.stub(:get).with(object_path, {}).and_return(search_fixture)
|
15
|
+
end
|
16
|
+
|
17
|
+
context "retrieval" do
|
18
|
+
it "should retrieve the subresource data" do
|
19
|
+
r = resource.find_as_subresource("search/jobs", "myjob", "results", {})
|
20
|
+
r.should be_a(Splunker::Models::Search::Results)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "finders" do
|
25
|
+
it "should not allow the where method" do
|
26
|
+
expect {
|
27
|
+
resource.where(:me => "you")
|
28
|
+
}.to raise_error(NoMethodError)
|
29
|
+
end
|
30
|
+
it "should not allow the find method" do
|
31
|
+
expect {
|
32
|
+
resource.find(:all)
|
33
|
+
}.to raise_error(NoMethodError)
|
34
|
+
end
|
35
|
+
it "should not allow the find_all method" do
|
36
|
+
expect {
|
37
|
+
resource.find_all
|
38
|
+
}.to raise_error(NoMethodError)
|
39
|
+
end
|
40
|
+
it "should not allow the find_by_id method" do
|
41
|
+
expect {
|
42
|
+
resource.find_by_id "my_resource"
|
43
|
+
}.to raise_error(NoMethodError)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -7,7 +7,11 @@ describe Splunker::Models::XmlProcessor do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:xml) do
|
10
|
-
Nokogiri::
|
10
|
+
Nokogiri::XML(fixture("saved_search.xml"))
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:results_xml) do
|
14
|
+
Nokogiri::XML(fixture("search_results_from_job.xml"))
|
11
15
|
end
|
12
16
|
|
13
17
|
context "hashify xml" do
|
@@ -44,6 +48,20 @@ describe Splunker::Models::XmlProcessor do
|
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
51
|
+
context "process results xml" do
|
52
|
+
let(:results) do
|
53
|
+
processor.hashify(results_xml)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should load meta as a top level attribute" do
|
57
|
+
results["meta"].should_not be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should load results, with key-value pairs" do
|
61
|
+
results["results"].first["avg(time_total)"].should eq("626.604469")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
47
65
|
context "dictionary builders" do
|
48
66
|
it "should build a nested hash from a string in dot notation" do
|
49
67
|
h = {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splunker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -135,13 +135,17 @@ files:
|
|
135
135
|
- lib/splunker/models.rb
|
136
136
|
- lib/splunker/models/finders.rb
|
137
137
|
- lib/splunker/models/resource.rb
|
138
|
+
- lib/splunker/models/search/history.rb
|
138
139
|
- lib/splunker/models/search/job.rb
|
140
|
+
- lib/splunker/models/search/results.rb
|
139
141
|
- lib/splunker/models/search/saved.rb
|
142
|
+
- lib/splunker/models/subresource.rb
|
140
143
|
- lib/splunker/models/xml_processor.rb
|
141
144
|
- lib/splunker/request.rb
|
142
145
|
- lib/splunker/version.rb
|
143
146
|
- script/console
|
144
147
|
- spec/fixtures/job_mysearch.xml
|
148
|
+
- spec/fixtures/saved_history.xml
|
145
149
|
- spec/fixtures/saved_search.xml
|
146
150
|
- spec/fixtures/search_results_from_job.xml
|
147
151
|
- spec/functional/request_spec.rb
|
@@ -154,8 +158,11 @@ files:
|
|
154
158
|
- spec/unit/errors_spec.rb
|
155
159
|
- spec/unit/models/finders_spec.rb
|
156
160
|
- spec/unit/models/resource_spec.rb
|
161
|
+
- spec/unit/models/search/history_spec.rb
|
157
162
|
- spec/unit/models/search/job_spec.rb
|
163
|
+
- spec/unit/models/search/results_spec.rb
|
158
164
|
- spec/unit/models/search/saved_spec.rb
|
165
|
+
- spec/unit/models/subresource_spec.rb
|
159
166
|
- spec/unit/models/xml_processor_spec.rb
|
160
167
|
- spec/unit/request_spec.rb
|
161
168
|
- spec/unit/splunker_spec.rb
|
@@ -186,6 +193,7 @@ specification_version: 3
|
|
186
193
|
summary: A Ruby client for the Splunk API
|
187
194
|
test_files:
|
188
195
|
- spec/fixtures/job_mysearch.xml
|
196
|
+
- spec/fixtures/saved_history.xml
|
189
197
|
- spec/fixtures/saved_search.xml
|
190
198
|
- spec/fixtures/search_results_from_job.xml
|
191
199
|
- spec/functional/request_spec.rb
|
@@ -198,8 +206,11 @@ test_files:
|
|
198
206
|
- spec/unit/errors_spec.rb
|
199
207
|
- spec/unit/models/finders_spec.rb
|
200
208
|
- spec/unit/models/resource_spec.rb
|
209
|
+
- spec/unit/models/search/history_spec.rb
|
201
210
|
- spec/unit/models/search/job_spec.rb
|
211
|
+
- spec/unit/models/search/results_spec.rb
|
202
212
|
- spec/unit/models/search/saved_spec.rb
|
213
|
+
- spec/unit/models/subresource_spec.rb
|
203
214
|
- spec/unit/models/xml_processor_spec.rb
|
204
215
|
- spec/unit/request_spec.rb
|
205
216
|
- spec/unit/splunker_spec.rb
|