Índice:
Objetivo:
Esta página tem por objetivo demonstrar como é feito o uso Middleware.
Snowden AspNetCore:
Esta biblioteca fornecida pelo Snowden disponibiliza um meio para que aplicações desenvolvidas em
consigam fazer a integração facilitada. Fornecendo operações para gravar qualquer
_Exception_ não tratada pelos
_controllers_ e gravando também respostas selecionadas com base em seu status.
Apesar do nome
, ela também funciona no
a partir da versão
, desde que a mesma esteja utilizando a versão do
Como Funciona:
Esta biblioteca funciona adicionando middlewares na pilha de execução de sua aplicação. Então toda requisição terá uma interação com esses middlewares, podendo assim capturar exceptivosexceptions ainda não tratados nos controllers ou mesmo pegar o conteúdo da requisição ou resposta.
Get Started:
Com uma nova aplicação em
, vamos adicionar as dependências e configurar o uso do Snowden, para isso vamos editar o arquivo de
gerado.
Na parte de configuração de serviços (
) vamos adicionar o Snowden no injetor de dependências e configura-lo. Então vamos utilizar o
namespace Estado |
---|
title | Totvs.Snowden.ClientApi.AspNetCore |
---|
|
que contem extensões facilitadoras para isso. Vejamos exemplo abaixo:
Bloco de código |
---|
|
public void ConfigureServices(IServiceCollection services)
{
// Configuramos o snowden
services.AddSnowden(config =>
{
// ambiente que se encontra a aplicação
config.Environment = EnvironmentDefaultNames.Test;
// Definições da aplicação
config.Application.Name = "snowden-aspnetcore";
config.Application.ProductLine = "snowden-samples";
config.Application.Version = typeof(Startup).Assembly.GetName().Version.ToString();
// authenticação com os servidores do snowden
config.Credentials.Key = "tRaIsWygt2hKAubGk4EjSrGACDsa";
config.Credentials.Secret = "7MpWYUzesrLkAgyoIze3i7rffFYa";
// Definimos um totvsId Padrão
// pode ser resolvido em tempo de execução implementando
// ISnowdenAspNetCoreClientResolver e registrando. ex:
// `config.Services.ClientResolver = typeof(MyType);`
config.TotvsId = "03745af30a384000908D1fc02f6a5240";
// Se desejamos logar qualquer exception enviada pelo sistema
config.Log.Exceptions = true;
// Logar as respostas com os seguintes status
// ALERTA: Esta operação pode degradar o sistema
// pois ela demanda utilizar stream em memoria do
// resultado do objeto.
config.Log.ResponseStatusCode = SnowdenClientApiAspNetCoreOptionsLog.ServerFaultStatuses;
});
services.AddMvc();
} |
Vemos acima que estamos configurando diversas informações do Snowden, incluindo dados da aplicação que está executando; Credenciais de autenticação com o Snowden; Cliente da operação (a seguir será mostrado como resolve-lo dinamicamente); E também onde deve ser gravado;
Até agora tudo que fizemos foi adicionar as dependências do Snowden e configura-las. Agora vamos adicionar o Snowden na pilha de execução da aplicação. Nas configurações da aplicação (
), também utilizando do namespace
Estado |
---|
title | Totvs.Snowden.ClientApi.AspNetCore |
---|
|
, vamos utilizar outro facilitador. Vejamos abaixo:
Bloco de código |
---|
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// O snowden é registrado antes da exception ser tratada
// o snowden também esta pegando o ultimo estado da resposta
app.UseSnowden();
app.UseMvc();
} |
Com isso nossa aplicação já se encontra integrada com o Snowden, a partir de agora qualquer
não tratada será gravada. Como configurado, também estaremos gravando qualquer resposta que pertença ao grupo de falhas de servidor (faixa 500).
Observem também que adicionamos o Snowden logo antes do uso do MVC, isso está diretamente ligado ao funcionamento da middlewares para que ela seja capaz de capturar a ele deve ser o primeiro na pilha de tratamento, para isso registramos ele posteriormente a qualquer tratamento de exceptions, assim ele é o primeiro a tratar qualquer exception lançada. Segue abaixo uma leitura sugerida para melhor entendimento:
Identificação do Cliente em Tempo de Execução:
Para identificarmos o cliente em tempo de execução temos que implementar a interface
Estado |
---|
title | ISnowdenAspNetCoreClientResolver |
---|
|
localizada em
Estado |
---|
title | Totvs.Snowden.ClientApi.AspNetCore.Services |
---|
|
, essa apenas requer a implementação de um único método que recebe o contexto da requisição e deve retornar o TotvsId.
Bloco de código |
---|
|
public class CustomClientResolver : ISnowdenAspNetCoreClientResolver
{
public string GetTotvsId(HttpContext context)
{
return "03745af30a384000908D1fc02f6a5240";
}
} |
Após implementar a classe, devemos adicionar nossa implementação no container de injeção de dependências, e configurar para o Snowden utilizar nossa implementação. Para isso dentro das opções do Snowden temos a opção
, essa possui a propriedade "ClientResolver" que recebe o tipo que irá fazer a resolução do cliente.
Bloco de código |
---|
|
public void ConfigureServices(IServiceCollection services)
{
// Adicionamos nossa implementação de resolução de clientes no DI
services.AddScoped(typeof(CustomClientResolver));
// Configuramos o Snowden
services.AddSnowden(config =>
{
config.Environment = EnvironmentDefaultNames.Test;
config.Application.Name = "snowden-aspnetcore";
config.Application.ProductLine = "snowden-samples";
config.Application.Version = typeof(Startup).Assembly.GetName().Version.ToString();
config.Credentials.Key = "tRaIsWygt2hKAubGk4EjSrGACDsa";
config.Credentials.Secret = "7MpWYUzesrLkAgyoIze3i7rffFYa";
// Resolver que irá identificar o cliente em tempo de execução
config.Services.ClientResolver = typeof(CustomClientResolver);
});
services.AddMvc();
} |