Skip to content

andredias/sync_elasticsearch_cassandra

Repository files navigation

Sincronização entre ElasticSearch e Cassandra

Este projeto é uma solução para o desafio técnico proposto pela Simbiose, conforme anúncio publicado na lista o Python-Brasil, cuja especificação se encontra no arquivo especificacao.rst localizado neste mesmo diretório.

Autor

André Felipe Dias <andre.dias@pronus.io>

Pré-Requisitos

  • Python 3.4
  • Acesso ao Cassandra via localhost:9042
  • Acesso ao Elasticsearch via localhost:9200

Tip

Uma ótima alternativa é o uso de containers do Docker:

$ docker pull elasticsearch
$ docker run --name elasticsearch -p 9200:9200 -d elasticsearch

$ docker pull spotify/cassandra
$ docker run --name cassandra -p 9042:9042 -d spotify/cassandra

Os demais pré-requisitos do projeto devem ser instalados via pip:

$ pip install -r requirements.txt

Execução

$ python app.py                 # daemon do sincronizador
$ python gerador_lero_lero.py   # daemon do gerador de dados aleatórios
$ tail -f /var/log/syslog       # para acompanhar o processamento

A configuração do intervalo de sincronização pode ser feita através do arquivo /tmp/config.txt. Para que essa configuração seja carregada, é necessário enviar um sinal SIGUSR1 ao daemon do sincronizador. Exemplo:

$ echo 3 > /tmp/config.txt
$ pid=$(ps ax | grep 'python app.py' | head -n 1 | cut -f 1 -d ' ')
$ kill -s SIGUSR1 $pid

Testes

Algumas instalações adicionais são necessárias para os testes:

$ pip install nose sh

A execução dos testes automatizados:

$ nosetests

Depuração

A listagem abaixo mostra um exemplo de depuração das principais partes do projeto:

>>> from app import Sincronizador
>>> s = Sincronizador()
>>> from gerador_lero_lero import generate
>>> generate()
>>> generate()
>>> generate()
>>> s.run()
>>> generate()
>>> generate()
>>> s.run()
>>>

Acompanhe a saída do processamento através do comando:

$ tail -f /var/log/syslog

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages