Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GrimoireLab, a Python toolset for software deve...
Search
Bitergia
February 05, 2017
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GrimoireLab, a Python toolset for software development analytics - FOSDEM 2017
Slides for FOSDEM 2017 talk at Python DevRoom about GrimoireLab
Bitergia
February 05, 2017
More Decks by Bitergia
See All by Bitergia
Building and Supporting Open Source Communities through Metrics
bitergia
0
94
Defining the limits of Risk
bitergia
0
130
Present and Future of GrimoireLab
bitergia
0
110
InnerSource Commons
bitergia
0
120
Collaboration as Health Indicator
bitergia
0
160
La estrella de mi comunidad es un bot. ¿Dónde están los humanos?
bitergia
0
140
IoT Projects in FLOSS Foundations, a report based on community data
bitergia
0
150
Contributor Leaderboards to Incentivize Good Community Citizenship
bitergia
0
150
FreeScout: Cómo montar un departamento de soporte/atención al cliente con software libre
bitergia
0
620
Other Decks in Technology
See All in Technology
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
EMの役割で 変わったこと・変わらなかったこと
sansantech
PRO
0
140
The Django UUID Story - DjangoCon US 2026
pauloxnet
0
280
dbt と Snowflake と tag
kevinrobot34
1
260
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
460
NANDでも描画したい!
nichica906
3
750
ハッカソンで入賞した話 @ Findy LT
asari194617
0
1.5k
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
250
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
810
8bit CPU 2026
koba789
7
2.9k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
BBQ
matthewcrist
89
10k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
290
Six Lessons from altMBA
skipperchong
29
4.5k
Exploring anti-patterns in Rails
aemeredith
3
470
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
380
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
670
Navigating Weather and Climate Data
rabernat
0
490
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
400
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Transcript
GrimoireLab a Python toolset for software development analytics Jesus M.
Gonzalez-Barahona (URJC) @jgbarah jgb at bitergia dot com speakerdeck.com/bitergia FOSDEM 2017, Python devroom Brussels (Belgium) February 5th 2017
Outline Some context The software doing the magic Let’s be
practical Your turn
Some context
/me Like five years ago I was having coffees with
the gang of Bitergia founders Involved in the company since then bitergia.com I work at Universidad Rey Juan Carlos... ...researching about software development gsyc.es/~jgb My two hats:
Building Software Development Dashboards cauldron.io
The software doing the magic
Architecture Original Data Sources Retrieval Perceval Enrichment GrimoireELK Visualization Kibiter
(Kibana4/5) ElasticSearch GrimoireLab component
GrimoireLab grimoirelab.github.io
GrimoireLab grimoirelab.github.io
GrimoireLab Training Tutorial jgbarah.gitbooks.io/grimoirelab-training
Let’s be practical
Architecture Original Data Sources Retrieval Perceval Enrichment GrimoireELK Visualization Kibiter
(Kibana4/5) ElasticSearch GrimoireLab component
Retrieving data with Perceval In a Python3 environment… $ pip3
install perceval $ perceval git https://github.com/grimoirelab/perceval.git [2016-10-03 00:47:46,632] - Sir Perceval is on his quest. [2016-10-03 00:47:46,633] - Fetching commits: 'https://github.com/grimoirelab/perceval.git' git repository from 1970-01-01 00:00:00+00:00; all branches { "backend_name": "Git", "backend_version": "0.3.0", "data": { "Author": "Santiago Due\u00f1as <
[email protected]
>", "AuthorDate": "Tue Aug 18 18:08:27 2015 +0200", "Commit": "Santiago Due\u00f1as <
[email protected]
>", "CommitDate": "Tue Aug 18 18:08:27 2015 +0200", "commit": "dc78c254e464ff334892e0448a23e4cfbfc637a3", ….
Retrieving data with Perceval from Python from perceval.backends.core.github import GitHub
# GitHub object for owner / repo, repo_dir for cloning repo = GitHub(owner=owner, repository=repo, api_token=args.token) # fetch all issues/pull requests for item in repo.fetch(): if 'pull_request' in item['data']: kind = 'Pull request' else: kind = 'Issue' print(item['data']['number'], ':', kind)
Perceval Backends grimoirelab.github.io
Architecture Original Data Sources Retrieval Perceval Enrichment GrimoireELK Visualization Kibiter
(Kibana4/5) ElasticSearch GrimoireLab component
Creating indexes for a dashboard $ pip install grimoire-elk $
pip install grimoire-kidash $ p2o.py --enrich --index git_raw --index-enrich git \ -e http://localhost:9200 --no_inc --debug \ git https://github.com/grimoirelab/perceval.git $ kidash.py -e http://localhost:9200 \ --import git-dashboard.json Results: Raw index: git_raw Kibana dashboard Enriched index: git
Architecture Original Data Sources Retrieval Perceval Enrichment GrimoireELK Visualization Kibiter
(Kibana4/5) ElasticSearch GrimoireLab component
Querying ElasticSearch API $ curl -XGET "http://elasticsearch_url/git/_search/?size=1&pretty" {... "hits" :
{ "total" : 407, "hits" : [ { "_index" : "commits", "_type" : "summary", "_id" : "AVfPp9Po5xUyv5saVPKU", "_score" : 1.0, "_source" : { "hash" : "d1253dd9876bb76e938a861acaceaae95241b46d", "commit" : "Santiago Dueñas <
[email protected]
>", "author" : "Santiago Dueñas <
[email protected]
>", "author_date" : "Wed Nov 18 10:59:52 2015 +0100", "files_no" : 3, "commit_date" : "Wed Nov 18 14:41:21 2015 +0100" }} ] } }
Python scripting from elasticsearch import Elasticsearch from elasticsearch_dsl import Search
es = Elasticsearch(["elasticsearch_url”] s = Search(using=es, index=’git’) s = s.filter('range', files={'gt':0}) s = s.filter('range', author_date={'gt': datetime(2016, 7, 1)}) s.aggs.metric('commits', 'cardinality', field='hash') s.aggs.bucket('histogram', 'date_histogram', field='author_date', interval='quarter') by_q = s.execute() for quarter in by_q.to_dict()['aggregations']['histogram']['buckets']: print("Unique commits for quarter starting on ", Quarter['key_as_string'], ": ", quarter['doc_count'])
More details: GrimoireLab Training Tutorial jgbarah.gitbooks.io/grimoirelab-training
Try it live: The Cauldron cauldron.io
Your turn Enjoy! http://grimoirelab.github.io https://jgbarah.gitbooks.io/grimoirelab-training http://caludron.io