Aplicação que gerencia os modelos de dispositivos e mantém um backup de dados na nuvem dos sincronismos efetuados pelos dispositivos. Este backup é salvo em um banco de dados não relacional, MongoDB de forma diária, ou seja, todos os dados de hoje são gravados na data específica de hoje e após meia noite (horário UTC) será gerada uma nova coleção que fará este papel e assim por diante.
A imagem ilustra arquitetura, note que o xMova Server envia os dados para o xMova Statistics, cujo distribui entre uma base de dados local (MySQL) e envia os dados de sincronismo também para um outro endpoint em uma aplicação Bottle (este microwebframework possui uma boa taxa de recepção dos dados por um serviço Restful), que armazena também em um banco de dados MongoDB.
Aplicação que faz uso do microframework Bottle. É apenas uma receptora de Backup, salva o conteúdo recebido em um banco de dados MongoDB.
O banco de dados do MongoDB é autenticado, para remover esta opção é necessário ir em /etc/mongod.conf, onde o campo authorization enabled mantém o mesmo desta forma. Note que isso não é indicado, é altamente recomendado deixar o banco com esta autenticação de segurança. Note também que a aplicação do Bottle precisa saber que é um banco com autentificação. A aplicação contém um arquivo de configuração, semelhante aos do java (properties).
Para acessar o MongoDB no terminal do Linux, basta acessar com o usuário administrador: * mongo -u superuser -p SENHA_AQUI –authenticationDatabase admin
A senha é a mesma do servidor, do usuário root. Caso necessário a mesma poderá ser alterada.
Uma outra informação relevante é o uso do Gevent, cujo é uma aplicação de controle sobre requisições na API Rest mantendo-as como assincronas e mantendo a aplicação com performance.
Note que esta aplicação faz uso do Virtualenv, para facilitar o deploy e isolar a instalação da sua versão do Python. O caminho desta env é: /home/logenvs/prod-env. Para ativar, basta pesquisar sobre Virtualenv, mas te adiantando, source prod-env/bin/activate vai ativar esta env. Para desconectar, basta usar deactivate.
Esta aplicação, assim como o xMova Statistics está sendo subida no startup do Sistema Operacional, então, nada mais justo do que colocar um exemplo de como o arquivo é feito:
1 2 3 4 5 6 7 | # Conteúdo a ser colocado de /etc/init como arquivo de configuração:
start on runlevel [2345]
stop on runlevel [06]
# file.py contains if __name__ == "__main__": main() or script running
respawn
chdir /home/logenvs/prod-env/xmova-log-webservice
exec /home/logenvs/prod-env/bin/python /home/logenvs/prod-env/xmova-log-webservice/appservice.py
|
Caso queira subir alguma alteração, após efetuá-la, execute o comando: sudo service logprod restart, o Python mantém em memória a aplicação (por causa do Virtualenv).
Aplicação que centraliza o conteúdo sobre os dispositivos que fazem uso do Simova Apps em um banco de dados MySQL. Contém um painel administrativo feito em Django para promover fácil acesso dos usuários e do suporte. Também está comunicando com um servidor de Socket IO, permitindo assim, envio de requisições de Log, informações de localizaçao, testes de redes de dados etc.
Para adicionar novos membros, é necessário logar no root do painel, adicionar novo usuário e não esquecer de definir o mesmo para o grupo de Workers, preencher também os dados de e-mail e login.
Quando for alterado algum conteúdo static da aplicação, como html ou javascript, é necessário rodar o comando collectstatic do Django. Esta aplicação, assim como o Bottle, faz uso do Virtualenv, assim cada aplicação é isolada, bem como a instalação do Python (note que há um arquivo de requirements nas pastas de ambas aplicações). Um Django quickly startup sheet:
As pastas das VirtualEnv estão todas no /home, o caminho para esta aplicação é: /home/logenvs/webpanel-env. O startup da aplicação Django é um pouco diferente, ele precisa do Gunicorn para subir, o nome do arquivo de configuração é o gunicorn.conf. No Digital Ocean Tutorials, há um bem maneiro explicando passo a passo como posso efetuar o deploy da minha aplicação Django em produção:
1 2 3 4 5 6 7 | description "Gunicorn daemon for Django project"
start on runlevel [2345]
stop on runlevel [!2345]
# If the process quits unexpectedly trigger a respawn
respawn
chdir /home/logenvs/webpanel-env/xmovastatistics
exec /home/logenvs/webpanel-env/bin/gunicorn --bind 0.0.0.0:8000 -w4 --access-logfile /home/logenvs/webpanel-env/logs/access.log --error-logfile /home/logenvs/webpanel-env/logs/error.log xmovastatistics.wsgi:application
|
Para reiniciar, é semelhante ao do xMova in Cloud, basta conectar e efetuar o restart do service.
Para remover coleções indesejáveis e já passadas no MongoDB:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | db.getCollectionNames().forEach(
function(element) {
var nowadaysMonth = parseInt(new Date().getMonth()) + 1;
var elementMonth = parseInt(element.charAt(17) + element.charAt(18));
try {
// - 1 - month diffs, if you want to change to 6 months, -5 etc
if (elementMonth < nowadaysMonth - 1) {
print('Removing: ' + element);
db.getCollection(element).drop();
}
} catch(err) {
print('Error: ' + err);
};
}
)
|
Note que o MongoDB aceita scripts em javascript, o que facilita ainda mais seu desenvolvimento.