Skip to content

Instantly share code, notes, and snippets.

@gkleiman
Last active February 1, 2018 01:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gkleiman/b51228cebdf2d8cf7bf85eef8ba22b16 to your computer and use it in GitHub Desktop.
Save gkleiman/b51228cebdf2d8cf7bf85eef8ba22b16 to your computer and use it in GitHub Desktop.
Mesos community stats

Contributor Breakdown by Organization and Releases

1.0.0...1.1.0: 1214 commits

  • Mesosphere: 23
  • Apple: 5
  • Other: 36
  • Microsoft: 2
  • Uber: 1
  • IBM: 7
  • Twitter: 2
  • Huawei: 2
  • Metamarkets: 1
  • Pinterest: 1
  • Verizon Labs: 1
  • Yelp: 1
  • chinamobile: 1

1.1.0...1.2.0: 1233 commits

  • Mesosphere: 23
  • IBM: 4
  • Other: 32
  • Apple: 4
  • Uber: 2
  • Microsoft: 4
  • SKA South Africa: 1
  • Verizon Labs: 1
  • Criteo: 1
  • Yahoo Japan Corporation: 1
  • Twitter: 1
  • Douban: 1
  • Affinio Inc.: 1

1.2.0...1.3.0: 716 commits

  • Mesosphere: 23
  • Other: 16
  • Microsoft: 5
  • Douban: 1
  • Yandex: 1
  • Apple: 2
  • Dataman: 1
  • Verizon Labs: 1
  • Uber: 2
  • IBM: 2

1.3.0...1.4.0: 1002 commits

  • Mesosphere: 25
  • Other: 17
  • Apple: 4
  • Verizon Labs: 1
  • Uber: 2
  • Microsoft: 3
  • Yandex: 1
  • Pinterest: 1
  • Douban: 1

1.4.0...1.5.0-rc1: 1327 commits

  • Mesosphere: 25
  • Other: 26
  • Microsoft: 3
  • Apple: 3
  • Uber: 2
  • Verizon Labs: 1
  • Yandex: 1
  • is-land: 1

Commit Breakdown by Organizations and Releases

1.0.0...1.1.0: 1214 commits

  • Mesosphere: 861 (70.92%)
  • Apple: 65 (5.35%)
  • Other: 127 (10.46%)
  • Microsoft: 33 (2.72%)
  • Uber: 18 (1.48%)
  • IBM: 92 (7.58%)
  • Twitter: 4 (0.33%)
  • Huawei: 2 (0.16%)
  • Metamarkets: 2 (0.16%)
  • Pinterest: 2 (0.16%)
  • Verizon Labs: 1 (0.08%)
  • Yelp: 3 (0.25%)
  • chinamobile: 4 (0.33%)

1.1.0...1.2.0: 1233 commits

  • Mesosphere: 1002 (81.27%)
  • IBM: 35 (2.84%)
  • Apple: 50 (4.06%)
  • Other: 36 (2.92%)
  • Uber: 9 (0.73%)
  • Microsoft: 74 (6.00%)
  • SKA South Africa: 3 (0.24%)
  • Verizon Labs: 13 (1.05%)
  • Criteo: 2 (0.16%)
  • Yahoo Japan Corporation: 1 (0.08%)
  • Twitter: 2 (0.16%)
  • Douban: 5 (0.41%)
  • Affinio Inc.: 1 (0.08%)

1.2.0...1.3.0: 716 commits

  • Mesosphere: 609 (85.06%)
  • Microsoft: 55 (7.68%)
  • Douban: 6 (0.84%)
  • Yandex: 3 (0.42%)
  • Apple: 30 (4.19%)
  • Dataman: 1 (0.14%)
  • Verizon Labs: 1 (0.14%)
  • Uber: 5 (0.70%)
  • IBM: 3 (0.42%)
  • Other: 3 (0.42%)

1.3.0...1.4.0: 1002 commits

  • Mesosphere: 814 (81.24%)
  • Apple: 54 (5.39%)
  • Verizon Labs: 5 (0.50%)
  • Uber: 12 (1.20%)
  • Microsoft: 111 (11.08%)
  • Yandex: 1 (0.10%)
  • Pinterest: 1 (0.10%)
  • Douban: 4 (0.40%)

1.4.0...1.5.0-rc1: 1327 commits

  • Mesosphere: 1098 (82.74%)
  • Microsoft: 148 (11.15%)
  • Apple: 32 (2.41%)
  • Uber: 26 (1.96%)
  • Other: 17 (1.28%)
  • Verizon Labs: 3 (0.23%)
  • Yandex: 2 (0.15%)
  • is-land: 1 (0.08%)
#!/usr/bin/env python3
import collections
import itertools
import yaml
from git import Repo
repo = Repo("/Users/gaston/mesosphere/mesos")
releases = ["1.0.0", "1.1.0", "1.2.0", "1.3.0", "1.4.0", "1.5.0-rc1"]
with open("/Users/gaston/mesosphere/mesos/docs/contributors.yaml", 'r') as stream:
contributors_info = yaml.load(stream)
def contributors_per_org():
print("# Contributor Breakdown by Organization and Releases\n")
authors_per_org_releases = collections.defaultdict(lambda: collections.defaultdict(set))
for index, release in enumerate(releases):
if index == 0:
continue
refhead = releases[index - 1] + "..." + releases[index]
commits = list(repo.iter_commits(refhead))
print("## " + refhead + ": " + str(len(commits)) + " commits")
for commit in commits:
author = {"name": commit.author.name}
for contributor in contributors_info:
if commit.author.email.lower() in contributor["emails"]:
author = contributor
break
organization = "Other"
if author and "affiliations" in author:
organization = author["affiliations"][0]["organization"]
authors_per_org_releases[release][organization].add(author["name"])
for k, v in authors_per_org_releases[release].items():
print("- " + k + ": " + str(len(v)))
print("")
def commits_per_org():
print("# Commit Breakdown by Organizations and Releases\n")
commits_per_org_releases = collections.defaultdict(lambda: collections.defaultdict(int))
for index, release in enumerate(releases):
if index == 0:
continue
refhead = releases[index - 1] + "..." + releases[index]
commits = list(repo.iter_commits(refhead))
print("## " + refhead + ": " + str(len(commits)) + " commits")
for commit in commits:
for contributor in contributors_info:
if commit.author.email.lower() in contributor["emails"]:
author = contributor
break
organization = "Other"
if author and "affiliations" in author:
organization = author["affiliations"][0]["organization"]
commits_per_org_releases[release][organization] += 1
for k, v in commits_per_org_releases[release].items():
print("- " + k + ": " + str(v) + " (" + format(v/len(commits)*100, "2.2f") + "%)")
print("")
contributors_per_org()
commits_per_org()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment