ARA OFFSHORE STORAGE TRACKER

Automated AIS Tanker Ingestion & Volume Estimation
SYSTEM TYPE:AIS Floating Storage Pipeline
OPERATIONAL STATE:Active / Unattended Batch Process
TARGET REGION:Rotterdam / ARA (Amsterdam-Rotterdam-Antwerp)
MONITORED ZONES:2 Distinct Polygon Boundaries (Anchorage + Terminal)
DATA SOURCE:Public AIS Broadcast Stream
CORE LANGUAGE:Python 3.12 (asyncio)
DATABASE:PostgreSQL
HOST SERVER:Oracle Cloud VPS (Marseille Instance)

ARA Offshore Storage Tracker is an autonomous AIS tracking engine designed to compute crude oil floating storage volume buildup in the Rotterdam/ARA maritime hub. The pipeline continuously streams raw vessel signals, classifies positions into geographic geofences, and outputs weekly volumetric ranges.

Rather than showing exact figures, outputs are rendered as probabilistic intervals estimated from draught variances and berth duration.

Raw positioning data passes through four serial verification filters:

[FILTER 01]Type Code Guard: Restricts tracking strictly to confirmed crude carriers (AIS 80–89).
[FILTER 02]Draught Ratio: Measures real time depth against historic hull capacities to classify laden status.
[FILTER 03]Dwell Boundary: Enforces a 15 day minimum anchorage stay to eliminate normal queuing noise.
[FILTER 04]Congestion Suppression: Temporarily suspends flags during regional traffic buildup.

Raw data log entries generated by the pipeline execution loop:

2026-07-20 [NO DATA]    Storage: —    Events: —    (Initialization run. Internal test metrics purged.)
2026-07-27 [NO DATA]    Storage: —    Events: —    (Vessel type filter missing. Non-tanker records discarded.)
2026-08-03 [NO DATA]    Storage: —    Events: —    (No data received. Upstream stream outage.)
2026-08-10 [NO DATA]    Storage: —    Events: —    (Upstream stream outage confirmed. Reconnect loop idling.)
2026-08-17 [NO DATA]    Storage: —    Events: —    (Outage resolved mid-week, partial coverage only.)
2026-08-24 [DIRECTIONAL]    Storage: 0 t    Events: 28    (Est. 1,275,936–1,913,903 t unloaded.)
2026-08-31 [DIRECTIONAL]    Storage: 0 t    Events: 17    (Est. 789,313–1,183,971 t unloaded.)
2026-09-07 [DIRECTIONAL]    Storage: 0 t    Events: 37    (Est. 1,871,272–2,806,907 t unloaded.)
2026-09-14 [DIRECTIONAL]    Storage: 0 t    Events: 35    (Est. 1,852,414–2,778,620 t unloaded.)
2026-09-21 [DIRECTIONAL]    Storage: 0 t    Events: 34    (Est. 1,445,055–2,167,581 t unloaded.)
2026-09-28 [DIRECTIONAL]    Storage: 0 t    Events: 36    (Est. 1,486,506–2,229,757 t unloaded.)
INCIDENT #01: Unhandled Upstream Disconnect (HTTP 503)

The ingestion daemon crashed when the provider rejected initial handshake requests. FIX: Wrapped connection logic in exponential backoff loop with self healing PostgreSQL reconnection.

INCIDENT #02: False Positive Bulk Carrier Signal

A Capesize dry bulk vessel in the terminal zone was misclassified as an oil tanker due to spatial overlap. FIX: Implemented hard vessel type validation checks.

INCIDENT #03: Nightly Job Killed by Memory Exhaustion

The nightly processing job was killed by the Linux out-of-memory killer on the 1 GB server, which left the weekly rollups stale and re-published an old week. FIX: Moved stay detection into the database query and added a 2 GB swap file.

INCIDENT #04: Small Tankers Misclassified as Ballast

Tankers under 150 m were measured against a much larger ship's draught limits and permanently labeled ballast. FIX: Vessels outside the known size classes now return "unknown" instead of a guessed class.