/* * 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; /// /// 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. /// public class JobCollection : EntityCollection { /// /// Initializes a new instance of the class. /// /// The service public JobCollection(Service service) : base(service, "search/jobs", typeof(Job)) { } /// /// Initializes a new instance of the class. /// /// The service /// The variable arguments public JobCollection(Service service, Args args) : base(service, "search/jobs", args, typeof(Job)) { } /// /// 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. /// /// The search query /// The Job public new Job Create(string query) { return this.Create(query, (Args)null); } /// /// 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. /// /// The search query /// The variable arguments /// The Job 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; } /// /// Returns the List of Jobs, as a responseMessage object. /// /// The responseMessage list of jobs. public override ResponseMessage List() { return Service.Get(this.Path + "?count=0"); } /// /// Returns the job's unique search identifier (SID), which is used as /// this item's key. /// /// The Atom Entry /// The SID protected override string ItemKey(AtomEntry entry) { return (string)entry.Content["sid"]; } } }