Compare commits

...

200 Commits

Author SHA1 Message Date
clonedArtie
a4475a7177
Update fsssignaldiscovered-v1.0.json 2024-10-31 21:45:49 +01:00
clonedArtie
60f80cfe69
Update fsssignaldiscovered-v1.0.json
Added SpawningPower property.
2024-10-31 12:06:08 +01:00
clonedArtie
e874815a6e
Minor fix for system/station name renames 2024-01-24 15:32:36 +01:00
clonedArtie
0adcc3713e
Minor typo fix 2024-01-24 14:19:34 +01:00
clonedArtie
cd07f7f3c5
Added new schemas 2024-01-23 17:53:56 +01:00
spansh
3c9ff1a25a
Added docking denied and granted (#219)
* added docking denied and granted

* made reason mandatory

---------

Co-authored-by: Gareth Harper <git@spansh.co.uk>
2024-01-23 13:57:06 +01:00
spansh
03729d0f8e
added stationtype and carrierDockingAccess (#220)
* added stationtype

* removed specific ellision of stationType

---------

Co-authored-by: Gareth Harper <git@spansh.co.uk>
2024-01-23 13:56:53 +01:00
clonedArtie
764d14dbe1
Shorten uploaderID hash persistence duration 2024-01-23 13:55:50 +01:00
clonedArtie
3d2693aa3f
Merge branch 'live' into master 2023-10-23 13:25:07 +02:00
Rob
0e90e0d985
Merge pull request #217 from spansh/factionstate-and-stationfaction
Added factionstate and stationAllegiance
2023-10-23 12:10:50 +01:00
Gareth Harper
e2d1f438fc added factionstate and stationfaction 2023-10-23 11:03:11 +00:00
clonedArtie
41f9713f09
Adding latest changes to live branch. (#216)
* "Typo" in headline

Since this is the Readme for FSSBodySignals the Headline wrongly contains FSSAllBodiesFound.

* Update README.md to remove mention of EDDB

EDDB is now defunct and its links are dead.

* added update 17 schema changes, also protected from additional properties
approachsettlement gets station data
fsssignaldiscovered gets signaltype

* additionalproperties in correct place

---------

Co-authored-by: Lord Asrothear <lord@asrothear.de>
Co-authored-by: Rob <robxp@hotmail.com>
Co-authored-by: Avraham Adler <aadler@users.noreply.github.com>
Co-authored-by: Gareth Harper <git@spansh.co.uk>
2023-10-19 12:21:30 +02:00
Rob
7250b90858
Merge pull request #215 from spansh/update-17-journal-changes
Update 17 journal changes
2023-10-17 12:30:46 +01:00
Rob
5ac63ae6c4
Merge pull request #213 from aadler/patch-1
Update README.md to remove mention of EDDB
2023-10-17 12:29:31 +01:00
Gareth Harper
8225dd0ae0 additionalproperties in correct place 2023-10-17 09:30:47 +00:00
Gareth Harper
8ef2ef8c3f added update 17 schema changes, also protected from additional properties
approachsettlement gets station data
fsssignaldiscovered gets signaltype
2023-10-17 09:28:39 +00:00
Avraham Adler
5690287723
Update README.md to remove mention of EDDB
EDDB is now defunct and its links are dead.
2023-05-21 22:21:50 +00:00
Rob
05fb8664f9
Merge pull request #211 from Asrothear/patch-1
"Typo" in headline
2023-05-06 08:08:16 +01:00
Lord Asrothear
8706de2d33
"Typo" in headline
Since this is the Readme for FSSBodySignals the Headline wrongly contains FSSAllBodiesFound.
2023-05-05 22:40:27 +02:00
Athanasius
02762b0ddd
Merge branch 'master' into live 2023-01-19 16:04:28 +00:00
Athanasius
2749db69e8
Merge branch 'develop' 2023-01-19 16:04:15 +00:00
Athanasius
6a514d3bae
Gateway: Improve the new logging elements
* There are different source-keys for much of this.
* Have game_version *then* game_build.
* Where a message doesn't have a relevant field, set to '-'.
2023-01-19 16:01:53 +00:00
Athanasius
d983a6c806
Gateway: Expand logging on Accepted or Validation Error 2023-01-19 15:29:57 +00:00
Athanasius
953a819135
Merge pull request #207 from jixxed/fix/commodity-readme
Update readme ellisions for journal based commodity messages
2023-01-12 15:13:18 +00:00
Athanasius
50cd2b0f35 eddn-report: EDDI / navroute / missing Route 2023-01-12 08:54:51 +00:00
Athanasius
10dcdb9a2f eddn-report: EDDI 4.0.2 fsssignaldiscovered without StarPos 2023-01-11 08:44:01 +00:00
jixxed
ee217d24a2 Improve description 2023-01-10 15:09:42 +01:00
Athanasius
177a5383b9 eddn-report: Bump EDDI to 4.2.0, and comment out latest reported issue 2023-01-10 09:00:05 +00:00
jixxed
72ebafa5f5 Update readme ellisions for journal based commodity messages 2023-01-09 23:02:35 +01:00
Athanasius
2a461a9e46 eddn-report: Bump all version checks to latest & EDDI report exception
* Raised all softwareVersion checks to latest releases.
* EDDI has an approachsettlement/1 issue that's been reported.
2023-01-06 09:00:09 +00:00
Athanasius
0b87f7cb4e
Merge branch 'master' into live 2022-12-10 11:12:51 +00:00
Athanasius
7c3863d72d
Merge branch 'develop' 2022-12-10 11:12:35 +00:00
Athanasius
d263b7f929
Merge pull request #204 from EDCD/fix/schemas/fcmaterials_json-items-array-contents
schemas/fcmaterials_json: Spec of in-array items needs to be correct
2022-12-10 11:09:03 +00:00
Athanasius
90bf38a451
schemas/fcmaterials_json: Spec of in-array items needs to be correct
python `jsonschema` raises no errors when you erroneously forget to wrap
the specification of each "array" member in `"items": { ... }`.

Closes #203
2022-12-10 11:03:16 +00:00
Athanasius
dd2abb10c8
Merge branch 'master' into live 2022-12-01 13:20:35 +00:00
Athanasius
f4e385309b
Merge branch 'develop' 2022-12-01 13:20:25 +00:00
Athanasius
feed1c27ec
docs/Developers: Fix 'For emphasis' emphasis (markdown) 2022-12-01 13:15:16 +00:00
Athanasius
ecf54c62eb
docs/Developers: Don't split "gamebuild may be empty". 2022-12-01 13:14:03 +00:00
Athanasius
e39fd25e7b
docs/Developers: gamebuild should not be whitespace-trimmed. 2022-12-01 11:36:36 +00:00
Athanasius
cebf3e5ea6
docs/Developers: CAPI-sourced data must denote which galaxy it is for 2022-12-01 11:26:01 +00:00
Athanasius
d9a85a4ed3
Merge branch 'master' into live 2022-11-25 15:43:24 +00:00
Athanasius
60a7815240
Merge branch 'develop' 2022-11-25 15:43:10 +00:00
Athanasius
b00b3737d2
docs/Developers: Don't make it look like advice is about gamebuild
* The ordered-list advice is for `gameversion`, not `gamebuild`.  So move
  the latter mention below that list.
* Also mention `fcmaterials_capi` comes from `market` endpoint.
2022-11-25 15:39:11 +00:00
Athanasius
5965505ee8
Merge branch 'master' into live 2022-11-23 17:51:55 +00:00
Athanasius
5906104460
Merge branch 'develop' 2022-11-23 17:51:29 +00:00
Athanasius
fecaf76e92
schemas/README: Point out the status of gameversion/build in main README 2022-11-23 17:50:15 +00:00
Athanasius
f8245d8bc2
Merge pull request #184 from CommanderRoot/refactor/rm-deprecated-substr
refactor: replace deprecated String.prototype.substr()
2022-11-14 12:15:46 +00:00
Athanasius
8468fa80d4
Merge branch 'master' into live 2022-11-14 11:58:03 +00:00
Athanasius
00a945c5f1
Merge branch 'beta' 2022-11-14 11:57:20 +00:00
Athanasius
c54f452bf7
docs/Developers: Compression needs Content-Encoding header
... not `Content-Type`.
2022-10-31 08:52:14 +00:00
Athanasius
a857bc1fae
docs/Developers: Compression needs Content-Encoding header
... not `Content-Type`.
2022-10-31 08:50:19 +00:00
Athanasius
44f891bb2d
docs/Developers: Compression needs Content-Encoding header
... not `Content-Type`.
2022-10-31 08:49:33 +00:00
Athanasius
c28609171d
Merge pull request #199 from EDCD/enhancement/197/header-gameversion
schemas: journal: Implement header->gameversion & -> gamebuild
2022-10-10 10:53:10 +01:00
Athanasius
04011f0533
eddn-report: Correct accidental removal of '# ' on actual comment 2022-10-05 10:57:59 +01:00
Athanasius
e445da49b7
eddn-report: Ignore EDD outfitting/2 paintjobs 2022-10-05 10:56:15 +01:00
Athanasius
3db0bbf430
eddn-report: Bump EDD and EDMC latest version strings 2022-10-05 09:13:02 +01:00
Athanasius
1999f52e97
schemas: Update for allowing "" gameversion/build
* Also has specific description text for the CAPI data source schemas.
2022-09-29 15:18:52 +01:00
Athanasius
1df1032886
docs/Developers: Allow for "" gameversion/build values.
The emphasis here is on strongly encouraging Senders to get the actual, full
and correct, values to Listeners.  But where they can't, be that due to
data source limitations (CAPI), or their code architecture (common EDDN
sending code that has no concept of the data source), they're allowed to
send a less than optimal value.

**BUT**, they still should start sending the fields as outlined.
2022-09-29 14:58:35 +01:00
Athanasius
6046c0a6d7
schemas: Refer to Developers.md about gameversion/build. 2022-09-27 16:20:59 +01:00
Athanasius
aa99d3e057
docs/Developers: Use CAPI-<endpoint> for gameversion/build
It's the true source of the data, and less fraught with corner cases than
trying to be sure that the Journal-derived values would be correct.
2022-09-27 16:05:49 +01:00
Athanasius
d57ab05ee3
docs/Developers: Define header component field:values
* Actually define what we expect from the existing fields.
* Document what should go in the new `gameversion` and `gamebuild` fields.
* Update the generic example to include all of these "what version of the game,
  or feature set, did this come from?" fields.
2022-09-27 15:50:17 +01:00
Athanasius
a723fbd83b
docs/Developers: Fix 'i3' vim-induced typo 2022-09-27 14:50:05 +01:00
Athanasius
e000bcc398
schemas/shipyard: gameversion & gamebuild in header 2022-09-27 14:48:51 +01:00
Athanasius
c8db0792d4
schemas/scanbarycentre: gameversion & gamebuild in header 2022-09-27 14:48:12 +01:00
Athanasius
33911c3209
schemas/outfitting: gameversion & gamebuild in header 2022-09-27 14:47:26 +01:00
Athanasius
e3a744a94b
schemas/navroute: gameversion & gamebuild in header 2022-09-27 14:46:31 +01:00
Athanasius
fdb59c2fa8
schemas/navbeaconscan: gameversion & gamebuild in header 2022-09-27 14:45:41 +01:00
Athanasius
fa9e171381
schemas/fsssignaldiscovered: gameversion & gamebuild in header 2022-09-27 14:44:44 +01:00
Athanasius
6c9986ec58
schemas/fssdiscoveryscan: gameversion & gamebuild in header 2022-09-27 14:44:00 +01:00
Athanasius
1461eaf720
schemas/fssbodysignals: gameversion & gamebuild in header 2022-09-27 14:43:20 +01:00
Athanasius
d5e3cdf8e9
schemas/fssallbodiesfound: gameversion & gamebuild in header 2022-09-27 14:42:24 +01:00
Athanasius
15012a2b6e
schemas/fcmaterials_journal: gameversion & gamebuild in header 2022-09-27 14:41:45 +01:00
Athanasius
0bc7c90dfb
schemas/commodity: gameversion & gamebuild in header 2022-09-27 14:39:52 +01:00
Athanasius
9a9e0f0991
schemas/codexentry: gameversion & gamebuild in header 2022-09-27 14:38:53 +01:00
Athanasius
17648a9abd
schemas/approachsettlement: Add gameversion/gamebuild 2022-09-27 14:37:16 +01:00
Athanasius
dfdec11828
schemas/journal: horizons/odyssey now mandatory 2022-09-27 14:23:50 +01:00
Athanasius
cbbddad13c
schemas/journal: Add gamebuild to header as well 2022-09-27 14:09:24 +01:00
Athanasius
78e92fb38d
schemas: journal: Implement header->gameversion 2022-09-27 14:02:56 +01:00
Athanasius
a3bf764549
Merge branch 'master' into live 2022-09-27 13:56:38 +01:00
Athanasius
6f8158fbc8
Merge branch 'develop' 2022-09-27 13:56:22 +01:00
Athanasius
ba6762c5eb
Merge pull request #198 from EDCD/enhancement/docs/gameversion-odyssey-horizons-1450
docs/Developers: Update Fileheader/LoadGame for latest clients
2022-09-27 13:56:02 +01:00
Athanasius
69cc27fd63
docs/Developers: horizons/odyssey flags now compulsory
* Listeners really do need these, where defined in the schemas, so state
  that they're mandatory.
* REALLY emphasise that where an `Odyssey` flag isn't in `LoadGame` Senders
  MUST NOT send it with a `false` value.

  Although pending addition of header->gameversion will aid Listeners,
  currently this could give the misleading impression that a 3.8 Horizons
  client is a 4.0 Horizons client.
2022-09-27 12:42:14 +01:00
Athanasius
a04d0e8d96
docs/Developers: Update Fileheader/LoadGame for latest clients
This includes the new `4.0 Horizons` client, which changes the semantics
of what the `Odyssey` flag in the `Fileheader` means.  It now indicates if
the client is a 4.0+ one, not if the player is utilising Odyssey DLC.
2022-09-27 12:40:28 +01:00
Athanasius
7199e4e46a
Merge branch 'master' into live 2022-09-07 13:35:52 +01:00
Athanasius
10faf6217e
Merge branch 'develop' 2022-09-07 13:35:18 +01:00
Athanasius
25fe1ece97
Merge branch 'master' of github.com:EDCD/EDDN 2022-09-07 13:34:56 +01:00
Athanasius
e1de9b2aab
Merge pull request #195 from EDCD/enhancement/193/schema-fcmaterials
schemas: fcmaterials for both Journal and CAPI-sourced data
2022-09-07 13:34:00 +01:00
Athanasius
7f7b462790
Setttings: Update for fcmaterials_journal and fcmaterials_capi now 2022-09-02 16:30:18 +01:00
Athanasius
2a8d09e378
schemas: fcmaterials_capi: README: First cut 2022-09-02 16:27:48 +01:00
Athanasius
af2b29a4a4
schemas: fcmaterials_capi: Initial schema and README
* NB: The README is a straight copy of the _journal one right now.  Will fix
  later.
2022-09-02 15:41:07 +01:00
Athanasius
7111bdbbbb
scripts/test-schema: A *very* basic script to see if a schema works
* It's using `sys.argv`, not `argparse`.
* Thus there's no `--help`.
* Supply it with: 1) Filename of a schema definition, 2) filename of a full
  EDDN message text to test for compliance.
* No output if both schema and message load *and* the message passes the
  schema.  Else you'll get python exception output from `jsonschema.validate()`.
2022-09-02 15:39:20 +01:00
Athanasius
33d6e8fe2e
schemas: fcmaterials_journal: Fix $id from rename 2022-09-02 13:48:37 +01:00
Athanasius
b3876824f7
schemas/README: Document $id conventions
1. Get the designation of the version correct.
2. That empty `#` fragment is a SHOULD NOT, so just don't.
3. Append `_<source>` to the "filename" where necessary.
2022-09-02 13:46:18 +01:00
Athanasius
08127d261f
schemas/README: Per-schema README is now mandatory
I think I only made this 'SHOULD' before because at that stage I'd not yet
written the README files for the legacy schemas.
2022-09-02 13:38:53 +01:00
Athanasius
2eb213d766
schemas/TEMPLATES/journal: Remove the # 'fragment' from end of $id
As per <https://json-schema.org/draft/2020-12/json-schema-core.html#section-8.2.1>

> Therefore, "$id" MUST NOT contain a non-empty fragment, and SHOULD NOT contain an empty fragment.
2022-09-02 13:36:43 +01:00
Athanasius
5bcdfadb09
schemas: Rename Journal-only to fcmaterials_journal/1 2022-09-02 13:21:03 +01:00
Athanasius
61ef74492d
Revert "schemas: fcmaterials: Adjust to allow for CAPI-sourced data"
This reverts commit f4b9eab178efd2ea62e780b1c98ad5f8cf151e55.
2022-09-02 13:19:46 +01:00
Athanasius
f4b9eab178 schemas: fcmaterials: Adjust to allow for CAPI-sourced data
* Add new mandatory `data-source` field.
* `CarrierName` now optional (not in CAPI data).
* `Items` is defined a lot more loosely, due to Journal vs CAPI
  differences.
2022-08-31 15:23:06 +00:00
Athanasius
53e099a9f4 contrib/eddn-logs-archive: Make non-verbose
This script has been proven for months, quieten it for potentially no
crontab output unless there's a problem.
2022-08-31 07:30:57 +00:00
Athanasius
6a2eb5980d
Merge ../EDDN 2022-08-30 17:25:39 +01:00
Athanasius
f4ab9eb35a
schemas: fcmaterials/1: Add README 2022-08-30 17:23:01 +01:00
Athanasius
2d2a205c7a
schemas: New fcmaterials/1 based on the *Journal* data source only 2022-08-30 17:23:00 +01:00
Athanasius
efd9905c17
Merge branch 'develop' 2022-08-30 14:17:38 +01:00
Athanasius
6d992307ce eddn-report: Bump EDD to 15.1.2.0, and comment out previous 'catch'
* This time I want to keep the example around for future use.
2022-08-26 07:42:28 +00:00
Athanasius
749d1aad3e eddn-report: str.startswith() doesn't do regex
I brainfarted, slinging a `.+` into this to generalise it, when the code
is using `str.startswith()`, not a regex match.

So, use two tests, `.startswith()` for the static portion, then a
`.find()` for the remainder after the variant part.
2022-08-24 07:17:37 +00:00
Athanasius
47532262c9 eddn-report: Generalise that "Turkish lower case i" rule 2022-08-23 07:48:50 +00:00
Athanasius
19eb012e1f eddn-report: Bump EDDLite to 2.3.0 2022-08-22 15:55:14 +00:00
Athanasius
59f5536a02 eddn-report: EDDiscovery outfitting/2 unicode 'i' 2022-08-22 07:19:59 +00:00
Athanasius
9fca2e166e Merge branch 'develop' of github.com:EDCD/EDDN into develop 2022-08-22 07:14:29 +00:00
Athanasius
14497f4230 eddn-report-log-errors: Bump EDDiscovery to 15.1.1.0 2022-08-18 10:32:42 +00:00
Athanasius
4da9a4eeec
README: Change Discord URL to channel-specific one. 2022-07-26 12:44:17 +01:00
Athanasius
930632b0e9
README: Change Discord URL to channel-specific one. 2022-07-26 12:43:40 +01:00
Athanasius
a7b96c3228
scripts/eddn errors: Use 'in' form for EVA variants 2022-06-24 14:52:43 +01:00
Athanasius
3f49a1bca0
Merge branch 'master' into live 2022-06-24 14:50:38 +01:00
Athanasius
9a9a09bee3
Merge branch 'develop' 2022-06-24 14:50:17 +01:00
Athanasius
4da53bcc40
Merge branch 'develop' of github.com:EDCD/EDDN into develop 2022-06-24 14:48:48 +01:00
Athanasius
723e966b37
docs/README schemas: Be explicit about sub-second timestamp resolution 2022-06-24 14:48:11 +01:00
Athanasius
3fa5012139 scripts/eddn-errors: EDMC - Put back in trap for mystery disallowed 2022-06-20 09:56:40 +00:00
Athanasius
83a7d451ef scripts/eddn-errors: EDMC - two fsssignaldiscovered issues 2022-06-19 10:37:20 +00:00
Athanasius
159c02caf1 scripts/eddn-errors: Also ignore "EVA [Android]" 2022-06-19 10:31:19 +00:00
Athanasius
353c5a2381 scripts/eddn-errors: EDSM - Console version now 1.0.2 2022-06-19 10:26:31 +00:00
Athanasius
bd7a0d6ab9 scripts/eddn-errors: EDDLite - remove traps 2022-06-19 10:23:37 +00:00
Athanasius
e297f24c73 scripts/eddn-errors: EDD version now 2.2.0 2022-06-19 10:23:03 +00:00
Athanasius
75f744abe5 scripts/eddn-errors: EDD shipyard/outfitting trap removed 2022-06-19 10:22:22 +00:00
Athanasius
13215806e4 scripts/eddn-errors: EDD approachsettlement/_Localised trap removed 2022-06-19 10:21:41 +00:00
Athanasius
8e3e279592 scripts/eddn-errors: EDD approachsettlement/Latitude trap removed 2022-06-19 10:20:52 +00:00
Athanasius
4ceac7bc8b scripts/eddn-errors: Bump EDD to 15.0.4.0 2022-06-19 10:20:32 +00:00
Athanasius
651bf998a7 scripts/eddn-errors: Remove EDMC approachsetttlemtn/missing Latitude trap 2022-06-19 10:18:27 +00:00
Athanasius
f6345b1705 eddn/report-errors: Remove other EDMC misc trap 2022-06-19 10:17:13 +00:00
Athanasius
66dfedd2af scripts/eddn-errors: Remove EDMC misc errors trap 2022-06-19 10:16:40 +00:00
Athanasius
81344cb67a scripts/eddn-errors: Remove EDMC codexentry trap 2022-06-19 10:16:04 +00:00
Athanasius
2222df7591
Merge branch 'master' into live 2022-06-18 12:02:03 +01:00
Athanasius
4885dacf13
Merge branch 'beta' 2022-06-18 12:01:28 +01:00
Athanasius
658dddfbe8
Merge branch 'live' of github.com:EDCD/EDDN into live 2022-06-16 13:53:57 +01:00
Athanasius
31fc908eac
Gateway: Remove all form-encoded support
This causes issues, at the least, with compressed messages that 'look' like
they decompressed body is form-encoded.  18385 messages in the last month
rejected due to this.

No actually valid form-encoded messages in that time frame.
2022-06-16 13:53:20 +01:00
Athanasius
ff83ede948
Gateway: Remove all form-encoded support
This causes issues, at the least, with compressed messages that 'look' like
they decompressed body is form-encoded.  18385 messages in the last month
rejected due to this.

No actually valid form-encoded messages in that time frame.
2022-06-16 13:27:11 +01:00
Athanasius
a6fa60431a
Merge pull request #191 from EDCD/enhancement/152/schema-fsssignaldiscovered
schemas/fsssignaldiscovered: Rework based on in-game findings
2022-06-15 14:08:30 +01:00
Athanasius
56b4e20238
Settings.py: Add missing / for fsssignaldiscovered/1 schema 2022-06-15 14:03:02 +01:00
Athanasius
5d945297e1
schemas/fsssignaldiscovered: timestamp required per signal 2022-06-15 12:42:53 +01:00
Athanasius
3dbfd18188
schemas/fsssignaldiscovered: Rework for per-signal timestamp & misc. clarifications
* Per-signal `timestamp` due to the nature of USS signals.
* Keeping `message`->`timestamp` so any Listener relying on it being there
  isn't tripped up (it's present in all other schemas).
* Specifiy that each `signals` member should have `event` key/value pair
  removed.
* Mandate removal of `SystemAddress` from each `signals` member.
* Receivers: Only `horizons` and `odyssey` augmentations are optional.
* Updated examples for these changes.
2022-06-15 11:52:25 +01:00
Athanasius
d33c752c36
schemas/fsssignaldiscovered: README: Remove timestamp/SystemAddress from each signal 2022-06-14 14:03:49 +01:00
Athanasius
86f56eaac2
schemas/fsssignaldiscovered README: Reworked for changed schema
* Purely event-based batching, no timer.
* Outline Horizons/Odyssey differences.
* Point out that USS are manually scanned, so different in time nature.
* StarSystem renamed from systemName.
* StarSystem and StarPos now mandatory.
2022-06-14 14:01:36 +01:00
Athanasius
329d59831f
schemas/fsssignaldiscovered: Rework based on in-game findings
1. Unix, not DOS, line-endings.
2. `message`->`timestamp` instead of per signal.
3. `message`->`SystemAddress` instead of per signal.
4. `StarSystem` and `StarPos` augmentations now mandatory.
2022-06-14 13:59:13 +01:00
Athanasius
04c3d4f270
Merge pull request #154 from norohind/feature/152/FSSSignalDiscovered
FSSSignalDiscovered event support
2022-06-14 13:18:06 +01:00
732de9bdd6
FSSSignalDiscovered doc 2022-06-13 22:40:08 +03:00
fb9904306b
FSSSignalDiscovered doc: add examples 2022-06-13 22:40:08 +03:00
03caeaa20c
FSSSignalDiscovered: initial documentation 2022-06-13 22:40:05 +03:00
6dbc9e392a
FSSSignalDiscovered: don't pass $USS_Type_MissionTarget; USS_Type 2022-06-13 22:36:12 +03:00
5386ed2c64
FSSSignalDiscovered: add properties 2022-06-13 22:36:12 +03:00
036e918fe9
FSSSignalDiscovered: optional systemName and StarPos 2022-06-13 22:36:12 +03:00
912fa0e064
WIP: FSSSignalDiscovered event support 2022-06-13 22:35:58 +03:00
Athanasius
9a8ca522e6
docs/Developers: Fix two minor typos 2022-06-13 10:33:13 +01:00
Athanasius
93b7dc07c2
Merge branch 'master' into live 2022-06-01 12:53:34 +01:00
Athanasius
12882b17da
Merge branch 'beta' 2022-06-01 12:52:03 +01:00
Athanasius
beeb73a6fb
Merge pull request #189 from EDCD/enhancement/188/augmentations-crosschecks
schemas: Ensure need for cross-checks on all augmentations is documented
2022-06-01 12:50:58 +01:00
Athanasius
85031ba2b0
schemas/template: Update template for StarSystem default & cross-checks
* New schemas will need to use `StarSystem`, not `SystemName` or `System`, if
  applicable, so have that example here.
* Any such augmentations need the cross-check mandating.
2022-05-31 13:21:49 +01:00
Athanasius
c3149f06bc
schemas/journal: Better word StarSystem and StarPos Augmentation docs
And also include the MUST about cross-checks.
2022-05-29 15:41:13 +01:00
Athanasius
bc628bff6f
schemas/journal: All relevant events already have SystemAddress
So there's no need to document it as an augmentation.  This was an error
based on examining the EDMC code.
2022-05-29 15:37:44 +01:00
Athanasius
e78ecc4ae7
schemas/scanbarycentre: Senders MUST apply cross-check on augmentations 2022-05-29 15:07:36 +01:00
Athanasius
c47699f11a
schemas/navbeaconscan: Senders MUST apply cross-check on augmentations 2022-05-29 15:05:01 +01:00
Athanasius
209a02a3bb
schemas/fssdiscoveryscan: Senders MUST apply cross-check on StarPos augmentation 2022-05-29 15:03:17 +01:00
Athanasius
fbdd531372
schemas/fssallbodiesfound: Senders MUST apply cross-check on StarPos augmentation 2022-05-29 15:00:44 +01:00
Athanasius
509521dd83
schemas/codexentry: Senders MUST apply cross-check on StarPos augmentation 2022-05-29 14:57:54 +01:00
Athanasius
3b84e851b8
schemas/approachsettlement: Senders MUST apply cross-checks on augmentations 2022-05-29 14:48:42 +01:00
Athanasius
d10b081be4
docs: Outline rules and caveats about data Augmentations
* Many will need a location cross-check.
* Call out this need in the fssbodysignals README.
2022-05-29 14:17:30 +01:00
Athanasius
370cef676f schemas/fssbodysignals: Use StarSystem not SystemName
This matches what's done in other schemas, and allows for use of common
code in EDMC.
2022-05-29 12:36:53 +00:00
Athanasius
bad1e3610b Merge branch 'beta' of github.com:EDCD/EDDN into beta 2022-05-29 11:19:28 +00:00
Athanasius
8e5b17acdd schemas/fssbodysignals: Augment also with SystemName (as per schema) 2022-05-29 11:18:53 +00:00
Athanasius
70a04a4f77
docs/Developers: Call out that Listeners need to pay attention to Augmentations 2022-05-29 12:05:05 +01:00
Athanasius
2aa605a2b3
Merge pull request #186 from spansh/fssbodysignals-body-name
Added BodyName field to FSSBodySignals
2022-05-25 16:48:11 +01:00
Gareth Harper
cda25f4882 added missing BodyName field 2022-05-25 15:46:13 +00:00
Athanasius
497a7603f3 Merge branch 'develop' into beta 2022-05-25 14:59:47 +00:00
Athanasius
a497c8463b Merge branch 'develop' of github.com:EDCD/EDDN into develop 2022-05-25 14:57:43 +00:00
Athanasius
3464c1b1cd
Merge pull request #185 from spansh/fssbodysignals
added fss body signals journal event
2022-05-25 15:56:08 +01:00
Gareth Harper
b9e624a351 make gateway use new schema 2022-05-25 14:39:55 +00:00
Gareth Harper
bece26156e added fss body signals journal event 2022-05-25 14:39:55 +00:00
Athanasius
91c6ef0108 scripts/eddn-report-log-errors: Handle non-parsable softwareVersion 2022-04-24 10:08:19 +00:00
Athanasius
de6551002f eddn-report-log-errors: fix #! line 2022-03-23 08:20:55 +00:00
Tobias Speicher
522189ec36
refactor: replace deprecated String.prototype.substr()
.substr() is deprecated so we replace it with .slice() which works similarily but isn't deprecated

Signed-off-by: Tobias Speicher <rootcommander@gmail.com>
2022-03-22 10:02:41 +01:00
Athanasius
61661926bc eddn-report-log-errors: New EDAOS shipyard/2 error 2022-03-20 09:12:56 +00:00
Athanasius
26dac58ceb eddn-report-log-errors: Some EDD 15.0.0.0 reported issues 2022-03-12 08:32:57 +00:00
Athanasius
1d15c546a8 scripts/eddn-report: Add Moonlight/1.3.4/Scan case 2022-02-27 18:58:32 +00:00
Athanasius
de277c88c7
scripts/eddn-report-log-errors: Re-sync with develop 2022-02-27 18:55:22 +00:00
Athanasius
18840d9f82
Merge branch 'develop' 2022-02-27 18:47:48 +00:00
Athanasius
7b3dc68ad4 Merge branch 'develop' of github.com:EDCD/EDDN into develop 2022-02-27 18:37:02 +00:00
Athanasius
78c71ce3ee
Merge pull request #183 from jcjveraa/develop
Add a very simple Java subscription example with JeroMQ 0.52
2022-02-27 18:29:30 +00:00
JelleV
aeeab4f4d2 Update SimpleJavaEDDNSubscribe.java 2022-02-27 17:42:59 +01:00
JelleV
47091574a3 A simple Java subscribe example with jermq 2022-02-27 17:41:35 +01:00
Athanasius
6607e3eb45 scripts/eddn-report-log-errors: EDSM/1.0.3: Materials as dict 2022-02-22 15:43:59 +00:00
Athanasius
2b141bf8ac scripts/eddn-report-log-errors: New 'EDSM'/1.0.3/journal/Scan error
* Also corrects the conditionals to both skip this and always log
  anything else.
2022-02-21 10:15:53 +00:00
Athanasius
a93c342550 scripts/eddn-report-log-errors: Ensure only 'known' things aren't printed
* Bump EDMC version to 5.3.0
* Use matching *for* known things and `pass`, and ensure there's an
  "else print" everywhere to catch unknown things.
2022-02-20 10:55:42 +00:00
Athanasius
b38659a6f8 Merge branch 'develop' of github.com:EDCD/EDDN into develop 2022-02-20 08:30:56 +00:00
Athanasius
dfead5b2ab scripts/eddn-report-log-errors: Don't print for 'old' G19s Companion 2022-02-20 08:30:05 +00:00
Athanasius
153edc27d4
Merge branch 'master' into live 2022-02-19 11:42:27 +00:00
Athanasius
d0cbae6b7a
Merge branch 'master' of github.com:EDCD/EDDN 2022-02-19 11:41:53 +00:00
Athanasius
447bf42fec
Merge branch 'develop' into beta 2022-02-19 11:39:33 +00:00
Athanasius
42866fdda9
approachesettlement/1: Add no-MarketID samples for testing 2022-02-19 11:38:56 +00:00
Athanasius
77a2d41d96
approachsettlement/1: Allow MarketID to be optional & document why 2022-02-19 11:29:19 +00:00
Athanasius
8c2a5dca6f scripts/eddn-report-log-errors: Use fileinput & update for latest
* Use fileinput, makes it easy to use '-' as 'stdin please'.
* EDDLite 2.0.0.0: Bad date-time
* EDMC >= 5.2.4: approachsettelement/1 issues
2022-02-18 18:07:14 +00:00
Athanasius
05d5d0215a scripts/eddn-report-log-errors: Use a semantic_version comparison
Hardcoding to only **equal** to 'current known latest version' requires
maintenance on any new release of a Sender.  So leverage
`semantic_version.Version.coerce('<version>')` instead so we catch "this
or later versions".
2022-02-17 11:06:01 +00:00
50 changed files with 1993 additions and 175 deletions

View File

@ -65,14 +65,11 @@ then you're probably looking for one of the sites listed below. NB: These are
listed in name-alphabetical order and no particular ranking or endorsement is
intended.
- [EDDB](https://eddb.io/) - a website which tries to act as a database of all
the data available in the game. In general EDDB tries to help finding
stuff which players are looking for.
- [EDSM](https://www.edsm.net/) - originally focused on being a 'Star Map',
but has since expanded its functionality. Of particular interest to
in-game explorers.
- [Inara](https://inara.cz/) - a popular alternative to EDDB, with a lot of
its own unique functionality.
- [Inara](https://inara.cz/) - a popular alternative to the now defunct EDDB,
with a lot of its own unique functionality.
- [Spansh](https://www.spansh.co.uk/plotter) - originally this had one tool,
a 'Neutron Star' route plotter, but has since expanded into offering many
other route plotting tools and general data searching.
@ -91,10 +88,6 @@ use:
large, but is currently the only source of an "all known bodies" dump.
Pay attention to the 'Generated' "time ago" column.
- [EDDB dumps](https://eddb.io/api) represent a snapshot of the data EDDB uses.
NB: There has been no "bodies" data for years now, EDDB itself stopped
updating or adding to this.
- [EDSM nightly dumps](https://www.edsm.net/en/nightly-dumps) represent a
snapshot of the data EDSM uses. NB: there's only a "last 7 days" bodies
dump as the full data proved too large to dump in a timely manner.
@ -171,5 +164,5 @@ Hosting is currently provided by the
### Contacting the EDDN team
* [EDCD Discord](https://discord.gg/XBsdCq9) - **Use the `#eddn` channel**.
* [EDCD Discord - #eddn channel](https://discord.gg/DdqJ8nWVGc)
* [E:D forum thread](https://forums.frontier.co.uk/threads/elite-dangerous-data-network-eddn.585701/#post-9400060)

View File

@ -78,7 +78,7 @@ for service in gateway monitor relay ;
do
log "Service: ${service}"
log " Expiring old logs..."
find . -name "${service}.log.*.gz" -a -atime +${MAX_LOGFILE_AGE} -exec rm -fv {} \;
find . -name "${service}.log.*.gz" -a -atime +${MAX_LOGFILE_AGE} -exec rm -f {} \;
log " DONE"
log " Checking if current logfile needs archiving..."
@ -106,7 +106,7 @@ do
fi
# Now compress the newly archived log
gzip -9v "${ARCHIVED_NAME}"
gzip -9 "${ARCHIVED_NAME}"
log " DONE"
else
log " No"

View File

@ -241,7 +241,7 @@
// Loop results
$.each(schemasCount, function(schema, hits){
// IF TEST CONTINUE
if(schema.substr(schema.length - 4) == 'test')
if(schema.slice(-4) == 'test')
return;
var slug = makeSlug(schema);

View File

@ -1,7 +1,7 @@
## Introduction
EDDN is a
[zermoq](https://zeromq.org/) service which allows players of the game
[zeromq](https://zeromq.org/) service which allows players of the game
[Elite Dangerous](https://www.elitedangerous.com/), published
by [Frontier Developments](https://www.frontier.co.uk/), to upload game data so
that interested listeners can receive a copy.
@ -15,7 +15,7 @@ representing this game data and then passes it on to any interested listeners.
## Sources
There are two sources of game data, both provided by the publisher of the game,
Frontier Developerments. They are both explicitly approved for use by
Frontier Developments. They are both explicitly approved for use by
third-party software.
### Journal Files
@ -127,13 +127,12 @@ The body of an EDDN message is a JSON object in UTF-8 encoding. If you do not
compress this body then you MUST set a `Content-Type` header of
`applicaton/json`.
For historical reasons URL form-encoded data *is* supported, **but this is
deprecated and no new software should attempt this method**. We
purposefully do not further document the exact format for this.
You *MAY* use gzip compression on the body of the message, but it is not
required. If you do compress the body then you **MUST* send a `Content-Type`
header of `gzip` instead of `application/json`.
required. If you do compress the body then you **MUST* send a
`Content-Encoding` header of `gzip`.
**Due to issues when messages are compressed, form-encoded data is NO LONGER
SUPPORTED as of 2022-06-16.**
You should be prepared to handle all scenarios where sending of a message
fails:
@ -176,6 +175,8 @@ For example, a shipyard message, version 2, might look like:
"$schemaRef": "https://eddn.edcd.io/schemas/shipyard/2",
"header": {
"uploaderID": "Bill",
"gameversion": "4.0.0.1451",
"gamebuild": "r286916/r0 ",
"softwareName": "My excellent app",
"softwareVersion": "0.0.1"
},
@ -184,7 +185,8 @@ For example, a shipyard message, version 2, might look like:
"stationName": "Samson",
"marketId": 128023552,
"horizons": true,
"timestamp": "2019-01-08T06:39:43Z",
"odyssey": true,
"timestamp": "2022-09-27T06:39:43Z",
"ships": [
"anaconda",
"dolphin",
@ -201,6 +203,111 @@ For example, a shipyard message, version 2, might look like:
}
```
---
### Contents of `header`
You **MUST** send the `header` component of the message.
#### uploaderID
The EDDN Relay will obfuscate the `uploaderID` value to prevent long-term
tracking of individual players. Please **DO** send a sensible
`uploaderID` value, preferably simply the relevant in-game Commander name.
#### softwareName
You **MUST** set a unique, and self-consistent, value of `softwareName` so
that you can be easily identified should any issues be found with the messages
you send.
#### softwareVersion
You **MUST** set a pertinent value for `softwareVersion`. We would recommend
using [Semantic Versionining](https://semver.org/#semantic-versioning-specification-semver)
in your project.
Listeners MAY make decisions on whether to accept data, or to treat it
differently, based on this. As such you **MUST** increment your version
number if you make any changes to the content of messages your software sends
to EDDN.
#### `gameversions` and `gamebuild`
To ensure that Listeners can make decisions on how to handle data based on
the client and feature set it came from there are two mandatory fields in
the headers of EDDN messages. NB: Initially the *schemas* do not actually
make these mandatory, **but all Senders MUST make every effort to include
them ASAP**.
Where present in the data source the `gameversion` value **MUST** come from
the field of that name in the data source, i.e. from either `Fileheader` or
`LoadGame` as outlined below.
1. If you are using Journal files directly then you **MUST** use the value
from the`Fileheader` event. Values from `LoadGame` are also acceptable, but
there are some events before that which might be relevant to EDDN messages,
especially as the ordering of 'startup'/login events can change with game
patches.
2. If you are using the CAPI `/journal` endpoint to retrieve and process
Journal events then:
1. You will not have `Fileheader` available.
2. If the field is present in the `LoadGame` event, as in 4.0 clients,
use its value.
3. If `LoadGame` does not have the field, as with 3.8 Horizons
clients (up to at least `3.8.0.1400`), you **SHOULD** set the value to
`"CAPI-Legacy-journal"`. If, for reasons of code architecture, you are
unable to determine that data was CAPI-sourced then you MAY set it to
`""` instead, **but this is only a fallback and you should endeavour to
send a more useful value**.
3. If you are sourcing data from other CAPI endpoints, i.e. for commodity,
shipyard, outfitting or fcmaterials_capi messages, then you **SHOULD** set
the values appropriately as per the CAPI host and endpoint the data came
from. You **MUST NOT** use the value from any Journal you are also reading
for the user. The general form is `"CAPI-(Live|Legacy)-<endpoint>"`.
1. If it's a commodity message from the Live CAPI host, then use
`"CAPI-Live-market"`. If it was from the Legacy CAPI host then use
`"CAPI-Legacy-market"`.
2. If it's a shipyard message, then use `"CAPI-Live-shipyard"` or
`"CAPI-Legacy-shipyard"`.
3. If it's an oufitting message, then also use `"CAPI-Live-shipyard"` or
`"CAPI-Legacy-shipyard"`.
4. If it's an fcmaterials_capi message, then use `"CAPI-Live-market`" or
`"CAPI-Legacy-market"`, as the data comes from that endpoint.
Again, if your code architecture doesn't allow for signalling that the data
source was CAPI, then you MAY set it to `""` instead, **but this is only a
fallback and you should endeavour to send a more useful value**.
For `gamebuild` you **MUST** use the value of the `build` field in the data
source, following the same logic as for `gameversion` above, else send as `""`.
An alternative to the latter is to mirror the `gameversion` value, **but only
where that has not come from a Journal value**, i.e. `CAPI-...` strings.
Do **NOT** strip any leading or trailing white space, pass it through as-is.
For emphasis, *if you cannot set a data-source value, or an appropriate
`"CAPI-..."` value then you **MUST** still send the field with an empty string
value.*
Examples of valid values:
| Data Source | Data Type | Game Galaxy | gameversion | gamebuild |
|------------:|--------------:|:-----------:|:----------------------|:----------------------|
| Journal | Journal | Live | `"4.0.0.1475"` | `"r289563/r0 "` |
| Journal | Journal | Legacy | `"3.8.0.1400"` | `"r289583/r0 "` |
| CAPI | `/journal` | Live[^1] | `"4.0.0.1475"` | `"r289563/r0 "` |
| CAPI | `/journal` | Legacy[^2] | `"CAPI-Legacy-journal"` | `""` |
| CAPI | `/journal` | Legacy[^2] | `"CAPI-Legacy-journal"` | `"CAPI-Legacy-journal"` |
| CAPI | `/market`[^3] | Live | `"CAPI-Live-market"` | `""` |
| CAPI | `/market`[^3] | Live | `"CAPI-Live-market"` | `"CAPI-Live-market"` |
| CAPI | `/market`[^3] | Legacy | `"CAPI-Legacy-market"` | `""` |
| CAPI | `/market`[^3] | Legacy | `"CAPI-Legacy-market"` | `"CAPI-Legacy-market"` |
[^1]: Live is a 4.0 client and has `gameversion` in `LoadGame` which is present
in CAPI-sourced journals.
[^2]: Legacy is a 3.8 client and last tested still doesn't have `gameversion`
in `LoadGame`, and CAPI-sourced journals don't have `Fileheader`.
[^3]: And similarly for other CAPI endpoints, e.g. `shipyard`.
---
### Contents of `message`
Every message MUST comply with the Schema its `$schemaRef` value cites. Each
Schema file should have a matching `<schema>-README.md` file in the
@ -252,10 +359,14 @@ so that you are aware of any changes to Schemas.
#### `horizons` and `odyssey` flags
Where the Schema allows for them, `horizons` and `odyssey` keys SHOULD be
Where the Schema allows for them, `horizons` and `odyssey` keys **MUST** be
added with appropriate boolean values. `null` is not allowed in the values,
so **if you cannot determine a value do not include that key at all**.
To emphasise that, *in the case where there is no `Odyssey` boolean in the
`LoadGame` event* **DO NOT INCLUDE IT IN THE EDDN MESSAGE**. No, not with a
`false` value. **DO NOT INCLUDE IT**.
The only source of these is the `LoadGame` event from journals. It's present
both in the PC local files and the CAPI journal data. If you're
composing a shipyard or outfitting message from CAPI data then it is
@ -264,42 +375,90 @@ possible to synthesise the `horizons` flag. For now consult the function
[EDMarketConnector:plugins/eddn.py](https://github.com/EDCD/EDMarketConnector/blob/stable/plugins/eddn.py)
for a method to achieve this.
As of 2022-01-29 the following was observed for the `LoadGame` events as
As of 2022-09-27 the following was observed for the `LoadGame` events as
present in CAPI-sourced Journal files (which were confirmed to match the
PC-local files for these events):
- PC Odyssey Client, game version `4.0.0.1100`:
- PC Odyssey Client, game version `4.0.0.1450`:
```json
{ "timestamp":"2022-01-29T16:17:02Z", "event":"LoadGame", "FID":"<elided>", "Commander":"<elided>", "Horizons":true, "Odyssey":true,...
{ "timestamp":"2022-09-27T09:47:35Z", "event":"LoadGame", "FID":"<elided>", "Commander":"<elided>", "Horizons":true, "Odyssey":true, ...
```
- PC Horizons Client, game version `3.8.0.404`, no `Odyssey` key was
- PC Horizons 4.0 Client, game version `4.0.0.1450`:
```json
{ "timestamp":"2022-09-27T11:25:45Z", "event":"LoadGame", "FID":"<elided>", "Commander":"<elided>", "Horizons":true, "Odyssey":false, ...
```
- PC Horizons Client, game version `3.8.0.407`, no `Odyssey` key was
present:
```json
{ "timestamp":"2022-01-29T16:15:07Z", "event":"LoadGame", "FID":"<elided>", "Commander":"<elided>", "Horizons":true,...
{ "timestamp":"2022-09-27T11:28:53Z", "event":"LoadGame", "FID":"<elided>", "Commander":"<elided>", "Horizons":true, ...
```
- PC 'base' Client, game version `3.8.0.404`, no `Odyssey` key was
- PC 'base' Client, game version `3.8.0.407`, no `Odyssey` key was
present:
```json
{ "timestamp":"2022-01-29T16:11:54Z", "event":"LoadGame", "FID":"<elided>", "Commander":"<elided>", "Horizons":false,...
{ "timestamp":"2022-09-27T11:31:32Z", "event":"LoadGame", "FID":"<elided>", "Commander":"<elided>", "Horizons":false, ...
```
Do not attempt to use the value(s) from a `Fileheader` event as the semantics
are different. With clients 3.8.0.404 and 4.0.0.1100 the following was observed:
are different. With clients 3.8.0.407 and 4.0.0.1450 the following was observed:
| Game Client | Fileheader | LoadGame |
| ---------------: | ---------------- | ------------------------------: |
| Base | "Odyssey":false | "Horizons":false |
| Horizons | "Odyssey":false | "Horizons":true |
| Odyssey | "Odyssey":true | "Horizons":true, "Odyssey":true |
| Game Client | Fileheader | LoadGame |
| ---------------: |-----------------|---------------------------------:|
| Base | "Odyssey":false | "Horizons":false |
| Horizons 3.8 | "Odyssey":false | "Horizons":true |
| Horizons 4.0 | "Odyssey":true | "Horizons":true, "Odyssey":false |
| Odyssey | "Odyssey":true | "Horizons":true, "Odyssey":true |
NB: The 'Base' client appears to simply be the Horizons client with any
Horizons-only features disabled.
- In the `Fileheader` event it's indicating whether it's an Odyssey game client.
- In the `LoadGame` it's indicating whether Horizons and/or Odyssey features are
active, but in the non-Odyssey game client case you only get the Horizons
boolean.
- In the `Fileheader` event the `Odyssey` flag is indicating whether it's a
`4.0` game client.
- In the `LoadGame` event the `Horizons` and `Odyssey` flags indicate if those
features are active, but in the `3.8` game client case you only get the
`Horizons` boolean.
#### Other data Augmentations
Some schemas mandate that extra data be added, beyond what is in the source
data, to aid Listeners.
This is usually related to specifying which system an event took place in, and
usually means ensuring there is the full set of:
1. `StarSystem` - the name of the system.
2. `SystemAddress` - the game's unique numerical identifier for the system.
3. `StarPos` - The system's co-ordinates.
Whilst it can be argued that any Listener should see preceding event(s) that
give any missing information where at least the system name or `SystemAddress`
is already in the event data, this might not always be true. So Senders MUST
add this data where required. It helps to fill out basic system information
(name, SystemAddress and co-ordinates).
However, there is a known game bug that can result in it stopping writing to
the game journal, and some observed behaviour implies that it might then later
resume writing to that file, but with events missing. This means any Sender
that blindly assumes it knows the current system/location and uses that for
these Augmentations might send erroneous data.
1. **Senders MUST cross-check available event data with prior 'location'
event(s) to be sure the correct extra data is being added.**
2. **Listeners SHOULD realise that any data added as an Augmentation might be
in error.**
For Senders, if the source data only has `SystemAddress` then you MUST check
that it matches that from the prior `Location`, `FSDJump` or `CarrierJump`
event before adding `StarSystem` and `StarPos` data to a message. Drop the
message entirely if it does not match. Apply similar logic if it is only
the system's name that is already present in data. Do not blindly add
`SystemAddress` or `StarPos`. Likewise, do not blindly add `StarPos` if the
other data is already in the source, without cross-checking the system name
and `SystemAddress`.
Listeners might be able to apply their own cross-check on received messages,
and use any mismatch with respect to what they already know to make a decision
whether to trust the augmented data. Flagging it for manual review is probably
wise.
### Server responses
There are three possible sources of HTTP responses when sending an upload
@ -435,7 +594,11 @@ data you will first need to zlib-decompress each message. Then you will
have a textual JSON object as per the Schemas.
In general, check the guidance for [Uploading messages](#uploading-messages)
for the expected format of the messages.
for the expected format of the messages. **Pay particular attention to any
schema-specific Augmentations**. Whilst Senders MUST make every effort to
ensure such data is correct it is possible that bugs in either their code, or
the game itself, could mean it is incorrect. Listeners use such data at
their own risk.
Consumers can utilise the `$schemaRef` value to determine which Schema a
particular message is for. There is no need to validate the messages

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>SimpleJavaEDDNSubscribe</artifactId>
<version>1.0-SNAPSHOT</version>
<name>SimpleJavaEDDNSubscribe</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.11</maven.compiler.source>
<maven.compiler.target>1.11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jeromq</artifactId>
<version>0.5.2</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

View File

@ -0,0 +1,53 @@
package org.eddn.examples;
import java.util.zip.Inflater;
import org.zeromq.SocketType;
import org.zeromq.ZMQ;
import org.zeromq.ZContext;
public class SimpleJavaEDDNSubscribe {
private static final int MAX_MESSAGE_SIZE_KB = 200;
private static final String EDDN_SERVER = "tcp://eddn.edcd.io:9500";
private static ZContext context;
public static void main(String[] args) throws Exception {
context = new ZContext();
String jsonMessage = getOneMessage();
System.out.println(jsonMessage);
context.close();
}
private static String getOneMessage() throws Exception {
byte[] deflatedMessage = receiveOneDeflatedMessage();
return inflateMessage(deflatedMessage);
}
private static byte[] receiveOneDeflatedMessage() {
ZMQ.Socket socket = getEDDNSubscriptionSocket();
byte[] deflatedMessage = socket.recv();
return deflatedMessage;
}
private static ZMQ.Socket getEDDNSubscriptionSocket() {
ZMQ.Socket socket = context.createSocket(SocketType.SUB);
socket.connect(EDDN_SERVER);
// need to subscribe to the empty topic to receive anything
socket.subscribe("");
return socket;
}
public static String inflateMessage(byte[] bytes) throws Exception {
Inflater decompresser = new Inflater();
decompresser.setInput(bytes);
byte[] result = new byte[MAX_MESSAGE_SIZE_KB * 1024];
int resultLength = decompresser.inflate(result);
decompresser.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
return outputString;
}
}

View File

@ -15,7 +15,7 @@ those actually running on the Live service.
The Schema files themselves are considered to be the canonical definition of
the required, and allowed, contents of the relevant EDDN message. There
**SHOULD** be an accompanying README file, e.g. for `commodity-v3.0.json` there
**MUST** be an accompanying README file, e.g. for `commodity-v3.0.json` there
is also a `commodity-README.md` file in the project root `schemas/` directory.
For more general documentation that all developers wanting to either Upload
@ -29,7 +29,16 @@ It is best to base any new Schema file on
contents all Schemas specify a top-level JSON Object with the data:
1. `$schemaRef` - Which Schema (including version) this message is for.
2. `header` - Object containing mandatory information about the upload;
2. `$id` - The canonical URL for this schema once it is in live service.
1. Remember to have the version as in `journal/1` not `journal-v1.0`.
2. Do **NOT** end this with a `#` empty fragment. This is
[documented](https://json-schema.org/draft/2020-12/json-schema-core.html#section-8.2.1)
as unnecessary.
3. Where there are two separate schemas for the same kind of data, but one
is for Journal-sourced, and the other for CAPI-sourced, you should have
the "filename" of the schema end with `_<source>`, e.g.
`fcmaterials_journal/1` and `fcmaterials_capi/1`.
3. `header` - Object containing mandatory information about the upload;
1. `uploaderID` - a unique ID for the player uploading this data.
Don't worry about privacy, the EDDN service will hash this with a key
that is regularly changed so no-one knows who an uploader is in-game.
@ -45,15 +54,31 @@ contents all Schemas specify a top-level JSON Object with the data:
relevant README file within this documentation, e.g.
[codexentry-README.md](./codexentry-README.md).
Whilst currently (2022-11-23) the `gameversion` and `gamebuild` fields in the
message `header` aren't yet mandatory in the sense of what's in the schema
definitions, all Senders are **strongly encouraged** to send them.
Indeed, the per-schema documentation, for every schema now states:
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
### General EDDN message outline
Each `message` object must have, at bare minimum:
1. `timestamp` - string date and time in ISO8601 format. Whilst this
technically allows for any timezone to be cited you SHOULD provide this in
UTC, aka 'Zulu Time' as in the example above. You MUST ensure that you are
doing this properly. Do not claim 'Z' whilst actually using a local time
that is offset from UTC.
1. `timestamp` - string date and time in ISO8601 format.
1. Whilst this technically allows for any timezone to be cited you SHOULD
provide this in UTC, aka 'Zulu Time' as in the example above.
You MUST ensure that you are doing this properly.
Do not claim 'Z' whilst actually using a local time that is offset from
UTC.
2. Historically we had never been explicit about if Senders should include
sub-second resolution in the timestamps, or if Listeners should be
prepared to accept such. As of 2022-06-24 we are explicitly stating that
Senders **MAY** include sub-second resolution, and Listeners **MUST**
be prepared to accept such.
If you are only utilising Journal-sourced data then simply using the
value from there should be sufficient as the PC game client is meant to

View File

@ -106,10 +106,20 @@ value is what the name would have been in the source Journal data.
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### StarSystem
You MUST add a `StarSystem` string containing the name of the system from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
## Listeners
The advice above for [Senders](#senders), combined with the actual Schema file
*should* provide all the information you need to process these events.

View File

@ -39,7 +39,7 @@
# as a result disallow the key.
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "https://eddn.edcd.io/schemas/newjournalevent/1#",
"id" : "https://eddn.edcd.io/schemas/newjournalevent/1",
"type" : "object",
"additionalProperties" : false,
"required": [ "$schemaRef", "header", "message" ],

View File

@ -19,17 +19,61 @@ discrepancy.**
The primary data source for this schema is the ED Journal event
`ApproachSettlement`.
### MarketID
Whilst the `MarketID` property is not in the required list **YOU MUST
ABSOLUTELY SEND THIS WHEN IT IS PRESENT IN THE SOURCE DATA**.
The only reason it is optional is that there are `ApproachSettlement`
Journal events for things like visitor beacons that do not have a market, and
thus no MarketID.
Examples:
```json
{
"timestamp":"2022-02-18T14:33:35Z",
"event":"ApproachSettlement",
"Name":"Battlegroup's Disappearance",
"SystemAddress":1109989017963,
"BodyID":8,
"BodyName":"Alioth 1 a",
"Latitude":59.972752,
"Longitude":-84.506294
},
{
"timestamp": "2022-02-18T15:02:04Z",
"event": "ApproachSettlement",
"Name": "$Ancient:#index=1;",
"Name_Localised": "Ancient Ruins (1)",
"SystemAddress": 3515254557027,
"BodyID": 13,
"BodyName": "Synuefe XR-H d11-102 1 b",
"Latitude": -46.576923,
"Longitude": 133.985107
},
```
### Augmentations
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarSystem
You MUST add a StarSystem key/value pair representing the name of the system
this event occurred in. Source this from either Location, FSDJump or
CarrierJump as appropriate.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},
@ -33,7 +41,7 @@
"type" : "object",
"description" : "Contains all properties from the listed events in the client's journal minus the Localised strings and the properties marked below as 'disallowed'",
"additionalProperties" : false,
"required" : [ "timestamp", "event", "StarSystem", "StarPos", "SystemAddress", "Name", "MarketID", "BodyID", "BodyName", "Latitude", "Longitude" ],
"required" : [ "timestamp", "event", "StarSystem", "StarPos", "SystemAddress", "Name", "BodyID", "BodyName", "Latitude", "Longitude" ],
"properties" : {
"timestamp": {
"type" : "string",
@ -62,6 +70,49 @@
"maxItems" : 3,
"description" : "Must be added by the sender"
},
"StationGovernment": {
"type" : "string"
},
"StationAllegiance": {
"type" : "string"
},
"StationEconomies": {
"type" : "array",
"items" : {
"type" : "object",
"additionalProperties" : false,
"properties": {
"Name": {
"type" : "string"
},
"Proportion": {
"type" : "number"
}
},
"patternProperties" : {
"_Localised$" : { "$ref" : "#/definitions/disallowed" }
}
}
},
"StationFaction": {
"type" : "object",
"additionalProperties" : false,
"properties": {
"Name": {
"type" : "string"
},
"FactionState": {
"type" : "string"
}
}
},
"StationServices": {
"type" : "array",
"items" : { "type": "string" }
},
"StationEconomy": {
"type" : "string"
},
"SystemAddress": {
"type" : "integer"
},

View File

@ -23,10 +23,17 @@ The primary data source for this schema is the ED Journal event `CodexEntry`.
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
#### BodyID and BodyName
You SHOULD attempt to track the BodyName and BodyID where the player is
and add keys/values for these.

View File

@ -17,6 +17,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},

View File

@ -51,6 +51,11 @@ In the list of commodites:
Limpets - not purchasable in station market) or a *non-empty*`"legality":`
string (not normally traded at this station market).
If the data is sourced from the journal folder:
- Remove the `$` prefix and `_name;` suffix from the `Name` field.
- As the Journal Market.json doesn't contain `economies` or `prohibited` data,
leave these entirely out of the message. You **MUST NOT** send empty lists.
#### Item Category
Remove not only the `Category_Localised` key:values, but also the
`Category` key:value pair from each Item.
@ -60,6 +65,10 @@ Remove not only the `Category_Localised` key:values, but also the
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
### Using CAPI data
It is *not* recommended to use CAPI data as the source as it's fraught with
additional issues. EDMarketConnector does so in order to facilitate

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "Fileheader->gameversion, else LoadGame->gameversion, else 'CAPI-market', else ''."
},
"gamebuild": {
"type" : "string",
"description" : "Fileheader->build, else LoadGame->build, else 'CAPI-market', else ''."
},
"softwareName": {
"type" : "string"
},
@ -36,13 +44,22 @@
"properties" : {
"systemName": {
"type" : "string",
"renamed" : "StarSystem",
"minLength" : 1
},
"stationName": {
"type" : "string",
"renamed" : "StarSystem",
"renamed" : "StationName",
"minLength" : 1
},
"stationType": {
"type" : "string",
"renamed" : "StationType"
},
"carrierDockingAccess": {
"type" : "string",
"renamed" : "CarrierDockingAccess"
},
"marketId": {
"type" : "integer",
"renamed" : "MarketID"
@ -79,7 +96,7 @@
},
"buyPrice": {
"type" : "integer",
"renaamed" : "BuyPrice",
"renamed" : "BuyPrice",
"description" : "Price to buy from the market"
},
"stock": {
@ -152,10 +169,6 @@
"type" : "string",
"minLength" : 1
}
},
"StationType": {
"$ref" : "#/definitions/disallowed",
"description" : "Not present in CAPI data, so removed from Journal-sourced data"
}
}
}

View File

@ -0,0 +1,42 @@
# EDDN DockingDenied Schema
## Introduction
Here we document how to take data from an ED `` Journal
Event and properly structure it for sending to EDDN.
Please consult [EDDN Schemas README](./README-EDDN-schemas.md) for general
documentation for a schema such as this.
If you find any discrepancies between what this document says and what is
defined in the relevant Schema file, then you should, in the first instance,
assume that it is the Schema file that is correct.
**PLEASE open
[an issue on GitHub](https://github.com/EDCD/EDDN/issues/new/choose)
to report any such anomalies you find so that we can check and resolve the
discrepancy.**
## Senders
The primary data source for this schema is the ED Journal event
`DockingDenied`.
Examples:
```json
{
"timestamp":"2022-06-10T10:09:41Z",
"event":"DockingDenied",
"Reason":"RestrictedAccess",
"MarketID":3706117376,
"StationName":"V7G-T1G",
"StationType":"FleetCarrier"
}
```
### Augmentations
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.

View File

@ -0,0 +1,82 @@
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "https://eddn.edcd.io/schemas/dockingdenied/1#",
"type" : "object",
"additionalProperties" : false,
"required": [ "$schemaRef", "header", "message" ],
"properties": {
"$schemaRef": {
"type" : "string"
},
"header": {
"type" : "object",
"additionalProperties" : true,
"required" : [ "uploaderID", "softwareName", "softwareVersion" ],
"properties" : {
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},
"softwareVersion": {
"type" : "string"
},
"gatewayTimestamp": {
"type" : "string",
"format" : "date-time",
"description" : "Timestamp upon receipt at the gateway. If present, this property will be overwritten by the gateway; submitters are not intended to populate this property."
}
}
},
"message": {
"type" : "object",
"description" : "Contains all properties from the listed events in the client's journal minus the Localised strings and the properties marked below as 'disallowed'",
"additionalProperties" : false,
"required" : [ "timestamp", "event", "MarketID", "StationName", "Reason" ],
"properties" : {
"timestamp": {
"type" : "string",
"format" : "date-time"
},
"event" : {
"enum" : [ "DockingDenied" ]
},
"horizons": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has a Horizons pass."
},
"odyssey": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has an Odyssey expansion."
},
"MarketID": {
"type" : "integer"
},
"StationName": {
"type" : "string",
"description" : "Name of station"
},
"StationType": {
"type" : "string",
"description" : "Type of station"
},
"Reason": {
"type" : "string",
"description" : "Reason docking was denied"
}
}
}
},
"definitions": {
"disallowed" : { "not" : { "type": [ "array", "boolean", "integer", "number", "null", "object", "string" ] } }
}
}

View File

@ -0,0 +1,42 @@
# EDDN DockingGranted Schema
## Introduction
Here we document how to take data from an ED `` Journal
Event and properly structure it for sending to EDDN.
Please consult [EDDN Schemas README](./README-EDDN-schemas.md) for general
documentation for a schema such as this.
If you find any discrepancies between what this document says and what is
defined in the relevant Schema file, then you should, in the first instance,
assume that it is the Schema file that is correct.
**PLEASE open
[an issue on GitHub](https://github.com/EDCD/EDDN/issues/new/choose)
to report any such anomalies you find so that we can check and resolve the
discrepancy.**
## Senders
The primary data source for this schema is the ED Journal event
`DockingGranted`.
Examples:
```json
{
"timestamp":"2023-10-01T14:56:34Z",
"event":"DockingGranted",
"LandingPad":41,
"MarketID":3227312896,
"StationName":"Evans Horizons",
"StationType":"Coriolis"
}
```
### Augmentations
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.

View File

@ -0,0 +1,82 @@
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "https://eddn.edcd.io/schemas/dockinggranted/1#",
"type" : "object",
"additionalProperties" : false,
"required": [ "$schemaRef", "header", "message" ],
"properties": {
"$schemaRef": {
"type" : "string"
},
"header": {
"type" : "object",
"additionalProperties" : true,
"required" : [ "uploaderID", "softwareName", "softwareVersion" ],
"properties" : {
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},
"softwareVersion": {
"type" : "string"
},
"gatewayTimestamp": {
"type" : "string",
"format" : "date-time",
"description" : "Timestamp upon receipt at the gateway. If present, this property will be overwritten by the gateway; submitters are not intended to populate this property."
}
}
},
"message": {
"type" : "object",
"description" : "Contains all properties from the listed events in the client's journal minus the Localised strings and the properties marked below as 'disallowed'",
"additionalProperties" : false,
"required" : [ "timestamp", "event", "MarketID", "StationName" ],
"properties" : {
"timestamp": {
"type" : "string",
"format" : "date-time"
},
"event" : {
"enum" : [ "DockingGranted" ]
},
"horizons": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has a Horizons pass."
},
"odyssey": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has an Odyssey expansion."
},
"MarketID": {
"type" : "integer"
},
"StationName": {
"type" : "string",
"description" : "Name of station"
},
"StationType": {
"type" : "string",
"description" : "Type of station"
},
"LandingPad": {
"type" : "integer",
"description" : "Pad number Cmdr was granted landing to"
}
}
}
},
"definitions": {
"disallowed" : { "not" : { "type": [ "array", "boolean", "integer", "number", "null", "object", "string" ] } }
}
}

View File

@ -0,0 +1,82 @@
# EDDN FCMaterials Schema
## Introduction
This is the documentation for how to take data from an the ED CAPI `/market`
endpoint and properly structure it for sending to EDDN.
Please consult [EDDN Schemas README](./README-EDDN-schemas.md) for general
documentation for a schema such as this.
If you find any discrepancies between what this document says and what is
defined in the relevant Schema file, then you should, in the first instance,
assume that it is the Schema file that is correct.
**PLEASE open
[an issue on GitHub](https://github.com/EDCD/EDDN/issues/new/choose)
to report any such anomalies you find so that we can check and resolve the
discrepancy.**
## Senders
The data source for this schema is the `/market` ED CAPI endpoint. You only
want selected parts of the full data returned for this schema.
You **MUST NOT** construct the message by starting with the entirety of the
CAPI data and then removing everything but what you need. That risks Frontier
adding more data to the endpoint and your `fcmaterials_capi` messages being
rejected as invalid. Instead, construct the message content by setting just
the data that is necessary.
Your `message` object **MUST**:
1. Have an `"event":"FCMaterials"` member to aid Listeners who pass this
through a "usually from the Journal" code path.
2. Set a `"MarketID"` key with the value from `"id"` in the CAPI data.
3. Set a `"CarrierID"` key with the value from the `"name"` in the CAPI data.
4. Set the `"Items"` key's contents directly from the `/market` -> `orders`
-> `onfootmicroresources` CAPI data.
5. Remove any data where the key is `"locName"` from the `"Items"` data.
You **MUST NOT**:
1. Attempt to set a `"CarrierName"` from any source, the `CarrierID` is
sufficient.
### Example algorithm
1. Make a CAPI `/market` query.
2. Set `event`, `MarketID` and `CarrierID` as outlined above.
3. Set `Items` value to the data in `orders.onfootmicroresources`.
4. Process the contents of `Items`, removing any data with a key of `locName`.
### Augmentations
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
You **SHOULD** set these flags from the Journal `FileHeader` data if you are
reasonably sure you have a live game session against which you are performing
CAPI queries.
You **MUST NOT** set them otherwise, as e.g. the player could be active in
the game on another computer, using a different game mode and the CAPI data
will be for that game mode.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
## Listeners
The advice above for [Senders](#senders), combined with the actual Schema file
*should* provide all the information you need to process these events.
Do note that the data source for this is the CAPI, and as such the data is not
the same as for the `fcmaterials_journal` schema:
1. There is no good source of `CarrierName` in CAPI `/market` endpoint data, so
that is not included.
2. The `sales` and `purchases` values do **not** contain the same form of data.
3. The `sales` member of `Items` will be `[]` if there are no sales orders, but
when there are orders:
1. It will be an object/dictionary.
2. The keys are the commodity ID.
3. The value of that key is the rest of the data for that sales order.
4. The `purchases` value:
1. Is always an array, unlike `sales`.
2. As a consequence does **not** provide the commodity id at all, only
the name.

View File

@ -0,0 +1,152 @@
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "https://eddn.edcd.io/schemas/fcmaterials_capi/1",
"type" : "object",
"additionalProperties" : false,
"required": [ "$schemaRef", "header", "message" ],
"properties": {
"$schemaRef": {
"type" : "string"
},
"header": {
"type" : "object",
"additionalProperties" : true,
"required" : [ "uploaderID", "softwareName", "softwareVersion" ],
"properties" : {
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "Value of 'CAPI-market' if possible, else empty string."
},
"gamebuild": {
"type" : "string",
"description" : "Value of 'CAPI-market' if possible, else empty string."
},
"softwareName": {
"type" : "string"
},
"softwareVersion": {
"type" : "string"
},
"gatewayTimestamp": {
"type" : "string",
"format" : "date-time",
"description" : "Timestamp upon receipt at the gateway. If present, this property will be overwritten by the gateway; submitters are not intended to populate this property."
}
}
},
"message": {
"type" : "object",
"description" : "Contains all properties from the listed events in the client's journal minus the Localised strings and the properties marked below as 'disallowed'",
"additionalProperties" : false,
"required" : [ "timestamp", "event", "MarketID", "CarrierID", "Items" ],
"properties" : {
"timestamp": {
"type" : "string",
"format" : "date-time"
},
"event" : {
"enum" : [ "FCMaterials" ]
},
"horizons": {
"type" : "boolean",
"description" : "Boolean value copied from the Journal LoadGame event, when it is present there."
},
"odyssey": {
"type" : "boolean",
"description" : "Boolean value copied from the Journal LoadGame event, when it is present there."
},
"MarketID": {
"type" : "integer"
},
"CarrierID": {
"type" : "string",
"minLength" : 1
},
"Items": {
"properties": {
"purchases": {
"type": "array",
"items": {
"type": "object",
"required": [ "name", "price", "outstanding", "total" ],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"locName": {
"$ref": "#/definitions/disallowed"
},
"outstanding": {
"type": "integer"
},
"price": {
"type": "integer"
},
"total": {
"type": "integer"
}
}
}
},
"sales": {
"anyOf": [
{
"type": "array",
"$comment": "If there are no items then sales is an empty array",
"minItems": 0,
"maxItems": 0
},
{
"type": "object",
"$comment": "If there ARE items then sales is an object, *NOT* an array",
"patternProperties": {
"^[0-9]+$": {
"type" : "object",
"required" : [ "id", "name", "price", "stock" ],
"additionalProperties": false,
"properties": {
"id" : {
"type" : "integer"
},
"name" : {
"type" : "string",
"minLength": 1
},
"locName" : {
"$ref": "#/definitions/disallowed"
},
"price" : {
"type": "integer"
},
"stock": {
"type": "integer"
}
}
}
}
}
]
}
}
}
}
}
},
"definitions": {
"disallowed": {
"not" : {
"type": [
"array", "boolean", "integer", "number", "null", "object", "string"
]
}
}
}
}

View File

@ -0,0 +1,42 @@
# EDDN FCMaterials Schema
## Introduction
This is the documentation for how to take data from an ED `FCMaterials.json`
file and properly structure it for sending to EDDN.
Please consult [EDDN Schemas README](./README-EDDN-schemas.md) for general
documentation for a schema such as this.
If you find any discrepancies between what this document says and what is
defined in the relevant Schema file, then you should, in the first instance,
assume that it is the Schema file that is correct.
**PLEASE open
[an issue on GitHub](https://github.com/EDCD/EDDN/issues/new/choose)
to report any such anomalies you find so that we can check and resolve the
discrepancy.**
## Senders
The data source for this schema is the file `FCMaterials.json`. That it has
been freshly written is signalled by the ED Journal event `FCMaterials`.
**NB: This schema is not, currently, for sending CAPI `/market`-sourced data
about these materials.**
So, monitor the Journal as normal, and when you see a `FCMaterials` event open
the `FCMaterials.json` file for reading, read it, and close it again. Use the
data you got from reading this file, not merely the Journal event.
Your `message` should primarily be the contents of this file, with the addition
of any augmentations, as noted below.
### Augmentations
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
## Listeners
The advice above for [Senders](#senders), combined with the actual Schema file
*should* provide all the information you need to process these events.

View File

@ -0,0 +1,110 @@
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "https://eddn.edcd.io/schemas/fcmaterials_journal/1",
"type" : "object",
"additionalProperties" : false,
"required": [ "$schemaRef", "header", "message" ],
"properties": {
"$schemaRef": {
"type" : "string"
},
"header": {
"type" : "object",
"additionalProperties" : true,
"required" : [ "uploaderID", "softwareName", "softwareVersion" ],
"properties" : {
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},
"softwareVersion": {
"type" : "string"
},
"gatewayTimestamp": {
"type" : "string",
"format" : "date-time",
"description" : "Timestamp upon receipt at the gateway. If present, this property will be overwritten by the gateway; submitters are not intended to populate this property."
}
}
},
"message": {
"type" : "object",
"description" : "Contains all properties from the listed events in the client's journal minus the Localised strings and the properties marked below as 'disallowed'",
"additionalProperties" : false,
"required" : [ "timestamp", "event", "MarketID", "CarrierName", "CarrierID", "Items" ],
"properties" : {
"timestamp": {
"type" : "string",
"format" : "date-time"
},
"event" : {
"enum" : [ "FCMaterials" ]
},
"horizons": {
"type" : "boolean",
"description" : "Boolean value copied from the Journal LoadGame event, when it is present there."
},
"odyssey": {
"type" : "boolean",
"description" : "Boolean value copied from the Journal LoadGame event, when it is present there."
},
"MarketID": {
"type" : "integer"
},
"CarrierName": {
"type" : "string",
"minLength" : 1
},
"CarrierID": {
"type" : "string",
"minLength" : 1
},
"Items": {
"type" : "array",
"items": {
"type" : "object",
"required" : [ "id", "Name", "Price", "Stock", "Demand" ],
"properties" : {
"id" : {
"type" : "integer"
},
"Name": {
"type" : "string",
"minLength" : 1
},
"Price": {
"type" : "integer"
},
"Stock": {
"type" : "integer"
},
"Demand": {
"type" : "integer"
}
},
"patternProperties": {
"_Localised$" : { "$ref" : "#/definitions/disallowed" }
}
}
}
}
}
},
"definitions": {
"disallowed" : { "not" : { "type": [ "array", "boolean", "integer", "number", "null", "object", "string" ] } }
}
}

View File

@ -24,6 +24,13 @@ The primary data source for this schema is the ED Journal event
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},

View File

@ -0,0 +1,53 @@
# EDDN FSSBodySignals Schema
## Introduction
Here we document how to take data from an ED `FSSBodySignals` Journal
Event and properly structure it for sending to EDDN.
Please consult [EDDN Schemas README](./README-EDDN-schemas.md) for general
documentation for a schema such as this.
If you find any discrepancies between what this document says and what is
defined in the relevant Schema file, then you should, in the first instance,
assume that it is the Schema file that is correct.
**PLEASE open
[an issue on GitHub](https://github.com/EDCD/EDDN/issues/new/choose)
to report any such anomalies you find so that we can check and resolve the
discrepancy.**
## Senders
The primary data source for this schema is the ED Journal event
`FSSBodySignals`.
### Augmentations
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarSystem
You MUST add a `StarSystem` string containing the name of the system from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
#### Remove _Localised key/values
All keys whose name ends with `_Localised`, i.e. the `Type_Localised`
key/values in Signals.
#### Examples:
```json
{ "timestamp":"2022-05-18T00:10:57Z", "event":"FSSBodySignals", "BodyName":"Phoi Auwsy ZY-Z d132 7 a", "BodyID":37, "SystemAddress":4546986398603, "Signals":[ { "Type":"$SAA_SignalType_Geological;", "Type_Localised":"Geological", "Count":2 } ] }
```

View File

@ -0,0 +1,104 @@
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "https://eddn.edcd.io/schemas/fssbodysignals/1#",
"type" : "object",
"additionalProperties" : false,
"required": [ "$schemaRef", "header", "message" ],
"properties": {
"$schemaRef": {
"type" : "string"
},
"header": {
"type" : "object",
"additionalProperties" : true,
"required" : [ "uploaderID", "softwareName", "softwareVersion" ],
"properties" : {
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},
"softwareVersion": {
"type" : "string"
},
"gatewayTimestamp": {
"type" : "string",
"format" : "date-time",
"description" : "Timestamp upon receipt at the gateway. If present, this property will be overwritten by the gateway; submitters are not intended to populate this property."
}
}
},
"message": {
"type" : "object",
"description" : "Contains all properties from the listed events in the client's journal, minus the Localised strings and the properties marked below as 'disallowed'",
"additionalProperties" : false,
"required" : [ "timestamp", "event", "StarSystem", "StarPos", "SystemAddress", "BodyID", "Signals" ],
"properties" : {
"timestamp": {
"type" : "string",
"format" : "date-time"
},
"event" : {
"enum" : [ "FSSBodySignals" ]
},
"horizons": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has a Horizons pass."
},
"odyssey": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has an Odyssey expansion."
},
"StarSystem": {
"type" : "string",
"minLength" : 1
},
"StarPos": {
"type" : "array",
"items" : { "type": "number" },
"minItems" : 3,
"maxItems" : 3,
"description" : "Must be added by the sender if not present in the journal event"
},
"SystemAddress": {
"type" : "integer"
},
"BodyID" : {
"type" : "integer"
},
"BodyName": {
"type" : "string",
"minLength" : 1
},
"Signals": {
"type" : "array",
"items" : {
"type" : "object",
"additionalProperties" : false,
"required" : [ "Type", "Count" ],
"properties" : {
"Type" : {
"type" : "string"
},
"Count" : {
"type" : "integer"
}
}
}
}
}
}
},
"definitions": {
"disallowed" : { "not" : { "type": [ "array", "boolean", "integer", "number", "null", "object", "string" ] } }
}
}

View File

@ -24,6 +24,13 @@ The primary data source for this schema is the ED Journal event
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},

View File

@ -0,0 +1,191 @@
# EDDN FSSSignalDiscovered Schema
## Introduction
Here we document how to take data from an ED `FSSSignalDiscovered` Journal
Event and properly structure it for sending to EDDN.
Please consult [EDDN Schemas README](./README-EDDN-schemas.md) for general
documentation for a schema such as this.
## Senders
The only data source for this schema is the ED Journal event
`FSSSignalDiscovered`.
### Batching
You MUST coalesce contiguous runs of `FSSSignalDiscovered` events into a
single `signals` array in the message. Minimum size of `signals` is 1 item.
Do not make a request for every single event other than where they occur
singly (such as when a player utilises the FSS to zoom into USS individually,
if there is a different following event).
Suggested algorithm for batching:
1. You will need to track the current location from `Location`, `FSDJump` and
`CarrierJump` events. This is in order to add the top-level augmentation
of `StarSystem` (system name) and `StarPos`. You will need to record:
1. `SystemAddress` - for cross-checking.
2. `StarSystem` - name of the star system.
3. `StarPos` - the galactic co-ordinates of the system.
2. If the event is `FSSSignalDiscovered`, store it to the temporal list.
3. If the event is any other, then:
1. check if it is `Location`, `FSDJump` or `CarrierJump` - if so you should
use this new location in the message for the augmentations.
2. If it is not one of those events then you should use the tracked
location from the prior such event for the augmentations.
Now construct the full `fsssignaldiscovered` schema message using the
tracked location and the stored list of events. *You **MUST** check that
the `SystemAddress` for each `FSSSignalDiscovered` event matches the
tracked location.* If there is a mis-match then drop that event.
4. Use the `timestamp` of the first signal in the batch as the top-level
`timestamp` in the `message` object.
Point 3i/ii above are because in the current (3.8.0.406) Horizons client the
`FSSSignalDiscovered` events arrive after `Location`/`FSDJump`/`CarrierJump`,
but in the current (4.0.0.1302) Odyssey client they arrive before such events.
Thus, in Horizons you use the last-tracked location, but in Odyssey you use
the "just arrived" location.
Manually FSS-scanned USS type signals will come in one by one, possibly with
other events between them (such as `Music` due to zooming in/out in FSS).
There is no need to attempt batching these together if separated by other
events, even though you'll be using the `timestamp` of the first on the
message, despite the actual time-line being dependent on how quickly the
player scans them.
This batching is more concerned with not causing an EDDN message per event
upon entry into a system.
### Elisions
Remove the `event` key/pair from each member of the `signals` array. Including
this would be redundant as by definition we're sending `FSSSignalDiscovered`
events on this schema.
You MUST remove the following key/value pairs from the data:
- `TimeRemaining` key/value pair (will be present on USS). This has a slight
PII nature and is also very ephemeral.
You MUST drop the whole `FSSSignalDiscovered` event if `USSType` key
has `$USS_Type_MissionTarget;` value. Only the Cmdr with the mission has any
use of these. There's not even a statistical use.
Because of the location cross-check the `SystemAddress` is in the top-level
`message` object, and thus you **MUST** remove such from each signal in the
array.
Do **NOT** remove the `timestamp` from each signal in the array. Whilst these
should be identical for a "just logged in or arrived in system" set of signals,
this is not true of manually FSS scanned USS signals.
### Augmentations
#### horizons flag
You SHOULD add this key/value pair, using the value from the `LoadGame` event.
#### odyssey flag
You SHOULD add this key/value pair, using the value from the `LoadGame` event.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarSystem
You **MUST** add a `StarSystem` string containing the system name from the last
tracked location. You **MUST** cross-check each `FSSSignalDiscovered`
->`SystemAddress` value to ensure it matches. If it does not, you **MUST**
drop the event.
#### StarPos
You **MUST** add a `StarPos` array containing the system co-ordinates from the
tracked location. You **MUST** cross-check each `FSSSignalDiscovered`
->`SystemAddress` value to ensure it matches. If it does not, you **MUST**
drop the event.
## Receivers
### Augmentations are 'SHOULD', not 'MUST'
Receivers should remember that `horizons` and `odyssey` augmentations
are optional key/value pairs. You **SHOULD NOT** rely on them being present
in any given event.
### Duplicate messages from 'busy' systems
When a system is particularly full of signals, such as when many Fleet Carriers
are present, it has been observed that the game repeats the identical
sequence of `FSSSignalDiscovered` events. So you might receive what looks like
a duplicate message, other than the timestamp (if the timestamp is the same
then the EDDN Relay should drop the duplicate).
## Examples
This is a few example of messages that passes current `FSSSignalDiscovered` schema.
1. A message without `horizons` or `odyssey` augmentations.
```json
{
"$schemaRef":"https://eddn.edcd.io/schemas/fsssignaldiscovered/1",
"header":{
"gatewayTimestamp":"2021-11-06T22:48:43.483147Z",
"softwareName":"a software",
"softwareVersion":"a version",
"uploaderID":"an uploader"
},
"message":{
"timestamp":"2021-11-06T22:48:42Z",
"event":"FSSSignalDiscovered",
"SystemAddress":1774711381,
"signals":[
{
"timestamp":"2021-11-06T22:48:42Z",
"SignalName":"EXPLORER-CLASS X2X-74M",
"IsStation":true
}
],
"StarSystem":"HR 1185",
"StarPos": [
-64.66, -148.94, -330.41
]
}
}
```
2. A message with `horizons`, `odyssey`, `systemName`, `StarPos` fields which says it sent from Odyssey.
```json
{
"$schemaRef":"https://eddn.edcd.io/schemas/fsssignaldiscovered/1",
"header":{
"gatewayTimestamp":"2021-11-06T22:48:43.483147Z",
"softwareName":"a software",
"softwareVersion":"a version",
"uploaderID":"an uploader"
},
"message":{
"timestamp":"2021-11-06T22:48:42Z",
"event":"FSSSignalDiscovered",
"SystemAddress":1350507186531,
"signals":[
{
"timestamp":"2021-11-06T22:48:42Z",
"event":"FSSSignalDiscovered",
"SignalName":"EXPLORER-CLASS X2X-74M",
"IsStation":true
},
{
"timestamp":"2021-11-06T22:48:42Z",
"event":"FSSSignalDiscovered",
"SignalName":"$USS_NonHumanSignalSource;",
"USSType":"$USS_Type_NonHuman;",
"SpawningState":"$FactionState_None;",
"SpawningFaction":"$faction_none;",
"ThreatLevel":5
}
],
"StarPos": [
8.1875,
124.21875,
-38.5
],
"StarSystem": "HIP 56186",
"horizons": true,
"odyssey": true
}
}
```

View File

@ -0,0 +1,120 @@
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "https://eddn.edcd.io/schemas/fsssignaldiscovered/1#",
"description" : "EDDN schema for FSSSignalDiscovered Journal events. Full documentation at https://github.com/EDCD/EDDN/tree/master/schemas/fsssignaldiscovered-README.md",
"type" : "object",
"additionalProperties" : false,
"required": [ "$schemaRef", "header", "message" ],
"properties": {
"$schemaRef": {
"type" : "string"
},
"header": {
"type" : "object",
"additionalProperties" : true,
"required" : [ "uploaderID", "softwareName", "softwareVersion" ],
"properties" : {
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},
"softwareVersion": {
"type" : "string"
},
"gatewayTimestamp": {
"type" : "string",
"format" : "date-time",
"description" : "Timestamp upon receipt at the gateway. If present, this property will be overwritten by the gateway; submitters are not intended to populate this property."
}
}
},
"message": {
"type" : "object",
"description" : "Contains all properties from the listed events in the client's journal minus Localised strings and the properties marked below as 'disallowed'",
"additionalProperties" : false,
"required" : [ "event", "timestamp", "SystemAddress", "StarSystem", "StarPos", "signals"],
"properties" : {
"event": {
"enum" : [ "FSSSignalDiscovered" ]
},
"horizons": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has a Horizons pass."
},
"odyssey": {
"type" : "boolean",
"description" : "Whether the sending Cmdr has an Odyssey expansion."
},
"timestamp": {
"type" : "string",
"format" : "date-time",
"description" : "Duplicate of the first signal's timestamp, for commonality with other schemas."
},
"SystemAddress": {
"type": "integer"
},
"signals": {
"type": "array",
"description": "Array of FSSSignalDiscovered events",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties" : false,
"required": ["timestamp", "SignalName"],
"description": "Single FSSSignalDiscovered event",
"properties": {
"timestamp": {
"type" : "string",
"format" : "date-time"
},
"SignalName": { "type": "string" },
"SignalType": { "type": "string" },
"IsStation": { "type": "boolean" },
"USSType": {
"type": "string",
"not": {
"pattern": "^\\$USS_Type_MissionTarget;$"
}
},
"TimeRemaining": {"$ref" : "#/definitions/disallowed"},
"SpawningState": {"type": "string"},
"SpawningFaction" : {"type": "string"},
"SpawningPower" : {"type": "string"},
"OpposingPower" : {"type": "string"},
"ThreatLevel": {"type": "integer" },
"patternProperties": {
"_Localised$" : { "$ref" : "#/definitions/disallowed" }
}
}
}
},
"StarSystem": {
"type" : "string",
"minLength" : 1,
"description": "Should be added by the sender"
},
"StarPos": {
"type" : "array",
"items" : { "type": "number" },
"minItems" : 3,
"maxItems" : 3,
"description" : "Should be added by the sender"
}
}
}
},
"definitions": {
"disallowed" : { "not" : { "type": [ "array", "boolean", "integer", "number", "null", "object", "string" ] } }
}
}

View File

@ -65,22 +65,35 @@ The following keys+values should be removed from `Location` event data:
- `SquadronFaction` from within the list of `Factions`.
### Augmentations
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### horizons flag
You SHOULD add this key/value pair, using the value from the `LoadGame` event.
You **MUST** add this key/value pair, using the value from the `LoadGame` event.
Note caveats in [docs/Developers.md](../docs/Developers.md).
#### odyssey flag
You SHOULD add this key/value pair, using the value from the `LoadGame` event.
You **MUST** add this key/value pair, using the value from the `LoadGame` event.
Note caveats in [docs/Developers.md](../docs/Developers.md).
#### StarSystem
You MUST add a `StarSystem` key/value pair representing the name of the
system this event occurred in. Source this from either `Location`,
`FSDJump` or `CarrierJump` as appropriate.
If not already present, you MUST add a `StarSystem` string containing the
name of the system from the last `FSDJump`, `CarrierJump`, or `Location` event.
#### SystemAddress
You MUST add a `SystemAddress` key/value pair representing the numerical ID
of the system this event occurred in. Source this from either `Location`,
`FSDJump` or `CarrierJump` as appropriate.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
This should only apply to `SAASignalsFound` events.
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
If not already present, you MUST add a `StarPos` array containing the
system co-ordinates from the last `FSDJump`, `CarrierJump`, or `Location`
event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
This should only apply to `Docked`, `Scan` and `SAASignalsFound` events.

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},

View File

@ -24,11 +24,21 @@ The primary data source for this schema is the ED Journal event
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarSystem
You MUST add a `StarSystem` key/value pair representing the name of the
system this event occurred in. Source this from either `Location`,
`FSDJump` or `CarrierJump` as appropriate.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},

View File

@ -31,3 +31,7 @@ separate file.
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},

View File

@ -53,3 +53,8 @@ station. Namely:
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "Fileheader->gameversion, else LoadGame->gameversion, else 'CAPI-shipyard', else ''."
},
"gamebuild": {
"type" : "string",
"description" : "Fileheader->build, else LoadGame->build, else 'CAPI-shipyard', else ''."
},
"softwareName": {
"type" : "string"
},

View File

@ -27,6 +27,13 @@ senders SHOULD include any defined in the schema if it's in the source data.
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.
#### StarPos
You MUST add a `StarPos` array containing the system co-ordinates from the
last `FSDJump`, `CarrierJump`, or `Location` event.
**You MUST apply a location cross-check, as per
[Other data augmentations](../docs/Developers.md#other-data-augmentations).**

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "From Fileheader event if available, else LoadGame if available there."
},
"gamebuild": {
"type" : "string",
"description" : "The `build` value from a Fileheader event if available, else LoadGame if available there."
},
"softwareName": {
"type" : "string"
},

View File

@ -40,3 +40,8 @@ value is what the name would have been in the source Journal data.
#### horizons and odyssey flags
Please read [horizons and odyssey flags](../docs/Developers.md#horizons-and-odyssey-flags)
in the Developers' documentation.
#### gameversion and gamebuild
You **MUST** always set these as per [the relevant section](../docs/Developers.md#gameversions-and-gamebuild)
of the Developers' documentation.

View File

@ -16,6 +16,14 @@
"uploaderID": {
"type" : "string"
},
"gameversion": {
"type" : "string",
"description" : "Fileheader->gameversion, else LoadGame->gameversion, else 'CAPI-shipyard', else ''."
},
"gamebuild": {
"type" : "string",
"description" : "Fileheader->build, else LoadGame->build, else 'CAPI-shipyard', else ''."
},
"softwareName": {
"type" : "string"
},

View File

@ -3,8 +3,11 @@
"""Produce a report on the provided EDDN Gateway log file's ERRORs."""
import argparse
import fileinput
import re
import semantic_version
def parse_cl_args() -> str:
"""
@ -43,7 +46,7 @@ def process_file(input_file: str) -> None:
r' from (?P<sender_ip>.+)$'
)
# TODO: Make this handle gzipped files
with open(input_file, 'r') as input:
with fileinput.FileInput(files=(input_file), mode='r') as input:
line = input.readline()
while line:
line = line.strip()
@ -59,90 +62,119 @@ def process_file(input_file: str) -> None:
# print(matches.group('sender_ip'))
# print('')
try:
software_version = semantic_version.Version.coerce(matches.group('software_version'))
except ValueError as e:
print(f"Error parsing sofwareVersion for:\n{matches.group('software_version')}\n{line}\n")
next
###################################################################
# Issues we know about and HAVE already alerted their
# developers to.
###################################################################
if matches.group('software_name') == 'EDDiscovery':
# https://github.com/EDDiscovery/EDDiscovery/releases/latest
if matches.group('software_version') == '12.1.7.0':
if matches.group('schema_ref') in (
'https://eddn.edcd.io/schemas/shipyard/2',
'https://eddn.edcd.io/schemas/outfitting/2',
):
# Reported via Discord PM to Robby 2022-01-07
if matches.group('err_msg') != 'Failed Validation "[<ValidationError: \'[] is too short\'>]"':
if software_version >= semantic_version.Version.coerce('16.0.5.0'):
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/outfitting/2':
err_msg = matches.group('err_msg')
if (
err_msg.startswith('Failed Validation "[<ValidationError: "\'paintjob_') and
err_msg.find('\' does not match \'(^Hpt_|^hpt_|^Int_|^int_|_Armour_|_armour_)\'">]') != -1
):
# <https://github.com/EDDiscovery/EDDiscovery/issues/3328>
pass
else:
print(line)
else:
print(line)
elif matches.group('software_name') == 'EDDLite':
# https://github.com/EDDiscovery/EDDLite/releases/tag/latest
if matches.group('software_version') == '2.0.0':
if matches.group('schema_ref') in (
'https://eddn.edcd.io/schemas/shipyard/2',
'https://eddn.edcd.io/schemas/outfitting/2',
):
# Reported via Discord PM to Robby 2022-01-07
if matches.group('err_msg') != 'Failed Validation "[<ValidationError: \'[] is too short\'>]"':
print(line)
else:
print(line)
# https://github.com/EDDiscovery/EDDLite/releases/latest
if software_version >= semantic_version.Version.coerce('2.5.0'):
print(line)
elif matches.group('software_name') == 'EDDI':
# https://github.com/EDCD/EDDI/releases/latest
if matches.group('software_version') == '4.0.1':
print(line)
if software_version >= semantic_version.Version.coerce('4.0.2'):
elif matches.group('software_name') == 'E:D Market Connector [Windows]':
# https://github.com/EDCD/EDMarketConnector/releases/latest
if matches.group('software_version') == '5.2.4':
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/codexentry/1':
# <https://github.com/EDCD/EDMarketConnector/issues/1393>
if matches.group('err_msg') != 'Failed Validation "[<ValidationError: "\'\' is too short">]"':
print(matches.group('err_msg'))
print(line)
elif matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/journal/1':
# <https://github.com/EDCD/EDMarketConnector/issues/1403>
if matches.group('err_msg') == 'Failed Validation "[<ValidationError: "\'SystemAddress\' is a required property">]"':
# <https://github.com/EDCD/EDMarketConnector/issues/1403>
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/fsssignaldiscovered/1':
if matches.group('err_msg').startswith(
'Failed Validation "[<ValidationError: "\'StarPos\' is a required property"'
):
# Reported on Discord: <https://discord.com/channels/164411426939600896/353595704658231299/1062652620986134608>
pass
elif matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/navroute/1':
if matches.group('err_msg').startswith(
'Failed Validation "[<ValidationError: "\'Route\' is a required property"'
):
# Reported on Discord: <https://discord.com/channels/164411426939600896/353595704658231299/1063017819752648775>
pass
else:
print(line)
elif matches.group('err_msg').startswith(
elif matches.group('software_name').startswith('E:D Market Connector'):
# https://github.com/EDCD/EDMarketConnector/releases/latest
if software_version >= semantic_version.Version.coerce('5.7.0'):
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/journal/1':
if matches.group('err_msg').startswith(
'Failed Validation "[<ValidationError: "{\'type\': [\'array\', \'boolean\', \'integer\', \'number\', \'null\', \'object\', \'string\']} is not allowed for'
):
# <https://github.com/EDCD/EDMarketConnector/issues/1403>
pass
elif matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/fssdiscoveryscan/1':
if matches.group('err_msg') == 'Failed Validation "[<ValidationError: "None is not of type \'boolean\'">]"':
# <https://github.com/EDCD/EDMarketConnector/issues/1403>
elif matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/fsssignaldiscovered/1':
if matches.group('err_msg') == 'Failed Validation "[<ValidationError: \'[] is too short\'>]"':
# <https://github.com/EDCD/EDMarketConnector/issues/1598>
pass
elif matches.group('err_msg') == 'Failed Validation "[<ValidationError: "None is not of type \'string\'">]"':
# <https://github.com/EDCD/EDMarketConnector/issues/1599>
pass
else:
print(line)
else:
print(line)
elif matches.group('software_name') == 'Elite G19s Companion App':
# <https://edcodex.info/?m=tools&entry=212>
if matches.group('software_version') == '3.7.7888.21039':
if software_version >= semantic_version.Version.coerce('3.7.7888.21039'):
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/commodity/3':
if matches.group('err_msg') == 'Failed Validation "[<ValidationError: "Additional properties are not allowed (\'Proportion\', \'Name\' were unexpected)">]"':
# Reported via Frontier forums: <https://forums.frontier.co.uk/threads/elite-g19s-companion-app-with-simulated-space-traffic-control.226782/post-9690204>
if matches.group('err_msg') != 'Failed Validation "[<ValidationError: "Additional properties are not allowed (\'Proportion\', \'Name\' were unexpected)">]"':
print(matches.group('err_msg'))
pass
else:
print(line)
else:
print(line)
elif matches.group('software_name') == 'EDSM':
# It's in-browser, no public source/releases
if matches.group('software_version') == '1.0.1':
if software_version >= semantic_version.Version.coerce('1.0.3'):
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/journal/1':
if matches.group('journal_event') == 'Scan':
# <https://github.com/EDSM-NET/FrontEnd/issues/466>
if not matches.group('err_msg').startswith(
'Failed Validation "[<ValidationError: "{\'type\': [\'array\', \'boolean\', \'integer\', \'number\', \'null\', \'object\', \'string\']} is not allowed for '
# <https://github.com/EDSM-NET/FrontEnd/issues/472>
if matches.group('err_msg').startswith(
'Failed Validation "[<ValidationError: "None is not of type \'integer\'">]"'
):
pass
elif (
matches.group('err_msg').startswith('Failed Validation "[<ValidationError: "{') and
matches.group('err_msg').endswith('} is not of type \'array\'">]"')
):
# <https://github.com/EDSM-NET/FrontEnd/issues/473>
pass
else:
print(matches.group('err_msg'))
print(line)
@ -154,7 +186,7 @@ def process_file(input_file: str) -> None:
elif matches.group('software_name') == 'EDSM - Console':
# It's in-browser, no public source/releases
if matches.group('software_version') == '1.0':
if software_version >= semantic_version.Version.coerce('1.0.2'):
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/journal/1':
if matches.group('journal_event') == 'Scan':
# <https://github.com/EDSM-NET/FrontEnd/issues/466>
@ -172,15 +204,27 @@ def process_file(input_file: str) -> None:
elif matches.group('software_name') == 'EDAOS':
# Apparently a Barry Carylon project, but no home page ?
if matches.group('software_version') == '1.2.3':
if software_version >= semantic_version.Version.coerce('1.2.3'):
if matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/journal/1':
if matches.group('journal_event') == 'Docked':
# <https://discord.com/channels/164411426939600896/205369618284544000/929102478954340372>
if not matches.group('err_msg').startswith(
if matches.group('err_msg').startswith(
'Failed Validation "[<ValidationError: "{\'type\': [\'array\', \'boolean\', \'integer\', \'number\', \'null\', \'object\', \'string\']} is not allowed for '
):
print(matches.group('err_msg'))
print(line)
pass
print(matches.group('err_msg'))
print(line)
else:
print(line)
elif matches.group('schema_ref') == 'https://eddn.edcd.io/schemas/shipyard/2':
# <https://discord.com/channels/164411426939600896/205369618284544000/955030485791285258>
if matches.group('err_msg').startswith(
'Failed Validation "[<ValidationError: \'[] is too short\'>]"'
):
pass
else:
print(line)
@ -190,7 +234,7 @@ def process_file(input_file: str) -> None:
elif matches.group('software_name') == 'EliteLogAgent':
# <https://github.com/DarkWanderer/Elite-Log-Agent>
if matches.group('software_version') == '2.0.0.660':
if software_version >= semantic_version.Version.coerce('2.0.0.660'):
print(line)
# <https://edcodex.info/?m=tools&entry=440>
@ -215,10 +259,10 @@ def process_file(input_file: str) -> None:
# Abandoned/unmaintained project
# <https://forums.frontier.co.uk/threads/release-eva-elite-virtual-assistant-for-iphone-ipad-no-longer-working-jan-2020.245900/page-18>
# <https://apps.apple.com/gb/app/eva/id1098763533>
elif matches.group('software_name') == 'EVA [iPhone]':
elif matches.group('software_name') in ('EVA [iPhone]', 'EVA [iPad]', 'EVA [Android]'):
pass
####################################################################
###################################################################
# Issues we know about, but haven't yet alerted developers to
###################################################################
###################################################################

17
scripts/test-schema.py Normal file
View File

@ -0,0 +1,17 @@
import sys
import simplejson
import jsonschema
schema_filename = sys.argv[1]
message_filename = sys.argv[2]
schema_file = open(schema_filename, 'r')
schema_data = schema_file.read()
schema = simplejson.loads(schema_data)
message_file = open(message_filename, 'r')
message_data = message_file.read()
message = simplejson.loads(message_data)
jsonschema.validate(message, schema, format_checker=jsonschema.FormatChecker())

View File

@ -0,0 +1,22 @@
{
"$schemaRef": "https://eddn.edcd.io/schemas/approachsettlement/1",
"header": {
"uploaderID": "from Athanasius Testing",
"softwareName": "Athanasius Testing script",
"softwareVersion": "v0.0.1"
},
"message": {
"timestamp": "2022-02-18T15:02:04Z",
"event": "ApproachSettlement",
"Name": "$Ancient:#index=1;",
"SystemAddress": 3515254557027,
"StarSystem": "Synuefe XR-H d11-102",
"BodyID": 13,
"BodyName": "Synuefe XR-H d11-102 1 b",
"Latitude": -46.576923,
"Longitude": 133.985107,
"StarPos": [
357.34375, -49.34375, -74.75
]
}
}

View File

@ -0,0 +1,22 @@
{
"$schemaRef": "https://eddn.edcd.io/schemas/approachsettlement/1",
"header": {
"uploaderID": "from Athanasius Testing",
"softwareName": "Athanasius Testing script",
"softwareVersion": "v0.0.1"
},
"message": {
"timestamp":"2022-02-18T14:33:35Z",
"event":"ApproachSettlement",
"Name":"Battlegroup's Disappearance",
"StarSystem": "Alioth",
"BodyID":8,
"BodyName":"Alioth 1 a",
"Latitude":59.972752,
"Longitude":-84.506294,
"SystemAddress":1109989017963,
"StarPos": [
-33.65625, 72.46875, -20.65625
]
}
}

View File

@ -9,7 +9,6 @@ import gevent
import hashlib
import logging
import simplejson
import urlparse
import zlib
import zmq.green as zmq
from datetime import datetime
@ -77,8 +76,14 @@ def extract_message_details(parsed_message):
uploader_id = '<<UNKNOWN>>'
software_name = '<<UNKNOWN>>'
software_version = '<<UNKNOWN>>'
game_version = '<<UNKNOWN>>'
game_build = '<<UNKNOWN>>'
schema_ref = '<<UNKNOWN>>'
journal_event = '<<UNKNOWN>>'
system_name = '<<UNKNOWN>>'
system_address = '<<UNKNOWN>>'
station_name = '<<UNKNOWN>>'
station_marketid = '<<UNKNOWN>>'
if 'header' in parsed_message:
if 'uploaderID' in parsed_message['header']:
@ -90,6 +95,12 @@ def extract_message_details(parsed_message):
if 'softwareVersion' in parsed_message['header']:
software_version = parsed_message['header']['softwareVersion']
if 'gameversion' in parsed_message['header']:
game_version = parsed_message['header']['gameversion']
if 'gamebuild' in parsed_message['header']:
game_build = parsed_message['header']['gamebuild']
if '$schemaRef' in parsed_message:
schema_ref = parsed_message['$schemaRef']
@ -102,7 +113,44 @@ def extract_message_details(parsed_message):
else:
journal_event = '-'
return uploader_id, software_name, software_version, schema_ref, journal_event
if 'systemName' in parsed_message['message']:
system_name = parsed_message['message']['systemName']
elif 'SystemName' in parsed_message['message']:
system_name = parsed_message['message']['SystemName']
elif 'StarSystem' in parsed_message['message']:
system_name = parsed_message['message']['StarSystem']
else:
system_name = '-'
if 'SystemAddress' in parsed_message['message']:
system_address = parsed_message['message']['SystemAddress']
else:
system_address = '-'
if 'stationName' in parsed_message['message']:
station_name = parsed_message['message']['stationName']
elif 'StationName' in parsed_message['message']:
station_name = parsed_message['message']['StationName']
else:
station_name = '-'
if 'marketId' in parsed_message['message']:
station_marketid = parsed_message['message']['marketId']
elif 'MarketID' in parsed_message['message']:
station_marketid = parsed_message['message']['MarketID']
else:
station_marketid = '-'
return uploader_id, software_name, software_version, schema_ref, journal_event, game_version, game_build, \
system_name, system_address, station_name, station_marketid
def configure():
# Get the list of transports to bind from settings. This allows us to PUB
@ -167,42 +215,10 @@ def get_decompressed_message():
message_body = zlib.decompress(request.body.read(), -15)
logger.debug('Resulting message_body:\n%s\n' % (message_body))
# At this point, we're not sure whether we're dealing with a straight
# un-encoded POST body, or a form-encoded POST. Attempt to parse the
# body. If it's not form-encoded, this will return an empty dict.
form_enc_parsed = urlparse.parse_qs(message_body)
if form_enc_parsed:
logger.info('Request is form-encoded, compressed, from %s' % (get_remote_address()))
# This is a form-encoded POST. The value of the data attrib will
# be the body we're looking for.
try:
message_body = form_enc_parsed['data'][0]
except (KeyError, IndexError):
logger.error('form-encoded, compressed, upload did not contain a "data" key. From %s', get_remote_address())
raise MalformedUploadError(
"No 'data' POST key/value found. Check your POST key "
"name for spelling, and make sure you're passing a value."
)
else:
logger.debug('Request is *NOT* form-encoded')
else:
logger.debug('Content-Encoding indicates *not* compressed...')
# Uncompressed request. Bottle handles all of the parsing of the
# POST key/vals, or un-encoded body.
data_key = request.forms.get('data')
if data_key:
logger.info('Request is form-encoded, uncompressed, from %s' % (get_remote_address()))
# This is a form-encoded POST. Support the silly people.
message_body = data_key
else:
logger.debug('Plain POST request detected...')
# This is a non form-encoded POST body.
message_body = request.body.read()
message_body = request.body.read()
return message_body
@ -251,10 +267,14 @@ def parse_and_error_handle(data):
gevent.spawn(push_message, parsed_message, parsed_message['$schemaRef'])
try:
uploader_id, software_name, software_version, schema_ref, journal_event = extract_message_details(parsed_message)
logger.info('Accepted (%d, "%s", "%s", "%s", "%s", "%s") from %s' % (
uploader_id, software_name, software_version, schema_ref, journal_event, game_version, game_build, \
system_name, system_address, station_name, station_marketid = extract_message_details(parsed_message)
logger.info('Accepted (%d, "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s") from %s' % (
request.content_length,
uploader_id, software_name, software_version, schema_ref, journal_event,
game_version, game_build,
system_name, system_address,
station_name, station_marketid,
get_remote_address()
))
@ -266,11 +286,15 @@ def parse_and_error_handle(data):
else:
try:
uploader_id, software_name, software_version, schema_ref, journal_event = extract_message_details(parsed_message)
logger.error('Failed Validation "%s" (%d, "%s", "%s", "%s", "%s", "%s") from %s' % (
uploader_id, software_name, software_version, schema_ref, journal_event, game_version, game_build, \
system_name, system_address, station_name, station_marketid = extract_message_details(parsed_message)
logger.error('Failed Validation "%s" (%d, "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s") from %s' % (
str(validationResults.messages),
request.content_length,
uploader_id, software_name, software_version, schema_ref, journal_event,
game_version, game_build,
system_name, system_address,
station_name, station_marketid,
get_remote_address()
))

View File

@ -79,7 +79,7 @@ def stats():
class Relay(Thread):
REGENERATE_UPLOADER_NONCE_INTERVAL = 12 * 60 * 60 # 12 hrs
REGENERATE_UPLOADER_NONCE_INTERVAL = 3 * 60 # 3 minutes, was 12 hrs
def __init__(self, **kwargs):
super(Relay, self).__init__(**kwargs)

View File

@ -59,25 +59,42 @@ class _Settings(object):
"https://eddn.edcd.io/schemas/journal/1" : "schemas/journal-v1.0.json",
"https://eddn.edcd.io/schemas/journal/1/test" : "schemas/journal-v1.0.json",
"https://eddn.edcd.io/schemas/scanbarycentre/1" : "schemas/scanbarycentre-v1.0.json",
"https://eddn.edcd.io/schemas/scanbarycentre/1/test" : "schemas/scanbarycentre-v1.0.json",
"https://eddn.edcd.io/schemas/scanbarycentre/1" : "schemas/scanbarycentre-v1.0.json",
"https://eddn.edcd.io/schemas/scanbarycentre/1/test" : "schemas/scanbarycentre-v1.0.json",
"https://eddn.edcd.io/schemas/fssdiscoveryscan/1" : "schemas/fssdiscoveryscan-v1.0.json",
"https://eddn.edcd.io/schemas/fssdiscoveryscan/1/test" : "schemas/fssdiscoveryscan-v1.0.json",
"https://eddn.edcd.io/schemas/fssdiscoveryscan/1" : "schemas/fssdiscoveryscan-v1.0.json",
"https://eddn.edcd.io/schemas/fssdiscoveryscan/1/test" : "schemas/fssdiscoveryscan-v1.0.json",
"https://eddn.edcd.io/schemas/codexentry/1" : "schemas/codexentry-v1.0.json",
"https://eddn.edcd.io/schemas/codexentry/1/test" : "schemas/codexentry-v1.0.json",
"https://eddn.edcd.io/schemas/codexentry/1" : "schemas/codexentry-v1.0.json",
"https://eddn.edcd.io/schemas/codexentry/1/test" : "schemas/codexentry-v1.0.json",
"https://eddn.edcd.io/schemas/navbeaconscan/1" : "schemas/navbeaconscan-v1.0.json",
"https://eddn.edcd.io/schemas/navbeaconscan/1/test" : "schemas/navbeaconscan-v1.0.json",
"https://eddn.edcd.io/schemas/navbeaconscan/1" : "schemas/navbeaconscan-v1.0.json",
"https://eddn.edcd.io/schemas/navbeaconscan/1/test" : "schemas/navbeaconscan-v1.0.json",
"https://eddn.edcd.io/schemas/navroute/1" : "schemas/navroute-v1.0.json",
"https://eddn.edcd.io/schemas/navroute/1/test" : "schemas/navroute-v1.0.json",
"https://eddn.edcd.io/schemas/navroute/1" : "schemas/navroute-v1.0.json",
"https://eddn.edcd.io/schemas/navroute/1/test" : "schemas/navroute-v1.0.json",
"https://eddn.edcd.io/schemas/approachsettlement/1" : "schemas/approachsettlement-v1.0.json",
"https://eddn.edcd.io/schemas/approachsettlement/1/test" : "schemas/approachsettlement-v1.0.json",
"https://eddn.edcd.io/schemas/fssallbodiesfound/1" : "schemas/fssallbodiesfound-v1.0.json",
"https://eddn.edcd.io/schemas/fssallbodiesfound/1/test" : "schemas/fssallbodiesfound-v1.0.json",
"https://eddn.edcd.io/schemas/approachsettlement/1" : "schemas/approachsettlement-v1.0.json",
"https://eddn.edcd.io/schemas/approachsettlement/1/test" : "schemas/approachsettlement-v1.0.json",
"https://eddn.edcd.io/schemas/fssallbodiesfound/1" : "schemas/fssallbodiesfound-v1.0.json",
"https://eddn.edcd.io/schemas/fssallbodiesfound/1/test" : "schemas/fssallbodiesfound-v1.0.json",
"https://eddn.edcd.io/schemas/fssbodysignals/1" : "schemas/fssbodysignals-v1.0.json",
"https://eddn.edcd.io/schemas/fssbodysignals/1/test" : "schemas/fssbodysignals-v1.0.json",
"https://eddn.edcd.io/schemas/fsssignaldiscovered/1" : "schemas/fsssignaldiscovered-v1.0.json",
"https://eddn.edcd.io/schemas/fsssignaldiscovered/1/test" : "schemas/fsssignaldiscovered-v1.0.json",
"https://eddn.edcd.io/schemas/fcmaterials_journal/1" : "schemas/fcmaterials_journal-v1.0.json",
"https://eddn.edcd.io/schemas/fcmaterials_journal/1/test" : "schemas/fcmaterials_journal-v1.0.json",
"https://eddn.edcd.io/schemas/fcmaterials_capi/1" : "schemas/fcmaterials_capi-v1.0.json",
"https://eddn.edcd.io/schemas/fcmaterials_capi/1/test" : "schemas/fcmaterials_capi-v1.0.json",
"https://eddn.edcd.io/schemas/dockinggranted/1" : "schemas/dockinggranted-v1.0.json",
"https://eddn.edcd.io/schemas/dockinggranted/1/test" : "schemas/dockinggranted-v1.0.json",
"https://eddn.edcd.io/schemas/dockingdenied/1" : "schemas/dockingdenied-v1.0.json",
"https://eddn.edcd.io/schemas/dockingdenied/1/test" : "schemas/dockingdenied-v1.0.json",
}
GATEWAY_OUTDATED_SCHEMAS = [