Skip to main content

NetMetr netmetr-proxy

Helper proxy to sit between netmetr web client and backend. Adds a token/key and calls backend for:

  • Monthly stats approval
  • Uncleaned data download
browser       netmetr-proxy          backend
   |                 |                   |
   |     GET         |     POST          |
   | --- month ----> | --- month-------> |
   |   + year        |   + year          |
   |                 |   + token         |
   |                 |                   |
   | <-- response -- | <-- response ---- |
   |   (zip or json) |                   |
   |                 |                   |

It also adds some input validation, since the backend will happily return empty CSVs for future dates or even a .zip file with plaintext "illegal parameters" content.

Dependencies

  • Python >= 3.6
  • pyaml >= 17
  • flask >= 0.12

Installation

$ virtualenv -p `which python3.6` .venv
$ source .venv/bin/activate
$ pip install netmetr_proxy
$ cp config.example.yml config.yml
$ $EDITOR config.yml # set backend url & access token

Running in production

uWSGI:

$ uwsgi --master --single-interpreter --threads 2 --http :5000 -H .venv -w netmetr_proxy.server

GUnicorn:

$ gunicorn -w 2 -k gevent --timeout 160 -n netmetr-proxy netmetr_proxy:server:app

Usage

Downloading uncleaned open data

GET /opendata
month <int>
year <int>

Returns opendata ZIP for download (NetMetr-opendata-dirty-{year}-{month}.zip).

Monthly stats approval

GET /approve
month <int>
year <int>

Returns:

GET /approve?year=2018&month=3
-> 200
   {"success": true, "message": "Results for 2018-03 were successfully approved."}

if called again:

GET /approve?year=2018&month=3
-> 200
   {"success": true, "message": "Results for 2018-03 were already approved before."}

Error responses

Returns errors from backend wrapped in JSON:

GET /opendata?year=2018&month=1
# invalid key in config results in "ERROR: invalid key!" message
# from backend (with HTTP 200 for some reason…)
-> 403
   {'error': 'invalid key!'}

Returns HTTP 400 and an error message for missing invalid params (bad format or future date):

GET /opendata?year=2018&month=0
-> 400
   {'error': 'Invalid date.'}
GET /opendata?year=0&month=march
-> 400
   {'error': 'Invalid date.'}
GET /approve?year=2018
-> 400
   {'error': 'Missing or invalid parameter (year, month).'}

Returns 404 for any non-existing endpoint:

GET /
-> 404
GET /foo
-> 404

Development

Starting server with auto reload on file changes:

$ FLASK_APP=netmetr_proxy/server.py FLASK_DEBUG=1 flask run

Linting Python code:

$ flake8 --config=.flake8rc *py

License

GPLv3

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netmetr-proxy-0.1.3.tar.gz (19.1 kB view details)

Uploaded Source

File details

Details for the file netmetr-proxy-0.1.3.tar.gz.

File metadata

  • Download URL: netmetr-proxy-0.1.3.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.12

File hashes

Hashes for netmetr-proxy-0.1.3.tar.gz
Algorithm Hash digest
SHA256 091b4810565324ecd00ddaad3d006087c0e6436456326a34d0bfb83364041324
MD5 3b35c8edb26f7a3bcc1a68d563ef78e5
BLAKE2b-256 1c630251071bbafe8b03d34f6a263edf7e9560a381267971712ac9db903050aa

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.3 This release

1 file

0.1.2

1 file

0.1.1

1 file

0.1

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page