Adriano Serighelli 0db548b273 Ajuste no RateLimiter e controle de taxa mais granular
Alterada a inicialização da variável `_windowStart` no arquivo
RateLimiter.cs para simplificar o cálculo do início da janela
de tempo, removendo o arredondamento baseado no intervalo.

No arquivo Program.cs, o limite de requisições do RateLimiter
foi reduzido de 400/minuto para 12/segundo, permitindo um
controle de taxa mais preciso e restritivo.
2025-10-24 14:45:49 -03:00

46 lines
2.3 KiB
C#

using System.Data.OleDb;
using Application;
using Infrastructure;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
class Program
{
static async Task Main()
{
DateTime inicio = DateTime.Now;
string PG_CONN_STRING_PROD = "Server = smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port = 5432; Database = smartenergiaprod; Username = postgres; Password = VfHml#Z78!%kvvNM; Timeout = 60; CommandTimeout = 60; ApplicationName = new_med_5_min; Connection Lifetime = 120; Minimum Pool Size = 2; Maximum Pool Size = 4;";
string ACCESS_CONN_STRING = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\srv-dados\documentos\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb;Jet OLEDB:Database Password=gds21";
string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv";
//DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 1);
//DateTime dataFim = new DateTime(inicio.Year, inicio.Month, inicio.Day);
DateTime dataIni = new DateTime(inicio.Year, 10, 01);
DateTime dataFim = new DateTime(inicio.Year, 10, 23);
// Configuração de dependências (pode usar um container DI depois)
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
var accessRepo = new AccessRepository(ACCESS_CONN_STRING);
var httpClient = new HttpClient(new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption.Automatic,
Proxy = new WebProxy("127.0.0.1", 8888),
UseProxy = true,
ServerCertificateCustomValidationCallback = (HttpRequestMessage req, X509Certificate2? cert, X509Chain? chain, SslPolicyErrors errors) => true
});
var rateLimiter = new RateLimiter(12, TimeSpan.FromSeconds(1));
var useCase = new ProcessarMedicoesUseCase(postgresRepo, accessRepo, httpClient, rateLimiter);
await useCase.ExecuteAsync(dataIni, dataFim, caminhoLog, CancellationToken.None);
Console.WriteLine($"Concluído. Tempo total: {DateTime.Now - inicio}");
string input = string.Empty;
while (input.ToLower() != "fim")
{
Console.WriteLine("Digite 'fim' para finalizar:");
input = Console.ReadLine();
}
}
}