private async Task SendLogsAsync() { var logs = new List <LaobianLog>(); while (_logQueue.TryDequeue(out var log)) { logs.Add(log); } if (logs.Any()) { try { var request = new LogGrpcRequest { Logger = LaobianSite.Blog.ToString(), Logs = logs }; var response = await _logGrpcService.AddLogsAsync(request); if (!response.IsOk) { Console.WriteLine($"Send logs failed: {response.Message}"); } } catch (Exception ex) { Console.WriteLine($"Sent logs failed. {ex}"); foreach (var laobianLog in logs) { Console.WriteLine(laobianLog); } } } }
private async Task SendLogsAsync() { var logs = new List <LaobianLog>(); while (_logQueue.TryDequeue(out var log)) { logs.Add(log); } if (logs.Any()) { try { var client = GrpcClientHelper.CreateClient <ILogGrpcService>(_options.ApiLocalEndpoint); var request = new LogGrpcRequest { Logger = LaobianSite.Admin.ToString(), Logs = logs }; await client.AddLogsAsync(request); } catch (Exception ex) { Console.WriteLine($"Sent logs failed. {ex}"); foreach (var laobianLog in logs) { Console.WriteLine(laobianLog); } } } }
public async Task <LogGrpcResponse> GetLogsAsync(LogGrpcRequest request, CallContext context = default) { var response = new LogGrpcResponse(); try { var logs = new List <LaobianLog>(); var days = request.Days; var minLevel = request.MinLevel; if (Enum.TryParse(request.Logger, true, out LaobianSite laobianSite)) { if (laobianSite == LaobianSite.All) { logs.AddRange(await ReadLogsAsync(LaobianSite.Admin, days, minLevel)); logs.AddRange(await ReadLogsAsync(LaobianSite.Blog, days, minLevel)); logs.AddRange(await ReadLogsAsync(LaobianSite.Api, days, minLevel)); logs.AddRange(await ReadLogsAsync(LaobianSite.Jarvis, days, minLevel)); } else { logs.AddRange(await ReadLogsAsync(laobianSite, days, minLevel)); } } response.Logs = logs; } catch (Exception ex) { _logger.LogError(ex, $"{nameof(LogGrpcService)}({nameof(GetLogsAsync)}) failed."); response.IsOk = false; response.Message = ex.Message; } return(response); }
public async Task <ApiResponse <ChartResponse> > GetLogStats() { var response = new ApiResponse <ChartResponse>(); try { var request = new LogGrpcRequest { Days = 14, Logger = "all", MinLevel = 3 }; var logResponse = await _logGrpcService.GetLogsAsync(request); if (logResponse.IsOk) { logResponse.Logs = logResponse.Logs ?? new List <LaobianLog>(); var groupedLogs = logResponse.Logs.GroupBy(x => x.TimeStamp.Date).OrderBy(x => x.Key); var chartResponse = new ChartResponse { Title = "# Warning/Error logs", Type = "bar" }; foreach (var item in groupedLogs) { chartResponse.Labels.Add(item.Key.ToRelativeDaysHuman()); chartResponse.Data.Add(item.Count()); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = logResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, "Get logs stats failed."); } return(response); }
public async Task <LogGrpcResponse> AddLogsAsync(LogGrpcRequest request, CallContext context = default) { var response = new LogGrpcResponse(); try { foreach (var log in request.Logs) { log.LoggerName = request.Logger; _laobianLogQueue.Add(log); } } catch (Exception ex) { _logger.LogError(ex, $"{nameof(LogGrpcService)}({nameof(AddLogsAsync)}) failed."); response.IsOk = false; response.Message = ex.Message; } return(await Task.FromResult(response)); }
public async Task <ApiResponse <List <LaobianLog> > > GetLogs([FromQuery] string site, [FromQuery] int minLevel, [FromQuery] int days) { var response = new ApiResponse <List <LaobianLog> >(); try { var request = new LogGrpcRequest { Days = days, Logger = site, MinLevel = minLevel }; var logResponse = await _logGrpcService.GetLogsAsync(request); if (logResponse.IsOk) { logResponse.Logs = logResponse.Logs ?? new List <LaobianLog>(); var logs = logResponse.Logs.OrderByDescending(x => x.TimeStamp).ToList(); response.Content = logs; } else { response.IsOk = false; response.Message = logResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, $"Get logs failed. {site}:{minLevel}:{days}"); } return(response); }