public virtual HttpStatusCode CreateOrUpdateSavedSearch(string resourceGroupName, string workspaceName, string savedSearchId, SavedSearchProperties properties, bool force, Action <bool, string, string, string, Action, Func <bool> > ConfirmAction, string ETag = null)
        {
            HttpStatusCode status            = HttpStatusCode.Ambiguous;
            Action         createSavedSearch = () =>
            {
                SearchCreateOrUpdateSavedSearchParameters searchParameters = new SearchCreateOrUpdateSavedSearchParameters();
                if (ETag != null && ETag != "")
                {
                    searchParameters.ETag = ETag;
                }
                searchParameters.Properties = properties;
                AzureOperationResponse response = OperationalInsightsManagementClient.Search.CreateOrUpdateSavedSearch(resourceGroupName, workspaceName, savedSearchId, searchParameters);
                status = response.StatusCode;
            };

            ConfirmAction(
                force,    // prompt only if the saved search exists
                string.Format(
                    CultureInfo.InvariantCulture,
                    Resources.SavedSearchExists,
                    savedSearchId,
                    workspaceName),
                string.Format(
                    CultureInfo.InvariantCulture,
                    Resources.SavedSearchCreating,
                    savedSearchId,
                    workspaceName),
                savedSearchId,
                createSavedSearch,
                () => CheckSavedSearchExists(resourceGroupName, workspaceName, savedSearchId));
            return(status);
        }
        public virtual HttpStatusCode CreateOrUpdateSavedSearch(string resourceGroupName, string workspaceName, string savedSearchId, string displayName, string category, string query, int version, bool force, Action <bool, string, string, string, Action> ConfirmAction, string ETag = null)
        {
            HttpStatusCode status            = HttpStatusCode.Ambiguous;
            Action         createSavedSearch = () =>
            {
                SearchCreateOrUpdateSavedSearchParameters parameters = new SearchCreateOrUpdateSavedSearchParameters();
                if (ETag != null && ETag != "")
                {
                    parameters.ETag = ETag;
                }
                parameters.Properties             = new SavedSearchProperties();
                parameters.Properties.Category    = category;
                parameters.Properties.DisplayName = displayName;
                parameters.Properties.Query       = query;
                parameters.Properties.Version     = version;
                AzureOperationResponse response = OperationalInsightsManagementClient.Search.CreateOrUpdateSavedSearch(resourceGroupName, workspaceName, savedSearchId, parameters);
                status = response.StatusCode;
            };

            if (force)
            {
                createSavedSearch();
            }
            else
            {
                bool savedSearchExists = CheckSavedSearchExists(resourceGroupName, workspaceName, savedSearchId);

                ConfirmAction(
                    !savedSearchExists,    // prompt only if the saved search exists
                    string.Format(
                        CultureInfo.InvariantCulture,
                        Resources.SavedSearchExists,
                        savedSearchId,
                        workspaceName),
                    string.Format(
                        CultureInfo.InvariantCulture,
                        Resources.SavedSearchCreating,
                        savedSearchId,
                        workspaceName),
                    savedSearchId,
                    createSavedSearch);
            }
            return(status);
        }
        public void CanCreateOrUpdateAndDeleteSavedSearches()
        {
            BasicDelegatingHandler handler = new BasicDelegatingHandler();

            using (var undoContext = UndoContext.Current)
            {
                undoContext.Start();

                var client = TestHelper.GetOperationalInsightsManagementClient(handler);

                string resourceGroupName = "mms-eus";
                string workspaceName     = "workspace-861bd466-5400-44be-9552-5ba40823c3aa";
                string newSavedSearchId  = "test-new-saved-search-id-2015";

                SearchCreateOrUpdateSavedSearchParameters parameters = new SearchCreateOrUpdateSavedSearchParameters();
                parameters.Properties             = new SavedSearchProperties();
                parameters.Properties.Version     = 1;
                parameters.Properties.Query       = "* | measure Count() by Computer";
                parameters.Properties.DisplayName = "Create or Update Saved Search Test";
                parameters.Properties.Category    = " Saved Search Test Category";
                parameters.Properties.Tags        = new List <Tag>()
                {
                    new Tag()
                    {
                        Name = "Group", Value = "Computer"
                    }
                };

                var result = client.Search.ListSavedSearches(resourceGroupName, workspaceName);

                var createSavedSearchResults = client.Search.CreateOrUpdateSavedSearch(
                    resourceGroupName,
                    workspaceName,
                    newSavedSearchId,
                    parameters);
                Assert.NotNull(createSavedSearchResults);

                // Verify that the saved search was saved
                var savedSearchesResult = client.Search.ListSavedSearches(resourceGroupName, workspaceName);
                Assert.NotNull(savedSearchesResult);
                Assert.NotNull(savedSearchesResult.Value);
                Assert.NotEqual(savedSearchesResult.Value.Count, 0);
                Assert.NotNull(savedSearchesResult.Value[0].Id);
                Assert.NotNull(savedSearchesResult.Value[0].Properties);
                bool foundSavedSearch = false;
                for (int i = 0; i < savedSearchesResult.Value.Count; i++)
                {
                    SavedSearchProperties properties = savedSearchesResult.Value[i].Properties;
                    if (properties.Category.Equals(parameters.Properties.Category) &&
                        properties.Version == parameters.Properties.Version &&
                        properties.Query.Equals(parameters.Properties.Query) &&
                        properties.DisplayName.Equals(parameters.Properties.DisplayName) &&
                        properties.Tags[0].Name.Equals(parameters.Properties.Tags[0].Name) &&
                        properties.Tags[0].Value.Equals(parameters.Properties.Tags[0].Value))
                    {
                        foundSavedSearch = true;
                        parameters.ETag  = savedSearchesResult.Value[i].ETag;
                    }
                }
                Assert.True(foundSavedSearch);

                // Test updating a saved search
                parameters.Properties.Query = "*";
                parameters.Properties.Tags  = new List <Tag>()
                {
                    new Tag()
                    {
                        Name = "Source", Value = "Test2"
                    }
                };
                var updateSavedSearchResults = client.Search.CreateOrUpdateSavedSearch(
                    resourceGroupName,
                    workspaceName,
                    newSavedSearchId,
                    parameters);
                Assert.NotNull(updateSavedSearchResults);
                // Verify that the saved search was saved
                savedSearchesResult = client.Search.ListSavedSearches(resourceGroupName, workspaceName);
                Assert.NotNull(savedSearchesResult);
                Assert.NotNull(savedSearchesResult.Value);
                Assert.NotEqual(savedSearchesResult.Value.Count, 0);
                Assert.NotNull(savedSearchesResult.Value[0].Id);
                Assert.NotNull(savedSearchesResult.Value[0].Properties);
                foundSavedSearch = false;
                for (int i = 0; i < savedSearchesResult.Value.Count; i++)
                {
                    SavedSearchProperties properties = savedSearchesResult.Value[i].Properties;
                    if (properties.Category.Equals(parameters.Properties.Category) &&
                        properties.Version == parameters.Properties.Version &&
                        properties.Query.Equals(parameters.Properties.Query) &&
                        properties.DisplayName.Equals(parameters.Properties.DisplayName) &&
                        properties.Tags[0].Name.Equals(parameters.Properties.Tags[0].Name) &&
                        properties.Tags[0].Value.Equals(parameters.Properties.Tags[0].Value))
                    {
                        foundSavedSearch = true;
                    }
                }
                Assert.True(foundSavedSearch);



                // Test the function to delete a saved search
                client.Search.DeleteSavedSearch(resourceGroupName, workspaceName, newSavedSearchId);
                savedSearchesResult = client.Search.ListSavedSearches(resourceGroupName, workspaceName);

                foundSavedSearch = false;
                for (int i = 0; i < savedSearchesResult.Value.Count; i++)
                {
                    SavedSearchProperties properties = savedSearchesResult.Value[i].Properties;
                    if (properties.Category.Equals(parameters.Properties.Category) &&
                        properties.Version == parameters.Properties.Version &&
                        properties.Query.Equals(parameters.Properties.Query) &&
                        properties.DisplayName.Equals(parameters.Properties.DisplayName))
                    {
                        foundSavedSearch = true;
                    }
                }
                Assert.False(foundSavedSearch);
            }
        }
 /// <summary>
 /// Creates or updates a saved search for a given workspace.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.Azure.Management.OperationalInsights.ISearchOperations.
 /// </param>
 /// <param name='resourceGroupName'>
 /// Required. The resource group name of the workspace.
 /// </param>
 /// <param name='workspaceName'>
 /// Required. A unique workspace instance name.
 /// </param>
 /// <param name='savedSearchId'>
 /// Required. The id of the saved search.
 /// </param>
 /// <param name='parameters'>
 /// Required. The parameters required to save a search.
 /// </param>
 /// <returns>
 /// A standard service response including an HTTP status code and
 /// request ID.
 /// </returns>
 public static Task <AzureOperationResponse> CreateOrUpdateSavedSearchAsync(this ISearchOperations operations, string resourceGroupName, string workspaceName, string savedSearchId, SearchCreateOrUpdateSavedSearchParameters parameters)
 {
     return(operations.CreateOrUpdateSavedSearchAsync(resourceGroupName, workspaceName, savedSearchId, parameters, CancellationToken.None));
 }
 /// <summary>
 /// Creates or updates a saved search for a given workspace.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.Azure.Management.OperationalInsights.ISearchOperations.
 /// </param>
 /// <param name='resourceGroupName'>
 /// Required. The resource group name of the workspace.
 /// </param>
 /// <param name='workspaceName'>
 /// Required. A unique workspace instance name.
 /// </param>
 /// <param name='savedSearchId'>
 /// Required. The id of the saved search.
 /// </param>
 /// <param name='parameters'>
 /// Required. The parameters required to save a search.
 /// </param>
 /// <returns>
 /// A standard service response including an HTTP status code and
 /// request ID.
 /// </returns>
 public static AzureOperationResponse CreateOrUpdateSavedSearch(this ISearchOperations operations, string resourceGroupName, string workspaceName, string savedSearchId, SearchCreateOrUpdateSavedSearchParameters parameters)
 {
     return(Task.Factory.StartNew((object s) =>
     {
         return ((ISearchOperations)s).CreateOrUpdateSavedSearchAsync(resourceGroupName, workspaceName, savedSearchId, parameters);
     }
                                  , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }