This repository was archived by the owner on Sep 14, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathJobCollection.cs
121 lines (112 loc) · 4.4 KB
/
JobCollection.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
* Copyright 2012 Splunk, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"): you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
namespace Splunk
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
/// <summary>
/// The JobCollection class represents a collection of jobs. A job
/// is an individual instance of a running or completed search or report,
/// along with its related output.
/// </summary>
public class JobCollection : EntityCollection<Job>
{
/// <summary>
/// Initializes a new instance of the <see cref="JobCollection"/> class.
/// </summary>
/// <param name="service">The service</param>
public JobCollection(Service service)
: base(service, "search/jobs", typeof(Job))
{
}
/// <summary>
/// Initializes a new instance of the <see cref="JobCollection"/> class.
/// </summary>
/// <param name="service">The service</param>
/// <param name="args">The variable arguments</param>
public JobCollection(Service service, Args args)
: base(service, "search/jobs", args, typeof(Job))
{
}
/// <summary>
/// Creates a search with a UTF8 pre-encoded search request.
/// A 'oneshot' request is invalid. To create a oneshot search,
/// use the Service.oneshot method instead.
/// </summary>
/// <param name="query">The search query</param>
/// <returns>The Job</returns>
public new Job Create(string query)
{
return this.Create(query, (Args)null);
}
/// <summary>
/// Creates a search with a UTF8 pre-encoded search request.
/// A 'oneshot' request is invalid. To create a oneshot search,
/// use the Service.oneshot method instead.
/// </summary>
/// <param name="query">The search query</param>
/// <param name="args">The variable arguments</param>
/// <returns>The Job</returns>
public new Job Create(string query, Args args)
{
if (args != null && args.ContainsKey("exec_mode"))
{
if (args["exec_mode"].Equals("oneshot"))
{
throw new Exception(
"Oneshot not allowed, use service oneshot search method");
}
}
args = Args.Create(args).AlternateAdd("search", query);
ResponseMessage response = Service.Post(Path, args);
/* assert(response.getStatus() == 201); */
StreamReader streamReader = new StreamReader(response.Content);
XmlDocument doc = new XmlDocument();
doc.LoadXml(streamReader.ReadToEnd());
string sid = doc.SelectSingleNode("/response/sid").InnerText;
this.Invalidate();
Job job = (Job)Get(sid);
// if job not yet scheduled, create an empty job object
if (job == null)
{
job = new Job(Service, "search/jobs/" + sid);
}
return job;
}
/// <summary>
/// Returns the List of Jobs, as a responseMessage object.
/// </summary>
/// <returns>The responseMessage list of jobs.</returns>
public override ResponseMessage List()
{
return Service.Get(this.Path + "?count=0");
}
/// <summary>
/// Returns the job's unique search identifier (SID), which is used as
/// this item's key.
/// </summary>
/// <param name="entry">The Atom Entry</param>
/// <returns>The SID</returns>
protected override string ItemKey(AtomEntry entry)
{
return (string)entry.Content["sid"];
}
}
}