)]}'
{
  "log": [
    {
      "commit": "95396fb90b7e8b400af33591724114a97bff2dd7",
      "tree": "9f85e23691ad2693235fced12a754ede4484e513",
      "parents": [
        "dd094865fe07d2bb11ea1a181113b97133ebaf13"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:44:39 2025 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:45:18 2025 -0700"
      },
      "message": "Add deprecation notice\n\nChange-Id: I338c1ee8ff5244f8028da1c1c0213432b72060f2\n"
    },
    {
      "commit": "dd094865fe07d2bb11ea1a181113b97133ebaf13",
      "tree": "eacb78d02acc219e4619ad6966733789ca946d62",
      "parents": [
        "04dd6fa927afcb9cf610553922fa1cbd80c00366"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jan 22 13:18:05 2025 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jan 22 13:21:43 2025 +0100"
      },
      "message": "Use starting-revision filter instead of branch\n\nThe \"branch\" filter was renamed to \"starting-revision\"\nin change I85703b6d. Amend the ETL calls to use the\nnew filter name.\n\nChange-Id: I81c31e68cc8f51c45e9590ef4628132fcb917d59\n"
    },
    {
      "commit": "04dd6fa927afcb9cf610553922fa1cbd80c00366",
      "tree": "ff623b42054bfc43542167a3cb54e18116b94837",
      "parents": [
        "fe6f72621e84fc2b40a8fe55d7906dcfd323cb81"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jan 22 12:51:00 2025 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jan 22 03:58:08 2025 -0800"
      },
      "message": "Consume starting_revision field\n\nThe \"starting_revision\" field was added in analytics with\nchange I22369b8680. Make sure to consume and persist\nit in Elasticsearch.\n\nChange-Id: If8d51fb77acca2c849514416bb5e630fc58adbea\n"
    },
    {
      "commit": "fe6f72621e84fc2b40a8fe55d7906dcfd323cb81",
      "tree": "dadd9968508a8c47cfe7502773a85030527e49e9",
      "parents": [
        "7ad1e49ea4b6b9ee2cb8d798d678e30cbf9f8893"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Nov 11 16:43:43 2024 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Nov 28 11:26:24 2024 +0100"
      },
      "message": "Label results and and manifest branch information\n\nLabelling the results could be used for the aggregation\nof projects imported from the same manifest file.\nAdd \"manifest_label\" and \"manifest_branch\" fields to allow\naggregation and filtering by information associated with\nthe manifest.\n\nChange-Id: I9d868357852aa0386dfa10f012aebd539728a1e1\n"
    },
    {
      "commit": "7ad1e49ea4b6b9ee2cb8d798d678e30cbf9f8893",
      "tree": "c184943b1798be6e2850b210cb45128de8e3f282",
      "parents": [
        "2b1e90f263aba05bc0207b3d6a74c41370ee433e"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Nov 12 10:20:03 2024 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Nov 28 09:09:46 2024 +0000"
      },
      "message": "Add manifest parameter to SSH command\n\nThe manifest option was introdiced by I839f9ee,\nhowever the parameter was missing from the SSH\ncommand.\n\nChange-Id: I0181dead6c73481c7f7619d6372ff71a7aaed60c\n"
    },
    {
      "commit": "2b1e90f263aba05bc0207b3d6a74c41370ee433e",
      "tree": "c5038186597d07a76b05bf2db783f9eac1a8808e",
      "parents": [
        "eaef6470012b0b2c0a9e83a54875b3fa8283ba3c"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Nov 11 14:50:57 2024 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Nov 28 09:09:39 2024 +0000"
      },
      "message": "Add manifest option documentation\n\nChange-Id: I1b5a512d833715d59e47306b1632f4b84278249a\n"
    },
    {
      "commit": "eaef6470012b0b2c0a9e83a54875b3fa8283ba3c",
      "tree": "d80be9d79b134443076619a487ad9d1fa72cf459",
      "parents": [
        "aaa3700776f5db1badeb21afe0a65cca91698c5c"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Nov 08 19:04:40 2024 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Nov 28 10:08:57 2024 +0100"
      },
      "message": "Filter by branch when importing data from manifest\n\nManifest files contain the branch (aka \"version\")\nfrom which each project is referring to.\n\nMake sure to extract data from the correct branch\nwhen importing projects from a manifest file.\n\nThe branch is defined at project level. If not\npresent, the global default branch will be assinged\nto the project.\n\nHere a simple manifest example:\n\n\u003cmanifest\u003e\n  \u003cremote  name\u003d\"aosp\" fetch\u003d\"..\"\n           review\u003d\"https://android-review.googlesource.com/\" /\u003e\n  \u003cdefault revision\u003d\"defaultbranch\"\n           remote\u003d\"aosp\"\n           sync-j\u003d\"4\" /\u003e\n  \u003cproject name\u003d\"repo1\" /\u003e\n  \u003cproject name\u003d\"repo2\" revision\u003d\"branch1\" /\u003e\n\u003cmanifest\u003e\n\nIn the above case \"repo2\" data comes from \"branch1\", while\n\"repo1\" from \"defaultbranch\".\n\nChange-Id: Ic4861977f44d4b45cbf9896f563f6b7224aaa200\n"
    },
    {
      "commit": "aaa3700776f5db1badeb21afe0a65cca91698c5c",
      "tree": "b71a63ffeca6a6f43ccd8b9a22425d090c1a698d",
      "parents": [
        "66deccba8decc6b17ff2911caea5da9d857d00f1"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 14 22:50:30 2024 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 02 22:18:16 2024 +0100"
      },
      "message": "Support projects filtering using repo manifest\n\nWhen dealing with multiple projects, using a tool like\nrepo and an XML manifest file is very common.\n\nAllow the ETL to receive a manifest XML file as a parameter\nand automatically retrieve all the projects mentioned\nin the manifest file.\n\nChange-Id: I839f9eea690edb53053396e3e7fc83eb6c53d0a1\n"
    },
    {
      "commit": "66deccba8decc6b17ff2911caea5da9d857d00f1",
      "tree": "e3e97cc2e62ec526cfe0b531ef131e1a11eb67c7",
      "parents": [
        "46ecd565d4f593632291705b64645df044154c70"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Aug 19 06:53:55 2024 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Aug 26 09:43:56 2024 +0000"
      },
      "message": "Allow cross-build with different ElasticSearch versions\n\nWhen using different versions of ElasticSearch, the client\nlibrary would need to change to adapt the different API\nand capabilities of the ElasticSearch server.\n\nAllow specifying a custom version of ElasticSearch Java\nAPI layer by setting a Java System Property.\n\nExample of building the ETL for ElasticSearch 8.15.0:\nsbt -Delasticsearch-spark-20-version\u003d8.15.0 assembly\n\nChange-Id: I1b749a8825e052bc8fea89dafb83feb9e3dcc458\n"
    },
    {
      "commit": "46ecd565d4f593632291705b64645df044154c70",
      "tree": "a3e93a06de3beffc2a9f7c78e78dac6fbe6f0e13",
      "parents": [
        "e569865414f2baab09f88260df58e0707c60fbd9"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Aug 23 16:50:22 2024 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Aug 26 09:43:28 2024 +0000"
      },
      "message": "Use index name from input parameter\n\nElastisearch 6.x expects the index in the [index]/[type] format\nwhile from 7.x the index name cannot include the type anymore.\n\nAvoid any index type handling in the code and use directly the\nvalue coming from the input parameter as full index name.\n\nChange-Id: I5bbe2e42d6a42d304bc7c877c1671a537294ecfb\n"
    },
    {
      "commit": "e569865414f2baab09f88260df58e0707c60fbd9",
      "tree": "955a3e7a44a97515d576f8d0ce41eab9b3ccfd26",
      "parents": [
        "7fcbc34b093c8cd22ef3f5537c93d0be7de7608a"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 22 06:07:03 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Aug 26 09:43:03 2024 +0000"
      },
      "message": "Revert \"No downtime when rebuilding ES indices\"\n\nThis reverts commit 4410948f29afc4122b7a435c14f1e06f632953e1.\nThe index aliasing never worked properly and it is now preventing\nthe use of future ElasticSearch versions due to the direct access\nto the ES API which is totally unnneeded.\n\nChange-Id: I98b469f502189507553a03c89b06c6ccb8b32a80\n"
    },
    {
      "commit": "7fcbc34b093c8cd22ef3f5537c93d0be7de7608a",
      "tree": "8a40e90ab5ab917216b1eac5b183aee16963af03",
      "parents": [
        "bc0487f361c1af2dda5f67ab48ca254304129b29"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 14 22:14:21 2024 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 14 22:14:21 2024 -0700"
      },
      "message": "Specify that Java 1.8 is required for compile\n\nThe ETL relies on Spark 2.3.3 which supports only Java 8.\n\nSee [1] for more details.\n\n[1] https://community.cloudera.com/t5/Community-Articles/Spark-and-Java-versions-Supportability-Matrix/ta-p/383669\n\nChange-Id: I75db9b172f7a9aca7829d1e6920032d396b1da46\n"
    },
    {
      "commit": "bc0487f361c1af2dda5f67ab48ca254304129b29",
      "tree": "8501b8fadfe3f44729e135ee0d8b0f1cb35fcbe9",
      "parents": [
        "2adcc00ee5fff5d03fc13f1c4ad7dca8a57ede04"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 21 18:06:08 2018 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri May 01 16:32:04 2020 +0200"
      },
      "message": "Allow aggregation per hashtags\n\nAdded the capability of aggregating by the hash-tags linked to each change.\n\nFeature: Issue 10202\nChange-Id: I06eabbe00ded15fa0d5f47528c46d25f1c4421e4\n"
    },
    {
      "commit": "2adcc00ee5fff5d03fc13f1c4ad7dca8a57ede04",
      "tree": "515ac691e50b0a67bf734031b96dce2ddd965ddc",
      "parents": [
        "a4bbe2e679c2202be8aa6e2f542c4a22fd0892d4"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri May 01 15:52:30 2020 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri May 01 15:52:30 2020 +0200"
      },
      "message": "Reformat with scalafmt\n\nChange-Id: I95b02e03348b26ebb1ef43a872fac13a904c479d\n"
    },
    {
      "commit": "a4bbe2e679c2202be8aa6e2f542c4a22fd0892d4",
      "tree": "4a567636f1faed10557f6d90b08bddfdb6368e09",
      "parents": [
        "a418c8a9530822b82225cd2ae941781e324e6351"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Apr 30 21:04:09 2020 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Apr 30 19:20:50 2020 +0000"
      },
      "message": "Use more recent Scala, sbt and sbt-assembly versions\n\nScala: 2.11.12\nsbt: 1.3.9\nsbat-assembly: 0.14.7\n\nChange-Id: I5c6ce3dc34f303d1fcdb3eb32a7c8401f37c78b0\n"
    },
    {
      "commit": "a418c8a9530822b82225cd2ae941781e324e6351",
      "tree": "8fd2e5bd94bc1eb6d534e0bff0f3c7373351944f",
      "parents": [
        "445e95128251aaf219a6def0626a1415912b0b3b"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Mon Dec 09 10:15:58 2019 +0100"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Dec 13 11:41:45 2019 +0100"
      },
      "message": "Disambiguate short option in audit-log ETL\n\nFix for duplicated short option name for additionalUserInfoPath and\neventsTimeAggregation command line options.\n\nChange-Id: I4931e504d995c766a057dbd914a81119aa8802bd\n"
    },
    {
      "commit": "445e95128251aaf219a6def0626a1415912b0b3b",
      "tree": "48f4d95f29717fd9830bf22c1b5864d52d3f861a",
      "parents": [
        "0ce3629108809a3f8c77ef3b5aa398e025691455"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Thu Nov 28 22:12:57 2019 +0100"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Thu Nov 28 22:15:23 2019 +0100"
      },
      "message": "Fix issue with building docker image\n\nSpark binaries in version 2.3.3 have been moved to archive. Updating the\nurl to point to archive server fixed the issue with build.\n\nChange-Id: Id8d837f9b7d95d6cb1c4b27380110bd11ddaab53\n"
    },
    {
      "commit": "0ce3629108809a3f8c77ef3b5aa398e025691455",
      "tree": "7b1fcf0ae7d3f94f4839736f067024a698d2acc1",
      "parents": [
        "ec647a74b2d81cfa91bf4611a55b4fd571e9cdc9"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Mar 25 17:23:11 2019 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jun 17 08:25:53 2019 +0000"
      },
      "message": "Re-format build.sbt using scalafmt\n\nChange-Id: I55a8936ee974f80091658023051d42e1f89d7474\n"
    },
    {
      "commit": "ec647a74b2d81cfa91bf4611a55b4fd571e9cdc9",
      "tree": "b66c483a60ae5cd581292f78d704502d8177fe96",
      "parents": [
        "bc43272b168ead27eb02ec7365beca1c9bfb360f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Jun 16 21:39:26 2019 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Jun 16 21:39:26 2019 +0100"
      },
      "message": "Remove the botlike obsolete parameter from invocation\n\nThe configuration of what is bot and what isn\u0027t belongs to\nthe project configuration and cannot be passed anymore as parameter.\n\nRemove the parameter from ETL and from the invocation of the\nanalytics plugin.\n\nChange-Id: I13a2169b811292abd1f969a3110cad7667fefacd\n"
    },
    {
      "commit": "bc43272b168ead27eb02ec7365beca1c9bfb360f",
      "tree": "4e51022c4b9edef8c1cbb9a9598c3df701b6b64d",
      "parents": [
        "4410948f29afc4122b7a435c14f1e06f632953e1"
      ],
      "author": {
        "name": "Tiago Palma",
        "email": "tiago.f.palma@gmail.com",
        "time": "Tue Mar 05 12:14:11 2019 +0100"
      },
      "committer": {
        "name": "Tiago Palma",
        "email": "tiago.f.palma@gmail.com",
        "time": "Thu Mar 28 13:34:44 2019 +0000"
      },
      "message": "Add ES integration test support\n\nUse Testcontainers to facilitate the creation\nof docker containers.\n\nFeature: Issue 10555\nChange-Id: I59e22a505b9de92c91f66499a664e0a0f81424bf\n"
    },
    {
      "commit": "4410948f29afc4122b7a435c14f1e06f632953e1",
      "tree": "71129c272ee404903939d8ec66c459a2033006fa",
      "parents": [
        "63ee622e6f39a458d414de1c02ee3b4d55a9e647"
      ],
      "author": {
        "name": "Tiago Palma",
        "email": "tiago.f.palma@gmail.com",
        "time": "Tue Mar 05 12:14:11 2019 +0100"
      },
      "committer": {
        "name": "Tiago Palma",
        "email": "tiago.f.palma@gmail.com",
        "time": "Wed Mar 13 21:52:32 2019 +0000"
      },
      "message": "No downtime when rebuilding ES indices\n\nIntroduce elasticsearch aliases to avoid downtime\nwhen rebuilding the actual indices.\n\nFeature: Issue 10555\nChange-Id: I43477b9d763b28839f002493e8caf78057a8e756\n"
    },
    {
      "commit": "63ee622e6f39a458d414de1c02ee3b4d55a9e647",
      "tree": "6410b1740e9a9c0fd3d8425a1a117430bcf621f7",
      "parents": [
        "c38accf2e23b0b1f67ce9fc376e74e68c78a2e20"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Mar 13 15:32:55 2019 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Mar 13 15:32:55 2019 +0000"
      },
      "message": "Bump up spark version 2.3.2 to 2.3.3 for docker\n\nWhen building docker images, spark is installed as dependency.\nspark spark-2.3.2 is no longer available and back-compatible spark-2.3.3\nis used instead.\n\nChange-Id: I243f071482922fa4961ca829f59d360e3444b209\n"
    },
    {
      "commit": "c38accf2e23b0b1f67ce9fc376e74e68c78a2e20",
      "tree": "10681d9b5f287ca6edaf91c0f8dcbe99e9fe838b",
      "parents": [
        "3b54d9ed5a9a4eded1c2a9c0f8aecf9c0970262b"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Mar 12 13:31:36 2019 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Mar 13 11:33:50 2019 +0000"
      },
      "message": "Leverage bot-like-regexps parameter of analytics plugin\n\nThis commit makes use of the bot-like-regexps GET parameter of the\nanalytics plugin, which allows to pass a comma-separated list of regular\nexpressions to use in deciding whether a particular commit looks like a\nbot-like commit.\n\nThis change also index the boolean is_bot_like field in elasticsearch\nso that it can be used to build analytics on.\n\nChange-Id: I12620ab37eb0866210ec1a690c827b459481d36e\n"
    },
    {
      "commit": "3b54d9ed5a9a4eded1c2a9c0f8aecf9c0970262b",
      "tree": "efdd285944f52fce21760d6d92b175d17113305c",
      "parents": [
        "515c406c33e2fd0efca24651d325812049b049bd",
        "9532f2ba5674ba2ab8b11f6cd22c37c0b5ef3332"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Feb 08 11:27:54 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 08 11:27:54 2019 +0000"
      },
      "message": "Merge \"Documented extract branches option\""
    },
    {
      "commit": "9532f2ba5674ba2ab8b11f6cd22c37c0b5ef3332",
      "tree": "e0b9627b81713e74c3d50b9146c27b0714908036",
      "parents": [
        "f5c74cb6226071505298d1a7eeb29ad526f7aa6e"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Feb 08 10:28:41 2019 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Feb 08 11:19:33 2019 +0000"
      },
      "message": "Documented extract branches option\n\n\u0027exctract-branches\u0027 option was missing from documentation.\nIt allows to extract and process branches information from the analytcis\nplugin.\n\nChange-Id: I5e1c3deb385643c2a4a9b88edb0c877717253f6e\n"
    },
    {
      "commit": "515c406c33e2fd0efca24651d325812049b049bd",
      "tree": "f949c52d188d1d845c641b4f0498e1cebfd05784",
      "parents": [
        "f5c74cb6226071505298d1a7eeb29ad526f7aa6e"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Feb 06 12:26:42 2019 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Feb 06 12:26:42 2019 +0000"
      },
      "message": "Extract project from GIT git-uplod-pack and git-receive-pack\n\nThis commits fixes a bug where gerrit project was not extracted from\ngit-upload-pack and git-receive-pack GIT commands.\n\nChange-Id: I43f93b870203d6b318be754ce3d9ba087c1decf0\n"
    },
    {
      "commit": "f5c74cb6226071505298d1a7eeb29ad526f7aa6e",
      "tree": "e9dc0f5622930b87a439ba029fcaaa012488a98d",
      "parents": [
        "d2a65dcfea2a5e09aaee5abeec103c2b481da8b4"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Jan 17 16:40:33 2019 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Jan 17 16:40:33 2019 +0100"
      },
      "message": "Handle authenticated REST API sub-commands\n\nMake sure ew handle the /a prefix when a sub-command is extracted from\nan authenticated REST API call\n\nChange-Id: I55c8240290e162073273e08929bb779df7dcfcb0\n"
    },
    {
      "commit": "d2a65dcfea2a5e09aaee5abeec103c2b481da8b4",
      "tree": "97c540fe9d70f21237d6a91e8725f61db8c5afb3",
      "parents": [
        "2b2286fe10de562e8b42b515d523c1fbf26b4177"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jan 11 20:04:19 2019 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Jan 15 08:38:26 2019 +0100"
      },
      "message": "Extract sub-command from AuditLog events\n\nThis will allow a better normalization of the data and a better\nunderstanding of Gerrit usage.\n\nFeature: Issue 10227\nChange-Id: I997dd93c49cfcafc0a08f0a0d7cb8bc4d459175e\n"
    },
    {
      "commit": "2b2286fe10de562e8b42b515d523c1fbf26b4177",
      "tree": "0e30d162181dda9b3f99ddd8a5b639b550cbd47c",
      "parents": [
        "72e55421732a32b4be227e6d2f2a232cbf8020c7"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Jan 11 17:44:24 2019 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Jan 11 17:44:24 2019 +0000"
      },
      "message": "Deal with DataSet[AggregatedAuditEvent] in Auditlog\n\nPrevious this change, the auditlog ETL job was exposing transformed data\nas dataframe, this changes modifies that interface to deal with\nDataset[AggregatedAuditEvent] instead.\n\nAn AggregatedAuditEvent represents the result of spark transformations\nand aggregations before being indexed in elasticsearch.\n\nChange-Id: Ic3e8b8aa1b9e4294b3500de1d98e66623188f5d1\n"
    },
    {
      "commit": "72e55421732a32b4be227e6d2f2a232cbf8020c7",
      "tree": "614f7bc522743ef45a0f52fc09824d709b4e9b46",
      "parents": [
        "5a13354e774740d9cc3d684fee6648254a61a1f0"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 09 18:29:21 2019 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Jan 11 16:32:10 2019 +0000"
      },
      "message": "Extract project from audit logs\n\nAttempt, where possible, to extract project names from audit logs. This\nuses a list of public projects whith is retrieved via the /project/\nendpoint via the `GerritProjects` class.\n\nFeature: Issue 10225\nChange-Id: Ifb41bd9b7c4a2db3d081dbddb0e1cf377f41338c\n"
    },
    {
      "commit": "5a13354e774740d9cc3d684fee6648254a61a1f0",
      "tree": "dc9e32f3f196d7322a48042990992f24cab31e25",
      "parents": [
        "887f0d2dac5a0eeffa4011e6360eba15b59058e9"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jan 07 13:34:30 2019 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jan 07 13:34:30 2019 +0000"
      },
      "message": "Make additionalUserInfoPath optional\n\nadditionalUserInfoPath should not be required: this change makes command\nline argument happy when no addtionalUserInfoPath is provided.\n\nChange-Id: Idd404fed0e7390fbfd9c29423b857d729c25bba2\n"
    },
    {
      "commit": "887f0d2dac5a0eeffa4011e6360eba15b59058e9",
      "tree": "ac5bf1f5da592c7eed530e3ea4a3ab6851f6ec3e",
      "parents": [
        "ebf214f85f1128317d982c1651011e35539a6bb3"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jan 04 19:02:32 2019 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jan 04 19:02:32 2019 +0100"
      },
      "message": "Add data volume for auditlog ETL\n\nAdded data volume to mount optional configuration files (i.e.: author type)\n\nChange-Id: Ib35e49683c43f2193c396cf824a45deeb33ce182\n"
    },
    {
      "commit": "ebf214f85f1128317d982c1651011e35539a6bb3",
      "tree": "a06192bd07ccd8a798e1e026857fa98909e9d8ae",
      "parents": [
        "d5d282d42077fd83fece9dc56a2af28c2095b55f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jan 02 10:17:43 2019 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jan 04 12:21:05 2019 +0100"
      },
      "message": "Enrich user info in Auditlogs ETL\n\nAllow enrichment of user information. This change on allows \"user type\" to be defined, but it can\nbe easily extended to any other useful information.\n\nUser data is passed via a CSV file with the following format:\nid,type\n123,bot\n456,human\n\n\"User type\" is defaulted to \"human\" if not present in this file.\n\nA possible use case for this feature is the distinction between \"bot\" and \"human\" users.\n\nFeature: Issue 10229\nChange-Id: I042244154e668f5137ff97053f1cc2ad88342acd\n"
    },
    {
      "commit": "d5d282d42077fd83fece9dc56a2af28c2095b55f",
      "tree": "811134721779c10490d369069dfb704ce623c165",
      "parents": [
        "17fff45c899f9ebf7b88f246fa3f3e2c9559bd62"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Sat Dec 29 17:04:44 2018 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Jan 04 10:25:43 2019 +0000"
      },
      "message": "Add auditlog result field to elasticsearch\n\nCollect and index result values for ssh, http and rest api commands.\n\nFeature: Issue 10228\nChange-Id: I86550224886e4117efa2e0c4b57b2cba411951c1\n"
    },
    {
      "commit": "17fff45c899f9ebf7b88f246fa3f3e2c9559bd62",
      "tree": "5d4651e4ea1415007453dabf098fc29dda47fab4",
      "parents": [
        "aef38943623c147825f33ef94d403ac0fce96d7a"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 21 16:30:41 2018 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 21 16:30:41 2018 +0100"
      },
      "message": "Remove Change processing from events stream\n\nThis feature is not currently used and it is not working as it is.\nIt was a POC to check the possibility of combining batch and stream events processing.\nThe code is getting in the way of new features development, hence\nthe decision of removing it, until the necessity of stream processing will arise again.\n\nFeature: Issue 10211\nChange-Id: I4a3e993b80ae0c43fa5248ec2acfe10da9b6ed5c\n"
    },
    {
      "commit": "aef38943623c147825f33ef94d403ac0fce96d7a",
      "tree": "f314ab21ebe0b78d4c3c9a7f6f0a72f5ffd983c5",
      "parents": [
        "5b543459c8d22b9d1435ba8c9c295445e960b3ef"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Dec 18 09:17:37 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Dec 18 09:17:37 2018 +0000"
      },
      "message": "Fork test execution to contain metaspace\n\nBefore this change tests running on CI pipelines might have failed due to\njava.lang.OutOfMemoryError: Metaspace\n\nChange-Id: I1d0537ea4f07f6456167331a1ebbb239e2c7e99e\n"
    },
    {
      "commit": "5b543459c8d22b9d1435ba8c9c295445e960b3ef",
      "tree": "27cacbaf7660312ede81225aa40b7e395a084bc2",
      "parents": [
        "cb92d197149efb18e0ffc1b6776c994a97ccdb06"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Dec 17 16:00:45 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Dec 17 16:00:45 2018 +0000"
      },
      "message": "Provide auditlog ETL as docker image\n\nanalyticsETLAuditLog/docker now produces a runnable docker image\nsbt analyticsETLAuditLog/dockerBuildAndPush also publishes to the\ndocker repository\n\nFeature: Issue 10185\nChange-Id: Iea4bf41d096ba435d96afadb23d62ef187aa1ad0\n"
    },
    {
      "commit": "cb92d197149efb18e0ffc1b6776c994a97ccdb06",
      "tree": "6e8c6a19ea78b6091957d45290eedea9f2d1f72b",
      "parents": [
        "d550221ad3a6fc3b5c61910ae306f24b645cae26"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Nov 29 17:36:53 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Dec 14 18:25:04 2018 +0000"
      },
      "message": "Provide Spark job to process AuditLogs events\n\nThis change provides a new ETL job that allows the processing of auditLog\nevents (typically generated by the audit-sl4j plugin).\nEvents are normalized, aggregated and then persisted to an elasticsearch\nindex. An indended use of this is to then expose this information through\nvisualization dashboards, such as kibana.\n\nThis work also refactors some general purpose code in order to be shared\nby all the ETLs, such as connection to gerrit APIand time operations.\n\nFeature: Issue 9866\nChange-Id: I9d1fd9ae569de3b5c0d64cb625356fad3a62fd7a\n"
    },
    {
      "commit": "d550221ad3a6fc3b5c61910ae306f24b645cae26",
      "tree": "ddd73eb44f0c119d921b979185915bfc3a418fbe",
      "parents": [
        "ad90b69239570df2289b92545ed46cfdf75277aa"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Nov 29 12:11:08 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Nov 29 12:11:08 2018 +0000"
      },
      "message": "Move auditlog main job into job package\n\nWhen assemblying the jar, build.sbt programmatically set the Main class\nto com.gerritforge.analytics.\u003cprojectName\u003e.job.Main\n\nThis change moves the auditlog main class accordingly.\n\nFeature: Issue 9866\nChange-Id: Ibf2cc3ec0e37caeee4f00c6ee8bec5f44afab97d\n"
    },
    {
      "commit": "ad90b69239570df2289b92545ed46cfdf75277aa",
      "tree": "2810ca73e8a1ce443887369c1c16ea8a75d22541",
      "parents": [
        "a8138923afd41c31bc9b389cb28b7ec99fae01bd"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Nov 29 10:08:15 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Nov 29 11:55:23 2018 +0000"
      },
      "message": "Add ability to serialize audit events into json\n\nSshAuditEvent, HttpAuditEvent and ExtendedHttpAudit events can now be\nserialized into json.\nAudit events will be json serialized to then be persisted into elasticsearch\n\nFeature: Issue 9866\nChange-Id: I2b1ed9c80fc4269c40c664cd5edb2d11731492bb\n"
    },
    {
      "commit": "a8138923afd41c31bc9b389cb28b7ec99fae01bd",
      "tree": "cdfa79b6d58d2aec607c244af3d6f28879ec52bd",
      "parents": [
        "9806eb9347e16699e5812887ba30cf1d61f80c7d"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Nov 27 17:32:31 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Nov 28 11:12:05 2018 +0000"
      },
      "message": "Model audit events and test deserialization\n\nModeled SshAuditEvent, HttpAuditEvent and ExtendedHttpAuditEvent\nand tested ability to deserialize json strings into case classes\n\nFeature: Issue 9866\nChange-Id: I8dc738b9300e6a24afd97ac8dfde96ec7fd02be1\n"
    },
    {
      "commit": "9806eb9347e16699e5812887ba30cf1d61f80c7d",
      "tree": "54f008a5c9159515231241997550b4cb5f32155e",
      "parents": [
        "21fb3e76482b570ad9e4640c919efe7191e738e6"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Nov 27 10:16:34 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Nov 27 11:36:17 2018 +0000"
      },
      "message": "Allow ignoring SSL cert when connecting to gerrit\n\nIntroduce a new boolean flag \u0027--ignore-ssl-cert\u0027 (false by default),\nto ignore validating SSL certificate. This is useful when connecting\nto gerrit servers installed with self-signed certificate.\n\nFeature: Issue 10097\nChange-Id: I3467800c46123d42e8f7e37fb51a0eebf6e357d1\n"
    },
    {
      "commit": "21fb3e76482b570ad9e4640c919efe7191e738e6",
      "tree": "913a3e57ef2fc1741e287857abfeeefb18874be3",
      "parents": [
        "5ebc89c54ab9ffabb04ffc85cec3f0bf76fb6687"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Nov 21 13:01:59 2018 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Nov 23 17:11:41 2018 +0000"
      },
      "message": "Refactor project structure to allow multi build\n\nsbt build can now build multiple project so that this repository can be\nused to host multiple ETL jobs.\n\nMoved gitcommits implementation into its own project and created a\nskeleton for the auditlog project too.\n\nThis change will cause the existing gitcommits docker image to change\nits name from:\ngerritforge/spark-gerrit-analytics-etl\n\nto a more representative:\ngerritforge/gerrit-analytics-etl-gitcommits\n\nFeature: Issue 10074\nChange-Id: I285db20ca603825714245d9b5a3286fb09ac7891\n"
    },
    {
      "commit": "5ebc89c54ab9ffabb04ffc85cec3f0bf76fb6687",
      "tree": "6a001ca05d75b0a6ea0b0eda3e20abe21ed5c047",
      "parents": [
        "aee1111a43d4357737e6f35c5db2e4887c03d135"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Nov 20 21:49:09 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Nov 20 21:49:09 2018 +0000"
      },
      "message": "Fix typo in the Spark Job Main class\n\nThe main class of the Spark Job is Main and needs to be specified\nwith its full package name on the spark-submit CLI\n\nChange-Id: I94f68979587fb5ed2958fbad06a21610ff0dd023\n"
    },
    {
      "commit": "aee1111a43d4357737e6f35c5db2e4887c03d135",
      "tree": "093273753c224c899c55085309c83f629522c647",
      "parents": [
        "aaeea62de339df90d0d17047413f4d4e21c0b5f0"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Nov 12 10:41:17 2018 -0800"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Nov 12 20:13:26 2018 +0000"
      },
      "message": "Only pass index name to ETL\n\nIndex type will be inferred by the analytics imported by the job.\nAt the moment we just hardcoded \u0027gitcommits\u0027, but in future we will have more (i.e.: auditlogs)\n\nFeature: Issue 9984\nChange-Id: I15d498ad3519971efc362a4020521dc6ce020b45\n"
    },
    {
      "commit": "aaeea62de339df90d0d17047413f4d4e21c0b5f0",
      "tree": "2c2a2ac169cc8ebc0234303b6a7a99278d22647e",
      "parents": [
        "4486a2a236c530be8ab4f492242e354ac00fea9d"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Nov 06 16:03:48 2018 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Sat Nov 10 15:35:31 2018 +0100"
      },
      "message": "Add Git commits Analytics namespace\n\nThis will allow a better code layout when adding new sources of analytics data (i.e.:audit logs).\nPackage name has been extended with the name of the data source: \"com.gerritforge.analytics.\u003csource\u003e\"\n\nFeature: Issue 9983\nChange-Id: I3a8d912ab34550f2a21f51f66d5ca86671f5dfe2\n"
    },
    {
      "commit": "4486a2a236c530be8ab4f492242e354ac00fea9d",
      "tree": "481b4c5f361558bb353b81b014128f676bff0e4e",
      "parents": [
        "90dede446e7ae8f395142c8c448c4eba89e30598"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Oct 23 17:05:59 2018 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Oct 23 17:08:47 2018 +0100"
      },
      "message": "Allow ETL job to extract branches from analytics\n\nWhen provided `--extract-branches true` argument the ETL\njob retrieves branch information too and stores them in\nelasticsearch.\n\nFeature: Issue 9864\nChange-Id: I342290054262eb5e19cfb1c2e5432fe8b6b91df4\n"
    },
    {
      "commit": "90dede446e7ae8f395142c8c448c4eba89e30598",
      "tree": "363cecc33a644288d67245178c00130ee33bec0e",
      "parents": [
        "b96b21154bcf130d0bbafc066deee59c431411e2"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 19 13:16:28 2018 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 19 13:16:28 2018 +0100"
      },
      "message": "Import kibana and elasitcsearch submodules\n\nRather than keeping a duplicate copy of analytics-kibana\nand analytics-elasticsearch\u0027s Dockerfiles, this change\njust points to the original repositories and imports them\nas submodules.\n\nChange-Id: I92a7cc1123755100bd22349cfdbf6dd4cc69bad7\n"
    },
    {
      "commit": "b96b21154bcf130d0bbafc066deee59c431411e2",
      "tree": "dcd0779814321234af3e88c9311c894cee690955",
      "parents": [
        "ce1de58df0ebcf8cb77ba6eade5c4e96ffb91b5c"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 19 10:59:11 2018 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 19 11:18:22 2018 +0100"
      },
      "message": "Optimize kibana caching and bundles at build time\n\nPreviously when spinning kibana docker container a log message warned\nof kibana having to optimize and caching bundles, as such:\n\n{\n \"type\":\"log\",\n \"@timestamp\":\"2018-10-18T15:31:44Z\",\n \"tags\":[\"info\",\"optimize\"],\n \"pid\":1,\n \"message\":\"Optimizing and caching bundles...This may take few minutes\"\n}\n\nThis would cause kibana to be unreachable for few minutes when starting\nup the analytics dashboard.\n\nThis fix moves the optimization at image building time rather than at\nrun time, as suggested by:\n\nhttps://github.com/elastic/kibana/issues/6057#issuecomment-403789147\n\nFeature: Issue 9870\n\nChange-Id: I837d612c988aeebe2d5911003a82cd43e65c6d4b\n"
    },
    {
      "commit": "ce1de58df0ebcf8cb77ba6eade5c4e96ffb91b5c",
      "tree": "b56fd642e5dd742b16a07e4cd575fc2cda7a0f11",
      "parents": [
        "d6aab38238289e4c6ed60cd5e27734056384fac9",
        "27e9dce887ff1021c0abbd1581ff7906466ede67"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Oct 18 07:56:39 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 18 07:56:39 2018 +0000"
      },
      "message": "Merge \"Added Scalafmt configuration\""
    },
    {
      "commit": "d6aab38238289e4c6ed60cd5e27734056384fac9",
      "tree": "e7487ebb971d0ac916c45be32870d1fc1699c74d",
      "parents": [
        "f153ca471af4b743265e8785203633ff13c663f5"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Oct 16 18:54:37 2018 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Oct 16 18:54:37 2018 +0100"
      },
      "message": "Wait for elasticsearch before running spark\n\nThis change allow the dockerized spark job to wait\nfor elasticsearch being up and running before executing\nspark-submit\n\nAlso, provided default for optional environment variables\nin gerrit-analytics-etl.sh\n\nFeature: Issue 9867\nChange-Id: If7c44c5571a91f1bb492c35f44b88c70deec5ad2\n"
    },
    {
      "commit": "27e9dce887ff1021c0abbd1581ff7906466ede67",
      "tree": "bc7c9e29cb1dd1ac1e2f6678ef3235890f7a5a64",
      "parents": [
        "f153ca471af4b743265e8785203633ff13c663f5"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Oct 16 15:50:27 2018 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Oct 16 15:50:27 2018 +0200"
      },
      "message": "Added Scalafmt configuration\n\nChange-Id: I54e78c4f5813aa8ff25a48002f1e7d08442dde5a\n"
    },
    {
      "commit": "f153ca471af4b743265e8785203633ff13c663f5",
      "tree": "1a82126b8e5f8034b3915aa581df87ec870d2621",
      "parents": [
        "c50190a06468ae2734748eb7ef62729b0cf85475"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Oct 16 12:11:07 2018 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Oct 16 12:31:50 2018 +0200"
      },
      "message": "Explicitly set time zone\n\nMake sure timezone is always set to UTC when formatting dates.\n\nFeature: Issue 9872\nChange-Id: Ibb54fe2994cb1b10699b0dd62115d4869eb70bd0\n"
    },
    {
      "commit": "c50190a06468ae2734748eb7ef62729b0cf85475",
      "tree": "f7a2f459510855085d169a71c5dc94ad0a773731",
      "parents": [
        "c5124c3744b694b93faa9e0e743d69e089d18e7b"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 12 17:12:08 2018 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 12 17:20:36 2018 +0100"
      },
      "message": "Dockerize analytics ETL spark job\n\nUpdate sbt to generate a docker image running containerized\nETL analytics job.\nThe entrypoint of the docker file is a provided shell script\nthat provides the relevant configuration and environment\nvariables to the spark-submit command.\n\nFeature: Issue 9856\nChange-Id: I8e1ad454bac79860a518d0f45e6c8016d0507350\n"
    },
    {
      "commit": "c5124c3744b694b93faa9e0e743d69e089d18e7b",
      "tree": "6d3f87ba477c3b6b12069fa43d3d41a319b2fe10",
      "parents": [
        "61066c656ce26c927ac0e465853b59c6745e8ab7"
      ],
      "author": {
        "name": "Tiago Palma",
        "email": "tiago.f.palma@gmail.com",
        "time": "Thu Jul 12 23:44:23 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 16 23:30:44 2018 +0100"
      },
      "message": "Add Basic Authentication handling\n\nAllow connection to a gerrit instance when\nBasic Authentication is needed. User and password will need\nto be passed as input parameter\n\nFeature: Issue 8836\nChange-Id: I8f46ff7a48f73cf8c6323213280a51baeb0a3714\n"
    },
    {
      "commit": "61066c656ce26c927ac0e465853b59c6745e8ab7",
      "tree": "fc0ed2eabc758794e9c4c7948a86a36262228f46",
      "parents": [
        "1342968ab93f83033077314d4ae76bd9771135a0"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 05 11:03:34 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 05 11:03:34 2018 +0100"
      },
      "message": "Upgrade to ES 6.2.0\n\nThe latest version of ES is v6.2.0 and the client\nside API needs to be compliant with the server\n\nChange-Id: I48b9f0c4f5ede26f27e310eeffaf473519e70bdd\n"
    },
    {
      "commit": "1342968ab93f83033077314d4ae76bd9771135a0",
      "tree": "6466b68e1e1cba3f77aa3204e9ded240be13e583",
      "parents": [
        "1242680f7781ba9c11c3712d635bd9cc7fcef03c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat May 19 00:11:17 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 05 10:02:43 2018 +0000"
      },
      "message": "Move Kibana dashboard definitions to submodule\n\nAllow the automatic publishing to DockerHub of the\nKibana Dashboard Importer. Keep existing path structure\nby linking the new GitHub repo as submodule\n\nChange-Id: I3e5ca4bbb52d8307594bf24c34dcabc2362edb21\n"
    },
    {
      "commit": "1242680f7781ba9c11c3712d635bd9cc7fcef03c",
      "tree": "818fcbcc9caa38ec0b7e16d4c8eac34f1282645c",
      "parents": [
        "63199e3db7d9a7c2045b00a1cfd88c4d75556df8"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri May 18 16:34:29 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 05 10:02:20 2018 +0000"
      },
      "message": "Keep dates in epocMillis in the output Row\n\nDo not rely anymore on ElasticSearch auto-mapping feature and pass\ndates as epocMillis without post-processing.\n\nCutting a post-processing unneeded step is going to be better\nand safer, with less code and heap allocated.\n\nChange-Id: Ibbc85b44c4e250fc63a792b41162394a38fd8a31\n"
    },
    {
      "commit": "63199e3db7d9a7c2045b00a1cfd88c4d75556df8",
      "tree": "00df4e67d2f37362a7818b340b040497cf519e2a",
      "parents": [
        "6866c659833035fe0de903d12f5b6ae5a1944502"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri May 18 16:35:18 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 05 10:01:55 2018 +0000"
      },
      "message": "Push by default to gerrit/analytics index\n\nAll the Kibana dashboards and index template configuration are\nrelated to gerrit/analytics index. Use it as default to allow an\neasier use of the default settings of the ETL invocations.\n\nChange-Id: I4c1e8ddad465a225cf9a00266d7c19512f68688b\n"
    },
    {
      "commit": "6866c659833035fe0de903d12f5b6ae5a1944502",
      "tree": "a887c154aa0f870eefff13313bd95c53dc9462c1",
      "parents": [
        "bc3655879539fe521a3397f21ee629d137ced0e2"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri May 18 16:30:55 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 05 10:01:17 2018 +0000"
      },
      "message": "Fix generation of organisation from batch only\n\nWhen only batch processing of the Git repository is requested,\nperform correctly the post-processing of data, including the\norganisations\n\nBug: Issue 9036\nChange-Id: I7e6a183cfa94d0526f40b23ce1c460139838de45\n"
    },
    {
      "commit": "bc3655879539fe521a3397f21ee629d137ced0e2",
      "tree": "340d5184f83c2350a8273bfe1bfeded6ec617671",
      "parents": [
        "f636db751cc06f2c22bb8300994ef3a2b0d68c76"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue May 15 22:32:54 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon May 21 21:53:01 2018 +0100"
      },
      "message": "Allow the installation of analytics-etl as plugin\n\nIntroduce an SSH command to start the extraction of Gerrit Analytics\nand re-package the fat-jar as Gerrit plugin.\nTo run the Spark job inside Gerrit, requires to have the Spark\nlibraries linked into the /lib directory beforehand.\n\nKeep the ability to still run the Job in a Spark Cluster by keeping\nthe main entry point and the Spark dependencies as provided.\n\nBug: Issue 9021\nChange-Id: I66a051250242b1534400d6baacad0cdaaf177266"
    },
    {
      "commit": "f636db751cc06f2c22bb8300994ef3a2b0d68c76",
      "tree": "00780fb3bb48f7345e180bc2165a6ea3f160e036",
      "parents": [
        "de7d41ab7ca45434d5e3b7eda596d8139be8eb1d"
      ],
      "author": {
        "name": "Tiago Palma",
        "email": "tiago.f.palma@gmail.com",
        "time": "Sat May 12 10:06:33 2018 +0100"
      },
      "committer": {
        "name": "Tiago Palma",
        "email": "tiago.f.palma@gmail.com",
        "time": "Mon May 14 13:18:59 2018 +0100"
      },
      "message": "Create separate package for date and time operations\n\n- Move date time operations into its own package\n- Test date time opeartions\n- Create reusable and tested date time formatters\n\nBug: Issue 8833\nChange-Id: Iba2581bee0819d5c446c2ddf279f5d9bc3a500a9\n"
    },
    {
      "commit": "de7d41ab7ca45434d5e3b7eda596d8139be8eb1d",
      "tree": "dc3668e0b1a5f3d9b4f477ee014a22d82aa60b8e",
      "parents": [
        "f8245b0f83f64a0fa64ce17cf49908de10798efd"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Feb 28 22:58:56 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Mar 06 12:48:43 2018 +0000"
      },
      "message": "Missing license disclaimer\n\nChange-Id: I335f6f28cfc3c2bc620abe1687f098c5e6b46261\n"
    },
    {
      "commit": "f8245b0f83f64a0fa64ce17cf49908de10798efd",
      "tree": "98f6d3636a27f5f67f95fb1aba4c66d89896b85c",
      "parents": [
        "b60c57ae604e8069f668f4b89ae424a7208dddf9",
        "627d74e6bd904eaf7104aa34fd3d1a7d8dd6b51b"
      ],
      "author": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Fri Mar 02 17:57:17 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 02 17:57:17 2018 +0000"
      },
      "message": "Merge \"Using numbers to specify import order in Kibana.\""
    },
    {
      "commit": "627d74e6bd904eaf7104aa34fd3d1a7d8dd6b51b",
      "tree": "9f8b490dec8bb1bcc3e4572cba2eac8670d908f5",
      "parents": [
        "d0fb7ed2182be370c97318768e0ecab9d4b3fc21"
      ],
      "author": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Wed Feb 28 16:22:25 2018 +0100"
      },
      "committer": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Thu Mar 01 01:18:02 2018 +0100"
      },
      "message": "Using numbers to specify import order in Kibana.\n\nIn dashboard-importer/kibana-config we have a list of json files that\nmust be applied in a specified order. I suggest to use numbers to group\nthe various files instead of couple of letters as before.\nThis way the elastic search importer will load all the 1_ before the 2_\nand so on. 3_ are all the visualizations that can be imported with\nrandom order.\n\nChange-Id: Ia968506b9628b86505323f7cb3ad6a9f9c815951\n"
    },
    {
      "commit": "b60c57ae604e8069f668f4b89ae424a7208dddf9",
      "tree": "a36caf16cc469890ff45f90781765a40123f6517",
      "parents": [
        "d0fb7ed2182be370c97318768e0ecab9d4b3fc21"
      ],
      "author": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Thu Mar 01 01:09:59 2018 +0100"
      },
      "committer": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Thu Mar 01 01:11:57 2018 +0100"
      },
      "message": "Fixed parameter text for index name.\n\nWas erroneously referring to output directory.\nChange-Id: I7298d0f3929540d17f606189f8b20bc32d6cc50e\n"
    },
    {
      "commit": "d0fb7ed2182be370c97318768e0ecab9d4b3fc21",
      "tree": "18e1c3b192d5aba18e7db74cae6d15c032e3bc13",
      "parents": [
        "e33c772e1fd11e72834c9e6b2da8e7ad32e7ea67"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Feb 28 22:51:55 2018 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Feb 28 22:51:55 2018 +0000"
      },
      "message": "Match the CI name\n\nName needs to match the CI one to build the artifact\n\nChange-Id: I75ac09cdefb9d28df00f3f028d81c5a9b7368666\n"
    },
    {
      "commit": "e33c772e1fd11e72834c9e6b2da8e7ad32e7ea67",
      "tree": "6b28536daaa509f0c92d470913d49cfff14c3b66",
      "parents": [
        "25e61a267b7f9032cd9cd19072ca1bb5f6f9bb92"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 28 11:09:30 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 28 11:09:30 2018 +0000"
      },
      "message": "Use UTF-8 encoding to write test files\n\nAlign the write of test files with the read encoding\nto make sure that tests on special chars are consistent.\n\nChange-Id: I6b76347a44ecff8c4d170b6979881ff024378c26\n"
    },
    {
      "commit": "25e61a267b7f9032cd9cd19072ca1bb5f6f9bb92",
      "tree": "266009c294bcf380de248b32ce0d9d98d933696d",
      "parents": [
        "f2ae7e65d78db4312d3cfddb4edff1b255e826c1"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 28 09:56:22 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 28 09:56:22 2018 +0000"
      },
      "message": "Separate UTF-8 test from regular contributors spec\n\nSplit the test for non-latin chars from the standard\nfunctionality of fetchRawContributors. Allows a simpler\ntroubleshooting of encoding vs. functionality regressions.\n\nChange-Id: I1ff59ae655ce1a65d4b2861efbbb4169c45e77ea\n"
    },
    {
      "commit": "f2ae7e65d78db4312d3cfddb4edff1b255e826c1",
      "tree": "47ea50d55439b815dd7dd0b5b5e83b2cf5d5bd5a",
      "parents": [
        "6d6b5ecaec1b4215ac0d491f1aa291d62ce5f9a7"
      ],
      "author": {
        "name": "Stefano Galarraga",
        "email": "galarragas@gmail.com",
        "time": "Tue Jan 23 17:27:20 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 28 08:35:43 2018 +0000"
      },
      "message": "Use gerrit events to calculate UserActivitySummary\n\nThe code reads events generated by the events plugin and exported to file system\nto generate the same DataFrame structure as the one importing data from the analytics\nplugin.\n\nChange-Id: I664cd4291f2674181a570967fc813e8f7615b84e\nJira-Id: GERICS-634\n"
    },
    {
      "commit": "6d6b5ecaec1b4215ac0d491f1aa291d62ce5f9a7",
      "tree": "c68e94f5552181c59c9f62006e32d71f183fe552",
      "parents": [
        "61e3bd9de4deb60467d90e2a8e14f6d4fe4339b4"
      ],
      "author": {
        "name": "Stefano Galarraga",
        "email": "galarragas@gmail.com",
        "time": "Tue Jan 30 16:14:12 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 28 08:35:05 2018 +0000"
      },
      "message": "Fix inversion of name and ID when parsing project list API response\n\nProject name and code were swapped in the code reading it.\nDone some code refactoring too\n\nChange-Id: Ic212a890ca577bdf9969713fc0f775297af580a5\nJira-Id: GERICS-633\n"
    },
    {
      "commit": "61e3bd9de4deb60467d90e2a8e14f6d4fe4339b4",
      "tree": "4e6251cc24f4632a7b697ad2fc69c9fd775bfb37",
      "parents": [
        "2f8cd15a6af041c0b4358b42dd8eb7e8dbee4783"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Feb 27 14:05:45 2018 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Feb 27 14:05:45 2018 +0000"
      },
      "message": "Remove X-Pack from ES and Kibana\n\nAt the moment we don\u0027t need security, alerting, monitoring, reporting, and graph capabilities,\nhence we can disable X-Pack. Also X-Pack only allows a 30 days free trial period.\n\nChange-Id: Ib91d896c671ddf966dc229aade7f3d817b27b6e0\n"
    },
    {
      "commit": "2f8cd15a6af041c0b4358b42dd8eb7e8dbee4783",
      "tree": "4b33d149d1d139e3bc5565f83969c48461149280",
      "parents": [
        "201d957806558d88f764561213fced49dfa1e7b6"
      ],
      "author": {
        "name": "Stefano Galarraga",
        "email": "galarragas@gmail.com",
        "time": "Sat Jan 20 17:32:21 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jan 25 13:01:43 2018 +0000"
      },
      "message": "Move Docker build into sbt using git info for the version number.\n\nCentralise the generation of the ETL Docker image in the sbt main build\nand use the \"git describe\" output as versioning for it.\n\nRemove the version from the ETL fat jar name since it is going to be inside\nthe docker container anyway.\n\nChange-Id: Ia4a9aeed95303062a5e1df9007e08bfe18dfb676\n"
    },
    {
      "commit": "201d957806558d88f764561213fced49dfa1e7b6",
      "tree": "5b26b01d477d2d60abddad40e9cc0b9b0ac9d993",
      "parents": [
        "5269028bb96dea303b0fb46855030141aef7c1a9"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jan 19 09:48:29 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Jan 20 17:04:00 2018 +0000"
      },
      "message": "Allow running ETL into a Docker container\n\nUse a GerritForge\u0027s simplified Spark setup\nto simplify the deployment and execution of the ETL\n\nChange-Id: I673ff55fe2745bd91f8cf60f429cd100362068f8\n"
    },
    {
      "commit": "5269028bb96dea303b0fb46855030141aef7c1a9",
      "tree": "50c907ec20544a66172080e8032fe7a30cdc196a",
      "parents": [
        "2065e3b7142abd5fe9d5757843b54ff667d3b4dd"
      ],
      "author": {
        "name": "Stefano Galarraga",
        "email": "galarragas@gmail.com",
        "time": "Fri Jan 12 18:48:31 2018 +0000"
      },
      "committer": {
        "name": "Stefano Galarraga",
        "email": "galarragas@gmail.com",
        "time": "Tue Jan 16 10:21:53 2018 +0000"
      },
      "message": "Adding num_distinct_files field to collected analytics\n\nChange-Id: I52d70b8aa548b32a3f7bcab9210d704159c1f009\nJira-Id: GERICS-619\n"
    },
    {
      "commit": "2065e3b7142abd5fe9d5757843b54ff667d3b4dd",
      "tree": "3ecbfe8e7b5d2613b439d1699392d923ec772b48",
      "parents": [
        "26d76afbd428b077ea2ae453e904235ea800c24c"
      ],
      "author": {
        "name": "Stefano Galarraga",
        "email": "galarragas@gmail.com",
        "time": "Mon Jan 08 18:02:49 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jan 10 11:38:59 2018 +0000"
      },
      "message": "Add support for \"is_merge\" field to the ETL and Kibana configuration\n\nSupport the \"is_merge\" flag to differentiate between merge and non-merge\ncommits.\nAdd extra logging and resolve problem of HDFS libraries required when\nsaving output to JSON files\nReplaced System.out prints with logger.info calls\n\nJira-Id: GERICS-610\nChange-Id: I57c2f4c6eeea7424767427fcb5e1b17c05212a59\n"
    },
    {
      "commit": "26d76afbd428b077ea2ae453e904235ea800c24c",
      "tree": "f454342591579ecd5665a154ae66103612148aeb",
      "parents": [
        "e70a1410098cff046ed3a4a072b7c4efece272ab"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Sun Jan 07 17:53:05 2018 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Sun Jan 07 17:55:42 2018 +0000"
      },
      "message": "Lowercase aliased organizations\n\nThis avoid duplications of organizations, in particular when the same organization\ncomes from the aliases file and from the email.\n\nChange-Id: I163ee9ecac7ff2a01774408e9585032ea2ee31f9\n"
    },
    {
      "commit": "e70a1410098cff046ed3a4a072b7c4efece272ab",
      "tree": "c3504c7ac5f2759d6753448b6f17e2f857f4a0d6",
      "parents": [
        "e84e401dce8f885e997efd0fd1b85f36a215dcc9"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jan 05 10:58:05 2018 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jan 05 10:58:05 2018 +0000"
      },
      "message": "Adjust README.md to the project new home\n\nChange-Id: Ie9e77ae055a936d52c867b3b3478fd83c77b02ed\n"
    },
    {
      "commit": "e84e401dce8f885e997efd0fd1b85f36a215dcc9",
      "tree": "7022eb1264b5db855e6df591d6af774c99f394cb",
      "parents": [
        "146985106891ed76fce533d3233547df43a8ede9"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Sat Dec 30 12:50:43 2017 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jan 05 10:49:00 2018 +0000"
      },
      "message": "Keep both id and project name when parsing JSON\n\nBoth the project \u0027id\u0027 and \u0027name\u0027 are necessary.\nThe former is used to build the contributors url API,\nthe latter for display purposes.\n\nChange-Id: Iabc9286ebe37276402dedb128d743eff0511c644"
    },
    {
      "commit": "146985106891ed76fce533d3233547df43a8ede9",
      "tree": "608989ecf207794e81d3c9fafb65c45a26a6e442",
      "parents": [
        "0e3c15d649b005aa818b21c8321c1b54189a8d2f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Sat Dec 30 00:31:37 2017 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jan 05 08:42:54 2018 +0000"
      },
      "message": "Remove TLD from organisation extracted from email\n\nKeeping the Top-Level domain in the organisation might lead to\na wrong organisation aggregation.\n\nFor example both smith@company.com and smith@company.co.uk should\nhave \u0027company\u0027 as organisation.\n\nChange-Id: Icb9c0bfe928dfcbf02d79d30fd9e2fbd54975159"
    },
    {
      "commit": "0e3c15d649b005aa818b21c8321c1b54189a8d2f",
      "tree": "29aecfb37901ee937da5750a0c62a71b84e02512",
      "parents": [
        "6e452b8431788f26062d337438060c416541ec2d"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 29 16:26:33 2017 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 29 16:26:33 2017 +0000"
      },
      "message": "Make last_commit_date a time field\n\nThis way it will be possible to interactively select time ranges\nin the Kibana graphs\n\nChange-Id: Iaaf0d2f2f6047d433b032628efbf96f30e7c46c8\n"
    },
    {
      "commit": "6e452b8431788f26062d337438060c416541ec2d",
      "tree": "8cc2a2ab6cd33ba5b94b8c25ce75b07be7acccc2",
      "parents": [
        "9a41dcfd9dcd8828603861a533a9d254049200a9"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 29 00:35:01 2017 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 29 09:42:01 2017 +0000"
      },
      "message": "Use id from Gerrit response as project identifier\n\nThe \u0027id\u0027 in the Gerrit JSON response is a better identifier\nfor the projects. Furthermore it is already URL encoded compared\nto the \u0027key\u0027 value.\n\nChange-Id: If518d4ffec303664cf863f4655c3bc2feae279bf\n"
    },
    {
      "commit": "9a41dcfd9dcd8828603861a533a9d254049200a9",
      "tree": "d564ca00f7d07ee5641acd2458f508f1a0a40b4f",
      "parents": [
        "956fa920303cd0729ce4c5ed4c016c1c1c80874b"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Dec 27 12:18:08 2017 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Dec 27 14:38:09 2017 +0100"
      },
      "message": "Disable ES authorization\n\nAuthorization not needed for dev purposes.\nX-Pack can easily be restored by setting the *xpack.security.enabled* to true if needed\n\nChange-Id: Id6d5993d560a8ef57ccf886af39e3d35b89c97b0\n"
    },
    {
      "commit": "956fa920303cd0729ce4c5ed4c016c1c1c80874b",
      "tree": "79e51a3ef397a6fa507302ae9989377b8a4f8457",
      "parents": [
        "c5618617714001cab0077b1ddeb8fa98f881354f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Dec 19 11:28:44 2017 +0100"
      },
      "committer": {
        "name": "ponch78",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 22 10:04:25 2017 -0500"
      },
      "message": "Projects overview dashboard\n\nIt includes the following visualization:\n* overall statistic gauge\n* commits per day\n* commits per author\n* commits per organization\n* authors stats table\n* organizations stats table\n* projects stats table\n* authors activities heatmap\n\nChange-Id: I7909a4164c457465d19b2fcd35280e43ddb14452\n"
    },
    {
      "commit": "c5618617714001cab0077b1ddeb8fa98f881354f",
      "tree": "b729d9238ab5a97581ef36b705e62f3165147e64",
      "parents": [
        "a7535f95d843fcf17458d85144fdecf37edad944"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Dec 20 14:27:39 2017 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Dec 22 15:34:12 2017 +0100"
      },
      "message": "Allow filtering by projects prefix\n\nLimit the results to those projects that start with the specified prefix.\nSee Gerrit REST API:\nhttps://gerrit-review.googlesource.com/Documentation/rest-api-projects.html\n\nChange-Id: Ib00fa6c15b7e30b0dd0ca3ed68b4eb4a5e110363\n"
    },
    {
      "commit": "a7535f95d843fcf17458d85144fdecf37edad944",
      "tree": "4e50914ebccfeaf29879b6a892aebef40ce437a0",
      "parents": [
        "6a3a96f54615ee505090c3ef772a5f9bd511faf3"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Dec 14 12:19:31 2017 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Dec 18 10:55:51 2017 +0100"
      },
      "message": "Add organization information\n\nUse organization value specified in CSV file or extract it\nfrom email as previously implemented.\n\nChange-Id: I890fdbad48c9086c03c980d98742a7236776f3c5\n"
    },
    {
      "commit": "6a3a96f54615ee505090c3ef772a5f9bd511faf3",
      "tree": "6eea4fb6347991d00e5ebfc7d46872c31db891bf",
      "parents": [
        "243eb5c48719b3409b784d42e17f0c05416c833f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Dec 13 10:36:57 2017 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Dec 14 19:54:46 2017 +0100"
      },
      "message": "Input aliases from CSV instead of JSON\n\nCSVs can be easily generated with simple git commands.\nFurthermore the code is simplified compared to the JSON version.\n\nChange-Id: I4332497407df40ce1e68f0de304fad45ad5f6b8e\n"
    },
    {
      "commit": "243eb5c48719b3409b784d42e17f0c05416c833f",
      "tree": "32bf30c290a8e8a833665a268613adde75ae7d0f",
      "parents": [
        "785e93bd7ce571c34d8465d1e0466e18132a9117"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Dec 06 13:04:14 2017 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Dec 14 14:20:04 2017 +0100"
      },
      "message": "Automatically import Kibana dashboards\n\nFacilitate the spin up of the environment by importing the\nKibana dashboard and creating the empty gerrit elasticsearch index\n\nChange-Id: I921c9c469d740d79a3f75bd54e7221bfd81c694b\n"
    },
    {
      "commit": "785e93bd7ce571c34d8465d1e0466e18132a9117",
      "tree": "cd2d403a140a48a123e7a1dfd980e8d5eb77f5ec",
      "parents": [
        "b9d74bdb9117d764f2bde9912924d6eda1595b64"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Dec 04 09:40:53 2017 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Dec 11 13:33:04 2017 +0000"
      },
      "message": "Allow authors to have multiple emails\n\nAuthors can have multiple emails, but it is useful to group together\nall the commits coming from the same author.\n\nThis change allow the mapping of different emails to the same autor.\n\nThe \"name\" field has been dropped in favour of \"author\".\nauthor \u003d \"author\" from alias file || \"name\" from user activity\n\nChange-Id: I7ee6900f40b51ee9f6785676bc0fc169a7e56a29\n"
    },
    {
      "commit": "b9d74bdb9117d764f2bde9912924d6eda1595b64",
      "tree": "fa2f9efb765bb3aa15398c39e9590f71b6757df1",
      "parents": [
        "91c551dcaf0f93aacd1b3da96e64939e076322fa"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Nov 09 16:53:17 2017 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca@milanesio.org",
        "time": "Tue Dec 05 06:12:31 2017 -0500"
      },
      "message": "Local ES and Kibana for development\n\nIt can be handy having a local Kibana and Elastisearch running while developing the Spark ETL\n\nChange-Id: I7ceb54b4bd2ef8223dd4fd0f6565b33ef787a19e\n"
    },
    {
      "commit": "91c551dcaf0f93aacd1b3da96e64939e076322fa",
      "tree": "10dec1491cc53ed0fff95b18dca38c126df988e1",
      "parents": [
        "15e1cd4ff29dee746c3a99082cf3309d3a38c4c1"
      ],
      "author": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Fri Nov 03 10:24:12 2017 +0100"
      },
      "committer": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Sat Dec 02 13:03:56 2017 +0100"
      },
      "message": "Refactoring using DataFrames.\n\nGeneral refactoring making use of DataFrame instead of complex json4s\ncomputations.\nDataFrames allow to specify a better and more readable semantics while\ntransforming data.\n\nChange-Id: Idee33f08bba110f76e68124e3264f6c5203d8534\n"
    },
    {
      "commit": "15e1cd4ff29dee746c3a99082cf3309d3a38c4c1",
      "tree": "f27a6d316633cff95eb59ec5aea8e833afcf154d",
      "parents": [
        "b143ea175c6e0b4120b23971a1bac2b214ede83e"
      ],
      "author": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Fri Nov 03 10:05:08 2017 +0100"
      },
      "committer": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Sat Dec 02 12:28:02 2017 +0100"
      },
      "message": "Added copyright licenses heading where missing.\n\nChange-Id: I75399ef1931dd254c7f52ffe65f67f69fa6532e7\n"
    },
    {
      "commit": "b143ea175c6e0b4120b23971a1bac2b214ede83e",
      "tree": "5532e08b814a2fbd55e5b99ff54dd032bbf00ea0",
      "parents": [
        "7c0363ff8d810a7108c2287aed51cedcb638d1b5"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Nov 08 15:00:28 2017 +0000"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Nov 08 15:00:28 2017 +0000"
      },
      "message": "Ignore MacOS DS Store\n\nChange-Id: I2396004d839bc7465e56493a9edee0d1256c8cf3\n"
    },
    {
      "commit": "7c0363ff8d810a7108c2287aed51cedcb638d1b5",
      "tree": "2624fce9eb14f8e6893fb32015b9010707d2bdc4",
      "parents": [
        "099ab16e888090f5b53abea2ac15a57f57cfcd65"
      ],
      "author": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Sun Aug 27 22:33:56 2017 +0200"
      },
      "committer": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Sat Sep 30 16:18:05 2017 +0100"
      },
      "message": "Extract organization field to ElasticSearch.\n\nObtained by the @domain part of committer email.\n\nChange-Id: Ib5b3b9996ec78780007cd6f95a47e2dccd570364\n"
    },
    {
      "commit": "099ab16e888090f5b53abea2ac15a57f57cfcd65",
      "tree": "e10d09e93b248c9ea97eaf38e7dc1b93c6259b29",
      "parents": [
        "09e93ac90638bfff1345372854f0149b59b00157"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Aug 27 05:10:35 2017 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Aug 27 05:10:38 2017 -0700"
      },
      "message": "Don\u0027t run Spark tests in parallel\n\nSpark uses a global context that is shared across threads.\nIf we run all the tests in parallel we risk to shutdown the\ncontext from one thread whilst is still used by the others.\n\nChange-Id: I7e536ae6058077334b37cab4a3dfdf224bc65a65\n"
    },
    {
      "commit": "09e93ac90638bfff1345372854f0149b59b00157",
      "tree": "f2c608630454b49e6a87acf4b14514d5e383e664",
      "parents": [
        "f46d447e41463f39f5eebe61023a4365f24f232f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Aug 27 05:10:08 2017 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Aug 27 05:10:08 2017 -0700"
      },
      "message": "Removed unused Jodatime dependency\n\nChange-Id: I69a443a1ce8e1813fd9ac547d3319c88301bf28e\n"
    },
    {
      "commit": "f46d447e41463f39f5eebe61023a4365f24f232f",
      "tree": "06131a19bc521dc35d715445fc5eada7650e9ea6",
      "parents": [
        "ace479793204d35591ab4d0fd6874f5611395b7c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Aug 26 11:23:15 2017 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Aug 26 11:25:57 2017 -0700"
      },
      "message": "More meaningful example in README.md\n\nInclue a more real-life example using spark-submit,\nincluding the ES credentials and a more real-life Gerrit URL\n\nChange-Id: I6366152203c24bd3cc42a9081dcfb30297fa578f\n"
    },
    {
      "commit": "ace479793204d35591ab4d0fd6874f5611395b7c",
      "tree": "5fc7c9a9af77a31790ef733f4e0b15c8143dd090",
      "parents": [
        "6f2828acd9fb14e82210d0bc296b37fc3161563f"
      ],
      "author": {
        "name": "Claudio Pacchiega",
        "email": "claudio.pacchiega@gmail.com",
        "time": "Mon Aug 21 17:15:29 2017 +0200"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Aug 26 11:11:22 2017 -0700"
      },
      "message": "Gerrit analytics ETL job.\n\nExtracts committers data using analytics plugin and insert in Elastic\nSearch.\nAccept parameters\n--since --until --aggregate like gerrit analytics plugin\nAdditionally understands\n--url to access a gerrit repo\n[--out] to specify an intermediate output folder (possibly for debug)\nfor generated RDD\n[--elasticIndex] to specify index/type to use\n\nChange-Id: I62440b3cb4f2f3f3b2346eda9f62d81188264d8e"
    },
    {
      "commit": "6f2828acd9fb14e82210d0bc296b37fc3161563f",
      "tree": "44f85290c8bcc81043ea9fc628e7afa5b6e9c4f6",
      "parents": [],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Aug 21 16:09:36 2017 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Aug 21 16:09:36 2017 +0100"
      },
      "message": "Initial commit"
    }
  ]
}
