S'abonner au Flux RSS

lundi, septembre 9 2013

bbox étendue sur l'overpass-api

L'overpass API d'OpenStreetMap permet de récupérer des données en contruisant des requêtes plus ou moins complexe. Une requête simple comme récupérer tous les noeuds de type camping sur une zone couvrant l'Europe s'écrie :

<query type="node">
       <has-kv k="tourism" v="camp_site"/>
       <bbox-query s="41" w="-11" n="71" e="31"/>
</query>
<print/>

SImple a analyser une telle requête sera malheureusement trop conséquente pour être traitée au vu de la zone couverte. Une solution consiste à découper la bbox en zones plus petites qui seront rapidement traitées par le serveur, l'automatisation de ce découpage est la raison d'être d'ovpwild.py.

ovpwild.py va lire un fichier de requête et une bbox en paramètres et effectuer autant de requêtes que de carré de 1°x1° nécessaire pour couvrir toute la zone. Pour réaliser la requête ci-dessus il suffit d'écrire un fichier de requête contenant :

<query type="node">
       <has-kv k="tourism" v="camp_site"/>
       <bbox-query s="{south}" w="{west}" n="{north}" e="{east}"/>
</query>
<print/>

et d'exécuter la commande :

ovpwild.py -n 71 -s 46 -e 31 -w -11 -q campsite.overpas -o /tmp/

Le répertoire /tmp contiendra autant de fichiers que de requêtes qu'il ne restera plus qu'à charger dans une base postgis avec osm2pgsql par exemple.

Le scripts possède différentes options comme la reprise sur erreur, le réglage du timeout, le nombre de ré-essai automatique, la taille des zones unitaires, ... Toutes les options étant consultables par ovpwild.py -h.

ovpwild.py est publié sous licence GPLv3, où il peut être téléchargé et forké sur Gitorious (lien download).

Pour obtenir tous les noeuds dans une zone élargie il est également possible de récupérer les dumps de Geofabrik et de les traiter avec osmfilter, mais dans mon cas la machine effectuant les traitements est utilisée aussi pour le rendu, un tel traitement est trop lourd et impactant pour les autres services.

mercredi, avril 3 2013

Créer un lot de User dans Django

Lors d'un récent test de charge sur une application Django j'ai eu à créer 10K utilisateurs pour tester la charge sur le processus de login. Ce besoin de création d'utilisateur de test étant récurrent j'ai écrit une commande manage (1) afin de créer facilement un grand nombre d'utilisateurs mais également de conserver leur id pour suppression ultérieure. La liste des ids est affichée sur stdout pour faire au plus simple.

Par défaut on crée 10 utilisateurs et on spécifie comme premier argument le nombre total souhaité.

Le code de la classe, simple et efficace :

"""                                                                                                       
Create users in batch                                                                                     
"""
import json
from django.core.management.base import BaseCommand
from django.contrib.auth.models import User

class Command(BaseCommand):
    help = 'Create test accounts'

    def handle(self, *args, **options):
        nb_accounts = 10
        mac = 0
        userids = []

        if len(args) > 0:
            nb_accounts = int(args[0])

        while mac < nb_accounts:
            username = 'tsung-%04d' % (mac)
            email = 'tsung-%04d@example.com' % (mac)
            password = 'password-%04d' % (mac)
            user = User.objects.create(username=username,
                                       email=email)
            user.set_password(password)
            user.save()
            userids.append(user.id)
            mac += 1

        print json.dumps(userids)

lundi, octobre 29 2012

Nagios et les MIBS perdues dans Debian

Il faut désormais activer non-free dans Debian pour pouvoir utiliser les MIBS snmp ( voir http://wiki.debian.org/SNMP), action qui n'est pas réalisable dans de nombreuses architectures. Sans les MIBS utiliser SNMP devient vite une gageure, devoir déclarer les commandes Nagios en se basant sur les OID des directives extend est fastidieux et difficilement maintenable dans le temps. Afin de simplifier cette utilisation j'ai écrit un script pour simplifier la déclaration dans Nagios en se passant des MIBS.

mibchecks génère les définitions Nagios en analysant le fichier de configuration du démon snmp, il est disponible sur gitorious pour download et/ou fork.

Repo : https://gitorious.org/mibchecks/mibchecks

mibchecks lit le fichier /etc/snmp/snmpd.conf, en extrait les définitions extend, convertit les noms de commandes en OID et écrit sur la sortie standard les définitions de command à inclure dans la configuration de nagios. Un exemple de sortie.

Le script est actuellement en version 1.0.2 et attend vos patch et/ou amélioration.