Google Summer of Code

Here is the ideas page for Google Summer of Code 2020.

We encourage interested students to contact mentors to discuss these ideas or propose new ones. The Moira team would appreciate your contributions.

About Moira

Moira is a realtime alerting system based on Graphite data.

It’s key features are:

  • storage independence
  • simple and advanced trigger syntax
  • tags for triggers and subscriptions
  • extendable notification channels
  • alarm fatigue protection

See overview for more.

Moira is written in Go, the web UI is written in JavaScript.

The source code is licensed under MIT.



Health checks for delivery channels and contacts

Explanation. Moira’s users are able to set up new delivery channels and contacts to be used with those channels. However Moira doesn’t check if the channel configuration is valid and alerts can be actually sent. A user may provide a non-existent Slack user name, block Moira’s bot in Telegram, etc. As a result, such user wouldn’t be able to receive alerts. The bad thing is that sometimes invalid configuration would cause Moira’s bots to be banned for a certain period of time. This effectively means a denial-of-service for alerts which is highly undesirable.

The aim of this project is to implement health checks when delivery channels and contacts are set up. To do so, one should enhance the delivery channel and contact setup flow: send a test alert, verify that it’s received, don’t let to save an invalid configuration otherwise. Certain modifications of the web UI may be required.

Code reference. See contact API source code and subscription API source code.

Required skills. Go skills to add health checks, a bit of JavaScript and React to tune the web UI.

Expected outcome. Health checks are implemented and released.

Mentors. Arkady Borovsky (, Emil Sharifullin (

OpenAPI description of Moira’s API

Explanation. Moira’s web UI is nice and widely used. However, users don’t always want to create triggers, subscriptions, and contacts manually. They would like to be able to automate routine tasks with the tools like Ansible which they already use to bootstrap database and application clusters. For this kind of automation, Moira should have a well-documented API and a number of client libraries for all popular languages. At this point, Moira doesn’t have any API documentation. To use the API, one should study Moira’s source code or an existing client library source code to understand how the API works and reverse-engineer contracts of its methods.

The aim of this project is to provide an always up-to-date documentation of Moira’s API and a few client libraries. To do so, one should create an OpenAPI description of API, generate a number of client libraries for popular programming languages with Swagger tools, and setup a process so the documentation and the clients are updated when a new API version is released.

Code reference. See Moira’s API source code and the Python client library source code.

Required skills. General Go or Python skills. Familiarity with OpenAPI or Swagger would be a plus.

Expected outcome. Moira’s documentation has a link to a human-readable API documentation. Client libraries are released (not required). There’s a process in place to update the documentation and the clients on API changes.

Mentors. Emil Sharifullin (, Alexey Kirpichnikov (

Flow to TypeScript migration

Explanation. Nowadays, Moira’s web UI is written in JavaScript and Flow is used as a type checker. Although we love Flow dearly, TypeScript is adopted widely and has a bigger community. This makes TypeScript a better choice for Moira’s web UI development.

The aim of this project is to migrate Moira’s web UI source code from Flow to TypeScript. To do so, one should analyze the code base, propose a migration strategy, actually rewrite the code, and change the build process if needed.

Code reference. See Moira’s web UI source code.

Required skills. JavaScript and TypeScript skills. Familiarity with Flow would be a plus.

Expected outcome. Moira’s web UI source code is migrated to TypeScript. A new major version of Moira’s web UI is released.

Mentors. Alexey Kirpichnikov (, Nikolay Kudrin (

Noisy trigger analysis tools

Explanation. On-call engineers are badly affected by noisy triggers that generate alerts multiple times a day. Attention to alerts reduces greatly, and chances to miss one important alert grow. One badly configured flapping trigger can affect the entire workflow. Our documentation contains an entire page dedicated to this problem with some tips on mitigation. But we can do more.

The aim of this project is to help Moira users identify noisy triggers. To do so, one should research and define a metric of trigger noisiness, and then create a UI page that demonstrates worst triggers to the user.

Code reference. See Moira’s backend source code and Moira’s web UI source code.

Required skills. Basic Go and JavaScript skills.

Expected outcome. Moira’s web UI allows user to see noisy trigger list, optionally filtered by tags.

Mentors. Alexey Kirpichnikov (, Emil Sharifullin (

Done in previous years


Following projects are no longer available.

Support for additional delivery channels

Done in 2019 by Aswin.

Explanation. Moira supports a number of delivery channels such as email, Slack, Telegram, etc. to inform users that a certain trigger was activated (see Setting Up Your Subscriptions).

The aim of this project is to provide support for a number of additional delivery channels. To do so, one should talk to community and research possible channels to be added, contribute corresponding senders, and tune the web UI to allow users to create subscriptions using new channels.

Code reference. See email sender source code or Pushover sender source code.

Required skills. Go skills to add senders, a bit of JavaScript and React to tune the web UI.

Expected outcome. Some qualitative or quantitative data on channel popularity is collected. Several delivery channels are added to Moira and released.

Mentors. Alexey Kirpichnikov (, Alexander Sushko (