Skip to content

Commit 01d99a2

Browse files
committed
Change WWBOTA to use SSE
1 parent caff4a7 commit 01d99a2

4 files changed

Lines changed: 56 additions & 60 deletions

File tree

config_clean.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ config.wwff = {
2121
};
2222

2323
config.wwbota = {
24-
spotsUrl: 'https://api.wwbota.org/spots/',
24+
spotsUrl: 'https://api.wwbota.org/spots/?age=0',
2525
listUrl: 'https://wwbota.org/wwbota-3',
26-
refreshInterval: 60*1000,
27-
spotMaxAge: 5*60*1000
2826
};
2927

3028
config.mongodb = {

package-lock.json

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"carrier": "^0.3.0",
1515
"clone": "^2.1.2",
1616
"csv": "^5.3.2",
17+
"eventsource": "^4.0.0",
1718
"expand-template": "^1.1.1",
1819
"express": "^4.17.1",
1920
"firebase-admin": "^13.4.0",

wwbotaspots.js

Lines changed: 19 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
const request = require('request');
1+
const eventsource = require('eventsource');
22
const config = require('./config');
33
const EventEmitter = require('events');
4-
const util = require('util');
5-
const crypto = require('crypto');
64
const sprintf = require('sprintf');
75

86
class WwbotaSpotReceiver extends EventEmitter {
@@ -13,62 +11,26 @@ class WwbotaSpotReceiver extends EventEmitter {
1311
}
1412

1513
start() {
16-
setInterval(() => {
17-
this.refreshSpots();
18-
}, config.wwbota.refreshInterval);
19-
this.refreshSpots();
20-
}
21-
22-
refreshSpots() {
23-
console.log("Refreshing WWBOTA JSON feed");
24-
25-
let req = request({
26-
url: config.wwbota.spotsUrl,
27-
headers: {
28-
'User-Agent': 'HamAlert/1.0 (+https://hamalert.org)'
29-
},
30-
json: true
31-
}, (error, response, body) => {
32-
if (error) {
33-
console.error(`Loading WWBOTA feed failed: ${error}`);
34-
return;
35-
}
36-
37-
if (response.statusCode !== 200) {
38-
console.error(`Bad status code ${response.statusCode} from WWBOTA`);
39-
return;
40-
}
41-
42-
if (!Array.isArray(body)) {
43-
console.error(`Expected array from WWBOTA, but got something else`);
44-
return;
45-
}
46-
47-
// reverse to process oldest to newest
48-
body.reverse()
49-
body.forEach(spot => {
50-
this.processJsonSpot(spot)
51-
});
52-
if (body.length > 0) {
53-
this.lastProcessedTime = spot[body.length - 1].time; // Previously reversed, so newest last
54-
}
14+
let es = new eventsource.EventSource(config.wwbota.spotsUrl,{
15+
fetch: (input, init) =>
16+
fetch(input, {
17+
...init,
18+
headers: {
19+
...init.headers,
20+
'User-Agent': 'HamAlert/1.0 (+https://hamalert.org)',
21+
},
22+
}),
5523
});
24+
es.addEventListener('message', (event) => this.processSpotEvent(event));
25+
es.addEventListener('error', (error) => {
26+
console.error(`Loading WWBOTA feed failed: ${error.responseCode}`)
27+
})
5628
}
5729

58-
processJsonSpot(jsonSpot) {
30+
processSpotEvent(spotEvent) {
5931
try {
32+
let jsonSpot = JSON.parse(spotEvent.data);
6033
jsonSpot.time = new Date(jsonSpot.time);
61-
62-
// Check if spot newer that last batch processed
63-
// edited spot have new timestamp as well
64-
if (this.lastProcessedTime && this.lastProcessedTime >= jsonSpot.time) {
65-
return;
66-
}
67-
68-
// Ignore old spots
69-
if ((new Date() - jsonSpot.spotTime) > config.wwbota.spotMaxAge) {
70-
return;
71-
}
7234

7335
// Ignore QRT/Test spots
7436
if (jsonSpot.type !== "Live") {
@@ -88,9 +50,9 @@ class WwbotaSpotReceiver extends EventEmitter {
8850
source: 'wwbota',
8951
time: jsonSpot.time.toISOString().substring(11, 16),
9052
fullCallsign: jsonSpot.call,
91-
wwbotaScheme: spot.reference[0].scheme, // Multiple, but lets just take the first.
92-
wwbotaRef: spot.reference[0].reference,
93-
wwbotaName: spot.reference[0].name,
53+
wwbotaScheme: jsonSpot.references[0].scheme, // Multiple, but lets just take the first.
54+
wwbotaRef: jsonSpot.references[0].reference,
55+
wwbotaName: jsonSpot.references[0].name,
9456
frequency,
9557
mode: jsonSpot.mode.toLowerCase().trim(),
9658
comment: jsonSpot.comment.trim(),

0 commit comments

Comments
 (0)