Backend API & Frontent UI for live departure board for UK Rail.
This repository has been archived on 2023-08-24. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Fred Boniface 5bb467c8fc Increase API Cache time
Signed-off-by: Fred Boniface <fred@fjla.uk>
2023-01-16 09:30:48 +00:00
.test-tools Frontend: Add support for 'No Scheduled Services' 2023-01-14 11:45:41 +00:00
.vscode Update CODIUM workspace settings 2023-01-12 14:46:34 +00:00
nginx-proxy-docker Increase API Cache time 2023-01-16 09:30:48 +00:00
src API: Implement /api/v1/find 2023-01-15 20:54:36 +00:00
static FRONTEND: Add code-find to menu and fix frontend version no. 2023-01-15 21:22:32 +00:00
.dockerignore Refactor docker/k8s features and builds 2023-01-09 23:26:28 +00:00
.gitignore Update .gitignore due to moving the run-test scrpt 2022-12-23 21:34:45 +00:00
app.js API: Implement /api/v1/find 2023-01-15 20:54:36 +00:00
Dockerfile Change Dockerfile order to improve cache hits 2023-01-14 11:48:37 +00:00
LICENSE General Development 2022-11-30 22:08:27 +00:00
package-lock.json Update dependancies 2023-01-11 21:09:13 +00:00
package.json Fix ldb lookup and add sanitization 2023-01-11 21:03:04 +00:00
README.md Remove /test endpoint. Update readme 2022-12-24 10:44:01 +00:00
UpNext.md Work on NRCC Notices 2023-01-12 22:15:38 +00:00

OwlBoard

OwlBoard is both a backend API, and a frontend Arrival/Departure board webapp.

Powered by Node.JS and using the ldbs-json module, the OwlBoard API provides up to date train departure information for any station in the UK.

Whilst the application is open source, the webservice (owlboard.fb-infra.uk) is not openly available. National Rail Enquiries have limits on API access so to use this software yourself, you'll need to run your own instance after obtaining your own API key.

The webservice (owlboard.fb-infra.uk) may contain ads to support the running of the service, if ads are implemented, I intend to avoid 'dubious' advertisers that target and track users.

Currently only the public API is available as I am currently unable to request a key for the staff version.

Requirements:

To run this server you will need:

  • Docker or Kubernetes

WebApp Colours:

  • See CSS Variables

API Endpoints:

  • /api/v1:

    • /list:

      • /stations:

        • GET: Get list of stations
          • Authenticated: No
          • Returns JSON: {"STATION NAME":{"CRS":"code","TIPLOC":"code"}}
      • /corpus:

        • GET: Get full CORPUS Data
          • Authenticated: No
          • Returns JSON in original CORPUS format minus any blank values.
    • /ldb:

      • /{crs}:
        • GET: Get arrival/departure board for {crs}
          • Authenticated: No
          • Returns JSON: Formatted as per ldbs-json module.
    • /gitea:

    • /kube:

      • /alive:

        • GET: Check alive
          • Authenticated: No
          • Returns JSON: {"status":"alive"}
      • /ready:

        • GET: Check ready
          • Authenticated: No
          • Returns JSON: {"state":""} ready or not_ready.

Stack:

  • app.js -> Launches server, Entry Point, defines routers and middlewares.
    • routes -> Routers - Directs requests to controllers.

      • controllers -> Checks auth, sends response. Request doesn't pass further.
        • services -> Provide data and do tasks, uses other services and utils.
    • utils -> Provide utility functions that can be called by services.

    • configs -> Provide configuration details for other files.

    • static -> Holds files for static service, should be hosted behind a caching proxy.

Configuration:

The app is designed to be run within Kubernetes or within a Docker container, as such configuration is provided with environment variables. See the variable name and default options below. If a required configuration is not present the program will exit when that feature is initialised.

VAR DEFAULT REQUIRED PURPOSE
OWL_SRV_PORT 8460 NO Web Server Port
OWL_SRV_LISTEN 0.0.0.0 NO Web Server Listen Address
OWL_DB_USER owl NO Database Username
OWL_DB_PASS twittwoo NO Database Password - Do not leave as default in production
OWL_DB_NAME owlboard NO Database Name
OWL_DB_PORT 27017 NO Database Server Port
OWL_DB_HOST localhost NO Database Server Host
OWL_LDB_KEY YES National Rail LDBWS API Key
OWL_LDB_SVKEY NO National Rail LDBSVWS API Key
OWL_LDB_CORPUSUSER YES Network Rail CORPUS API Username
OWL_LDB_CORPUSPASS YES Network Rail CORPUS API Password
OWL_GIT_ISSUEBOT NO Gitea API Key for issue reporting

In the case that OWL_LDB_SVKEY is not available, staff versions of departure board, etc. will not be available.

In the case that OWL_GIT_ISSUEBOT is not available, the 'Report Issue' page will not be able to POST data.

Database Layout

The OwlBoard application will build the database if required at startup. All it needs is authentication details for a MongoDB server.

Collections

Collection Contents Purpose
corpus Raw CORPUS data with blank keys removed Code lookups
stations Cleaned CORPUS Data, any objects with blank 3ALPHA & STANOX fields are removed Validation before fetching Arr/Dep boards
meta Lists the update time of corpus and station data Will be used to update after a predetermined time period

Note that even after removing all objects from the CORPUS with a blank 3ALPHA & STANOX, many items remain which are not stations and will not have a board available. Going forwards methods to remove non-stations from this data will be introduced.