Esempio n. 1
0
        public static void Run([CosmosDBTrigger(
                                    databaseName: "DBAcoes",
                                    collectionName: "Transacoes",
                                    ConnectionStringSetting = "DBAcoesConnectionString",
                                    CreateLeaseCollectionIfNotExists = true,
                                    LeaseCollectionName = "leases")] IReadOnlyList <Document> input, ILogger log)
        {
            if (input != null && input.Count > 0)
            {
                foreach (var doc in input)
                {
                    var transacao = AcoesRepository.GetTransacao(doc.Id);
                    log.LogInformation($"Dados: {JsonSerializer.Serialize(transacao)}");

                    if (transacao.id.StartsWith("COMPRA"))
                    {
                        AcoesRepository.SaveCompra(transacao);
                        log.LogInformation("Compra registrada com sucesso");
                    }
                    else
                    {
                        AcoesRepository.SaveVenda(transacao);
                        log.LogInformation("Venda registrada com sucesso");
                    }
                }
            }
        }
Esempio n. 2
0
        public static void Run([KafkaTrigger(
                                    "KafkaConnection", "topic-acoes",
                                    ConsumerGroup = "topic-acoes-mongo")] KafkaEventData <string> kafkaEvent,
                               ILogger log)
        {
            string dados = kafkaEvent.Value.ToString();

            log.LogInformation($"KafkaAcoesTopicTrigger - Dados: {dados}");

            var acao = JsonSerializer.Deserialize <Acao>(dados,
                                                         new JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            });
            var validationResult = new AcaoValidator().Validate(acao);

            if (validationResult.IsValid)
            {
                log.LogInformation($"KafkaAcoesTopicTrigger - Dados pós formatação: {JsonSerializer.Serialize(acao)}");
                AcoesRepository.Save(acao);
                log.LogInformation("KafkaAcoesTopicTrigger - Ação registrada com sucesso!");
            }
            else
            {
                log.LogInformation("KafkaAcoesTopicTrigger - Dados inválidos para a Ação");
            }
        }
Esempio n. 3
0
 public IEnumerable <AcaoDocument> Get(
     [FromServices] ILogger <AcoesMongoController> logger,
     [FromServices] AcoesRepository repository)
 {
     logger.LogInformation("Processando requisição HTTP GET em AcoesMongoController...");
     return(repository.ListAll());
 }
        public static void Run([ServiceBusTrigger("topic-acoes",
                                                  "FunctionAppAcoesSqlServer",
                                                  Connection = "AzureServiceBusConnection")] string mySbMsg,
                               ILogger log)
        {
            log.LogInformation($"AcoesServiceBusTopicTrigger - Dados: {mySbMsg}");

            var acao = JsonSerializer.Deserialize <DadosAcao>(mySbMsg,
                                                              new JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            });
            var validationResult = new AcaoValidator().Validate(acao);

            if (validationResult.IsValid)
            {
                log.LogInformation($"AcoesServiceBusTopicTrigger - Dados pós formatação: {mySbMsg}");
                AcoesRepository.Save(acao);
                log.LogInformation("AcoesServiceBusTopicTrigger - Ação registrada com sucesso!");
            }
            else
            {
                log.LogInformation("AcoesServiceBusTopicTrigger - Dados inválidos para a Ação");
            }
        }
Esempio n. 5
0
 public ConsoleApp(Logger logger, IConfiguration configuration,
                   AcoesRepository repository)
 {
     _logger        = logger;
     _configuration = configuration;
     _repository    = repository;
 }
 public static IActionResult Run(
     [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
     ILogger log)
 {
     log.LogInformation("Function Transacoes - HTTP GET");
     return(new OkObjectResult(AcoesRepository.GetAll()));
 }
 public Worker(ILogger <Worker> logger, IConfiguration configuration,
               AcoesRepository repository)
 {
     _logger        = logger;
     _configuration = configuration;
     _repository    = repository;
     _consumer      = KafkaExtensions.CreateConsumer(configuration);
 }
 public AcoesController(IConfiguration configuration,
                        ILogger <AcoesController> logger,
                        AcoesRepository repository)
 {
     _configuration = configuration;
     _logger        = logger;
     _repository    = repository;
 }
Esempio n. 9
0
 public AcoesController(ILogger <AcoesController> logger,
                        IConfiguration configuration,
                        TelemetryConfiguration telemetryConfig,
                        AcoesRepository repository)
 {
     _logger          = logger;
     _configuration   = configuration;
     _telemetryConfig = telemetryConfig;
     _repository      = repository;
 }
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
            ILogger log)
        {
            var listaAcoes = AcoesRepository.GetAll();

            log.LogInformation(
                $"AcoesMongo HTTP trigger - número atual de lançamentos: {listaAcoes.Count()}");
            return(new OkObjectResult(AcoesRepository.GetAll()));
        }
Esempio n. 11
0
 public Worker(ILogger <Worker> logger, IConfiguration configuration,
               AcoesRepository repository,
               TelemetryConfiguration telemetryConfig)
 {
     _logger          = logger;
     _configuration   = configuration;
     _repository      = repository;
     _telemetryConfig = telemetryConfig;
     _queueName       = _configuration["RabbitMQ:Queue"];
     _intervaloMensagemWorkerAtivo =
         Convert.ToInt32(configuration["IntervaloMensagemWorkerAtivo"]);
 }
        public Worker(ILogger <Worker> logger, IConfiguration configuration,
                      AcoesRepository repository,
                      TelemetryConfiguration telemetryConfig)
        {
            _logger          = logger;
            _configuration   = configuration;
            _repository      = repository;
            _telemetryConfig = telemetryConfig;

            _consumer = new ConsumerBuilder <Ignore, string>(
                new ConsumerConfig()
            {
                BootstrapServers = _configuration["ApacheKafka:Broker"],
                GroupId          = _configuration["ApacheKafka:GroupId"],
                AutoOffsetReset  = AutoOffsetReset.Earliest
            }).Build();
        }
Esempio n. 13
0
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
            ILogger log)
        {
            string codigo = req.Query["codigo"];

            if (String.IsNullOrWhiteSpace(codigo))
            {
                log.LogError(
                    $"Acoes HTTP trigger - Codigo de Acao nao informado");
                return(new BadRequestObjectResult(new
                {
                    Sucesso = false,
                    Mensagem = "Código de Ação não informado"
                }));
            }

            log.LogInformation($"Acoes HTTP trigger - codigo da Acao: {codigo}");
            Acao acao = null;

            if (!String.IsNullOrWhiteSpace(codigo))
            {
                acao = AcoesRepository.Get(codigo.ToUpper());
            }

            if (acao != null)
            {
                log.LogInformation(
                    $"Acoes HTTP trigger - Acao: {codigo} | Valor atual: {acao.Valor} | Ultima atualizacao: {acao.UltimaAtualizacao}");
                return(new OkObjectResult(acao));
            }
            else
            {
                log.LogError(
                    $"Acoes HTTP trigger - Codigo de Acao nao encontrado: {codigo}");
                return(new NotFoundObjectResult(new
                {
                    Sucesso = false,
                    Mensagem = $"Código de Ação não encontrado: {codigo}"
                }));
            }
        }
        public static void Run([KafkaTrigger(
                                    "KafkaConnection", "topic-acoes",
                                    ConsumerGroup = "topic-acoes-docdb")] KafkaEventData <string> kafkaEvent,
                               ILogger log)
        {
            string dados = kafkaEvent.Value.ToString();

            log.LogInformation($"KafkaAcoesTopicTrigger 1 - Dados: {dados}");

            var acao = JsonSerializer.Deserialize <Acao>(dados,
                                                         new JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            });
            var validationResult = new AcaoValidator().Validate(acao);

            if (validationResult.IsValid)
            {
                log.LogInformation($"KafkaAcoesTopicTrigger - Dados pós formatação: {JsonSerializer.Serialize(acao)}");

                var eventTest = new KafkaEventData <string>(JsonSerializer.Serialize(acao));

                try
                {
                    AcoesRepository.Save(acao);
                }
                catch (System.Exception e)
                {
                    throw e;
                }
                log.LogInformation("KafkaAcoesTopicTrigger - Ação registrada com sucesso!");

                log.LogInformation("KafkaAcoesTopicTrigger - Executando próxima ação...");
                KafkaAcoesTopicTrigger2.Run(eventTest, log);
            }
            else
            {
                log.LogInformation("KafkaAcoesTopicTrigger - Dados inválidos para a Ação");
            }
        }
        public static void Run(
            [RabbitMQTrigger("compra-acoes-queue", ConnectionStringSetting = "RabbitMQConnection")] string inputMessage,
            ILogger log)
        {
            log.LogInformation($"CompraAcoesRabbitMQTrigger - Dados: {inputMessage}");

            Transacao transacao = null;

            try
            {
                transacao = JsonSerializer.Deserialize <Transacao>(inputMessage,
                                                                   new JsonSerializerOptions()
                {
                    PropertyNameCaseInsensitive = true
                });
            }
            catch
            {
                log.LogInformation($"CompraAcoesRabbitMQTrigger - Erro durante a deserialização");
            }

            if (transacao == null)
            {
                return;
            }

            var validationResult = new TransacoesValidator().Validate(transacao);

            if (validationResult.IsValid)
            {
                log.LogInformation($"CompraAcoesRabbitMQTrigger - Dados pós formatação: {JsonSerializer.Serialize(transacao)}");
                AcoesRepository.Save <CompraAcaoDocument>(transacao);
                log.LogInformation("CompraAcoesRabbitMQTrigger - Transação registrada com sucesso!");
            }
            else
            {
                log.LogInformation("CompraAcoesRabbitMQTrigger - Dados inválidos para a Transação");
            }
        }
        public static void Run([ServiceBusTrigger("topic-acoes", "redis", Connection = "AzureServiceBus")] string mySbMsg, ILogger log)
        {
            log.LogInformation($"AcoesServiceBusTopicTrigger - Dados: {mySbMsg}");

            Acao acao = null;

            try
            {
                acao = JsonSerializer.Deserialize <Acao>(mySbMsg,
                                                         new JsonSerializerOptions()
                {
                    PropertyNameCaseInsensitive = true
                });
            }
            catch
            {
                log.LogError("AcoesServiceBusTopicTrigger - Erro durante a deserializacao!");
            }

            if (acao != null)
            {
                var validationResult = new AcaoValidator().Validate(acao);
                if (validationResult.IsValid)
                {
                    log.LogInformation($"AcoesServiceBusTopicTrigger - Dados pos formatacao: {JsonSerializer.Serialize(acao)}");
                    AcoesRepository.Save(acao);
                    log.LogInformation("AcoesServiceBusTopicTrigger - Acao registrada com sucesso!");
                }
                else
                {
                    log.LogError("AcoesServiceBusTopicTrigger - Dados invalidos para a Acao");
                    foreach (var error in validationResult.Errors)
                    {
                        log.LogError($"AcoesServiceBusTopicTrigger - {error.ErrorMessage}");
                    }
                }
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Carregando configurações...");
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile($"appsettings.json");
            var configuration = builder.Build();

            var logger = new LoggerConfiguration()
                         .WriteTo.Console()
                         .CreateLogger();

            logger.Information(
                "Testando o consumo de mensagens com Kafka + MongoDB");

            string bootstrapServers = configuration["Kafka_Broker"];
            string nomeTopic        = configuration["Kafka_Topic"];

            logger.Information($"BootstrapServers = {bootstrapServers}");
            logger.Information($"Topic = {nomeTopic}");

            var config = new ConsumerConfig
            {
                BootstrapServers = bootstrapServers,
                GroupId          = $"{nomeTopic}-mongodb",
                AutoOffsetReset  = AutoOffsetReset.Earliest
            };

            CancellationTokenSource cts = new CancellationTokenSource();

            Console.CancelKeyPress += (_, e) =>
            {
                e.Cancel = true;
                cts.Cancel();
            };

            try
            {
                using (var consumer = new ConsumerBuilder <Ignore, string>(config).Build())
                {
                    consumer.Subscribe(nomeTopic);

                    try
                    {
                        var repository = new AcoesRepository(configuration);
                        while (true)
                        {
                            var    cr    = consumer.Consume(cts.Token);
                            string dados = cr.Message.Value;

                            logger.Information(
                                $"Mensagem lida: {dados}");

                            var dadosAcao = JsonSerializer.Deserialize <DadosAcao>(dados,
                                                                                   new JsonSerializerOptions()
                            {
                                PropertyNameCaseInsensitive = true
                            });

                            var validationResult = new AcaoValidator().Validate(dadosAcao);
                            if (validationResult.IsValid)
                            {
                                repository.Save(dadosAcao);
                                logger.Information("Ação registrada com sucesso!");
                            }
                            else
                            {
                                logger.Error("Dados inválidos para a Ação");
                            }
                        }
                    }
                    catch (OperationCanceledException)
                    {
                        consumer.Close();
                        logger.Warning("Cancelada a execução do Consumer...");
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error($"Exceção: {ex.GetType().FullName} | " +
                             $"Mensagem: {ex.Message}");
            }
        }
 public AcoesController(ILogger <AcoesController> logger,
                        AcoesRepository repository)
 {
     _logger     = logger;
     _repository = repository;
 }
Esempio n. 19
0
 public ControladorAcoesService(ILogger <ControladorAcoesService> logger,
                                AcoesRepository repository)
 {
     _logger     = logger;
     _repository = repository;
 }
Esempio n. 20
0
 public AcoesRedis(AcoesRepository repository)
 {
     _repository = repository;
 }
 public AcoesMongoServiceBusTopicTrigger(
     AcoesRepository repository)
 {
     _repository = repository;
 }
Esempio n. 22
0
 public ProcessarAcoes(AcoesRepository repository)
 {
     _repository = repository;
 }
 public static IActionResult Run(
     [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
     ILogger log)
 {
     return(new OkObjectResult(AcoesRepository.ListVendas()));
 }
Esempio n. 24
0
 public ConsultaCotacoes(AcoesRepository repository)
 {
     _repository = repository;
 }
Esempio n. 25
0
 public AcoesMongo(AcoesRepository repository)
 {
     _repository = repository;
 }