mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 12:17:08 +00:00
This code implements the backend processing side of the ASAQC queue, i.e., the bit that communicates with the remote API. Its expected use it to have it running at regular intervals, e.g., via cron. The entry point is: lib/www/server/queues/asaqc/index.js That file is executable and can be run directly from the shell or within a script. Read the comments in that file for further instructions.
68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
const { createHash } = require('crypto');
|
|
const { seisjson, pdf } = require('../../lib/sse/present');
|
|
const { configuration } = require('../../lib/db');
|
|
|
|
function digestOf(content) {
|
|
const hash = createHash('sha256');
|
|
const data = (typeof content.data == "string" || Buffer.isBuffer(content.data))
|
|
? content.data
|
|
: JSON.stringify(content.data);
|
|
hash.update(data);
|
|
|
|
return {
|
|
sha256: {hex: hash.digest('hex')}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Create the payloads to send to the ASAQC endpoint
|
|
* for a queue item.
|
|
*
|
|
* At present this consists of two files, which must be
|
|
* sent in two separate requests. One is the SeisJSON
|
|
* file and the other is its PDF representation.
|
|
*
|
|
* In principle, other options are possible, such as
|
|
* GeoJSON and CSV, and this could be made configurable.
|
|
*
|
|
* Likewise, it would be possible to upload P1 and P2 files,
|
|
* etc.
|
|
*/
|
|
async function getPayloads(item) {
|
|
|
|
const asaqcConfig = await configuration.get(item.payload.project, '/asaqc');
|
|
const surveyName = await configuration.get(item.payload.project, 'id');
|
|
|
|
const template = {
|
|
type: "acqlinelog",
|
|
imo: asaqcConfig.imo,
|
|
mmsi: asaqcConfig.mmsi,
|
|
surveyName: surveyName,
|
|
surveyId: asaqcConfig.id
|
|
};
|
|
|
|
const seisjsonData = await seisjson(item.payload);
|
|
const pdfData = await pdf(item.payload, seisjsonData);
|
|
|
|
return [
|
|
{
|
|
payload: {
|
|
...template,
|
|
fileName: seisjsonData.name,
|
|
encodedData: Buffer.from(JSON.stringify(seisjsonData.data)).toString("base64")
|
|
},
|
|
digest: digestOf(seisjsonData)
|
|
},
|
|
{
|
|
payload: {
|
|
...template,
|
|
fileName: pdfData.name,
|
|
encodedData: pdfData.data.toString("base64")
|
|
},
|
|
digest: digestOf(pdfData)
|
|
}
|
|
]
|
|
}
|
|
|
|
module.exports = getPayloads;
|