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);
                }
            }
        }
    }
Ejemplo n.º 2
0
    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);
                }
            }
        }
    }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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));
    }
Ejemplo n.º 6
0
    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);
    }