GSoC 2017 Final Report

A final report about my contributions to org MovingBlocks during Google Summer of Code 2017

Organization: MovingBlocks
Project: Telemetry in Terasology
Product: Terasology, telemetry server

Terasology's creepy Gooey

Terasology is an open-source sandbox video game. Originally created as a Minecraft-inspired tech demo, it has grown into a powerful engine for voxel-based gameplay. The project was previously focused on architecture and extensibility, but as of early 2016 has released a first Alpha version to be a baseline engine for creating content and building gameplay.

Terasology has a CrashReporter utility that allows users to upload log files and report bugs on the forum or via Github issues. However, the CrashReporter requires a little bit of manual work. Automatic error reporting functionality might help developers find more potential problems. What's more, getting information such as hardware details and system information from users might be helpful to improve player's experience. In March 2017, I wrote a proposal for a telemetry system in Terasology and luckily the project was selected.

Telemetry in Terasology has mainly two goals: to gather players' game-play information and to collect their error logs with system details. Throughout the summer, I worked on both clientside (Terasology codebase) and server-end (the telemetry server) functionality to achieve them. Player consent was a top priority: players are well informed about the telemetry system and they can choose to enable/disablt it, as well as view data being sent to the the Terasology project, at any time.

You can get more information about this project by visiting:

Contribution Summary

Pull Requests in Terasology codebase:

Pull Request Content
  • Telemetry system initialization (package dependencies, etc)
  • Telemetry user's authorisation (user's Config, popup asking for authorisation)
  • Metrics Menu showing all the telemetry field names and values
  • System metric and Module metric
  • Logstash appender enriching error logs and sending them to the server
  • Turning on/off telemetry in Metrics Menu
  • #3016
  • Gameplay metrics including blocks destroyed, blocks replaced, creatures killed, game configuration and distance traveled, etc.
  • The usage of hashed MAC addresses to identify users
  • #3048
  • Various bugfixes
  • #3056
  • Allowing users to send specific fields only
  • #3075
  • A Telemetry API that other modules could use
  • #3083
  • Minor fixes and exclude metric which doesn't have actual data
  • Pull Request in snowplow

    Pull Request Content
  • Fix snowplow java tracker doesn't exit issue
  • Important commit in telemetry

    Commit Content
  • Dockerize telemetry
  • eb92636
  • Uncouple telemetry docker
  • b4b887d
  • Develop Snowplow schema registry system iglu in telemetry docker
  • ae54c05
  • Fix elasticsearch docker break issue
  • c9aafdc
  • Fix server does't return feedback issue
  • 85e54b0
  • Store logs in docker container
  • e9840f6
  • Fix snowplow tools do not start normally issue
  • ba54487
  • Add Logstash json parser to Logstash docker
  • ac2ce75
  • Change string in ELK to no_analyzed so that developer can cluster metrics easily in Kibana
  • Documentation

    Doc Content
    Doc for telemetry
  • Documentations for the telemtry server stacks
  • Tutorial module
  • A tutrial module for using telemetry in Terasology
  • Future Plans and Ideas

    Telemetry has just taken the first step in Terasology, there are still quite a few things to do:

  • Add Telemetry authorization options to TerasologyLauncher
  • Continue to develop server telemetry
  • Store/parse logs from CrashReporter on the telemetry back-end, make them easy to search
  • Mark data that is pending archival/deletion.
  • Add telemetry system to other MovingBlocks games such as DestinationSol
  • Complete documentation of the server as well as the telemetry API in telemetry/wiki and the tutorial module in TelemetryApiTest
  • Finish the follow-up issues listed in the project dashboard

  • Apart from that, I’ll continue to contribute, minor or major, to MovingBlocks.


    I'd like to thank to mentors: Rostyslav Zatserkovnyi, oniatus, Martin Steiger, Tobias Nett! Thanks also to Rasmus Praestholm and Marcel and the community MovingBlocks! Thanks so much for reviewing the code, giving suggestions, giving ideas, etc. I can't do it without your help!!

    I’d also like to thank Google for the wonderful opportunity to work on FOSS!