bbox-server

Crates.iobbox-server
lib.rsbbox-server
version0.6.1
sourcesrc
created_at2024-08-08 08:37:36.111151
updated_at2024-08-23 21:51:39.233386
descriptionBBOX OGC API Services
homepagehttps://www.bbox.earth
repositoryhttps://github.com/bbox-services/bbox
max_upload_size
id1329284
size164,704
Pirmin Kalberer (pka)

documentation

README

BBOX server

BBOX spatial services with QWC2 map viewer.

Usage

cargo run

x-www-browser http://127.0.0.1:8080/

Built-in Swagger UI:

http://localhost:8080/openapi/

View API in external Swagger editor:

https://editor.swagger.io/?url=http://localhost:8080/api

Configuration

Configuration is read from bbox.toml and environment variables.

Webserver

[webserver]
# Web server settings
# Environment variable prefix: BBOX_WEBSERVER__
# server_addr = "127.0.0.1:8080"  # Default: 127.0.0.1:8080
# worker_threads = 4  # Default: number of CPU cores

[[assets.static]] 
# Static file serving
# Env var example: BBOX_ASSETS__STATIC='[{dir="assets",path="assets"}]'
# ./assets/* -> http://localhost:8080/assets/
# dir = "./assets"
# path = "/assets"

[[assets.repo]]
# QGIS plugin repository
# Env var example: BBOX_ASSETS__REPO='[{dir="plugins",path="qgis"}]'
# ./plugins/*.zip -> http://localhost:8080/qgis/plugins.xml
# dir = "./plugins"
# path = "qgis"

[mapserver]
# Map server settings
# Environment variable prefix: BBOX_MAPSERVER__
path = "/wms"                # Base path of WMS endpoints
# num_fcgi_processes = 4     # Default: number of CPU cores
# fcgi_client_pool_size = 1  # FCGI client pool size. Default: 1
search_projects = false      # Scan directories and build inventory

[mapserver.qgis]
# QGIS Server settings
# Environment variable prefix: BBOX_MAPSERVER__QGIS_BACKEND__
# project_basedir = "."      # Base dir for project files (.qgs, .qgz)

[mapserver.umn]
# UMN MapServer settings
# Environment variable prefix: BBOX_MAPSERVER__UMN_BACKEND__
# project_basedir = "."      # Base dir for project files (.map)

[mapserver.mock]
# Enable FCGI mockup backend (for testing)
# Environment variable prefix: BBOX_MAPSERVER__MOCK_BACKEND__

[metrics.prometheus]
# Prometheus metrics endpoint
# Environment variable prefix: BBOX_METRICS__PROMETHEUS__
path = "/metrics"

[metrics.jaeger] 
# Jaeger tracing
# Environment variable prefix: BBOX_METRICS__JAEGER__
agent_endpoint = "localhost:6831"

Instrumentation

Prometheus

https://prometheus.io/

Run Prometheus:

docker run --rm -p 127.0.0.1:9090:9090 -v $PWD/instrumentation/prometheus.yml:/etc/prometheus/prometheus.yml:ro prom/prometheus

Test expression browser:

x-www-browser http://localhost:9090/

Expression example:

http_requests_duration_bucket

Jaeger tracing

Run jaeger in background:

docker run --rm -d -p 6831:6831/udp -p 6832:6832/udp -p 16686:16686 jaegertracing/all-in-one:latest

View spans:

x-www-browser http://localhost:16686/

Grafana

https://grafana.com/docs/grafana/

Run Grafana:

docker run -rm -p 127.0.0.1:3000:3000 grafana/grafana

Open Grafana:

x-www-browser http://localhost:3000/

Average request duration:

rate(http_requests_duration_sum[5m])/rate(http_requests_duration_count[5m])

Request duration 90th percentile

histogram_quantile(0.9, rate(http_requests_duration_bucket[5m]))

https://www.robustperception.io/how-does-a-prometheus-histogram-work

WMS Endpoint:

http_requests_duration_sum{endpoint="/qgis/{project:.+}"}
Commit count: 0

cargo fmt