示例#1
0
        public async Task <ActionResult> GetCustomLogs([FromQuery] Page page)
        {
            var username = _userManager.GetUserName(HttpContext.User);

            _logger.LogInformation(LoggingEvents.ListItems, "{username} getting custom logs", username);

            if (!ModelState.IsValid)
            {
                _logger.LogWarning(LoggingEvents.ListItemsFail, "{username} failed getting custom logs, Model state is not valid.", username);
                return(BadRequest(ModelState));
            }

            return(Ok(await _loggingService.GetLogMessagesAsync(page.PageNumber, page.PageSize)));
        }
示例#2
0
        public async Task <IActionResult> Logs(LogMessagesFilterViewModel model)
        {
            if (model.Id.HasValue)
            {
                return(RedirectToActionPermanent("Log", new { id = model.Id.Value }));
            }

            try
            {
                ViewBag.Messages = await _loggingService.GetLogMessagesAsync(model.ToLogMessagesFilterModel());
            }
            catch (System.Exception e)
            {
                _logger.LogWarning(LoggingEvents.HomeController.AsInt(), e, "Bad filter for logs");
                return(BadRequest("Bad filter parameters"));
            }

            ViewBag.FilterData = await _loggingService.GetAvailableFilterDataAsync();

            if (ViewBag.Messages.Count == 0)
            {
                TempData["MessageSeverity"] = "warning";
                TempData["MessageContent"]  = $"No log messages found in the system.";
            }

            return(View(model));
        }
示例#3
0
        public async Task GetsLogMessages()
        {
            // Arrange
            var twoDaysAgo = DateTime.UtcNow.AddDays(-2);
            var hourAgo    = DateTime.UtcNow.AddHours(-1);
            var now        = DateTime.UtcNow;

            var logEntries = new List <LogEntry> {
                new LogEntry {
                    Severity = new LogEntrySeverity {
                        Id = LogEntrySeverities.Debug.AsInt()
                    },
                    Category  = LoggingEvents.Clean.AsInt(),
                    Source    = "the-source-1",
                    Timestamp = twoDaysAgo
                },
                new LogEntry {
                    Severity = new LogEntrySeverity {
                        Id = LogEntrySeverities.Info.AsInt()
                    },
                    Category  = LoggingEvents.Clean.AsInt(),
                    Source    = "the-source-2",
                    Timestamp = twoDaysAgo
                },
                new LogEntry {
                    Severity = new LogEntrySeverity {
                        Id = LogEntrySeverities.Debug.AsInt()
                    },
                    Category  = LoggingEvents.Clean.AsInt(),
                    Source    = "the-source-1",
                    Timestamp = hourAgo
                },
                new LogEntry {
                    Severity = new LogEntrySeverity {
                        Id = LogEntrySeverities.Error.AsInt()
                    },
                    Category  = LoggingEvents.ActionFilters.AsInt(),
                    Source    = "the-source-2",
                    Timestamp = now
                },
                new LogEntry {
                    Severity = new LogEntrySeverity {
                        Id = LogEntrySeverities.Error.AsInt()
                    },
                    Category  = LoggingEvents.Cache.AsInt(),
                    Source    = "the-source-3",
                    Timestamp = hourAgo
                },
                new LogEntry {
                    Severity = new LogEntrySeverity {
                        Id = LogEntrySeverities.Detail.AsInt()
                    },
                    Category  = LoggingEvents.ActionFilters.AsInt(),
                    Source    = "the-source-2",
                    Timestamp = now
                }
            };
            await _context.LogEntries.AddRangeAsync(logEntries);

            await _context.SaveChangesAsync();

            var expectedBySource =             // the-source 2
                                   new List <LogEntry>
            {
                logEntries[1],
                logEntries[3],
                logEntries[5]
            };

            var expectedByCategory =             // ActionFilters
                                     new List <LogEntry>
            {
                logEntries[3],
                logEntries[5]
            };

            var expectedBySeverity =             // Debug
                                     new List <LogEntry>
            {
                logEntries[0],
                logEntries[2]
            };

            var expectedByStart =             // hourAgo
                                  new List <LogEntry>
            {
                logEntries[2],
                logEntries[3],
                logEntries[4],
                logEntries[5]
            };

            var expectedByEnd =             // hourAgo
                                new List <LogEntry>
            {
                logEntries[0],
                logEntries[1],
                logEntries[2],
                logEntries[4]
            };

            var expectedByCombined =
                new List <LogEntry>
            {
                logEntries[2]
            };

            var expectedEmpty = new List <LogEntry>();
            var expectedAll   = logEntries;

            // Act
            var actualBySource = await _loggingService.GetLogMessagesAsync(
                new LogMessagesFilterModel
            {
                Sources = new List <string> {
                    "the-source-2"
                }
            }
                );

            var actualByCategory = await _loggingService.GetLogMessagesAsync(
                new LogMessagesFilterModel
            {
                Categories = new List <int> {
                    LoggingEvents.ActionFilters.AsInt()
                }
            }
                );

            var actualBySeverity = await _loggingService.GetLogMessagesAsync(
                new LogMessagesFilterModel
            {
                Severities = new List <LogEntrySeverities> {
                    LogEntrySeverities.Debug
                }
            }
                );

            var actualByStart = await _loggingService.GetLogMessagesAsync(
                new LogMessagesFilterModel
            {
                Start = hourAgo
            }
                );

            var actualByEnd = await _loggingService.GetLogMessagesAsync(
                new LogMessagesFilterModel
            {
                End = hourAgo
            }
                );

            var actualEmpty = await _loggingService.GetLogMessagesAsync(
                new LogMessagesFilterModel
            {
                Severities = new List <LogEntrySeverities> {
                    LogEntrySeverities.Fatal
                }
            }
                );

            var actualAll = await _loggingService.GetLogMessagesAsync(new LogMessagesFilterModel());

            // Assert
            Assert.Equal(
                expectedBySource.OrderBy(e => e.Id),
                actualBySource.OrderBy(e => e.Id)
                );
            Assert.Equal(
                expectedByCategory.OrderBy(e => e.Id),
                actualByCategory.OrderBy(e => e.Id)
                );
            Assert.Equal(
                expectedBySeverity.OrderBy(e => e.Id),
                actualBySeverity.OrderBy(e => e.Id)
                );
            Assert.Equal(
                expectedByStart.OrderBy(e => e.Id),
                actualByStart.OrderBy(e => e.Id)
                );
            Assert.Equal(
                expectedByEnd.OrderBy(e => e.Id),
                actualByEnd.OrderBy(e => e.Id)
                );
            Assert.Equal(
                expectedEmpty.OrderBy(e => e.Id),
                actualEmpty.OrderBy(e => e.Id)
                );
            Assert.Equal(
                expectedAll.OrderBy(e => e.Id),
                actualAll.OrderBy(e => e.Id)
                );
        }