diff --git a/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs b/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs index 4ab3a9f6bd..71a863fb3e 100644 --- a/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs +++ b/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs @@ -19,10 +19,15 @@ namespace Umbraco.Core.Logging.Viewer IEnumerable GetSavedSearches(); /// - /// Adds a new saved search to chosen datasource + /// Adds a new saved search to chosen datasource and returns the updated searches /// IEnumerable AddSavedSearch(string name, string query); + /// + /// Deletes a saved search to chosen datasource and returns the remaining searches + /// + IEnumerable DeleteSavedSearch(string name, string query); + /// /// A count of number of errors /// By counting Warnings with Exceptions, Errors & Fatal messages diff --git a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs index 1f0faf1d40..4698853ab4 100644 --- a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs +++ b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs @@ -11,7 +11,8 @@ namespace Umbraco.Core.Logging.Viewer { public class JsonLogViewer : LogViewerSourceBase { - + private static readonly string SearchesConfigPath = IOHelper.MapPath("~/Config/logviewer.searches.config.js"); + public override IEnumerable GetAllLogs(DateTimeOffset startDate, DateTimeOffset endDate) { var logs = new List(); @@ -32,7 +33,7 @@ namespace Umbraco.Core.Logging.Viewer var filesForCurrentDay = Directory.GetFiles(logDirectory, filesToFind); //Foreach file we find - open it - foreach(var filePath in filesForCurrentDay) + foreach (var filePath in filesForCurrentDay) { //Open log file & add contents to the log collection //Which we then use LINQ to page over @@ -50,20 +51,18 @@ namespace Umbraco.Core.Logging.Viewer } } } - + return logs; } public override IEnumerable GetSavedSearches() { //Our default implementation - //Open JSON file on disk and return serialize obj back - var path = IOHelper.MapPath("~/Config/logviewer.searches.config.js"); //If file does not exist - lets create it with an empty array - IOHelper.EnsureFileExists(path, "[]"); + IOHelper.EnsureFileExists(SearchesConfigPath, "[]"); - var rawJson = File.ReadAllText(path); + var rawJson = File.ReadAllText(SearchesConfigPath); return JsonConvert.DeserializeObject>(rawJson); } @@ -78,19 +77,33 @@ namespace Umbraco.Core.Logging.Viewer //Serilaize to JSON string var rawJson = JsonConvert.SerializeObject(searches, Formatting.Indented); - //Open file & save contents - var path = IOHelper.MapPath("~/Config/logviewer.searches.config.js"); - //If file does not exist - lets create it with an empty array - IOHelper.EnsureFileExists(path, "[]"); + IOHelper.EnsureFileExists(SearchesConfigPath, "[]"); //Write it back down to file - File.WriteAllText(path, rawJson); + File.WriteAllText(SearchesConfigPath, rawJson); //Return the updated object - so we can instantly reset the entire array from the API response //As opposed to push a new item into the array return searches; - + } + + public override IEnumerable DeleteSavedSearch(string name, string query) + { + //Get the existing items + var searches = GetSavedSearches().ToList(); + + //Removes the search + searches.RemoveAll(s => s.Name.Equals(name) && s.Query.Equals(query)); + + //Serilaize to JSON string + var rawJson = JsonConvert.SerializeObject(searches, Formatting.Indented); + + //Write it back down to file + File.WriteAllText(SearchesConfigPath, rawJson); + + //Return the updated object - so we can instantly reset the entire array from the API response + return searches; } } } diff --git a/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs b/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs index 07fee47fa1..ed3032d145 100644 --- a/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs +++ b/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs @@ -16,6 +16,8 @@ namespace Umbraco.Core.Logging.Viewer public abstract IEnumerable AddSavedSearch(string name, string query); + public abstract IEnumerable DeleteSavedSearch(string name, string query); + public int GetNumberOfErrors(DateTimeOffset startDate, DateTimeOffset endDate) { var logs = GetAllLogs(startDate, endDate); diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/logviewer.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/logviewer.resource.js index 1182901d6b..0d7270b937 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/logviewer.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/logviewer.resource.js @@ -10,7 +10,7 @@ //the factory object returned return { - getNumberOfErrors: function(){ + getNumberOfErrors: function () { return umbRequestHelper.resourcePromise( $http.get( umbRequestHelper.getApiUrl( @@ -19,7 +19,7 @@ 'Failed to retrieve number of errors in logs'); }, - getLogLevelCounts: function(){ + getLogLevelCounts: function () { return umbRequestHelper.resourcePromise( $http.get( umbRequestHelper.getApiUrl( @@ -28,7 +28,7 @@ 'Failed to retrieve log level counts'); }, - getMessageTemplates: function(){ + getMessageTemplates: function () { return umbRequestHelper.resourcePromise( $http.get( umbRequestHelper.getApiUrl( @@ -37,7 +37,7 @@ 'Failed to retrieve log templates'); }, - getSavedSearches: function(){ + getSavedSearches: function () { return umbRequestHelper.resourcePromise( $http.get( umbRequestHelper.getApiUrl( @@ -46,20 +46,25 @@ 'Failed to retrieve saved searches'); }, - postSavedSearch: function(name, query){ + postSavedSearch: function (name, query) { return umbRequestHelper.resourcePromise( $http.post( umbRequestHelper.getApiUrl( "logViewerApiBaseUrl", - "PostSavedSearch"), {'name': name, 'query': query }), + "PostSavedSearch"), { 'name': name, 'query': query }), 'Failed to add new saved search'); - - return umbRequestHelper.resourcePromise( - $http.post(umbRequestHelper.getApiUrl("dataTypeApiBaseUrl", "PostSave"), saveModel), - "Failed to save data for data type id " + dataType.id); }, - getLogs: function(options){ + deleteSavedSearch: function (name, query) { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "logViewerApiBaseUrl", + "DeleteSavedSearch"), { 'name': name, 'query': query }), + 'Failed to delete saved search'); + }, + + getLogs: function (options) { var defaults = { pageSize: 100, diff --git a/src/Umbraco.Web.UI.Client/src/views/logviewer/search.controller.js b/src/Umbraco.Web.UI.Client/src/views/logviewer/search.controller.js index e047881e5e..ef4e1b8f9f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/logviewer/search.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/logviewer/search.controller.js @@ -83,6 +83,7 @@ vm.findItem = findItem; vm.checkForSavedSearch = checkForSavedSearch; vm.addToSavedSearches = addToSavedSearches; + vm.deleteSavedSearch = deleteSavedSearch; vm.back = back; @@ -272,9 +273,7 @@ //Resource call with two params (name & query) //API that opens the JSON and adds it to the bottom logViewerResource.postSavedSearch(model.queryName, model.queryToSave).then(function(data){ - console.log('search after add', data); vm.searches = data; - overlayService.close(); }); }, @@ -284,7 +283,12 @@ }; overlayService.open(overlay); + } + function deleteSavedSearch(model) { + logViewerResource.deleteSavedSearch(model.name, model.query).then(function (data) { + vm.searches = data; + }); } function back() { diff --git a/src/Umbraco.Web.UI.Client/src/views/logviewer/search.html b/src/Umbraco.Web.UI.Client/src/views/logviewer/search.html index 284703d7d0..e2587986d8 100644 --- a/src/Umbraco.Web.UI.Client/src/views/logviewer/search.html +++ b/src/Umbraco.Web.UI.Client/src/views/logviewer/search.html @@ -83,6 +83,7 @@ {{search.name}} {{ search.query }} + diff --git a/src/Umbraco.Web/Editors/LogViewerController.cs b/src/Umbraco.Web/Editors/LogViewerController.cs index 82a4a953f0..61ba3d0a9b 100644 --- a/src/Umbraco.Web/Editors/LogViewerController.cs +++ b/src/Umbraco.Web/Editors/LogViewerController.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json; -using System; +using System; using System.Collections.Generic; using System.Web.Http; using Umbraco.Core.Logging.Viewer; @@ -27,7 +26,7 @@ namespace Umbraco.Web.Editors { return _logViewer.GetNumberOfErrors(startDate: DateTime.Now.AddDays(-1), endDate: DateTime.Now); } - + [HttpGet] public LogLevelCounts GetLogLevelCounts() { @@ -58,5 +57,11 @@ namespace Umbraco.Web.Editors { return _logViewer.AddSavedSearch(item.Name, item.Query); } + + [HttpPost] + public IEnumerable DeleteSavedSearch(SavedLogSearch item) + { + return _logViewer.DeleteSavedSearch(item.Name, item.Query); + } } }