Exemplo n.º 1
0
        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"
                    )
            });
        }
Exemplo n.º 2
0
        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"
                    )
            });
        }