mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 19:04:02 +00:00
fix(firms): reject impossible acquisition days in CSV parsing
Rebased onto current main with review follow-ups folded in. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
1 parent
0265ad4c19
commit
29583c55ed
4 files changed
+34
-1
No files matched your search
@@ -33,6 +33,8 @@
|
|||||||
|
|
||||||
- Director timeline seeks cross the dateline along the short longitude arc.
|
- Director timeline seeks cross the dateline along the short longitude arc.
|
||||||
|
|
||||||
|
- Reject impossible FIRMS acquisition calendar days in the CSV parser before trailing-24-hour filtering.
|
||||||
|
|
||||||
- Treat explicitly current, complete empty vessel coverage as a successful update,
|
- Treat explicitly current, complete empty vessel coverage as a successful update,
|
||||||
clearing obsolete contacts while retaining stale or incomplete snapshots.
|
clearing obsolete contacts while retaining stale or incomplete snapshots.
|
||||||
|
|
||||||
|
|||||||
@@ -1429,6 +1429,8 @@ accessible name remains "Don't show this again". Control behavior is unchanged.
|
|||||||
|
|
||||||
## FIRMS source status
|
## FIRMS source status
|
||||||
|
|
||||||
|
The FIRMS CSV parser rejects impossible acquisition calendar dates before the proxy filters records to the trailing 24 hours, while retaining valid UTC acquisition times.
|
||||||
|
|
||||||
The FIRMS proxy records source success after appending its rows. If aggregation
|
The FIRMS proxy records source success after appending its rows. If aggregation
|
||||||
throws, that source reports failure without a contradictory success entry.
|
throws, that source reports failure without a contradictory success entry.
|
||||||
The existing per-record append continues to support large feeds; sequential
|
The existing per-record append continues to support large feeds; sequential
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import test from 'node:test';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import { acquisitionMsUtc } from './firmsCsv.js';
|
||||||
|
test('FIRMS acquisition dates cannot roll into a different calendar day', () => {
|
||||||
|
for (const [date, time] of [
|
||||||
|
['2026-02-30', '1200'],
|
||||||
|
['2026-04-31', '1200'],
|
||||||
|
['2026-13-01', '1200'],
|
||||||
|
['2026-07-16junk', '1200'],
|
||||||
|
['2026-07-16', '2400'],
|
||||||
|
['2026-07-16', '1260'],
|
||||||
|
['2026-07-16', null],
|
||||||
|
['2026-07-16', ''],
|
||||||
|
]) {
|
||||||
|
assert.ok(Number.isNaN(acquisitionMsUtc(date, time)), `${date}:${time}`);
|
||||||
|
}
|
||||||
|
for (const [date, time, expected] of [
|
||||||
|
['2024-02-29', '45', Date.UTC(2024, 1, 29, 0, 45)],
|
||||||
|
['2026-07-16', '0', Date.UTC(2026, 6, 16)],
|
||||||
|
]) {
|
||||||
|
assert.equal(acquisitionMsUtc(date, time), expected);
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -153,7 +153,13 @@ export function acquisitionMsUtc(acqDate, acqTime) {
|
|||||||
minutes > 59
|
minutes > 59
|
||||||
)
|
)
|
||||||
return NaN;
|
return NaN;
|
||||||
return Date.UTC(year, month - 1, day, hours, minutes);
|
const ms = Date.UTC(year, month - 1, day, hours, minutes);
|
||||||
|
const parsed = new Date(ms);
|
||||||
|
return parsed.getUTCFullYear() === year &&
|
||||||
|
parsed.getUTCMonth() === month - 1 &&
|
||||||
|
parsed.getUTCDate() === day
|
||||||
|
? ms
|
||||||
|
: NaN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in new issue
Block a user