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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Bitergia
February 05, 2017
Technology
0
250
GrimoireLab, a Python toolset for software development analytics - FOSDEM 2017
Slides for FOSDEM 2017 talk at Python DevRoom about GrimoireLab
Bitergia
February 05, 2017
Tweet
Share
More Decks by Bitergia
See All by Bitergia
Building and Supporting Open Source Communities through Metrics
bitergia
0
67
Defining the limits of Risk
bitergia
0
86
Present and Future of GrimoireLab
bitergia
0
76
InnerSource Commons
bitergia
0
100
Collaboration as Health Indicator
bitergia
0
130
La estrella de mi comunidad es un bot. ¿Dónde están los humanos?
bitergia
0
100
IoT Projects in FLOSS Foundations, a report based on community data
bitergia
0
130
Contributor Leaderboards to Incentivize Good Community Citizenship
bitergia
0
130
FreeScout: Cómo montar un departamento de soporte/atención al cliente con software libre
bitergia
0
480
Other Decks in Technology
See All in Technology
配列に見る bash と zsh の違い
kazzpapa3
1
140
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
240
What happened to RubyGems and what can we learn?
mikemcquaid
0
300
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
180
今日から始めるAmazon Bedrock AgentCore
har1101
4
410
Introduction to Bill One Development Engineer
sansan33
PRO
0
360
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
190
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
130
生成AI時代にこそ求められるSRE / SRE for Gen AI era
ymotongpoo
5
3.2k
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
210
OpenShiftでllm-dを動かそう!
jpishikawa
0
100
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
240
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
810
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
450
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Typedesign – Prime Four
hannesfritz
42
2.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
What's in a price? How to price your products and services
michaelherold
247
13k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
110
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
We Are The Robots
honzajavorek
0
160
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
320
A Soul's Torment
seathinner
5
2.3k
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