Script de creation de base de demo pour gnu health

ce script part du principe que vous avez installé GNU Health suivant mon article sur le sujet Installation GNU Health sur Ubuntu/Debian

Certain chemin peuvent avoir changer à cause du numéro de version de tryton

 

 

 

 

 

 

 

Publié dans Gnu Health, Non classé | Laisser un commentaire

Docker File pour odoo 9.0

j’ai écrit un simple fichier docker pour générer une install odoo 9.0  ( un autre existe pour la v8 voir sur bitbucket ou github)

Il est nécessaire de l’améliorer mais à la fin du build  vous avez un Odoo en capacité de fonctionner

Je l’améliorerai au fur et à mesure de mes besoins (DockerFile sur bitbucket)

FROM debian:stable
MAINTAINER EricVernichon "eric@vernichon.fr"

RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -y -q && apt-get -y -q autoclean && apt-get -y -q autoremove)
RUN apt-get -y install postgresql-9.4 postgresql-client-9.4
RUN apt-get -y install git
RUN mkdir /opt/odoo
RUN git clone -b 9.0 https://github.com/odoo/odoo.git /opt/odoo/9.0
RUN apt-get -y install python-dev libsasl2-dev sudo libjpeg-dev libevent-dev gcc libxml2-dev libxslt-dev node-less libldap2-dev
RUN apt-get -y install wget net-tools apt-utils
RUN apt-get -y install postgresql-server-dev-9.4
RUN wget https://bootstrap.pypa.io/get-pip.py
RUN python get-pip.py
RUN pip install -r /opt/odoo/9.0/requirements.txt
RUN pip install pillow
RUN useradd --home /opt/odoo --shell /bin/bash odoo
RUN chown odoo.odoo -R /opt/odoo
RUN pg_dropcluster --stop 9.4 main
RUN pg_createcluster -e UTF-8 9.4 main
RUN /etc/init.d/postgresql start && su - postgres -c "createuser -s odoo"
COPY start_openerp /usr/local/bin/
RUN chmod +x /usr/local/bin/start_openerp
CMD ["/bin/bash","/usr/local/bin/start_openerp"]
EXPOSE 8069

Pour rappel pour générer l’image

git clone git@bitbucket.org:eric_vernichon/dockerfiles.git
sudo docker build -t erp/odoo:v9  dockerfiles/odoo/9.0/
....
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
erp/odoo v9 9b47bc2fa2ae 15 seconds ago 3.343 GB
debian stable 315baabd82d5 8 days ago 125.2 MB

pour l’utiliser

09:57 $ sudo docker run -p 8069:8069 -t -i erp/odoo:v9 
[ ok ] Starting PostgreSQL 9.4 database server: main.
2015-09-16 07:58:31,287 83 INFO ? openerp: OpenERP version 9.0rc1
2015-09-16 07:58:31,287 83 INFO ? openerp: addons paths: ['/opt/odoo/.local/share/Odoo/addons/9.0', u'/opt/odoo/9.0/openerp/addons', u'/opt/odoo/9.0/addons']
2015-09-16 07:58:31,287 83 INFO ? openerp: database: default@default:default
2015-09-16 07:58:31,520 83 INFO ? openerp.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069

 

Vous pouvez vous connecter sur l’instance à l’adresse http://127.0.0.1:8069

Publié dans Conteneurs, docker, ERP Open Source, Virtualisation | 4 commentaires

Odoo connection script python

Exemple de script pour connection à Odoo

#!/usr/bin/python
import requests
import json
import sys
id=0 
headers = {'Content-Type':'application/json'}
serveur = 'http://127.0.0.1'
port = 8069
URL = serveur+":"+str(8069)+"/web/session/get_session_info"
DATA = {
 "jsonrpc": "2.0",
 "method": "call",
 "params": {"context": {}},
 "id":id,
}
res = requests.post(URL,headers=headers,data=json.dumps(DATA) )
cookies = res.cookies
id = id + 1
URL = serveur+":"+str(8069)+"/web/session/authenticate"
DATA = {
 "jsonrpc": "2.0",
 "method": "call",
 "params": {"db":"demo","login":"admin","password":"admin","base_location":serveur+":"+str(8069)},
 "id":id,
}
res = requests.post(URL,headers=headers, data=json.dumps(DATA),cookies=cookies )
RESULT = eval(res.text)
if not 'result' in RESULT:
    print "Erreur de connection "
    sys.exit()
else:
    uid = RESULT['result']['uid']
    if not uid:
        print "Erreur d'authentification"
        sys.exit()
    else:
        print "Connection OK "
CONTEXT = RESULT["result"]['user_context']
id = id + 1
URL = serveur+":"+str(8069)+"/web/dataset/call_kw"
DATA_READ = {"method": "call",
 "id":"r%s" % id,
 "params": {"context" : CONTEXT,"model" : "res.partner",
 "args" : [[1],['name']],"context": {}, "kwargs": {},'method':'read',
 }}
res = requests.post(URL,headers=headers,data=json.dumps(DATA_READ),cookies=cookies ) 
RESULT = res.json()
print "result ",RESULT
id = id + 1
URL = serveur+":"+str(8069)+"/web/dataset/search_read"
DATA_READ = {"method": "call","id":"r%s" % id,
 "params": {"context" : CONTEXT,"model" : "res.partner",
 "domain" : [['customer','=',1]],"fields" : ['id','name'],
 "limit" : False,
 "offset" : 0,"sort":""
 }
 }
res = requests.post(URL,headers=headers,data=json.dumps(DATA_READ),cookies=cookies ) 
RESULT = res.json()
print "result ",RESULT
Publié dans OpenErp, Python | Laisser un commentaire

Git – Suprimer un sous module

Pour cette doc notre sous module s’appelle SousModule (original non ?)

  1. Supprimer la ligne dans le fichier .gitmodules:
    git config -f .gitmodules --remove-section submodule.SousModule
  2. prendre en compte la modification
    git add .gitmodules
  3. Supprimer la section relative au sous module dans le fichier  .git/config
  4. git config -f .git/config --remove-section submodule.SousModule
  5. Unstage et supression de SousModule seulement dans l’index ( pour éviter de perdre des informations )
    git rm --cached SousModule
    rm -rf .git/modules/SousModule
  6. Commit des modifications
    git commit -m "Remove submodule SousModule"
  7. Suprimer les fichiers maintenant non suivi  – Option 1
    rm -rf SousModule
    
  8. Les ajouter dans le depot courant pour une « récuperation du sous module »  – Option 2
    rm -rf  SousModule/.git
    rm -rf SousModule/.gitignore
    git add SousModule
Publié dans Git | Tagué , | Laisser un commentaire

Aide mémoire pour git flow

 

– Initialiser git flow

git flow init
Which branch should be used for bringing for the production releases?
  - master
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

démarrer un nouveau développement :

 

git flow feature start modificationX

 

une fois la feature developé :

 

git flow feature finish modificationX

 

Le fait de finir la feature merge la feature dans develop et nous place

dans le branche develop

 

il suffit aprés de la pusher pour l’envoyer sur le serveur de dev

 

git push -u origin

 

Lorsque la branche “develop” est prêt à être testé :

git flow release start v1.0.0

 

Pour publier sur integration :

 

git flow release publish

une fois l’intégration validé pour merger en production et develop et retourner sur la branche master

 

git flow release finish v1.0.0

 

puis pour pusher

git push -u origin

 

Le push peut provoquer une mise en production par le hook post-update

 

 

Pour développer rapidement un hotfix

git flow hotfix start correction

Une branche hotfix/correction est créé

Une fois la correction faite

git flow hotfix finish correction

merge la branche dans master et develop, ajoute un tag et supprime la branche

Publié dans Dev, Git | Tagué , | Laisser un commentaire

Tips

Requete pour connaitre les 20 plus grosses tables

SELECT nspname || '.' || relname AS "table",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 20;

Tables ayant le plus grand nombre de lignes

SELECT schemaname || '.' || relname as table,n_live_tup as num_rows
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC limit 20;

Tables les plus lus

SELECT schemaname || '.' || relname as table, heap_blks_read as disk_reads,
heap_blks_hit as cache_reads,
heap_blks_read + heap_blks_hit as total_reads
from pg_statio_user_tables
order by heap_blks_read + heap_blks_hit desc limit 15;

tables les plus mise à jour

SELECT schemaname || '.' || relname as table,
seq_scan,idx_scan,idx_tup_fetch+seq_tup_read lines_read_total, n_tup_ins as
num_insert,n_tup_upd as num_update,n_tup_del as num_delete
from pg_stat_user_tables order by n_tup_upd desc limit 10;

Outil pour tracer l’activité d’une base

pip install pg_activity

recreer la base en utf-8 (attention la base est détruite, si besoin faire un backup avant avec pg_dumpall)

pg_dropcluster 9.4 main --stop      #suppression de la base avec le mauvais encodage
pg_createcluster --locale fr_FR.UTF-8 9.4 main   # creation en utf-8
pg_ctlcluster 9.4 main start   # redemarrage

Publié dans Postgresql | Tagué , | Laisser un commentaire

Gestion connections

Compter les connections

 select count(*) from pg_stat_activity;

Supprimer les connections actives

La commande suivante va stopper les connexions à la base sauf la connexion courante:

Il faut pour cela effectuer une requête sur pg_stat_activity pour trouver les valeurs de PID que nous souhaitons killer. La fonction pg_terminate_backend(pid int) effectue cette action.

Pour PostgreSQL 9.1 et plus petit:

SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
  AND procpid <> pg_backend_pid();

Pour PostgreSQL 9.2 et suivants:

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
  AND pid <> pg_backend_pid();

Une fois les connections supprimées il est possible de supprimer la base avec un DROP DATABASE.

Publié dans Postgresql | Tagué , , | Laisser un commentaire

afficher le source d’une fonction dans psql

Pour afficher par exemple le code de la fonction update_sequence

 

select prosrc  FROM pg_proc where proname = 'update_sequence';

ce qui donne

                                                             prosrc                                                             
--------------------------------------------------------------------------------------------------------------------------------
 DECLARE                                                                                                                       +
     line RECORD;                                                                                                              +
     newsequence ALIAS FOR $1;                                                                                                 +
     id_order alias for $2;                                                                                                    +
     pas alias for $3;                                                                                                         +
 BEGIN                                                                                                                         +
     if pas >=1 then                                                                                                           +
     FOR line IN SELECT id FROM sale_order_line where order_id = id_order and sequence>=newsequence ORDER BY sequence desc LOOP+
 EXECUTE 'update sale_order_line set sequence=sequence+'||pas||' where id = '|| line.id ;                                      +
     END LOOP;                                                                                                                 +
     else                                                                                                                      +
     FOR line IN SELECT id FROM sale_order_line where order_id = id_order and sequence>=newsequence ORDER BY sequence asc LOOP +
 EXECUTE 'update sale_order_line set sequence=sequence+'||pas||' where id = '|| line.id ;                                      +
     END LOOP;                                                                                                                 +
     end if;                                                                                                                   +
     RAISE NOTICE 'Done update sequence.';                                                                                     +
     RETURN 1;                                                                                                                 +
 END;

Publié dans Postgresql | Tagué | Laisser un commentaire

Fonction pour appliquer un requête à x ligne, table, base

 

create language plpgsql;
create or replace function exec(text) returns void as $$
begin
    execute $1;
end;
$$ language plpgsql;

exemple d’application (changement de propriétaire des tables de la base en cours)

 

select exec('alter table '||tablename||' owner to user_toto ; ') from pg_tables where schemaname = 'public';

 

 

 

 

 

 

Publié dans Postgresql | Tagué | Laisser un commentaire

Docker

récuperer une image (par exemple debian)

 

docker pull debian

liste des images

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
 debian rc-buggy 350a74df81b1 11 days ago 159.9 MB
 debian experimental 36d6c9c7df4c 11 days ago 159.9 MB
 debian 6.0.9 3b36e4176538 12 days ago 112.4 MB
 debian squeeze 3b36e4176538 12 days ago 112.4 MB
 debian latest 667250f9a437 12 days ago 115 MB
 debian 6.0.8 d56191e18d6b 4 months ago 113.1 MB
 debian 7.3 b5fe16f2ccba 4 months ago 117.7 MB

 

créer un container et le lancer

docker run --name="mon container" -i -t ubuntu /bin/bash

liste des containers

  docker ps -a
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 0a1e7bcdbdea ubuntu:14.04 /bin/bash 4 minutes ago Exit 0 agitated_mclean

demarrer un container

docker start 0a1e7bcdbdea

attacher un container

docker attach  0a1e7bcdbdea
 root@0a1e7bcdbdea:/#

sortir du container en le laissant tourner

CTRL+P + Q

sauver un container comme une image

sudo docker commit  container_id

Creer une image à partir d’un Dockerfile
Si le fichier Dockerfile est dans le repertoire odoo/9.0

docker build odoo/9.0

Stopper tout les containers

docker stop $(docker ps -a -q)

rentrer dans un container

docker exec -it container_id  bash

Link

Exemple postgres

Lancer un container postgres

docker run -d --name db --expose 5432 -e POSTGRES_PASSWORD=password postgres

Connection à la base dans un autre container

docker run -it --link db:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'

 

Publié dans Conteneurs, docker, Virtualisation | Tagué , | Laisser un commentaire