S'abonner au Flux RSS

vendredi, octobre 18 2013

Exclusion partielle dans un run Tsung

Lors d'un run avec Tsung il est possible de dumper dans un fichier l'intégralité du traffic entre les clients et le serveur afin de debuger des enchaînements de pages pour par exemple vérifier si tous les paramètres sont correctement passés dans un formulaire. La taille du fichier généré croit avec le nombre de requêtes effectuées et certaines de celles-ci (comme les images ou les css) ne sont pas pertinentes pour l'analyse du problème, de plus l'appel à des images génère du contenu binaire dans le fichier de log ce qui ne facilite pas toujours sa lecture de bout en bout. Pour simplifier ce processus de résolution de bug j'ai réalisé un patch qui permet de tagger les requêtes dans le scénario afin de les exclure lors d'un run en utilisant un option sur la ligne de commande lors du lancement. Le patch a été intégré dans le trunk et sera disponible dans la prochaine version de Tsung.

Annoncé dans un précédent billet ; les nouveaux opérateurs de comparaison ont été intégrés dans le trunk.

Ces 2 patchs ayant été intégrés je vais pouvoir m'attaquer au suivant.

mardi, octobre 15 2013

Inscription ouverte pour Nantes

Comme annoncé dans un précédent billet je ferai une présentation de Tsung intitulée de 1 à 1 million, mesure de la performance web avec Tsung mardi 22 octobre à la cantine de Nantes, la page d'inscription est désormais en ligne. La participation est libre et gratuite et le thème abordé est accessible à tous, développeur, devOps et chef de projet.

dimanche, octobre 13 2013

Logitech R400 et Debian

J'ai fait l'acquisition d'une télécommande Logitech R400 pour gagner un peu de liberté lors de mes présentations et m'éloigner de ma barre espace. Quelle n'a pas été ma déception quand une fois branchée celle-ci ne fonctionnait pas sous ma Debian Wheezy, bien que je n'ai point analysé ceci lors de mes recherches antérieures à l'achat .

Pour être exact elle dysfontionnait, il fallait en effet par moment appuyer rapidement 4 à 5 fois de suite pour change de slides, après tests sur d'autres machines je n'ai pas réussit à reproduire le problème. Des essais de remapping n'ont rien donné et le phénomène se vérifiait avec xev et quelques soit le logiciel utilisé.

Après moults jurons et une bonne nuit de sommeil la solution fut trouvée, en effet un passage du paquet linux-image-3.2.0-2-amd64 en linux-image-3.2.0-4-amd64 a solutionné mon problème. Je n'ai pas été cherché le détails dans les changelog, mais si vous rencontrez le même problème pensez à upgradez votre paquet kernel.

vendredi, octobre 11 2013

Nouveaux opérateurs de comparaison dans Tsung

La grammaire xml utilisée avec Tsung permet de rendre l'exécution de certaines requêtes conditionnelle au sein d'un scenario en utilisant l'élément <if>, à ce jour il n'existe que 2 comparaisons possibles, l'égalité et la non égalité avec les attributs eq et neq, ces opérateurs sont également utilisés pour les boucles et les conditions de sorties while et until.

J'ai proposé le patch (numéro TSUN-264) afin d'ajouter 4 nouveaux opérateurs de comparaisons afin d'introduire les classiques >, <, >= et =<.

Présentations OSDCfr 2013

J'ai eu le plaisir d'être invité à présenter les tests de performance avec Tsung lors de la dernière session de l'OSDC fr à Paris, en attendant la vidéo qui sera publiée ultérieurement les diapositives de la présentation ont été publiées sur Slideshare.

lundi, septembre 16 2013

Présentation Tsung à Nantes le 22 octobre

J'animerai la session technique des nunux pro à Nantes le 22 octobre 2013 autour des performances web et de leur mesure avec Tsung. Pour y assister contactez-moi par email il n'y pas de formulaire d'inscription en ligne bien que les sessions soient ouvertes à tous.

Présentation Tsung à OSDCfr 2013

Ma proposition de présentation de Tsung à l'OSDC fr 2013 qui se tiendra à Paris pendant l'Open World Forum a été retenue. Celle-ci n'a pas encore été programmée mais elle figure dans la listes des propositions retenues. Pour ceux qui s'intéresse à Tsung rendez-vous à Paris les 4 et 5 Octobre 2013.

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.

mardi, mai 28 2013

Tsung 1.5.0

La version 1.5.0 de Tsung est sortie vendredi 24 mai (1), celle-ci corrige quelques bugs, améliore certain points et contient également des nouvelles fonctionnalités. Ci-dessous la liste de tous les tickets clos sur le bugtrack du projet (2), avec quelques bugfix/amélioration qui me semble important.

Dans les corrections de bugs on notera la correction des dynvars mal définies qui empêchait certain test sur des valeurs lues depuis des modules externes.

  • TSUN-208 - in the jabber plugin, substitutions for raw request doesn't work in some cases.
  • TSUN-209 - If tag doesn't work with Tsung 1.4.2
  • TSUN-212 - Incorrect ERTS version being set on build.
  • TSUN-215 - normal ack timeout shouldn't used for global ack
  • TSUN-217 - If statement breaks on empty string
  • TSUN-218 - Race condition in tsung-recorder
  • TSUN-219 - Site fails to load via proxy recorder
  • TSUN-220 - Large configuration files trigger error
  • TSUN-229 - compatibility with erlang R15B
  • TSUN-230 - can't connect with TLS + ejabberd
  • TSUN-232 - Tsung for bosh protocol doesn't send a empty request to keep the user session alive.
  • TSUN-234 - Error encoding json string with escape_uri
  • TSUN-238 - Content-Length parsing broken
  • TSUN-241 - Invalid link Other in the graph.html
  • TSUN-245 - Message when dtd is not found not trivial

Le format du fichier de dump se voit compléter de 2 nouveaux champs, la substitution dans les cookies est désormais supportée. La commande PATCH est maintenant supportée dans le protocole HTTP, et quelques autres, l'intégralité étant listées ci-dessous.

  • TSUN-174 - add an option to set resource in XMPP
  • TSUN-222 - Support unsubscribe operation for Jabber pubsub module
  • TSUN-228 - allow substitutions on cookies
  • TSUN-236 - Add probability support for servers
  • TSUN-242 - add timestamp and request duration in dump=protocol for http
  • TSUN-246 - http PATCH support

Dans les nouvelles fonctionnalités on notera plus particulièrement le support de BOSH pour le plugin Jabber et le nouveau plugin pour tester les serveurs de files de type AMQP. Il est désormais possible définit également un poids pour chaque session plutôt qu'un pourcentage. Un script perl est désormais inclus afin de calculer les percentile sur les temps de requêtes et de transaction.

  • TSUN-214 - Ability to pass attributes for node creation for XMPP pubsub protocol.
  • TSUN-227 - add new dynamic variable to get server hostname and port
  • TSUN-231 - add option to use weights instead of probabilities for sessions
  • TSUN-239 - add BOSH support
  • TSUN-240 - add websocket support
  • TSUN-244 - Percentile computation
  • TSUN-248 - add AMQP support

Egalement non listée un nouveau type pour les dynvars qui permet de définir une valeur directement sans passer par une évaluation de code.

Dans le fonctionnement interne on notera un changement de format pour ts_file_server, cela fera l'objet d'un autre billet qui proposera une méthode pour supporter la lecture de fichier .csv en 1.4.2 et 1.5.0

Je ne peux que vous encourager à passer à cette nouvelle version dès que possible.

jeudi, mai 23 2013

Modules externes dans Tsung

Une fonctionnalité aussi intéressante que puissante de Tsung est de permetre de générer des paramètres ou des urls depuis des modules externes écrits en erlang. La documentation (1) officielle indique que les modules doivent être déployés dans le répertoire ebin de Tsung qui est généralement un répertoire système non accessible en écriture aux utilisateurs non privilégiés. Il existe une méthode alternative pour ceux qui ne possèdent pas les permissions root sur leurs machines, cela consiste à indiquer le chemin des librairies au niveau erlang en déclarant la variable ERL_LIBS qui contiendra le nom du répertoire contenant vos modules. Les fichiers .beam seront copiés dans un répertoire nommé obligatoirement ebin qui sera placé dans le répertoire indiqué dans ERL_LIBS. A noter que l'on peut indiquer plusieurs répertoires en les séparant par des virgules comme souvent pour les PATH.

Exemple :

ERL_LIBS=/home/rodo/modules

Les fichiers .beam seront dans

/home/rodo/modules/ebin/

- page 3 de 13 -