A dashboard with SortingHat

The simple dashboard we just produced uses indexes which do not benefit from SortingHat, because it was not used to produce them. SortingHat is the GrimoireLab component that manages identities, allowing for merging of identities, definition of profiles for each person, and of periods of affiliation (when people worked for which organization).

SortingHat uses a MySQL-like database (MySQL or MariaDB, for example). Therefore, we will need to prepare the database we’re going to use. Then, we will generate the indexes for the dashboard, but this time specifying the SortingHat database to use. That way, p2o.py, while generating the indexes, will inform SortingHat about new identities, and will get information about profiles, merged identities, etc, from it.

Of course, when running p2o.py for the first time on an empty SortingHat database, no merged identities or affiliations, and only default profiles will be available. So, we will need to do some stuff after getting the first version of the indexes, until we have the full power of SortingHat shown in our dashboard.

Let’s go one step after the other…

Initializing SortingHat

Before you can use SortingHat, you need to initialize a database for it. Usually, each dashboard will have its own SortingHat database, although several dashboards can share the same. Initializing the database means creating the SQL schema for it, initializing its tables, and not much more. But you don’t need to know about the details: SortingHat will take care of that for you. Just run sortinghat init with the appropriate options:

sortinghat -u user -p XXX  init shdb

In this case, user is a user of the MySQL instance with permissions to create a new MySQL schema (database), XXX is the password for that user, and shdb is the name of the database to be created.

If the command didn’t throw any error message, you’re done: a new shdb database was created. If you want, you can check it with a simple mysql command:

mysql -u user -pXXX -e 'SHOW DATABASES;'

You should see shdb in the list of databases.

If for any reason you want to delete the database at some point, just run the appropriate mysql command:

mysql -u user -pXXX -e 'DROP DATABASE shdb;'

Now, with our shiny new database ready, you can create indexes with SortingHat support.

Creating indexes

For creating the indexes, we run p2o.py the same way we have done before, but now specifying the SortingHat database to use. That will automatically trigger SortingHat to do its work. Of course, you need ElasticSearch (and Kibana or Kibitter, see below) running, but that can be done exactly the way we did for the simple dashboard.

For example, for producing the index for the git repository for Perceval, run:

p2o.py --enrich --index git_raw --index-enrich git \
  -e http://localhost:9200 --no_inc --debug \
  --db-host localhost --db-sortinghat shdb --db-user user --db-password XXX \
  git https://github.com/grimoirelab/perceval.git
2017-09-04 01:14:22,267 Total items enriched 688
2017-09-04 01:14:22,267 Done git
2017-09-04 01:14:22,268 Enrich backend completed
2017-09-04 01:14:22,268 Finished in 0.08 min

That means we have new git_raw and git indexes, but we also have a populated shdb database (assuming we have MySQL running in localhost, that is the machine where the script is run). If you want to check what’s in it, you can again use mysql:

mysql -u user -pXXX -e 'SELECT * FROM identities;' shdb

This will show all the identities found in the Perceval git repository.

Producing a Kibana dashboard

Let’s produce now a Kibana dashboard for our enriched index (git in our ElasticSearch instance). I will start by installing kidash, to upload a JSON description of the dashboard, its visualizations, and everything needed:

pip install kidash

Then, I use the JSON description of a dashboard for Git that includes visualizations for some fields generated from the SortingHat database: git-sortinghat.json.

kidash --elastic_url http://localhost:9200 \
  --import /tmp/git-sortinghat.json

(assuming you downloaded the file to /tmp/git-sortinghat.json)

And I get a dashboard in all its glory: