splunker 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|