---
title: "MacOS : Python : Découverte de l’API Python Elasticsearch/Kibana avec SVN pour des stats"
url: https://www.cyber-neurones.org/2019/11/macos-python-decouverte-de-lapi-python-elasticsearch-kibana-avec-svn-pour-des-stats/
date: 2019-11-25
modified: 2019-11-25
lang: fr
author: "Frederic"
description: "Petit script pour envoyer l'historique d'un SVN vers Elasticsearch/Kibana. Avant j'utilisais statSVN : https://statsvn.org . Pour l'installation sous Mac : $ pip2 install --upgrade pip $ pip2 install elasticsearch Voici..."
categories:
  - "mac"
tags:
  - "Python"
  - "SVN"
word_count: 173
---

# MacOS : Python : Découverte de l’API Python Elasticsearch/Kibana avec SVN pour des stats

Petit script pour envoyer l'historique d'un SVN vers Elasticsearch/Kibana. Avant j'utilisais statSVN : [https://statsvn.org .](https://statsvn.org)

Pour l'installation sous Mac :
$ pip2 install --upgrade pip
$ pip2 install elasticsearch

Voici le programme :
import xml.etree.ElementTree as ET
import os
import re
from elasticsearch import Elasticsearch
import sys

tree = ET.parse('**svn.log**')
root = tree.getroot()

count = 0;
nb_error = 0
es=Elasticsearch([{'host':'localhost','port':9200}])
es_keys="svn"

for logentry in root.iter('logentry'):
revision = logentry.get('revision')
author = logentry.find('author').text
date = logentry.find('date').text
msg = logentry.find('msg').text
if msg is not None:
msg = msg.replace("\n", " ")
msg = msg.replace("\r", " ")
msg = msg.rstrip('\r\n')
msg = msg.strip('\r\n')
msg = str(re.sub(r'[^\x00-\x7F]',' ', msg))
paths = logentry.find('paths')
for path in paths.findall('path'):
my_path = path.text
my_basename = os.path.basename(my_path)
my_dir = os.path.dirname(my_path)
count += 1
if msg is not None:
json = '{"revision":'+revision+',"author":"'+author+'","date":"'+date+'","msg":"'+msg+'","basename":"'+my_basename+'","folder":"'+my_dir+'"}'
else:
json = '{"revision":'+revision+',"author":"'+author+'","date":"'+date+'","basename":"'+my_basename+'","folder":"'+my_dir+'"}'
print(count,json)
try:
res = es.index(index=es_keys,doc_type='svn',id=count,body=json)
except:
nb_error += 1

Il faut faire un export XML de SVN :
$ svn log -v --xml > **svn.log
**
Pour faire le check : [http://127.0.0.1:9200/svn/_mappings](http://127.0.0.1:9200/svn/_mappings) , la réponse est du type :
{"svn":{"mappings":{"svn":{"properties":{"author":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"basename":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"date":{"type":"date"},"folder":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"msg":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"revision":{"type":"long"}}}}}}