示例#1
0
        private static async Task Run(Service service)
        {
            await service.LogOnAsync(SdkHelper.Splunk.Username, SdkHelper.Splunk.Password);

            string savedSearchName  = "example_search";
            string savedSearchQuery = "search index=_internal | head 10";

            // Delete the saved search if it exists before we start.
            SavedSearch savedSearch = await service.SavedSearches.GetOrNullAsync(savedSearchName);

            if (savedSearch != null)
            {
                await savedSearch.RemoveAsync();
            }

            savedSearch = await service.SavedSearches.CreateAsync(savedSearchName, savedSearchQuery);

            Job savedSearchJob = await savedSearch.DispatchAsync();

            using (SearchResultStream stream = await savedSearchJob.GetSearchResultsAsync())
            {
                foreach (SearchResult result in stream)
                {
                    Console.WriteLine(result);
                }
            }

            await savedSearch.RemoveAsync();
        }
 /// <summary>
 /// Asynchronously removes a saved search.
 /// </summary>
 /// <param name="name">
 /// Name of the saved search to be removed.
 /// </param>
 /// <remarks>
 /// This method uses the <a href="http://goo.gl/sn7qC5">DELETE 
 /// saved/searches/{name}</a> endpoint to remove the saved search
 /// identified by <see cref="name"/>.
 /// </remarks>
 public async Task RemoveSavedSearchAsync(string name)
 {
     var resource = new SavedSearch(this.Context, this.Namespace, name);
     await resource.RemoveAsync();
 }
        public async Task SavedSearchHistory()
        {
            using (var service = await SdkHelper.CreateService())
            {
                const string name   = "sdk-test_SavedSearchHistory";
                const string search = "search index=sdk-tests * earliest=-1m";

                SavedSearchCollection savedSearches = service.SavedSearches;
                await savedSearches.GetSliceAsync(new SavedSearchCollection.Filter {
                    Count = 0, SortDirection = SortDirection.Descending
                });

                SavedSearch savedSearch = savedSearches.SingleOrDefault(ss => ss.Name == name);

                if (savedSearch != null)
                {
                    await savedSearch.RemoveAsync();
                }

                // Create a saved search
                savedSearch = await savedSearches.CreateAsync(name, search);

                // Clear the history - even though we have a newly create saved search
                // it's possible there was a previous saved search with the same name
                // that had a matching history.

                JobCollection history = await savedSearch.GetHistoryAsync();

                foreach (Job job in history)
                {
                    await job.CancelAsync();
                }

                history = await savedSearch.GetHistoryAsync();

                Assert.Equal(0, history.Count);

                Job job1 = await savedSearch.DispatchAsync();

                history = await savedSearch.GetHistoryAsync();

                Assert.Equal(1, history.Count);
                Assert.True(history.Any(a => a.Sid == job1.Sid)); // this.Contains(history, job1.Sid));

                Job job2 = await savedSearch.DispatchAsync();

                history = await savedSearch.GetHistoryAsync();

                Assert.Equal(2, history.Count);
                Assert.True(history.Any(a => a.Sid == job1.Sid));
                Assert.True(history.Any(a => a.Sid == job2.Sid));

                await job1.CancelAsync();

                history = await savedSearch.GetHistoryAsync();

                Assert.Equal(1, history.Count);
                Assert.True(history.Any(a => a.Sid == job2.Sid));

                await job2.CancelAsync();

                history = await savedSearch.GetHistoryAsync();

                Assert.Equal(0, history.Count);

                //// Delete the saved search
                await savedSearches.GetSliceAsync(new SavedSearchCollection.Filter {
                    Count = 0, SortDirection = SortDirection.Descending
                });

                savedSearch = savedSearches.SingleOrDefault(ss => ss.Name == name);
                Assert.NotNull(savedSearch);

                await savedSearch.RemoveAsync();

                savedSearch = await savedSearches.GetOrNullAsync(savedSearch.Name);

                Assert.Null(savedSearch);
            }
        }
        public async Task SavedSearchesUpdateProperties()
        {
            using (var service = await SdkHelper.CreateService())
            {
                SavedSearchCollection savedSearches = service.SavedSearches;
                const string          name          = "sdk-test_UpdateProperties";
                const string          search        = "search index=sdk-tests * earliest=-1m";

                //// Ensure test starts in a known good state

                SavedSearch testSearch = await savedSearches.GetOrNullAsync(name);

                if (testSearch != null)
                {
                    await testSearch.RemoveAsync();
                }

                //// Create a saved search

                testSearch = await savedSearches.CreateAsync(name, search);

                testSearch = await savedSearches.GetOrNullAsync(name);

                Assert.NotNull(testSearch);

                //// Read the saved search

                await savedSearches.GetAllAsync();

                testSearch = savedSearches.SingleOrDefault(a => a.Name == name);
                Assert.True(testSearch.IsVisible);

                // CONSIDER: Test some additinal default property values.

                // Update search properties, but don't specify required args to test
                // pulling them from the existing object
                bool updatedSnapshot = await testSearch.UpdateAsync(new SavedSearchAttributes()
                {
                    IsVisible = false
                });

                Assert.True(updatedSnapshot);
                Assert.False(testSearch.IsVisible);

                // Delete the saved search
                await testSearch.RemoveAsync();

                testSearch = await savedSearches.GetOrNullAsync(testSearch.Name);

                Assert.Null(testSearch);

                // Create a saved search with some additional arguments
                testSearch = await savedSearches.CreateAsync(name, search, new SavedSearchAttributes()
                {
                    IsVisible = false
                });

                Assert.False(testSearch.IsVisible);

                // Set email param attributes

                var attributes = new SavedSearchAttributes()
                {
                    ActionEmailAuthPassword = "******",
                    ActionEmailAuthUsername = "******",
                    ActionEmailBcc          = "*****@*****.**",
                    ActionEmailCC           = "*****@*****.**",
                    ActionEmailCommand      = "$name1$",
                    ActionEmailFormat       = EmailFormat.Plain,
                    ActionEmailFrom         = "*****@*****.**",
                    //attrs.ActionEmailHostname = "dummy1.host.com",
                    ActionEmailInline                 = "true",
                    ActionEmailMailServer             = "splunk.com",
                    ActionEmailMaxResults             = 101,
                    ActionEmailMaxTime                = "10s",
                    ActionEmailSendPdf                = true, //??ActionEmailPdfView = "dummy",
                    ActionEmailSendResults            = true, //??ActionEmailPreProcessResults = "*",
                    ActionEmailReportPaperOrientation = PaperOrientation.Landscape,
                    ActionEmailReportPaperSize        = PaperSize.Letter,
                    ActionEmailReportServerEnabled    = false,
                    //attrs.ActionEmailReportServerUrl = "splunk.com",
                    ActionEmailSubject              = "sdk-subject",
                    ActionEmailTo                   = "*****@*****.**",
                    ActionEmailTrackAlert           = false,
                    ActionEmailTtl                  = "61",
                    ActionEmailUseSsl               = false,
                    ActionEmailUseTls               = false,
                    ActionEmailWidthSortColumns     = false,
                    ActionPopulateLookupCommand     = "$name2$",
                    ActionPopulateLookupDestination = "dummypath",
                    ActionPopulateLookupHostName    = "dummy2.host.com",
                    ActionPopulateLookupMaxResults  = 102,
                    ActionPopulateLookupMaxTime     = "20s",
                    ActionPopulateLookupTrackAlert  = false,
                    ActionPopulateLookupTtl         = "62",
                    ActionRssCommand                = "$name3$",
                    //attrs.ActionRssHostname = "dummy3.host.com",
                    ActionRssMaxResults       = 103,
                    ActionRssMaxTime          = "30s",
                    ActionRssTrackAlert       = "false",
                    ActionRssTtl              = "63",
                    ActionScriptCommand       = "$name4$",
                    ActionScriptFileName      = "action_script_filename",
                    ActionScriptHostName      = "dummy4.host.com",
                    ActionScriptMaxResults    = 104,
                    ActionScriptMaxTime       = "40s",
                    ActionScriptTrackAlert    = false,
                    ActionScriptTtl           = "64",
                    ActionSummaryIndexName    = "default",
                    ActionSummaryIndexCommand = "$name5$",
                    //attrs.ActionSummaryIndexHostname = "dummy5.host.com",
                    ActionSummaryIndexInline     = false,
                    ActionSummaryIndexMaxResults = 105,
                    ActionSummaryIndexMaxTime    = "50s",
                    ActionSummaryIndexTrackAlert = false,
                    ActionSummaryIndexTtl        = "65",
                    Actions = "rss,email,populate_lookup,script,summary_index"
                };

                await testSearch.UpdateAsync(attributes);

                // check

                Assert.True(testSearch.Actions.Email != null); //IsActionEmail));
                Assert.True(testSearch.Actions.PopulateLookup != null);
                Assert.True(testSearch.Actions.Rss != null);
                Assert.True(testSearch.Actions.Script != null);
                Assert.True(testSearch.Actions.SummaryIndex != null);

                Assert.Equal("sdk-password", testSearch.Actions.Email.AuthPassword);
                Assert.Equal("sdk-username", testSearch.Actions.Email.AuthUsername);
                Assert.Equal("*****@*****.**", testSearch.Actions.Email.Bcc);
                Assert.Equal("*****@*****.**", testSearch.Actions.Email.CC);
                Assert.Equal("$name1$", testSearch.Actions.Email.Command);
                Assert.Equal(EmailFormat.Plain, testSearch.Actions.Email.Format);
                Assert.Equal("*****@*****.**", testSearch.Actions.Email.From);
                //Assert.Equal("dummy1.host.com", savedSearch.Actions.Email.Hostname);
                Assert.True(testSearch.Actions.Email.Inline);
                //Assert.Equal("splunk.com", savedSearch.Actions.Email.MailServer);
                Assert.Equal(101, testSearch.Actions.Email.MaxResults);
                Assert.Equal("10s", testSearch.Actions.Email.MaxTime);
                //Assert.Equal("dummy", savedSearch.Actions.Email.PdfView);
                //Assert.Equal("*", savedSearch.Actions.Email.PreProcessResults);
                Assert.Equal(PaperOrientation.Landscape, testSearch.Actions.Email.ReportPaperOrientation);
                Assert.Equal(PaperSize.Letter, testSearch.Actions.Email.ReportPaperSize);
                Assert.False(testSearch.Actions.Email.ReportServerEnabled);
                //Assert.Equal("splunk.com", savedSearch.Actions.Email.ReportServerUrl);
                Assert.True(testSearch.Actions.Email.SendPdf);
                Assert.True(testSearch.Actions.Email.SendResults);
                Assert.Equal("sdk-subject", testSearch.Actions.Email.Subject);
                Assert.Equal("*****@*****.**", testSearch.Actions.Email.To);
                Assert.False(testSearch.Actions.Email.TrackAlert);
                Assert.Equal("61", testSearch.Actions.Email.Ttl);
                Assert.False(testSearch.Actions.Email.UseSsl);
                Assert.False(testSearch.Actions.Email.UseTls);
                Assert.False(testSearch.Actions.Email.WidthSortColumns);
                Assert.Equal("$name2$", testSearch.Actions.PopulateLookup.Command);
                Assert.Equal("dummypath", testSearch.Actions.PopulateLookup.Destination);
                Assert.Equal("dummy2.host.com", testSearch.Actions.PopulateLookup.Hostname);
                Assert.Equal(102, testSearch.Actions.PopulateLookup.MaxResults);
                Assert.Equal("20s", testSearch.Actions.PopulateLookup.MaxTime);
                Assert.False(testSearch.Actions.PopulateLookup.TrackAlert);
                Assert.Equal("62", testSearch.Actions.PopulateLookup.Ttl);
                Assert.Equal("$name3$", testSearch.Actions.Rss.Command);
                //Assert.Equal("dummy3.host.com", savedSearch.Actions.Rss.Hostname);
                Assert.Equal(103, testSearch.Actions.Rss.MaxResults);
                Assert.Equal("30s", testSearch.Actions.Rss.MaxTime);
                Assert.False(testSearch.Actions.Rss.TrackAlert);
                Assert.Equal("63", testSearch.Actions.Rss.Ttl);

                Assert.Equal("$name4$", testSearch.Actions.Script.Command);
                Assert.Equal("action_script_filename", testSearch.Actions.Script.FileName);
                Assert.Equal("dummy4.host.com", testSearch.Actions.Script.Hostname);
                Assert.Equal(104, testSearch.Actions.Script.MaxResults);
                Assert.Equal("40s", testSearch.Actions.Script.MaxTime);
                Assert.False(testSearch.Actions.Script.TrackAlert);
                Assert.Equal("64", testSearch.Actions.Script.Ttl);

                Assert.Equal("default", testSearch.Actions.SummaryIndex.Name);
                Assert.Equal("$name5$", testSearch.Actions.SummaryIndex.Command);
                //Assert.Equal("dummy5.host.com", savedSearch.Actions.SummaryIndex.Hostname);
                Assert.False(testSearch.Actions.SummaryIndex.Inline);
                Assert.Equal(105, testSearch.Actions.SummaryIndex.MaxResults);
                Assert.Equal("50s", testSearch.Actions.SummaryIndex.MaxTime);
                Assert.False(testSearch.Actions.SummaryIndex.TrackAlert);
                Assert.Equal("65", testSearch.Actions.SummaryIndex.Ttl);

                // Delete the saved search

                await testSearch.RemoveAsync();

                try
                {
                    await testSearch.GetAsync();

                    Assert.True(false);
                }
                catch (ResourceNotFoundException)
                { }

                testSearch = await savedSearches.GetOrNullAsync(testSearch.Name);

                Assert.Null(testSearch);
            }
        }
        public async Task SavedSearchDispatchProperties()
        {
            using (var service = await SdkHelper.CreateService())
            {
                // Ensure correct start state

                SavedSearchCollection savedSearches = service.SavedSearches;
                string      name       = "sdk-test_DispatchProperties";
                SavedSearch testSearch = await savedSearches.GetOrNullAsync(name);

                if (testSearch != null)
                {
                    await testSearch.RemoveAsync();
                }

                await savedSearches.GetAllAsync();

                Assert.Null(savedSearches.SingleOrDefault(savedSearch => savedSearch.Name == name));

                // Create a saved search
                testSearch = await savedSearches.CreateAsync(name, "search index=sdk-tests * earliest=-1m");

                // Dispatch the saved search with default arguments
                Job job = await testSearch.DispatchAsync();

                await job.TransitionAsync(DispatchState.Done);

                await job.CancelAsync();

                // Dispatch with some additional search options
                job = await testSearch.DispatchAsync(new SavedSearchDispatchArgs()
                {
                    DispatchBuckets = 100
                });

                await job.TransitionAsync(DispatchState.Done);

                await job.CancelAsync();

                // Dispatch with some additional search options
                job = await testSearch.DispatchAsync(new SavedSearchDispatchArgs()
                {
                    DispatchEarliestTime = "aaaa"
                });

                await job.TransitionAsync(DispatchState.Done);

                await job.CancelAsync();

                var savedSearchTemplateArgs = new SavedSearchTemplateArgs(
                    new Argument("action.email.authpassword ", "sdk-password"),
                    new Argument("action.email.authusername ", "sdk-username"),
                    new Argument("action.email.bcc ", "*****@*****.**"),
                    new Argument("action.email.cc ", "*****@*****.**"),
                    new Argument("action.email.command ", "$name1$"),
                    new Argument("action.email.format ", "text"),
                    new Argument("action.email.from ", "*****@*****.**"),
                    new Argument("action.email.hostname ", "dummy1.host.com"),
                    new Argument("action.email.inline ", "true"),
                    new Argument("action.email.mailserver ", "splunk.com"),
                    new Argument("action.email.maxresults ", "101"),
                    new Argument("action.email.maxtime ", "10s"),
                    new Argument("action.email.pdfview ", "dummy"),
                    new Argument("action.email.reportpaperorientation ", "landscape"),
                    new Argument("action.email.reportpapersize ", "letter"),
                    new Argument("action.email.reportserverenabled ", "false"),
                    new Argument("action.email.reportserverurl ", "splunk.com"),
                    new Argument("action.email.sendpdf ", "false"),
                    new Argument("action.email.sendresults ", "false"),
                    new Argument("action.email.subject ", "sdk-subject"),
                    new Argument("action.email.to ", "*****@*****.**"),
                    new Argument("action.email.trackalert ", "false"),
                    new Argument("action.email.ttl ", "61"),
                    new Argument("action.email.usessl ", "false"),
                    new Argument("action.email.usetls ", "false"),
                    new Argument("action.email.widthsortcolumns ", "false"),
                    new Argument("actions.populatelookup.command ", "$name2$"),
                    new Argument("actions.populatelookup.dest ", "dummypath"),
                    new Argument("actions.populatelookup.hostname ", "dummy2.host.com"),
                    new Argument("actions.populatelookup.maxresults ", "102"),
                    new Argument("actions.populatelookup.maxtime ", "20s"),
                    new Argument("actions.populatelookup.trackalert ", "false"),
                    new Argument("actions.populatelookup.ttl ", "62"),
                    new Argument("actions.rss.command ", "$name3$"),
                    new Argument("actions.rss.hostname ", "dummy3.host.com"),
                    new Argument("actions.rss.maxresults ", "103"),
                    new Argument("actions.rss.maxtime ", "30s"),
                    new Argument("actions.rss.trackalert ", "false"),
                    new Argument("actions.rss.ttl ", "63"),
                    new Argument("actionscriptcommand ", "$name4$"),
                    new Argument("actionscriptfilename ", "action_script_filename"),
                    new Argument("actionscripthostname ", "dummy4.host.com"),
                    new Argument("actionscriptmaxresults ", "104"),
                    new Argument("actionscriptmaxtime ", "40s"),
                    new Argument("actionscripttrackalert ", "false"),
                    new Argument("actionscriptttl ", "64"),
                    new Argument("actions.summaryindex.command ", "$name5$"),
                    new Argument("actions.summaryindex.hostname ", "dummy5.host.com"),
                    new Argument("actions.summaryindex.inline ", "false"),
                    new Argument("actions.summaryindex.maxresults ", "105"),
                    new Argument("actions.summaryindex.maxtime ", "50s"),
                    new Argument("actions.summaryindex.trackalert ", "false"),
                    new Argument("actions.summaryindex.ttl ", "65"),
                    new Argument("actions ", "rss,email,populate_lookup,script,summary_index"));

                //// Same as the previous dispatch except using custom arg
                job = await testSearch.DispatchAsync(templateArgs : savedSearchTemplateArgs);

                await job.TransitionAsync(DispatchState.Done);

                await job.CancelAsync();

                // Delete the saved search
                await testSearch.RemoveAsync();

                testSearch = await savedSearches.GetOrNullAsync(name);

                Assert.Null(testSearch);
            }
        }