SEMS-on-device-server/scanner.js

87 lines
2.4 KiB
JavaScript
Raw Normal View History

2024-09-11 19:06:44 +08:00
import * as fs from "node:fs"
import * as path from "node:path"
import { Buffer } from 'node:buffer';
import { unpack, pack } from 'msgpackr';
import * as pako from 'pako';
function get_latest_file_path(raw_spectral_data_dir){
let files=fs.readdirSync(raw_spectral_data_dir)
files=files.sort()
let latest_name=files.pop()
// console.log(latest_name,files.length)
return path.resolve(raw_spectral_data_dir,latest_name)
}
async function main(){
try {
// process.send("child process started");
const raw_spectral_data_dir="/data"
2024-09-11 19:06:44 +08:00
let last_data_file=null
let latest_data_file=null
let fd_csv=null
let fd_bin=null
while(true){
latest_data_file=get_latest_file_path(raw_spectral_data_dir)
if (latest_data_file!=last_data_file){
fd_csv=fs.openSync(latest_data_file)
fd_bin=fs.openSync(path.format({
dir: path.dirname(latest_data_file),
name: path.basename(latest_data_file,".csv"),
ext: 'bin',
}))
last_data_file=latest_data_file
}
let last_pointer=fs.statSync(latest_data_file).size
while(true){
const stat=fs.statSync(latest_data_file)
if(stat.size>last_pointer){
let buffer=Buffer.alloc(stat.size-last_pointer)
fs.readSync(fd_csv,buffer,0,stat.size-last_pointer,last_pointer)
let info=buffer.toString().split(",")
let timeStamp=Number(info[0])
let start_pointer=Number(info[1])
let length=Number(info[2])
let spectral_buffer=Buffer.alloc(length)
const spectral_data=fs.readSync(fd_bin,spectral_buffer,0,length,start_pointer)
let upload_data={"spectral_data_bin":spectral_buffer }
let upload_data_compressed = pako.gzip(pack(upload_data))
let response=await fetch("http://inference_server:8000/post", {
2024-09-11 19:06:44 +08:00
method: "post",
body: upload_data_compressed
})
let response_data_compressed= await response.arrayBuffer()
let response_data=unpack(pako.ungzip(response_data_compressed))
// console.log(response_data)
process.send(response_data);
break
}
}
}
}catch (err) {
console.error(err.message);
}
}
main().then(()=>{
// process.send("child process end");
})