Welcome to Spectrometer


The main purpose of Spectrometer is to deliver transparent statistics of contributions to OpenDaylight Project. It collects activity data such

  1. Commits and number of code lines changed from ODL Git repositories
  2. Reviews from Gerrit
  3. Activities related to each project from mailing lists and presents the statistics in a user-friendly manner

Spectrometer Architecture.png

Spectrometer Architecture

The spectrometer architecture has three components: the backend processor called workers, the datastore with in memory cache available, and the frontend visualization components for the UI/UX.

The architecture is described in more details in the Spectrometer Architecture Guide.

Git commits history

In first version of Spectrometer, Git history is acquired using following command:

git log --pretty="commit_id:'%H%ndate:%at%nauthor:%an%nauthor_email:%ae%nsubject:%s%nmessage:%b%n'" --shortstat -M --no-merges

which produces output like:

author:Akihiro MOTOKI
subject:Remove class-based import in the code repo
message:Fixes bug 1167901 This commit also removes backslashes for line break. Change-Id: Id26fdfd2af4862652d7270aec132d40662efeb96
diff_stat: 21 files changed, 340 insertions(+), 408 deletions(-)
This commit changes 21 files and 340 + 408 = 748 LOC (Line Of Code). I.e. LOC is a sum of insertions and deletions.

The same status can be acquired using Gerrit REST API. https://git.opendaylight.org/gerrit/Documentation/rest-api-changes.html#list-changes

Gerrit History

Gerrit provides a command line interface for retrieval of review source data.

gerrit query --all-approvals --patch-sets --format JSON module branch:master limit:100

This command outputs a list of the latest reviews on the module.

Spectrometer provides the following analytics for reviews:

  • Number of reviews
  • Statistics of positive and negative reviews
  • Ratio of positive to negative reviews.

Mailing list activity

  • Mailing list activity is polled via the web-based OpenDaylight archives.
  • Spectrometer searches the following places to choose the module to which an email is related, in order:
  • Module name in brackets in email subject
  • Module name without brackets in email subject

If none of the above locations yields a known module, the email is attributed to the 'unknown' module.

The list of tracked web pages with mail archives is managed in default_data.json under the section marked 'mail_lists'.


LOC is an unreliable metric as it can be easily skewed by large scale renaming and refactoring. Spectrometer provides a framework for a community-driven correction process. It works as follows: Corrections are stored in the corrections.json JSON file.

These corrections look something like this:

"corrections": [
    "commit_id": "ee3fe4e836ca1c81e50a8324a9b5f982de4fa97f",
    "correction_comment": "Reset LOC to 0",
    "lines_added": 0,
    "lines_deleted": 0

Updates to original Spectrometer

  • Start with a new code base
  • Spectrometer will support only one version of Python, this will result in simplification of the code and ease of maintenance
  • A code base that is viewable/accessible easily to the people working on the project.
  • Spectrometer will be developed on ODL infrastructure so it can have a real time update of working version, consequently real time access to updated results and Testing using ODL CI infrastructure with real data

Project Facts

Project Creation Date: Nov 12th, 2015
Lifecycle State: Incubation
Primary Contact: Tom Nadeau <tnadeau@lucidvision.com>
Project Lead:  Tom Nadeau <tnadeau@lucidvision.com>
Mailing List:  spectrometer-dev@lists.opendaylight.org
    Archives: mailing list archives
Meetings: See Community Meetings 
Repository: git clone https://git.opendaylight.org/gerrit/spectrometer
Jenkins: jenkins silo
Gerrit Patches: code patches/reviews


Key Features

  • Collecting stats from repositories, mailing list interface, and Gerrit
  • Web UI shows stats by: Module, company, contributor, ...
  • Documentation for the code and installation guide
  • Testing Spectrometer using ODL CI infrastructure with real data

Project Information

  • POC: The original POC for Spectrometer is described here.
  • Project Proposal: The original project proposal is described here


Release Planning

ReleaseRelease PlanRelease NotesRelease ReviewInstallation GuideUser GuideDeveloper Guide
BoronRelease PlanRelease NotesRelease ReviewInstallation GuideUser GuideDeveloper Guide



Trello Project Tracking

|Trello Project Tracking: [1]

Pulling and Hacking The Code

To pull the code, use the usual git clone mechanism with the new spectrometer repository:

git clone ssh://${ODL_USERNAME}@git.opendaylight.org:29418/spectrometer spectrometer

Spectrometer Documentation and Getting Started

Documentation can be found here: [2]

Release Notes

  • No labels