Skip to content
Simple ruby script to calculate top contributors (groups and users) for last month
Ruby HTML Dockerfile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Discouse Rankings

If you have a discourse board and are looking to have some fun initiative to give points to users or groups based on contributions, this could be a good starting point! What does this mean?

  • we organize users based on their groups. A user beloning to more than one group will give points to each of his groups.
  • we calculate contributions (for each user, and across groups) for the last month
  • a contribution is a topic post, a reply to an existing one
  • we generate a sorted list of contributions for users and groups
  • data is saved to file (yaml)

That's it! If you want to customize this functionality, feel free to edit the script. See the example plot of the group counts at



Whether you are running locally or via a container, you need to export your DISCOURSE_API_TOKEN and DISCOURSE_API_USER to the environment. The token is expected to be for an admin (with a rate limit of 60/min) so if you are a user with a lower ratelimit, you'll need to also export a key (to be anything) for DISCOURSE_USER_FLAG.

export DISCOURSE_API_USER=myusername

Data Folder

We'll also want to create a folder to save data to, bound to the host.

$ mkdir -p data

Local Usage

First, install required gems:

$ bundle install

And run the script!

$ ruby user-counts.rb

The output folder will have a set of data files, each with a sorted list of users or groups, with contributions from the last month.

├── groups-2019-08-13.yml
├── groups.yml
├── users-2019-08-13.yml
└── users-per-group-2019-08-13.yml


Build Container

First, build the container with dependencies installed. You can run the same steps (see Dockerfile) on your host if you prefer.

$ docker build -t vanessa/discourse-ranking .

Run Container

Next, run the container! Notice how we provide the environment variables, and bind "data" as a volume:

$ docker run -it -e DISCOURSE_API_KEY=${DISCOURSE_API_KEY} -e DISCOURSE_API_USER=${DISCOURSE_API_USER} -v $PWD/data:/code/data vanessa/discourse-ranking

Looking up members by group
Calculating contribution totals for last month...

GROUP: admins

Akin to the local usage, the same data files are written, given that you mounted the data folder.

You can’t perform that action at this time.