orchestra

module
v0.3.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 21, 2020 License: BSD-3-Clause

README

OONI Orchestra

Build Status Release

The OONI Probe Orchestration System.

This repository contains the various microservices that compose the OONI Probe Orchestration System.

Getting started

We use a simple Makefile. Please, check it out to see how we invoke go in a farily standard way for building and running tests.

To build all the binaries, run:

make orchestra

You should now have inside of ./bin a series of binaries. The ones you care about are:

./bin/ooni-orchestra
./bin/ooni-registry

They both take a config file--you can use orchestrate/ooni-orchestrate.toml.example (or the registry one) as examples, respectively.

To aid local testing you should set up a local postgres instance with a user and a database by running:

CREATE USER proteus WITH PASSWORD 'changeme';
CREATE DATABASE proteus;
GRANT ALL PRIVILEGES ON DATABASE proteus to proteus;

You should then change the config line in the database section for the key url to something like:

[database]
url = "postgres://proteus:changeme@127.0.0.1:32768/proteus?sslmode=disable"

For both orchestrate/ooni-orchestrate.toml and registry/ooni-registry.toml.

You should then be able to start the services by running:

./bin/ooni-orchestrate --config orchestrate/ooni-orchestrate.toml start

Components

registry

Is responsible for registering probes and keeping tabs on what their related metadata is.

frontend

Is the frontend to:

  • Setup schedules

  • View active schedules

  • View active probes

orchestrate

Is responsible for receiving events via the admin interface and triggering notifications via gorush.

Can also be used to view the event history.

Building and releasing

  • Make sure the GOPATH environment variable is set. (For reference, the setup of sbs is export GOPATH=$HOME with repositories in $HOME/src/; e.g. this repository is $HOME/src/github.com/ooni/orchestra).

  • Of course, you also need to have golang installed.

  • To build for development, run make orchestra.

  • To create a release, run make release.

Checklist before tagging a release:

  • Make sure you have updated the changelog

  • Make sure you bumped the version number in:

    • Makefile

    • common/orchestra_info.go

  • Make sure all unittests are passing (make check)

Notifications specification

A client needs to register to the proteus-registry service.

The canonical address for it shall be https://registry.XXX.YYY.ZZZ/. We also support the cloudfronted domain as following.

Registration

Upon first running the app the client needs to registry with the notification service.

Once a client is registered they can update the various metadata related to the probe by means of an update request (detailed in the following section).

To register a probe a the following HTTPS request is issued:

Method: POST Path: /api/v1/register Body:

{
  "probe_cc": "IT",
  "probe_asn": "AS0",
  "platform": "android",
  "software_name": "ooniprobe-android",
  "software_version": "0.1.1",
  "software_language": "IT",
  "supported_tests": ["tcp_connect", "web_connectivity"],
  "network_type": "wifi",
  "available_bandwidth": "100",
  "token": "TOKEN_ID"
}

In particular the token field represents the Device Token.

The registration service will return a client_id to be used to update the Device Token as well as other metadata.

The response looks like this:

{"client_id": "XXX-YYY-ZZZ-TTT"}
Update metadata

In order do update the metadata you to issue the following request:

Method: PUT Path: /api/v1/update/$CLIENT_ID Body:

{
  "probe_cc": "IT",
  "probe_asn": "AS0",
  "platform": "android",
  "software_name": "ooniprobe-android",
  "software_version": "0.1.1",
  "supported_tests": ["tcp_connect", "web_connectivity"],
  "network_type": "wifi",
  "available_bandwidth": "100",
  "token": "NEW_TOKEN_ID"
}

The server will respond with:

{"status": "ok"}

in case of an error:

{"error": "ERROR_MESSAGE"}
Notifications

A notification includes in the payload of the silent notification a pingback URL that the client needs to connect to in order to receive the task that it need to run to perform the actual measurement.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL