| # Analytics extraction plugin | |
| Extract commit and review data from Gerrit projects and expose aggregated metrics | |
| over REST and SSH API. | |
| ## How to build | |
| To build the analytics plugin you need to have SBT 0.13.x or later installed. | |
| If you have a Linux operating system, see the | |
| [Installing SBT on Linux instructions](http://www.scala-sbt.org/0.13/docs/Installing-sbt-on-Linux.html) | |
| Clone the analytics plugin and execute ```sbt assembly```. | |
| Example: | |
| ``` | |
| $ git clone https://gerrit.googlesource.com/plugins/analytics | |
| $ cd analytics && sbt assembly | |
| ``` | |
| The plugin jar file is created under ```target/scala-2.11/analytics.jar``` | |
| ## How to install | |
| Copy the analytics.jar generated onto the Gerrit's /plugins directory. | |
| ## How to configure | |
| See the relevant section in the [configuration guide](src/main/resources/Documentation/config.md) | |
| ## How to use | |
| Adds new REST API and SSH commands to allow the extraction of repository | |
| statistics from Gerrit repositories and changes. | |
| ## API | |
| All the API share the same syntax and behaviour. Differently from the standard | |
| Gerrit REST API, the JSON collections are returned as individual lines and | |
| streamed over the socket I/O. The choice is driven by the fact that the typical | |
| consumer of these API is a BigData batch process, typically external to Gerrit | |
| and hosted on a separate computing cluster. | |
| A large volume of data can be potentially generated: splitting the output file | |
| into separate lines helps the BigData processing in the splitting, shuffling and | |
| sorting phase. | |
| ### Contributors | |
| Extract a unordered list of project contributors statistics, including the | |
| commits data relevant for statistics purposes, such as number of involved files, and optionally also the list of belonging branches, | |
| number of added/deleted lines, timestamp and merge flag. | |
| Optionally, extract information on issues using the [commentLink](https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#commentlink) | |
| Gerrit configuration and enrich the statistics with the issue-ids and links obtained from | |
| the commit message. | |
| *REST* | |
| /projects/{project-name}/analytics~contributors[?since=2006-01-02[15:04:05[.890][-0700]]][&until=2018-01-02[18:01:03[.333][-0700]]][&aggregate=email_year] | |
| *SSH* | |
| analytics contributors {project-name} [--since 2006-01-02[15:04:05[.890][-0700]]] [--until 2018-01-02[18:01:03[.333][-0700]]] | |
| ### Parameters | |
| - --since -b Starting timestamp to consider | |
| - --until -e Ending timestamp (excluded) to consider | |
| - --aggregate -granularity -g one of email, email_year, email_month, email_day, email_hour defaulting to aggregation by email | |
| - --extract-branches -r enables splitting of aggregation by branch name and expose branch name in the payload | |
| NOTE: Timestamp format is consistent with Gerrit's query syntax, see /Documentation/user-search.html for details. | |
| ### Examples | |
| - REST: | |
| ``` | |
| $ curl http://gerrit.mycompany.com/projects/myproject/analytics~contributors | |
| {"name":"John Doe","email":"john.doe@mycompany.com","num_commits":1, "num_files":4,"added_lines":9,"deleted_lines":1, "commits":[{"sha1":"6a1f73738071e299f600017d99f7252d41b96b4b","date":"Apr 28, 2011 5:13:14 AM","merge":false,"bot_like": false}],"is_bot_like": false} | |
| {"name":"Matt Smith","email":"matt.smith@mycompany.com","num_commits":1, "num_files":1,"added_lines":90,"deleted_lines":10,"commits":[{"sha1":"54527e7e3086758a23e3b069f183db6415aca304","date":"Sep 8, 2015 3:11:23 AM","merge":true,"bot_like": false}],"branches":["master"],"is_bot_like": false} | |
| ``` | |
| - SSH: | |
| ``` | |
| $ ssh -p 29418 admin@gerrit.mycompany.com analytics contributors myproject --since 2017-08-01 --until 2017-12-31 --extract-issues | |
| {"name":"John Doe","email":"john.doe@mycompany.com","num_commits":1, "num_files":4,"added_lines":9,"deleted_lines":1, "commits":[{"sha1":"6a1f73738071e299f600017d99f7252d41b96b4b","date":"Apr 28, 2011 5:13:14 AM","merge":false,"bot_like": false}],"is_bot_like": false,"issues_codes":["PRJ-001"],"issues_links":["https://jira.company.org/PRJ-001"]} | |
| {"name":"Matt Smith","email":"matt.smith@mycompany.com","num_commits":1, "num_files":1,"added_lines":90,"deleted_lines":10,"commits":[{"sha1":"54527e7e3086758a23e3b069f183db6415aca304","date":"Sep 8, 2015 3:11:23 AM","merge":true,"bot_like": false,}],"is_bot_like": false,"branches":["branch1"],"issues_codes":["PRJ-002","PRJ-003"],"issues_links":["https://jira.company.org/PRJ-002","https://jira.company.org/PRJ-003"]} | |
| ``` |