1.0.1 • Published 4 years ago

proxy-log-request-client v1.0.1

Weekly downloads
1
License
MIT
Repository
-
Last release
4 years ago

proxy-log-request-client

Este projeto tem o objetivo de disponibilizar um plugin que irá fazer um log das requisições em nossa biblioteca request-client.

Instalando

Instalando o projeto:

npm i --save @crawly/proxy-log-request-client

Sobre o projeto

A biblioteca divide as funcionalidades em 2 grupos: Loggers e Transports. Os transports são as classses responsáveis por enviar a informação para algum lugar, cada transport envia a informação apenas para um lugar, essa informação é recebida de um logger. Os logger são as classes responsáveis por obter as informações e enviá-las, quando necessário, para os transports. Exemplificando, a comunicação poderia ser algo como: Temos um logger que obtem as informações apenas quando as requisições derem erro e um transport que envia para o redis, então quando a requisição resultar em erro, o logger obtém as informações do proxy e envia para o transport, que por sua vez irá armazenar a informação no redis. Obviamente, os transports e os loggers praticamente não são correlacionados, então você pode usar qualquer transport para qualquer logger.

Atualmente temos 5 informações que são armazenadas, sendo: 1. A mensagem informada ao instanciar o logger; 2. O nível da informação que é definida pelo objetivo do logger, sendo: error ou info; 3. O IP que o Proxy disponibilizou (que o alvo recebe); 4. O Proxy definido na função .proxy() na lib de request; 5. O IP externo da maquina que o serviço está rodando, obtido na URL http://ipv4bot.whatismyipaddress.com/.

Todas essas 5 informações são armazenadas em JSON com a seguinte estrutura:

{
  "message": "",
  "level": "info",
  "proxyIp": "",
  "proxy": "",
  "externalIp": ""
}

É importante saber também que o Proxy definido na lib de request, caso tenha alguma senha, ela será mascarada por asteriscos, por exemplo:

Se temos http://username:password@zproxy.lum-superproxy.io:22225, o resultado será: http://username:********@zproxy.lum-superproxy.io:22225.

Basicamente você irá utilizar um logger baseado na situação que você quer que seja logado (sucesso ou erro) com os transports que representam onde a informação será disponibilizada (redis, console, etc.).

Como utilizar

Loggers disponíveis:

  • SuccessLogger
  • ErrorLogger

Transports disponíveis:

  • RedisTransport
  • ConsoleTransport

Para se utilizar, basta instanciar um Logger, informando a mensagem que será logada e os transports que serão utilizados:

import { Request } from '@crawly/request-client';
import { SuccessLogger, RedisTransport, ConsoleTransport } from '@crawly/proxy-log-request-client';

new Request()
    .queryString({
        format: 'json'
    })
    .proxy('10.10.10.10')
    .use((new SuccessLogger('Ipify Success', [ new RedisTransport(), new ConsoleTransport() ])).install())
    .get('https://api.ipify.org/')

Atenção: O log só irá funcionar se a requisição onde a biblioteca for instalada estiver utilizando um proxy e se o ambiente estiver com a váriavel de ambiente PROXY_LOG_IS_ENABLED com o valor true.

Para desabilitar os logs por váriavel de ambiente, basta definir PROXY_LOG_IS_ENABLED com o valor false.

Mensagem do Logger

A mensagem que será informada no logger pode conter algumas expressões que podem ser sobreescrevidas para detalhar melhor o log. As expressões disponíveis:

  • {proxyIp} será substituído pelo IP que o Proxy disponibilizou (que o alvo recebe);
  • {externalIp} será substituído pelo IP externo da maquina que o serviço está rodando, obtido na URL http://ipv4bot.whatismyipaddress.com/;
  • {proxy} será substituído pelo proxy definido ao se utilizar a biblioteca de rquests.

Então se tivermos uma mensagem como:

Requisição feita com o {proxy} que disponibilizou o IP {proxyIp} na maquina com o IP externo {externalIp}

O resultado seria algo assim (exemplo):

Requisição feita com o 10.10.10.10 que disponibilizou o IP 186.20.37.40 na maquina com o IP externo 200.30.63.102

SuccessLogger

Esse logger é responsável por armazenar toda vez que uma requisição for concluída com sucesso, inclusive em retentativas (.retry()). Caso o site que foi requisitado responda com algo que a lib de request entenda que é um erro, a informação não será armazenada.

O logger está disponível com a classe SuccessLogger:

import { SuccessLogger } from '@crawly/proxy-log-request-client'

ErrorLogger

Esse logger é responsável por armazenar toda vez que uma requisição falhar, inclusive em retentativas (.retry()). Caso o site que foi requisitado responda com algo que a lib de request entenda que é um erro, a informação será armazenada.

O logger está disponível com a classe ErrorLogger:

import { ErrorLogger } from '@crawly/proxy-log-request-client'

RedisTransport

Esse transport é responsável por armazenar a informação no redis.

É possível informar algumas opções ao instanciar a classe, mas esses valores não são obrigatórios pois caso não informados, eles tem valores padrões. Além disso, caso você não forneça os valores ao instanciar a classe, pode ser possível definir esses valores globalmente pelas váriaveis de ambiente. Os valores são:

  • host é o IP onde o servidor do redis está, por padrão o valor é localhost e pode ser informado também pela váriavel de ambiente LOG_REDIS_HOST;
  • port é a porta usada para se conectar ao redis, por padrão o valor é 6379 e pode ser informado também pela váriavel de ambiente LOG_REDIS_PORT;
  • container é a chave da lista onde será armazenado os logs, por padrão o valor é proxy e pode ser informado também pela váriavel de ambiente LOG_REDIS_CONTAINER.

O transport está disponível com a classe RedisTransport:

import { RedisTransport } from '@crawly/proxy-log-request-client'

ConsoleTransport

Esse transport é responsável por disponibilizar a informação no console.

O transport está disponível com a classe ConsoleTransport:

import { ConsoleTransport } from '@crawly/proxy-log-request-client'