public HttpResponseMessage LogDetailsViewer(int LogId = 0) { var returnSB = new StringBuilder(); var fancyFormat = true; var customStyles = ""; var customScripts = ""; //customStyles = @" // .container{ // margin-left: 1em; // margin-right: 1em; // }"; //customScripts = @" // $(document).ready(function() { // $('#umbracodata').DataTable( { // 'lengthMenu': [[25, 50, 100, -1], [25, 50, 100, 'All']] // } ); // });"; //GET LOG ENTRIES TO DISPLAY var lvs = new LogViewerService(); var logItem = lvs.GetLogItem(LogId); //BUILD HTML returnSB.AppendLine(HtmlStart(customStyles)); returnSB.AppendLine($"<h1>Log Details Viewer</h1>"); //RENDER DATA if (logItem != null) { var pvPath = "~/Views/Partials/LogViewer/LogItemDetails.cshtml"; var logItemHtml = Dragonfly.Umbraco7Helpers.ApiControllerHtmlHelper.GetPartialViewHtml(this.ControllerContext, pvPath, new ViewDataDictionary(logItem), HttpContext.Current); returnSB.AppendLine(logItemHtml); } if (fancyFormat) { returnSB.AppendLine(HtmlEnd(customScripts)); } return(new HttpResponseMessage() { Content = new StringContent( returnSB.ToString(), Encoding.UTF8, "text/html" ) }); }
public HttpResponseMessage LogViewer(bool ShowResolved = false, string FilterSite = "", string FilterLevel = "") { var returnSB = new StringBuilder(); var fancyFormat = true; var customStyles = ""; var customScripts = ""; //TODO: Update to use partial views customStyles = @" .container{ margin-left: 1em; margin-right: 1em; }"; customScripts = @" $(document).ready(function() { $('#umbracodata').DataTable( { 'lengthMenu': [[25, 50, 100, -1], [25, 50, 100, 'All']] } ); });"; var extraHeaders = ""; if (fancyFormat) { extraHeaders = @" <th>#</th> <th>Actions</th> "; } //GET LOG ENTRIES TO DISPLAY var lvs = new LogViewerService(); var allLogs = lvs.GetAllLogItems(ShowResolved).ToList(); var logsFiltered = allLogs; bool isFiltered = false; var filtersList = new List <string>(); if (FilterSite != "") { isFiltered = true; logsFiltered = logsFiltered.Where(n => n.Host == FilterSite || n.SiteTags.Contains(FilterSite)).ToList(); filtersList.Add($"Site '{FilterSite}'"); } if (FilterLevel != "") { isFiltered = true; logsFiltered = logsFiltered.Where(n => n.Level == FilterLevel || n.LevelTags.Contains(FilterLevel)).ToList(); filtersList.Add($"Level '{FilterLevel}'"); } //BUILD HTML returnSB.AppendLine(HtmlStart(customStyles)); returnSB.AppendLine($"<h1>Log Viewer</h1>"); //Show/Hide Resolved Items var showResolvedClass = ShowResolved ? "active" : ""; var hideResolvedClass = !ShowResolved ? "active" : ""; var showResolvedUrl = Dragonfly.NetHelpers.Url.AppendQueryStringToUrl(Request.RequestUri, "ShowResolved", "true"); var hideResolvedUrl = Dragonfly.NetHelpers.Url.AppendQueryStringToUrl(Request.RequestUri, "ShowResolved", "false"); var resolvedButtons = $@" <div class=""btn-group"" data-toggle=""buttons""> <a class=""btn btn-default btn-sm {hideResolvedClass}"" href=""{hideResolvedUrl}"">Hide Resolved</a> <a class=""btn btn-default btn-sm {showResolvedClass}"" href=""{showResolvedUrl}"">Show All</a> </div> "; returnSB.AppendLine(resolvedButtons); returnSB.AppendLine($"<p>Log Items Returned: {logsFiltered.Count()} (of {allLogs.Count} total visible log items)</p>"); if (isFiltered) { var filtersString = Dragonfly.NetHelpers.Strings.JoinAsText(", ", " and ", filtersList); returnSB.AppendLine(string.Format("<p>Displaying {0} log items with {1}.</p>", logsFiltered.Count(), filtersString)); returnSB.AppendLine($"<p><b><a class=\"btn btn-success\" href=\"LogViewer?ShowResolved={ShowResolved}\">Remove Filters and Show All</a></b></p>"); } var tableDataHeaders = $@" <th><small>Resolved<small></th> <th>Site</th> <th>Date/Time</th> <th>Level</th> <th>Type</th> <th>Message</th> <th>Page</th> "; var tableStart = $@" <table id=""umbracodata"" class=""table table-striped table-bordered table-hover table-sm"" cellspacing=""0"" style=""width:100%""> <thead> <tr> {extraHeaders} {tableDataHeaders} </tr> </thead> <tbody> "; var tableEnd = @"</tbody></table>"; var tableData = new StringBuilder(); var counter = 0; //Special Classes for Tags //BOOTSTRAP COLOR OPTIONS: muted primary success info warning danger var levelTagClasses = new Dictionary <string, string>() { { "INFO", "info" }, { "WARN", "warning" }, { "ERROR", "danger" }, { "Security", "danger" } }; //LOOP foreach (var item in logsFiltered) { var pageUrl = item.HasValidUrlPath ? $"http://{item.Host}{item.UrlPath}" : ""; //Render Table counter++; tableData.AppendLine("<tr>"); if (fancyFormat) { // # tableData.AppendLine(TdStringData(counter, fancyFormat)); //Actions tableData.AppendLine(TdLogActions(item.Id, pageUrl)); } //Resolved var resolvedTrue = @"<div> <span class=""glyphicon glyphicon-ok-circle"" aria-hidden=""true"" style=""font-size:30px;color:#5cb85c;""></span> <span class=""sr-only"">Resolved</span> </div>"; var resolvedFalse = @"<div class=""text-muted""> <span class=""glyphicon glyphicon-ban-circle"" aria-hidden=""true"" style=""font-size:30px;""></span> <span class=""sr-only"">Not Yet Resolved</span> </div>"; tableData.AppendLine(TdBoolData(item.Resolved, fancyFormat, resolvedTrue, resolvedFalse)); //Site var siteTags = new List <string>(); siteTags.Add(item.Host); siteTags.AddRange(item.SiteTags); tableData.AppendLine(TdTagData(siteTags, fancyFormat, "FilterSite", null)); //Date tableData.AppendLine(TdDateData(item.Date, fancyFormat)); //Level var levelTags = new List <string>(); levelTags.Add(item.Level); levelTags.AddRange(item.LevelTags); tableData.AppendLine(TdTagData(levelTags, fancyFormat, "FilterLevel", levelTagClasses)); //Type (Logger) tableData.AppendLine(TdStringData(item.Logger, fancyFormat)); //Message tableData.AppendLine(TdStringData(item.Message, fancyFormat)); //Page tableData.AppendLine(TdStringData(item.UrlPath, fancyFormat)); tableData.AppendLine("</tr>"); } returnSB.AppendLine(tableStart); returnSB.Append(tableData); returnSB.AppendLine(tableEnd); if (fancyFormat) { returnSB.AppendLine(HtmlEnd(customScripts)); } return(new HttpResponseMessage() { Content = new StringContent( returnSB.ToString(), Encoding.UTF8, "text/html" ) }); }