예제 #1
0
        public async Task ProcessLeaders(string value)
        {
            var storage = new KongoDataStorage($"Data Source={Path.GetRandomFileName()}");

            storage.Database.EnsureCreated();
            var opts = new KongoOptions()
            {
                ApplicationStartedOn = DateTimeOffset.UtcNow
            };

            _processor = new LeadersProcessor(storage, opts);
            var processedLeaders = await _processor.ProcessLeaders(value);

            storage.Database.EnsureDeleted();
            Assert.True(processedLeaders.Leaders.Count > 0);
        }
예제 #2
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                var uirScheme = _opts.RestUri.Split(':')[0];
                var host      = _opts.RestUri.Split(':')[1].Substring(2);
                var portPart  = _opts.RestUri.Split(':')[2];
                Int32.TryParse(portPart, out int port);
                var requestUri = new UriBuilder(uirScheme, host, port, "api/v0/leaders");

                try
                {
                    try
                    {
                        _httpClient.DefaultRequestHeaders
                        .Accept
                        .Add(new MediaTypeWithQualityHeaderValue("application/json"));                           //ACCEPT header

                        var response = await _httpClient.GetAsync(requestUri.Uri);

                        var content = await response.Content.ReadAsStringAsync();

                        if (_opts.Verbose || _opts.VerboseLeaderLogs)
                        {
                            var currentForeground = Console.ForegroundColor;
                            Console.ForegroundColor = ConsoleColor.Cyan;
                            Console.WriteLine(requestUri.Uri.ToString());
                            Console.WriteLine(response);
                            Console.WriteLine(content);
                            Console.WriteLine();
                            Console.ForegroundColor = currentForeground;
                        }

                        //will throw an exception if not successful
                        response.EnsureSuccessStatusCode();

                        _sb.Clear();
                        _sb.AppendLine($"Leaders Logs running on {_opts.PoolName}, at: {DateTimeOffset.Now}");
                        _sb.AppendLine();
                        _sb.AppendLine();

                        var processedLeaders = await _processor.ProcessLeaders(content);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, ex.Message);
                    }

                    _sb.AppendLine("\tChecking for Leader Logs....");
                    try
                    {
                        requestUri = new UriBuilder(uirScheme, host, port, "api/v0/leaders/logs");
                        _httpClient.DefaultRequestHeaders
                        .Accept
                        .Add(new MediaTypeWithQualityHeaderValue("application/json"));                                         //ACCEPT header

                        var response = await _httpClient.GetAsync(requestUri.Uri);

                        var content = await response.Content.ReadAsStringAsync();

                        if (_opts.Verbose || _opts.VerboseLeaderLogs)
                        {
                            var currentForeground = Console.ForegroundColor;
                            Console.ForegroundColor = ConsoleColor.Cyan;
                            Console.WriteLine(requestUri.Uri.ToString());
                            Console.WriteLine(response);
                            Console.WriteLine(content);
                            Console.WriteLine();
                            Console.ForegroundColor = currentForeground;
                        }

                        //will throw an exception if not successful
                        response.EnsureSuccessStatusCode();

                        var processedLeaderLogs = await _processor.ProcessLeadersLogs(content);

                        var leadersLogs = JsonConvert.DeserializeObject <List <StoredLeadersLogsModel> >(processedLeaderLogs.LeadersLogsJson);

                        _sb.AppendLine();
                        _sb.AppendLine();
                        _sb.AppendLine($"{"Id".PadRight(2, ' ')} {"Created".PadRight(20, ' ')} {"Scheduled".PadRight(10, ' ')} {"Finished".PadRight(20, ' ')} {"Status".PadRight(8, ' ')} {"Block".PadRight(64, ' ')} {"Wake_at".PadRight(20, ' ')}");
                        _sb.AppendLine($"{"".PadRight(2, '-')} {"".PadRight(20, '-')} {"".PadRight(10, '-')} {"".PadRight(20, '-')} {"".PadRight(8, '-')} {"".PadRight(64, '-')} {"".PadRight(20, '-')}");

                        foreach (var log in leadersLogs.OrderBy(p => p.Scheduled_at_time))
                        {
                            var createdAtTime = log.Created_at_time.ToString("u");
                            var finishedAt    = log.Finished_at_time.HasValue ? log.Finished_at_time.Value.ToString("u") : "";
                            var wakeAt        = log.Wake_at_time.HasValue ? log.Wake_at_time.Value.ToString("u") : "";
                            _sb.AppendLine($"{log.Enclave_leader_id.ToString().PadRight(2, ' ')} {createdAtTime.PadRight(20, ' ')} {log.Scheduled_at_date.PadRight(10, ' ')} {finishedAt.PadRight(20, ' ')} {log.Status.PadRight(8, ' ')} {(string.IsNullOrEmpty(log.Block) ? "" : log.Block).PadRight(64, ' ')} {wakeAt.PadRight(20, ' ')}");
                        }

                        _logger.LogInformation(_sb.ToString());
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, ex.Message);
                        throw;
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);
                }

                await Task.Delay(30000, stoppingToken);
            }

            _httpClient.Dispose();
        }