El projecte BigBrother
- aaloy
- 2 de març de 2014
Com molt sabeu m'agrada programar. Hi va haver una temporada que vaig anar endarrera de comprar-nos un kefe, però era massa car i nosaltres som gent senzilla que no vol estirar més el braç que la màniga. Així que ara per ara faig les tasques de coordinació de projectes i gerència dins això que anomenam APSL i quan puc program.
Pero me segueix agradant programar. Així que en hores mortes he optat per anar fent un projecte que m'ajudi amb les tasques del dia a dia i a més em permeti programar a l'oficina o a casa sense interferir en els projectes que s'estan desenvolupant.
Per molt que m'agradi programar, sovint s'ha de resistir la temptació, ja que ben aviat et pots convertir en la roda fluxa del projecte, ja que les altres obligacions del dia a dia no et permeten estar als dos llocs. Llegir codi encara es pot fer i donar suport, gestionar. Tasques que són imporants també a l'hora de dur un projecte endevant. Però m'agrada programar ...
Neix per això el projecte Bigbrother, un petit divertiment per unir les meves dues passions: la programació i la gestió dels projectes. En el dia a dia fem servir Redmine per dur la gestió de tasques, imputació d'hores, documentació, fitxer associats a cada projecte.
Normalment evit anar a projecte tancat. Vull dir, es fa un pressupost, però aquest és més una referència que no una cosa inamobible. En els darrers projectes hem pogut funcionar així i amés de sortir si fa no fa igual de preu, s'eviten moltes discusions de si entra o no entra dins el projecte. Les hores imputades a cada projecte es registre amb el Redmine, però quan hi ha un parell mallorquí de projectes en marxa, anar un a un a veure com estam d'hores i fer el gràfic de brunout es fa pesat.
D'aquí neix el projecte BigBrother. Una aplicació Django que es connecta a Redmine, mira les hores de feina que s'han imputat al dia i a la setmana per projecte i programador, proporcionant una informació molt valuosa d'una manera organitzada i sense tenir que anar projecte a projecte.
I perquè us cont això per aquí? Doncs primer de tot perquè ser fucional el trobareu per bitbucket o github, però sobretot perquè començaré a fer apunts del que m'estic trobant i de les tecnologies que faig servir. Començaré de moment amb la part tècnica:
Servidor: Raspberry Pi
BD: Postgresql
Cache: Redis Django: 1.6.1
Connexió al redmine : django-redmine
Altres paquets: django-configurations, django-extensions, django-mailer2, django-mailviews, yawd-admin
WSGI : Gunicorn
Http: ngnix
Altres: supervisor
Això conforma el gruix del projecte. Com que és un pet project aprofit per experimentar.
La primera cosa que us vull fer notar és la utilització de yawd-admin com a substitut de l'admin clàssic de Django. Aquest administrador dona un toc més modern a l'administrador i et permet personaltizar logo, nom, menús i altres amb relativa facilitat. M'he trobat que amb la versió 1.6.1 de Django presenta alguna incompatibilitat a nivell de fulles d'estil que fan que alguns widgets de Django no acabin de veure's bé, són usables, però no veus que hi ha un error en els estils. També m'he trobat que amb el django-mailer2 que vaig adaptar tampo es duu gaire bé, ja que el javascript per obrir la finestra per veure els missatges que s'han d'enviar no funciona. Així que alerta amb yawd-admin per projectes de clients.
Per fer les tasques periódiques de sincronització amb Redmine, obtenir la informació i demés he tirat pel crontab de tota la vida, però a més he fet servir django-extensions per crear tasques diaries i setmanals i tenir-les organitzades. Hi ha poca documentació del django-extensions relativa a com fer-ho, així que en posaré un petit article d'aquí poc.
El més important és resoldre com podem executar un management command de Django des d'un cron, si a més la nostra aplicació està dins un virtualenv (veritat que feis servir virtualenvs, eh?). Al final no m'ha quedat més remell que envolcallar la creidad del cron en un petit programet bash, ja que les altres solucions com la de cridar el binari de python del virtualenv no acababen d'anar com toca
#!/bin/bash USER=aaloy export WORKON_HOME=/$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh VIRTUALENV=bigbrother workon $VIRTUALENV cd $HOME/bigbrother/src python manage.py send_mail
El codi anterior posat dins un arxiu ens permet cridar-ho des del crontab sense problemes amb el virtualenv. En concret el que fa és enviar els correus que django-mailer2 guarda en BD registrant-los per ser enviats.
Un problema que m'ha mosquejat en la configuració és que el supervisor damunt la raspberry overclockejada a 900 MHz algunes vegades no em llegeix la configuració que he modificat i es queda amb l'antiga. A altres equips no m'hi havia trobat. He llevat l'overclocking a veure, però fins que he trobat que passava això m'estava tornat boig amb la configuració de l'aplicació.
Per cert, he trobat un Gist de un tal DStufft que té gairebé tot el que es necessita per fer una configuració ngnix+gunicorn+supervisor. La podeu trobar a https://gist.github.com/dstufft/997475, va molt bé tenir-la com a referència.
Això és tot per ara, fins a la propera!