Um web scraper para CPEs usando Puppeteer e integração com API IXC.
Este projeto é um web scraper automatizado que interage com CPEs (Customer Premises Equipment) através de suas interfaces web e integra com a API do IXC para gerenciamento e coleta de dados.
O projeto utiliza variáveis de ambiente para configuração. Copie o arquivo .env.example e crie os arquivos de ambiente necessários:
# Desenvolvimento
cp .env.example .env.development
# Produção
cp .env.example .env.production
# Testes
cp .env.example .env.test
# Local (opcional)
cp .env.example .env.localIXC_CDY_TOKEN: Token de autenticação para Candeias (formato: XX:hash)IXC_CDY_URL: URL base da API IXC CandeiasIXC_BD_TOKEN: Token de autenticação para Brasil DigitalIXC_BD_URL: URL base da API IXC Brasil DigitalIXC_BR364_TOKEN: Token de autenticação para BR364IXC_BR364_URL: URL base da API IXC BR364
TR069_URL: URL do servidor ACSTR069_USERNAME: Usuário do ACSTR069_PASSWORD: Senha do ACS (mínimo 8 caracteres)TR069_CONN_USERNAME: Usuário para requisições de conexãoTR069_CONN_PASSWORD: Senha para requisições de conexão (mínimo 8 caracteres)TR069_INFORM_INTERVAL: Intervalo de informação em segundos (300-86400)
DEVICE_PORT: Porta para conexão com CPEs (1-65535)DEVICE_USERS: Lista de usuários separados por vírgulaDEVICE_PASSWORDS: Lista de senhas separadas por vírgula
WORKER_BATCH_SIZE: Tamanho do lote de processamento (1-100)WORKER_POOL_SIZE: Número de workers paralelos (1-10)WORKER_TTL: Tempo de vida máximo do worker em segundos (300-86400)GRACEFUL_SHUTDOWN_TIMEOUT: Tempo máximo para graceful shutdown em segundos (30-300)
O projeto inclui validação automática das configurações usando Zod. As seguintes regras são aplicadas:
- Tokens IXC devem estar no formato XX:hash
- URLs não devem terminar com barra
- Senhas TR-069 devem ter no mínimo 8 caracteres
- Porta de dispositivo deve estar entre 1 e 65535
- Tamanho do lote de workers deve estar entre 1 e 100
- Número de workers deve estar entre 1 e 10
- Intervalo de informação TR-069 deve estar entre 300 e 86400 segundos
- TTL do worker deve estar entre 300 e 86400 segundos
- Timeout do graceful shutdown deve estar entre 30 e 300 segundos
# Instala as dependências
npm install
# Inicia em desenvolvimento
npm run dev
# Inicia em produção
npm run start:prod
# Executa os testes
npm testO projeto inclui um script de setup automatizado que configura o ambiente inicial. Este script é executado automaticamente após a instalação (npm install), mas você também pode executá-lo manualmente:
npm run setupO script de setup verifica e configura o ambiente básico necessário para executar o projeto:
- Arquivo de Ambiente
- Verifica se o arquivo
.envexiste - Se não existir, cria um novo arquivo com valores de exemplo
- Se já existir, mantém o arquivo atual sem alterações
- Verifica se o arquivo
Depois que o setup for concluído, você precisa:
-
Editar o arquivo
.envcom suas configurações reais:- Tokens de autenticação do IXC
- URLs dos serviços
- Credenciais TR-069
- Configurações de dispositivos
- Parâmetros dos workers
-
(Opcional) Criar arquivos de ambiente específicos:
.env.developmentpara desenvolvimento.env.productionpara produção.env.testpara testes.env.localpara configurações locais
Para verificar se o setup foi concluído corretamente:
# Executa os testes de configuração
npm test src/config/__tests__/validator.test.ts
# Inicia em modo desenvolvimento para testar
npm run devnpm start: Inicia a aplicaçãonpm run dev: Inicia em modo desenvolvimentonpm run build: Compila o projetonpm run start:prod: Inicia em modo produçãonpm test: Executa os testesnpm run test:watch: Executa os testes em modo watchnpm run setup: Executa o setup inicial do projeto
/
├── src/ # Código fonte
│ ├── api/ # Implementações de APIs
│ ├── auth/ # Autenticação e autorização
│ ├── config/ # Configurações
│ │ ├── index.ts # Exportação das configurações
│ │ ├── env.ts # Gerenciamento de ambiente
│ │ └── validator.ts # Validação de configuração
│ ├── controllers/ # Controladores da aplicação
│ ├── devices/ # Lógica relacionada aos dispositivos
│ ├── resources/ # Recursos estáticos (Localização do CSV)
│ ├── services/ # Serviços da aplicação
│ ├── static/ # Arquivos estáticos
│ ├── types/ # Definições de tipos TypeScript
│ ├── util/ # Utilitários
│ │ └── CsvParser.ts # Parser de arquivos CSV
│ ├── workers/ # Workers para processamento paralelo
│ ├── main.ts # Ponto de entrada da aplicação
│ ├── configureTR069.ts # Configuração TR-069
│ └── deviceChecker.ts # Verifica o modelo do CPE
│
├── scripts/ # Scripts de automação
├── dist/ # Código compilado
├── node_modules/ # Dependências
├── .env.example # Exemplo de variáveis de ambiente
├── .env.test # Variáveis de ambiente para testes
├── .env.production # Variáveis de ambiente para produção
├── .dockerignore # Arquivos ignorados pelo Docker
├── .gitignore # Arquivos ignorados pelo Git
├── jest.config.ts # Configuração do Jest
├── package.json # Configuração do projeto e dependências
└── tsconfig.json # Configuração do TypeScript
O projeto usa Jest para testes. Os testes estão localizados em src/config/__tests__/.
A cobertura de testes pode ser visualizada após executar npm test no diretório coverage/.
- Faça o fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Faça commit das suas alterações (
git commit -am 'Adiciona nova feature') - Faça push para a branch (
git push origin feature/nova-feature) - Crie um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Os workers possuem um tempo de vida máximo configurável através da variável WORKER_TTL. Após este período, o worker é automaticamente finalizado e um novo é criado em seu lugar. Isto ajuda a:
- Prevenir vazamentos de memória
- Garantir a liberação adequada de recursos
- Manter o desempenho consistente do sistema
O sistema implementa um mecanismo de graceful shutdown que:
- Captura sinais de término (SIGTERM/SIGINT)
- Para de aceitar novas tarefas
- Aguarda a conclusão das tarefas em andamento
- Fecha conexões e libera recursos ordenadamente
- Encerra o processo após o timeout configurado
O timeout do graceful shutdown pode ser configurado através da variável GRACEFUL_SHUTDOWN_TIMEOUT.