Giter VIP home page Giter VIP logo

carlosarraes / cazador Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 166 KB

Cazador é um robusto scraper de imóveis desenvolvido em Python, destinado à coleta e armazenamento de dados imobiliários em um banco MongoDB. Automatiza o processo de scraping, oferece monitoramento via Grafana e Prometheus, e facilita análises detalhadas do mercado imobiliário.

Python 94.23% Dockerfile 1.09% Shell 4.68%

cazador's Introduction

Sobre

Cazador é um projeto desenvolvido em Python que atua como um scraper de sites de imóveis. O objetivo principal é coletar informações relevantes de páginas de imóveis e salvá-las em um banco de dados MongoDB para futuras consultas ou análises. Este projeto é especialmente útil para quem busca automatizar a coleta de dados em sites imobiliários, proporcionando uma maneira eficiente de acessar informações atualizadas sobre imóveis disponíveis.

cazador.mp4

Funcionalidades

  • Atualização do Banco de Dados: Através do endpoint /update, é possível disparar o processo de scraping que coleta dados dos sites configurados e os salva no banco de dados MongoDB. Este processo pode ser automatizado ou executado manualmente conforme a necessidade.
  • Consulta de Imóveis: O endpoint GET / permite listar os imóveis que foram previamente coletados e salvos no banco de dados, facilitando a visualização e acesso às informações de interesse.
  • Debug de Scraping: O endpoint /debug executa o processo de scraping de forma isolada para um imóvel específico e retorna o objeto parseado. Este endpoint é particularmente útil para verificar a correta extração e parsing dos dados em desenvolvimento ou em processos de manutenção.

Monitoramento com Grafana e Prometheus

Cazador

Para garantir a saúde e o desempenho adequados da aplicação, o Cazador utiliza Grafana e Prometheus para monitoramento. Essas ferramentas permitem acompanhar métricas importantes da aplicação e do ambiente de execução, como uso de CPU, memória, número de requisições e tempo de resposta.

  • Prometheus: Configurado para coletar métricas da aplicação, especialmente focado nos endpoints /healthz e /readyz, que indicam, respectivamente, a saúde geral da aplicação e sua prontidão para receber tráfego.
  • Grafana: Integrado ao Prometheus, oferece dashboards visuais que facilitam o acompanhamento das métricas coletadas, permitindo uma visualização rápida e eficiente do estado da aplicação.

Dependências

  • Docker
  • Kubectl
  • Minikube (local, com docker)
  • Hey (para stress test)

Setup

  • Clone este repositório git clone https://github.com/carlosarraes/cazadorpy.git
  • Construa a imagen do docker docker build -t carlosarraes/cazadorpy:latest .
  • Inicialize o Minikube minikube start
  • Aplique as configuracões do k8s: kubectl apply -f k8s/
  • Utilize o endpoint /update: Após a aplicação dos arquivos de configuração do Kubernetes, o serviço estará pronto para uso. (Ache o ip com Minikube ip, o endpoint estará exposto n porta 30007)
  • Vá no Grafana minikube service grafana --url, adicione prometheus como data source http://prometheus:9090, crie uma dashboard, e uma das configuracões que coloquei manualmente no python foi um middleware de count

Próximos passos

  • Implementar a coleta de todas as páginas com base na quantidade inicial de imóveis encontrados.
  • Atualmente, as 4 réplicas consultam o mesmo endpoint. Planeja-se permitir que o controle do endpoint especifique o bairro, direcionando assim a busca de cada réplica para evitar sobreposições.
  • Aprimorar o controle sobre a paginação e a faixa de preço dos imóveis.
  • Expandir o número de scrapers para abranger diferentes sites de imóveis.
  • Desenvolver uma interface básica para facilitar a visualização dos dados.

Jenkins Pipeline

Para automatizar o processo de entrega do projeto Cazador, utilizamos um pipeline Jenkins definido em um Jenkinsfile. Este pipeline abrange a construção da imagem Docker da aplicação, o deployment no Minikube e a atualização do serviço. Aqui está um resumo do processo:

  • Construção da Imagem Docker: A pipeline inicia construindo a imagem Docker da aplicação a partir do Dockerfile presente no repositório.
  • Deployment no Kubernetes (Minikube): Após a construção da imagem, a pipeline aplica as configurações do Kubernetes, presentes no diretório k8s/, usando kubectl. Isso garante que a versão mais recente da aplicação seja implantada no Minikube.
  • Jenkinsfile: Inclua o arquivo Jenkinsfile no seu repositório Git para definir estas etapas. As configurações específicas de build e deploy podem ser ajustadas conforme o seu ambiente e necessidades.

Utilizar um pipeline Jenkins simplifica e automatiza o processo de entrega, garantindo que as atualizações sejam facilmente e consistentemente aplicadas ao ambiente de desenvolvimento ou produção.

Stress Test

Para avaliar a capacidade de sua aplicação sob condições de carga elevada, você tem duas opções para realizar o teste de estresse utilizando a ferramenta Hey.

Usando o script

  • Permissões de Execução chmod +x stress_test.sh
  • Execução do Script ./stress_test.sh [número de requisicões]
Este script verifica se as ferramentas necessárias (hey e minikube) estão instaladas e executa o teste de estresse no endpoint configurado.

Usando Hey diretamente

Caso prefira, você pode também executar o comando hey diretamente no terminal, especificando o número de requisições desejadas e o endereço do serviço. Substitua <endereço-do-serviço-no-minikube> e pelos valores correspondentes ao serviço exposto pelo Minikube:

hey -n 1000 http://<endereço-do-serviço-no-minikube>:<porta>/

cazador's People

Contributors

carlosarraes avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.