Skip to content

Commit 9ae773d

Browse files
committed
Update readme to include up to date information
1 parent a9b25c5 commit 9ae773d

File tree

2 files changed

+5
-240
lines changed

2 files changed

+5
-240
lines changed

LICENSE.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
Copyright 2019 Open Observatory of Network Interference (OONI), The Tor Project
1+
Copyright 2020-2024 Open Observatory of Network Interference (OONI)
2+
Copyright 2012-2019 Open Observatory of Network Interference (OONI), The Tor Project
23

34
Redistribution and use in source and binary forms, with or without
45
modification, are permitted provided that the following conditions are met:

README.md

+3-239
Original file line numberDiff line numberDiff line change
@@ -1,242 +1,6 @@
11
# OONI backend
22

3-
Welcome. This document describes the architecture of the main components of the
4-
OONI infrastructure.
3+
Welcome to the OONI backend.
54

6-
The documentation is meant for core contributors, external contributors and researcher
7-
that want to extract data or reuse software components in their own projects.
8-
9-
This file is [rendered here](https://ooni.github.io/pipeline/README.html)
10-
11-
You can also explore the [documentation tree](https://ooni.github.io/pipeline/)
12-
13-
## Table of contents
14-
15-
[TOC]
16-
17-
## Architecture
18-
19-
The backend infrastructure provides multiple functions:
20-
21-
* Provide APIs for data consumers
22-
* Instruct probes on what measurements to perform
23-
* Receive measurements from probes, process them and store them in the database and on S3
24-
25-
## Data flow
26-
27-
This diagram represent the main flow of measurement data
28-
29-
30-
blockdiag {
31-
Probes [color = "#ffeeee"];
32-
Explorer [color = "#eeeeff"];
33-
"S3 jsonl" [shape = ellipse];
34-
"S3 postcan" [shape = ellipse];
35-
"DB jsonl tbl" [shape = ellipse];
36-
"DB fastpath tbl" [shape = ellipse];
37-
"disk queue" [shape = ellipse];
38-
39-
Probes -> "API: Probe services" -> "Fastpath" -> "DB fastpath tbl" -> "API: Measurements" -> "Explorer";
40-
"API: Probe services" -> "disk queue" -> "API: uploader" -> "S3 jsonl" -> "API: Measurements";
41-
"API: uploader" -> "S3 postcan";
42-
"API: uploader" -> "DB jsonl tbl";
43-
"DB jsonl tbl" -> "API: Measurements"
44-
}
45-
46-
47-
Each measurement is processed individually in real time.
48-
49-
50-
## Components: API
51-
52-
The API entry points are documented at [apidocs](https://api.ooni.io/apidocs/)
53-
54-
### Measurements
55-
56-
Provide access to measurements to end users directly and through Explorer.
57-
58-
Mounted under /api/v1/measurement/
59-
60-
The API is versioned. Access is rate limited based on source IP address and access tokens
61-
due to the computational cost of running heavy queries on the database.
62-
63-
[Sources](https://github.com/ooni/api/blob/master/newapi/ooniapi/probe_services.py)
64-
65-
### Probe services
66-
67-
Serves lists of collectors and test helpers to the probes and receive measurements from them.
68-
69-
Mounted under /api/v1/
70-
71-
[Sources](https://github.com/ooni/api/blob/master/newapi/ooniapi/probe_services.py)
72-
73-
### Private entry points
74-
75-
Not for public consumption. Mounted under `/api/_` and used exclusively by Explorer
76-
77-
[Sources](https://github.com/ooni/api/blob/master/newapi/ooniapi/private.py)
78-
79-
## Fastpath
80-
81-
[Documentation](af/fastpath/fastpath/core.html)
82-
83-
## Database
84-
85-
## Operations
86-
87-
### Build, deploy, rollback
88-
89-
Host deployments are done with the [sysadmin repo](https://github.com/ooni/sysadmin)
90-
91-
For component updates a deployment pipeline is used:
92-
93-
Look at the [Status dashboard](https://github.com/ooni/backend/wiki/Backend) - be aware of badge image caching
94-
95-
Use the deploy tool:
96-
97-
```bash
98-
# Update all badges:
99-
dep refresh_badges
100-
101-
# Show status
102-
dep
103-
104-
# Deploy/rollback a given version on the "test" stage
105-
deploy ooni-api test 0.6~pr194-147
106-
107-
# Deploy latest build on the first stage
108-
deploy ooni-api
109-
110-
# Deploy latest build on a given stage
111-
deploy ooni-api prod
112-
113-
```
114-
115-
### Adding new tests
116-
117-
Update [database_upgrade_schema](https://github.com/ooni/pipeline/blob/master/af/fastpath/database_upgrade_schema.py)
118-
119-
```
120-
ALTER TYPE ootest ADD VALUE '<test_name>';
121-
```
122-
123-
Update [fastpath](https://github.com/ooni/pipeline/blob/master/af/fastpath/fastpath/core.py)
124-
by adding a new test to the `score_measurement` function and adding relevant
125-
integration tests.
126-
127-
Create a [Pull Request](https://github.com/ooni/pipeline/compare)
128-
129-
Run fastpath manually from S3 on the testing stage see: [rerun fastpath manually](#rerun-fastpath-manually)
130-
131-
Update the [api](https://github.com/ooni/api/blob/master/newapi/ooniapi/measurements.py#L491)
132-
133-
### Adding new fingerprints
134-
135-
TODO
136-
137-
### API runbook
138-
139-
Monitor the [API](https://mon.ooni.nu/grafana/d/CkdDBscGz/ams-pg-api?orgId=1) and
140-
[fastpath](https://mon.ooni.nu/grafana/d/75nnWVpMz/fastpath-ams-pg?orgId=1) dashboards.
141-
142-
Follow Nginx or API logs with:
143-
```bash
144-
sudo journalctl -f -u nginx --no-hostname
145-
# The API logs contain SQL queries, exceptions etc
146-
sudo journalctl -f --identifier gunicorn3 --no-hostname
147-
```
148-
149-
### Fastpath runbook
150-
151-
#### Manual deployment
152-
153-
```bash
154-
ssh <host>
155-
sudo apt-get update
156-
apt-cache show fastpath | grep Ver | head -n5
157-
sudo apt-get install fastpath
158-
```
159-
160-
#### Restart
161-
`sudo systemctl restart fastpath`
162-
163-
#### Rerun fastpath manually
164-
165-
Run as fastpath user:
166-
167-
```bash
168-
ssh <host>
169-
sudo sudo -u fastpath /bin/bash
170-
cd
171-
```
172-
173-
```bash
174-
fastpath --help
175-
# rerun without overwriting files on disk nor writing to database:
176-
fastpath --start-day 2016-05-13 --end-day 2016-05-14 --stdout --no-write-msmt --no-write-to-db
177-
# rerun without overwriting files on disk:
178-
fastpath --start-day 2016-05-13 --end-day 2016-05-14 --stdout --no-write-msmt
179-
# rerun and overwrite:
180-
fastpath --start-day 2016-05-13 --end-day 2016-05-14 --stdout --update
181-
```
182-
183-
The fastpath will pull cans from S3.
184-
The daemon (doing real-time processing) can keep running in the meantime.
185-
186-
[Progress chart](https://mon.ooni.nu/prometheus/new/graph?g0.expr=netdata_statsd_gauge_fastpath_s3feeder_s3_download_percentage_value_average%7Bdimension%3D%22gauge%22%7D&g0.tab=0&g0.stacked=1&g0.range_input=2h&g1.expr=netdata_statsd_gauge_fastpath_load_s3_reports_remaining_files_value_average%7Bdimension%3D%22gauge%22%7D&g1.tab=0&g1.stacked=1&g1.range_input=1h)
187-
#### Log monitoring
188-
189-
```bash
190-
sudo journalctl -f -u fastpath
191-
```
192-
193-
#### Monitoring dashboard
194-
195-
[https://mon.ooni.nu/grafana/d/75nnWVpMz/fastpath-ams-pg?orgId=1&refresh=5m&from=now-7d&to=now](https://mon.ooni.nu/grafana/d/75nnWVpMz/fastpath-ams-pg?orgId=1&refresh=5m&from=now-7d&to=now)
196-
197-
### Analysis runbook
198-
199-
The Analysis tool runs a number of systemd timers to monitor the slow query summary and more.
200-
See https://github.com/ooni/pipeline/blob/master/af/analysis/analysis/analysis.py
201-
202-
#### Manual deployment
203-
204-
```
205-
ssh <host>
206-
sudo apt-get update
207-
apt-cache show analysis | grep Ver | head -n5
208-
sudo apt-get install analysis=<version>
209-
```
210-
211-
#### Run manually
212-
```
213-
sudo systemctl restart ooni-update-counters.service
214-
```
215-
216-
#### Log monitoring
217-
218-
```
219-
sudo journalctl -f --identifier analysis
220-
```
221-
222-
#### Monitoring dashboard
223-
224-
[https://mon.ooni.nu/grafana/d/75nnWVpMz/fastpath-ams-pg?orgId=1&refresh=5m&from=now-7d&to=now](https://mon.ooni.nu/grafana/d/75nnWVpMz/fastpath-ams-pg?orgId=1&refresh=5m&from=now-7d&to=now)
225-
226-
### Deploy new host
227-
228-
Deploy host from https://cloud.digitalocean.com/projects/
229-
230-
Create DNS "A" record `<name>.ooni.org` at https://ap.www.namecheap.com/
231-
232-
On the sysadmin repo, ansible directory, add the host to the inventory
233-
234-
Run the deploy with the root SSH user
235-
```
236-
./play deploy-<foo>.yml -l <name>.ooni.org --diff -u root
237-
```
238-
239-
Update prometheus
240-
```
241-
./play deploy-prometheus.yml -t prometheus-conf --diff
242-
```
5+
For up to date documentation about the backend, see:
6+
https://docs.ooni.org/backend

0 commit comments

Comments
 (0)