2022-02-22 03:01:39 +00:00
|
|
|
"use strict";
|
|
|
|
|
2022-02-25 03:22:58 +00:00
|
|
|
import { once } from './misc/events.mjs';
|
|
|
|
|
2022-02-22 03:01:39 +00:00
|
|
|
class SystemQueryClient {
|
|
|
|
constructor() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-02-24 03:08:21 +00:00
|
|
|
async status() {
|
|
|
|
return this.fetch_json(`/api/status`);
|
|
|
|
}
|
|
|
|
|
2022-02-25 03:22:58 +00:00
|
|
|
async *table(table_name) {
|
|
|
|
const abort = new AbortController();
|
|
|
|
const source = new EventSource(`/api/table/${table_name}`);
|
|
|
|
|
|
|
|
source.addEventListener(`end`, () => {
|
|
|
|
source.close();
|
|
|
|
abort.abort();
|
|
|
|
}, { once: true });
|
|
|
|
|
|
|
|
let count = 0;
|
|
|
|
while(source.readyState !== EventSource.CLOSED) {
|
|
|
|
let item = await once(source, "table", abort.signal);
|
|
|
|
if(item.type === "abort") break;
|
|
|
|
|
|
|
|
yield JSON.parse(item.data);
|
|
|
|
count++;
|
|
|
|
}
|
|
|
|
console.log(`FETCH TABLE ${table_name}: ${count} items returned`);
|
|
|
|
}
|
|
|
|
|
2022-02-24 03:08:21 +00:00
|
|
|
async fetch_json(path) {
|
|
|
|
let response = await fetch(path, {
|
|
|
|
headers: {
|
|
|
|
"accept": "application/json"
|
|
|
|
},
|
|
|
|
credentials: "same-origin"
|
|
|
|
});
|
|
|
|
console.log(`FETCH ${path} ${response.status} ${response.statusText}`);
|
|
|
|
return await response.json();
|
|
|
|
}
|
2022-02-22 03:01:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export default SystemQueryClient;
|