mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 21:30:57 +00:00
409 lines
12 KiB
Markdown
409 lines
12 KiB
Markdown
# Tracking App API
|
|
This document describes the API used by the tracking smartphone apps.
|
|
|
|
## Host, Protocol, Port
|
|
|
|
There are many hosts (not one). Hosts are a subdomain in `sapsailing.com`, e.g. `kielerwoche2014.sapsailing.com`.
|
|
|
|
Protocol is generally `http`, port is `80`.
|
|
|
|
All connection details are contained in the QR code:
|
|
|
|
{protocol://server:port}/apps/com.sap.sailing.android.tracking.app.apk
|
|
?leaderboard={...}
|
|
&raceColumn={...}
|
|
&fleet={...}
|
|
&competitor={...}
|
|
|
|
## Event Details
|
|
|
|
The following GET call returns event details.
|
|
|
|
### Verb
|
|
|
|
GET
|
|
|
|
### Path
|
|
|
|
For single event:
|
|
|
|
/sailingserver/api/v1/events/{event-id}
|
|
|
|
e.g. http://kielerwoche2014.sapsailing.com/sailingserver/api/v1/events/863a5c30-cbea-4f1c-8fb1-54fffa6b7319
|
|
|
|
### Response
|
|
|
|
{
|
|
"id": "863a5c30-cbea-4f1c-8fb1-54fffa6b7319",
|
|
"name": "Extreme Sailing Series 2012 Rio",
|
|
"description": "",
|
|
"officialWebsiteURL": "http://www.extremesailingseries.com",
|
|
"logoImageURL": "http://static.sapsailing.com/ubilabsimages/ESS2014/esslogo.jpg",
|
|
"startDate": 1354189140000,
|
|
"endDate": 1354448040000,
|
|
"venue": {
|
|
"name": "Rio",
|
|
"courseAreas": [
|
|
{
|
|
"name": "Rio",
|
|
"id": "e956b2d1-2429-4b18-b655-662c6098cbb9"
|
|
}
|
|
]
|
|
},
|
|
"imageURLs": [
|
|
"http://www.extremesailingseries.com/images/gallery/2012/2012_ESS_map_800.jpg"
|
|
],
|
|
"videoURLs": [],
|
|
"sponsorImageURLs": [],
|
|
"leaderboardGroups": [
|
|
{
|
|
"id": "d1d09698-81c1-4caf-9790-abb431c7a5dc",
|
|
"name": "Extreme Sailing Series 2012",
|
|
"description": "Muscat - Qingdao - Istanbul - Porto - Cardiff - Nice - Rio de Janeiro",
|
|
"displayName": null,
|
|
"hasOverallLeaderboard": true
|
|
}
|
|
],
|
|
"imageSizes": [
|
|
{
|
|
"imageURL": "http://www.extremesailingseries.com/images/gallery/2012/2012_ESS_map_800.jpg",
|
|
"imageWidth": 800,
|
|
"imageHeight": 462
|
|
},
|
|
{
|
|
"imageURL": "http://static.sapsailing.com/ubilabsimages/ESS2014/esslogo.jpg",
|
|
"imageWidth": 209,
|
|
"imageHeight": 65
|
|
}
|
|
]
|
|
}
|
|
|
|
## Device Mapping
|
|
Following POST call maps smartphones to competitors.
|
|
|
|
### Verb
|
|
|
|
POST
|
|
|
|
### Path
|
|
|
|
/sailingserver/rc/racelog
|
|
?leaderboard=Guy%27s+Regatta
|
|
&raceColumn=M1
|
|
&fleet=Default
|
|
&clientuuid=92669a6c-72c9-46d2-a815-f51ff15a4369
|
|
|
|
#### Query Parameters
|
|
|
|
Query parameters are required and are encoded in QR code.
|
|
|
|
`clientuuid` Competitor ID
|
|
|
|
### Request Body
|
|
|
|
{
|
|
"timestamp": 1413460233257,
|
|
"id": "c72eabea-f456-4b29-9ba0-dadd06f5a179",
|
|
"passId": 0,
|
|
"fromMillis": 1413459900000,
|
|
"@class": "DeviceCompetitorMappingEvent",
|
|
"createdAt": 1413460233258,
|
|
"item": {
|
|
"id": "da815c7f-c935-44f5-b01d-20b750ce75ab",
|
|
"nationality": "",
|
|
"displayColor": null,
|
|
"idtype": "java.util.UUID",
|
|
"name": null,
|
|
"nationalityISO3": "",
|
|
"sailID": "",
|
|
"nationalityISO2": ""
|
|
},
|
|
"authorName": "Tracking App",
|
|
"competitors": [ ],
|
|
"device": {
|
|
"stringRepresentation": "147d8230-4db0-11e4-916c-0800200c9a66",
|
|
"id": "147d8230-4db0-11e4-916c-0800200c9a66",
|
|
"type": "smartphoneUUID"
|
|
},
|
|
"authorPriority": 0,
|
|
"toMillis": 1413460500000
|
|
}
|
|
|
|
#### Properties
|
|
|
|
`item.id` Competitor ID, contained in QR code
|
|
|
|
`device.stringRepresentation` and `device.id` Device UDID, generated by app
|
|
|
|
`fromMillis` Start of mapping, contained in QR code
|
|
|
|
`toMillis` End of mapping, contained in QR code
|
|
|
|
### Response Body
|
|
|
|
[
|
|
{
|
|
"@class": "RaceLogStartProcedureChangedEvent",
|
|
"id": "1e76925c-6518-434c-8d43-f5abf97154bf",
|
|
"createdAt": 1413794205930,
|
|
"timestamp": 1413794205905,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "Shore",
|
|
"authorPriority": 4,
|
|
"startProcedureType": "RRS26"
|
|
},
|
|
{
|
|
"@class": "RaceLogStartTimeEvent",
|
|
"id": "978701be-d087-4ac1-a263-db2d7059e5d8",
|
|
"createdAt": 1413794205931,
|
|
"timestamp": 1413794205905,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "Shore",
|
|
"authorPriority": 4,
|
|
"nextStatus": "SCHEDULED",
|
|
"startTime": 1413794160000
|
|
},
|
|
{
|
|
"@class": "DenoteForTrackingEvent",
|
|
"id": "f332a53b-db8c-4e22-b250-042400e08c9a",
|
|
"createdAt": 1413460016871,
|
|
"timestamp": 1413460016869,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 1,
|
|
"raceName": "Guy's Regatta M1 Default",
|
|
"boatClass": "Small",
|
|
"raceId": "dee82eb7-4d0f-4d1b-b834-9d1faa6b2517"
|
|
},
|
|
{
|
|
"@class": "RegisterCompetitorEvent",
|
|
"id": "f381d118-3344-41d3-bd47-4a2beb206d30",
|
|
"createdAt": 1413460067296,
|
|
"timestamp": 1413460067294,
|
|
"passId": 0,
|
|
"competitors": [
|
|
{
|
|
"idtype": "java.util.UUID",
|
|
"id": "da815c7f-c935-44f5-b01d-20b750ce75ab",
|
|
"name": "Competitor A",
|
|
"displayColor": null,
|
|
"sailID": "A",
|
|
"nationality": "",
|
|
"nationalityISO2": "",
|
|
"nationalityISO3": ""
|
|
}
|
|
],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 1
|
|
},
|
|
{
|
|
"@class": "RegisterCompetitorEvent",
|
|
"id": "f7e6da48-d245-4615-8cbb-f7b4a96c7566",
|
|
"createdAt": 1413460067298,
|
|
"timestamp": 1413460067297,
|
|
"passId": 0,
|
|
"competitors": [
|
|
{
|
|
"idtype": "java.util.UUID",
|
|
"id": "9c09ad1a-e05c-45d2-8b08-b8a6f4b03004",
|
|
"name": "Competitor B",
|
|
"displayColor": null,
|
|
"sailID": "B",
|
|
"nationality": "",
|
|
"nationalityISO2": "",
|
|
"nationalityISO3": ""
|
|
}
|
|
],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 1
|
|
},
|
|
{
|
|
"@class": "DefineMarkEvent",
|
|
"id": "87b347c8-ad57-47ca-9b67-2fe01ac72e3f",
|
|
"createdAt": 1413461050887,
|
|
"timestamp": 1413461050886,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 1,
|
|
"mark": {
|
|
"@class": "Mark",
|
|
"name": "Buoy 1",
|
|
"id": "a8f20289-0246-438f-a4de-9bc1c30b9fc3",
|
|
"color": "",
|
|
"pattern": "",
|
|
"shape": "CONICAL",
|
|
"type": "BUOY"
|
|
}
|
|
},
|
|
{
|
|
"@class": "DefineMarkEvent",
|
|
"id": "d48d2e37-496b-48b8-8fb6-5233638c018b",
|
|
"createdAt": 1413461060946,
|
|
"timestamp": 1413461060946,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 1,
|
|
"mark": {
|
|
"@class": "Mark",
|
|
"name": "Buoy 2",
|
|
"id": "a8a84cf8-ad78-4db1-a593-91f43ced523a",
|
|
"color": "",
|
|
"pattern": "",
|
|
"shape": "CONICAL",
|
|
"type": "BUOY"
|
|
}
|
|
},
|
|
{
|
|
"@class": "RaceLogCourseDesignChangedEvent",
|
|
"id": "f4e0d5c6-494c-4492-a09d-1665baf385ca",
|
|
"createdAt": 1413461086484,
|
|
"timestamp": 1413461086483,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 1,
|
|
"courseDesign": {
|
|
"name": "Course for Guy's Regatta - M1 - Default",
|
|
"waypoints": [
|
|
{
|
|
"name": "Buoy 1",
|
|
"passingInstruction": "None",
|
|
"controlPoint": {
|
|
"@class": "Mark",
|
|
"name": "Buoy 1",
|
|
"id": "a8f20289-0246-438f-a4de-9bc1c30b9fc3",
|
|
"color": "",
|
|
"pattern": "",
|
|
"shape": "CONICAL",
|
|
"type": "BUOY"
|
|
}
|
|
},
|
|
{
|
|
"name": "Buoy 2",
|
|
"passingInstruction": "None",
|
|
"controlPoint": {
|
|
"@class": "Mark",
|
|
"name": "Buoy 2",
|
|
"id": "a8a84cf8-ad78-4db1-a593-91f43ced523a",
|
|
"color": "",
|
|
"pattern": "",
|
|
"shape": "CONICAL",
|
|
"type": "BUOY"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"@class": "DeviceCompetitorMappingEvent",
|
|
"id": "cf5995a4-6cca-4cca-a6cc-2357a32bb436",
|
|
"createdAt": 1413463043674,
|
|
"timestamp": 1413463043674,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "Tracking App",
|
|
"authorPriority": 0,
|
|
"fromMillis": 1413461400000,
|
|
"toMillis": 1413464100000,
|
|
"item": {
|
|
"idtype": "java.util.UUID",
|
|
"id": "da815c7f-c935-44f5-b01d-20b750ce75ab",
|
|
"name": "Competitor A",
|
|
"displayColor": null,
|
|
"sailID": "A",
|
|
"nationality": "",
|
|
"nationalityISO2": "",
|
|
"nationalityISO3": ""
|
|
},
|
|
"device": {
|
|
"type": "smartphoneUUID",
|
|
"id": "147d8230-4db0-11e4-916c-0800200c9a66",
|
|
"stringRepresentation": "147d8230-4db0-11e4-916c-0800200c9a66"
|
|
}
|
|
},
|
|
{
|
|
"@class": "RevokeEvent",
|
|
"id": "481e710e-9f8d-4222-a4ae-ec4b15b7a8bd",
|
|
"createdAt": 1413793852767,
|
|
"timestamp": 1413793852767,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 0,
|
|
"revokedEventId": "f332a53b-db8c-4e22-b250-042400e08c9a"
|
|
},
|
|
{
|
|
"@class": "DenoteForTrackingEvent",
|
|
"id": "740701f2-639b-4bfb-8f72-06093b0ac1e8",
|
|
"createdAt": 1413793857143,
|
|
"timestamp": 1413793857143,
|
|
"passId": 0,
|
|
"competitors": [],
|
|
"authorName": "com.sap.sailing.server.RacingEventService",
|
|
"authorPriority": 0,
|
|
"raceName": "Guy's Regatta M1 Default",
|
|
"boatClass": "Small",
|
|
"raceId": "8fd69b14-f9bf-46bc-8bda-def5814d8758"
|
|
},
|
|
...
|
|
]
|
|
|
|
The response is a JSON array containing all events pertaining to leaderboard.
|
|
|
|
#### Properties
|
|
|
|
`id` UDID of event
|
|
|
|
`timestamp` Time of event
|
|
|
|
`createdAt` Time at which event log was created.
|
|
|
|
`@class` Event type, one of following values:
|
|
|
|
* `RaceLogStartProcedureChangedEvent` ???
|
|
|
|
* `RaceLogStartTimeEvent` ???
|
|
|
|
* `DenoteForTrackingEvent` ???
|
|
|
|
* `RegisterCompetitorEvent` Add new competitor.
|
|
|
|
* `DefineMarkEvent` Add new mark (e.g. buoy).
|
|
|
|
* `RaceLogCourseDesignChangedEvent` Called when defining course with marks.
|
|
|
|
* `DeviceCompetitorMappingEvent` Triggered when device and competitor are mapped.
|
|
|
|
* `RevokeEvent` Called e.g. when deleting a device / competitor mapping.
|
|
|
|
`authorName` Application that generated event log
|
|
|
|
## Send Geolocation
|
|
|
|
### Verb
|
|
|
|
POST
|
|
|
|
### Path
|
|
|
|
/tracking/recordFixesFlatJson
|
|
|
|
### Body
|
|
|
|
{
|
|
"bearingDeg":48,
|
|
"timeMillis":1414504349713,
|
|
"speedMperS":0,
|
|
"lonDeg":9.9650613,
|
|
"deviceUuid":"147d8230-4db0-11e4-916c-0800200c9a66",
|
|
"latDeg":53.5510491
|
|
}
|
|
|
|
### Response
|
|
|
|
200 |