15 Commits

Author SHA1 Message Date
e0a7c5f56e Add boolean for passesAnotherTrain
All checks were successful
Generate and Release Protos / release (push) Successful in 32s
2026-02-23 20:30:05 +00:00
9a9fc59e22 Add booleans to describe service activities and whether the service is supressed 2026-02-23 20:29:10 +00:00
d103314350 Rename problematic files
All checks were successful
Generate and Release Protos / release (push) Successful in 29s
2026-02-23 19:20:29 +00:00
5c16b17aea Try passing '$id' as ref
Some checks failed
Generate and Release Protos / release (push) Failing after 23s
2026-02-23 19:17:39 +00:00
71e04b93d5 Try relpath from repo root!
Some checks failed
Generate and Release Protos / release (push) Failing after 26s
2026-02-23 19:14:54 +00:00
423bb9fc34 Try path from repo root
Some checks failed
Generate and Release Protos / release (push) Failing after 25s
2026-02-23 19:13:33 +00:00
eb7c3a18d8 Try rel path
Some checks failed
Generate and Release Protos / release (push) Failing after 23s
2026-02-23 19:11:53 +00:00
fe68c038de Fix ref to schema file
Some checks failed
Generate and Release Protos / release (push) Failing after 23s
2026-02-23 19:09:37 +00:00
776263c068 Add Schedule type for Darwin PushPort
Some checks failed
Generate and Release Protos / release (push) Failing after 25s
2026-02-23 19:07:31 +00:00
87ed1d01d5 Add late & canel reason keys 2026-02-22 01:48:26 +00:00
057f5ed777 Add 'atRemoved' field to TSTime definition 2026-02-22 01:32:03 +00:00
93df742c7d Add schemas for PushPort TS Message type 2026-02-22 01:29:50 +00:00
f20f2f83ec Update readme to exlpain installing the package with Go. 2026-01-14 19:16:51 +00:00
770ee003e7 Add message-envelope type
All checks were successful
Generate and Release Protos / release (push) Successful in 27s
2026-01-14 18:51:14 +00:00
a5675b1442 Add 'service_id' field. Used to include the message senders hostname
All checks were successful
Generate and Release Protos / release (push) Successful in 26s
2026-01-13 18:54:10 +00:00
6 changed files with 199 additions and 2 deletions

View File

@@ -20,7 +20,21 @@ Since the package is hosted in the Gitea Package Registry, you must configure yo
**Setup:** **Setup:**
```bash ```bash
export GOPROXY=[https://git.fjla.uk/api/packages/owlboard/go,https://proxy.golang.org,direct](https://git.fjla.uk/api/packages/owlboard/go,https://proxy.golang.org,direct) # Set the proxy to check our Gitea instance first
go env -w GOPROXY="https://git.fjla.uk/api/packages/OwlBoard/go,https://proxy.golang.org,direct"
# Trust our internal domain and skip the public Google checksum database
go env -w GONOSUMDB="git.fjla.uk"
```
The, you can simply run go get, as usual.
#### Container Usage
```bash
ARG GOPROXY=https://git.fjla.uk/api/packages/OwlBoard/go,https://proxy.golang.org,direct
ARG GONOSUMDB=git.fjla.uk
ENV GOPROXY=$GOPROXY
ENV GONOSUMDB=$GONOSUMDB
``` ```
### 2. Typescript Services ### 2. Typescript Services

View File

@@ -0,0 +1,32 @@
{
"$id": "https://schema.owlboard.info/data-ingress/message-envelope.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "MessageEnvelope",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"enum": ["file"],
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"enum": ["pis", "timetable", "knowledgebase", "darwin_schedule", "darwin_ts", "darwin_ref"],
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
}
},
"required": ["service_name", "service_id", "data_type", "sent_timestamp"],
"additionalProperties": true
}

View File

@@ -8,6 +8,10 @@
"type": "string", "type": "string",
"description": "Name of the service submitting the update" "description": "Name of the service submitting the update"
}, },
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": { "data_type": {
"type": "string", "type": "string",
"enum": ["file"], "enum": ["file"],
@@ -38,6 +42,6 @@
"additionalProperties": false "additionalProperties": false
} }
}, },
"required": ["service_name", "data_type", "sent_timestamp", "data_kind", "payload"], "required": ["service_name", "service_id", "data_type", "sent_timestamp", "data_kind", "payload"],
"additionalProperties": false "additionalProperties": false
} }

View File

@@ -0,0 +1,57 @@
{
"$id": "https://schema.owlboard.info/data-ingress/pushport-schedule.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "PushPortSchedule",
"type": "object",
"required": ["rid", "uid", "trainId", "ssd", "toc", "locations"],
"properties": {
"rid": {"type": "string", "description": "Unique service ID"},
"uid": {"type": "string", "description": "Unique schedule ID - maps to NR CIF"},
"trainId": {"type": "string", "description": "Train Headcode"},
"ssd": {"type": "string", "format": "date", "description": "Schedule Start Date (When the service commences)"},
"toc": {"type": "string", "minLength": 2, "maxLength": 2, "description": "TOC Code"},
"isPassenger": {"type": "boolean", "description": "If service is for passengers", "default": true},
"isCharter": {"type": "boolean", "description": "If train is charter service", "default": false},
"status": {"type": "string", "enum": ["train", "bus", "ship"], "default": "train"},
"isDelayedDelivery": {"type": "boolean", "description": "If message is sent as part of Darwin service recovery"},
"cancelReason": {"type": ["string", "null"], "description": "Reason code for cancellation"},
"isDeleted": {"type": "boolean", "description": "Whether schedule should be deleted", "default": false},
"locations": {
"type": "array",
"items": {
"type": "object",
"required": ["tpl", "seq"],
"properties": {
"tpl": {"type": "string", "description": "TIPLOC of location"},
"seq": {"type": "integer", "description": "The order of the stop for sorting and handling repeated TIPLOCs"},
"wta": { "type": ["string", "null"] },
"wtd": { "type": ["string", "null"] },
"wtp": { "type": ["string", "null"] },
"pta": { "type": ["string", "null"] },
"ptd": { "type": ["string", "null"] },
"plat": { "type": ["string", "null"] },
"isCancelled": { "type": "boolean", "default": false },
"isSupressed": { "type": "boolean", "default": false, "description": "Defines whether the service should be hidden to the public"},
"activities": {
"type": "object",
"properties": {
"pickUpDropOff": {"type": "boolean", "description": "Indicates the train stops for passengers to board and alight"},
"requestStop": {"type": "boolean", "description": "Indicates if the train stops only when required"},
"pickUpOnly": {"type": "boolean", "description": "Indicated the service picks up passengers only"},
"dropOffOnly": {"type": "boolean", "description": "Indicates the service drops off passengers only"},
"tokenExchange": {"type": "boolean", "description": "Indicates if the train stops for exhanging a token/staff or similar"},
"vehiclesAttached": {"type": "boolean", "description": "Indicates if vehicles are attached at this location"},
"vehiclesDetached": {"type": "boolean", "description": "Indicates if vehicles are detached at this location"},
"trainCrewChange": {"type": "boolean", "description": "Indicates if train stops to exchange crew at this location"},
"changeLocomotive": {"type": "boolean", "description": "Indicates if train stops to exchange locomotive at this location"},
"changeEnds": {"type": "boolean", "description": "Indicates if the train reverses or driver changes ends at this location"},
"staffStop": {"type": "boolean", "description": "Indicates that the train stops for staff use only"},
"unadvertised": {"type": "boolean", "description": "Indicates that the stop is not advertised to the public"},
"passesAnotherTrain": {"type": "boolean", "description": "Indicates if the train stops to pass another train on a single line crossing point"}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,39 @@
{
"$id": "https://schema.owlboard.info/data-ingress/pushport-ts.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "PushPortTS",
"type": "object",
"properties": {
"rid": {
"type": "string",
"description": "Unique ID for the train service (eg. 2026022217610103)",
"pattern": "^[0-9]{15}$"
},
"uid": {
"type": "string",
"description": "Schedule ID - The permanent ID for the schedule in the static timetable"
},
"ssd": {
"type": "string",
"format": "date",
"description": "Scheduled Start Data, the date the train service started its journey"
},
"isDelayed": {
"type": "boolean",
"description": "Indicated if the message is delayed due to PushPort service disruption"
},
"lateReason": {
"type": "integer",
"description": "Reason the train is late (Maps to textual reason)"
},
"cancelReason": {
"type": "integer",
"description": "Reason the train is cancelled (Maps to textual reason)"
},
"locations": {
"type": "array",
"description": "A list of one or more locations where the train has recorded a movement or forecast",
"items": { "$ref": "https://schema.owlboard.info/data-ingress/pushport-ts-location.schema.json" }
}
}
}

View File

@@ -0,0 +1,51 @@
{
"$id": "https://schema.owlboard.info/data-ingress/pushport-ts-location.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "PushPortTSLocation",
"type": "object",
"required": ["tpl"],
"definitions": {
"TSTime": {
"type": "object",
"properties": {
"at": {"type": "string", "description": "Actual time"},
"et": {"type": "string", "description": "Estimated time"},
"wet": {"type": "string", "description": "Working estimated time"},
"src": {"type": "string", "description": "Data source (TD/Darwin/etc)"},
"atClass": {"type": "string", "description": "Time source Automatic/Manual"},
"delayed": {"type": "boolean", "description": "is train delayed with no estimated time"},
"srcInst": {"type": "string", "description": "Source instance (what caused the update)"},
"atRemoved": {"type": "boolean", "description": "Whether a previous 'at' was reported in error and should be removed"}
}
}
},
"properties": {
"tpl": {"type": "string", "description": "TIPLOC for the location"},
"wta": {"type": "string", "description": "Scheduled working time arrival"},
"wtd": {"type": "string", "description": "Scheduled working time departure"},
"wtp": {"type": "string", "description": "Scheduled working time pass"},
"pta": {"type": "string", "description": "Scheduled public arrival time"},
"ptd": {"type": "string", "description": "Scheduled public departure time"},
"arr": {"$ref": "#/definitions/TSTime"},
"dep": {"$ref": "#/definitions/TSTime"},
"pass": {"$ref": "#/definitions/TSTime"},
"plat": {
"type": "object",
"description": "Platform data",
"properties": {
"value": {"type": "string", "description": "Platform number/letter"},
"platsrc": {"type": "string", "enum": ["A", "M", "P"], "description": "Source of data Automatic/Manual/Planned"},
"platsup": {"type": "boolean", "description": "Is platform suppressed from public display"},
"cisPlatsup": {"type": "boolean", "description": "Whether CIS or Darwin Workstation has supressed the platform"},
"conf": {"type": "boolean", "description": "Whether platform has been confirmed by the local CIS"}
}
},
"suppr": {"type": "boolean", "description": "Whether location is supressed"},
"length": {"type": "integer", "description": "Train length (no. of coaches)"},
"detachFront": {"type": "boolean","description": "Indicated if coaches will detatch from front"},
"detachRead": {"type": "boolean", "description": "Indicates if coaches will detatch from rear"},
"attachFront": {"type": "boolean", "description": "Indicates if coaches will attach to front"},
"attachRear": {"type": "boolean", "description": "Indicates if coaches will be attached to rear"},
"adhoc": {"type": "boolean", "description": "Whether this is an ad-hoc stop"}
}
}