npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@crawly/proxy-log-request-client

v1.0.6

Published

A awesome project

Downloads

4

Readme

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:[email protected]: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'