Architecture¶
The overall picture looks like this
Upon connecting to the local iRacing instance the Racelogger registers with the backend with a unique id (this is generated via the current iRacing weekend info from telemetry).
The manager announces the provider changes on the manager.provider topic.
The analysis and archive components listen to this topic and prepare themselves to receive data from the topic live.state.{id} to which the Racelogger will post its data.
At the end of recording the Racelogger calls the remove_provider endpoint. The manager in turn announces this event on the topic manager.provider
Endpoints¶
Prefix |
Description |
User |
Access |
|---|---|---|---|
racelog.public. |
used for public access (mainly frontend) |
anonymous |
call, subscribe |
racelog.dataprovider. |
used by racelogger to publish race data |
datapublisher |
call, publish, subscribe |
racelog.manager. |
used by the backend apps |
backend |
call, register, publish, subscribe |
racelog.admin. |
used by admin CLI |
admin |
call, register, publish, subscribe |
Crossbar¶
The following snippet can be used as a template for a crossbar server.
1{
2 "version": 2,
3 "controller": {},
4 "workers": [
5 {
6 "type": "router",
7 "realms": [
8 {
9 "name": "racelog",
10 "roles": [
11 {
12 "name": "anonymous",
13 "permissions": [
14 {
15 "uri": "racelog.public",
16 "match": "prefix",
17 "allow": {
18 "call": true,
19 "register": false,
20 "publish": false,
21 "subscribe": true
22 },
23 "disclose": {
24 "caller": false,
25 "publisher": false
26 },
27 "cache": true
28 }
29 ]
30 },
31 {
32 "name": "racedata_provider",
33 "permissions": [
34 {
35 "uri": "racelog.dataprovider",
36 "match": "prefix",
37 "allow": {
38 "call": true,
39 "register": false,
40 "publish": true,
41 "subscribe": true
42 },
43 "disclose": {
44 "caller": false,
45 "publisher": false
46 },
47 "cache": true
48 }
49 ]
50 },
51 {
52 "name": "backend",
53 "permissions": [
54 {
55 "uri": "racelog.",
56 "match": "prefix",
57 "allow": {
58 "call": true,
59 "register": true,
60 "publish": true,
61 "subscribe": true
62 },
63 "disclose": {
64 "caller": false,
65 "publisher": false
66 },
67 "cache": true
68 }
69 ]
70 }
71 ]
72 }
73 ],
74 "transports": [
75 {
76 "type": "web",
77 "endpoint": {
78 "type": "tcp",
79 "port": 8080
80 },
81 "paths": {
82 "info": {
83 "type": "nodeinfo"
84 },
85
86 "ws": {
87 "type": "websocket",
88 "options": {
89 "auto_ping_interval": 30000,
90 "compression": {
91 "deflate": {
92 "request_no_context_takeover": false,
93 "request_max_window_bits": 11,
94 "no_context_takeover": false,
95 "max_window_bits": 11,
96 "memory_level": 4
97 }
98 }
99
100 },
101 "auth": {
102 "anonymous": {
103 "type": "static",
104 "role": "anonymous"
105 },
106 "ticket": {
107 "type": "static",
108 "principals": {
109 "dataprovider": {
110 "ticket": "<ENTER_SECRET_HERE>",
111 "role": "racedata_provider"
112 },
113 "backend": {
114 "ticket": "<ENTER_SECRET_HERE>",
115 "role": "backend"
116 }
117 }
118 }
119 }
120
121 }
122 }
123 }
124 ]
125 }
126 ]
127}
Migration¶
Racelogger¶
Current |
Access |
New |
|---|---|---|
racelog.register_provider |
call |
racelog.dataprovider.register_provider |
racelog.remove_provider |
call |
racelog.dataprovider.remove_provider |
racelog.store_event_extra_data |
call |
racelog.dataprovider.provide_event_extra_data |
racelog.state.{id} |
publish |
racelog.public.live.state.{id} |
Web¶
Current |
Access |
New |
Where |
Description |
|---|---|---|---|---|
racelog.archive.event_info |
call |
racelog.public.get_event_info |
load event |
get info about selected event |
racelog.archive.events |
call |
racelog.public.get_events |
startup |
get list of stored events |
racelog.list_providers |
call |
racelog.public.list_providers |
startup/request |
get list of current race data providers |
racelog.get_track_info |
call |
racelog.public.get_track_info |
load event |
get info about track |
racelog.analysis.archive |
call |
racelog.public.archive.get_event_analysis |
load event |
get stored analysis data |
racelog.analysis.live |
call |
racelog.public.live.get_event_analysis |
live |
get current live analysis data |
racelog.state.{id} |
topic |
racelog.public.live.state.{id} |
live |
get current state from racelogger |
racelog.archive.wamp.delta |
call |
racelog.public.archive.state |
race replay |
used to get state messages for a time range |