This commit is contained in:
Jan Prochazka
2020-09-24 13:52:32 +02:00
parent 6b04593343
commit 55eda6c1b0
2 changed files with 33 additions and 17 deletions

View File

@@ -35,17 +35,16 @@ module.exports = {
}); });
}, },
readLine(jslid) { readLine(readerInfo) {
if (!this.openedReaders[jslid]) return Promise.reject();
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const { reader } = this.openedReaders[jslid]; const { reader } = readerInfo;
if (!reader.hasNextLine()) { if (!reader.hasNextLine()) {
resolve(null); resolve(null);
return; return;
} }
reader.nextLine((err, line) => { reader.nextLine((err, line) => {
if (this.openedReaders[jslid].readedSchemaRow) this.openedReaders[jslid].readedDataRowCount += 1; if (readerInfo.readedSchemaRow) readerInfo.readedDataRowCount += 1;
else this.openedReaders[jslid].readedSchemaRow = true; else readerInfo.readedSchemaRow = true;
if (err) reject(err); if (err) reject(err);
resolve(line); resolve(line);
}); });
@@ -62,12 +61,14 @@ module.exports = {
return new Promise((resolve, reject) => return new Promise((resolve, reject) =>
lineReader.open(file, (err, reader) => { lineReader.open(file, (err, reader) => {
if (err) reject(err); if (err) reject(err);
resolve(); const readerInfo = {
this.openedReaders[jslid] = {
reader, reader,
readedDataRowCount: 0, readedDataRowCount: 0,
readedSchemaRow: false, readedSchemaRow: false,
isReading: true,
}; };
this.openedReaders[jslid] = readerInfo;
resolve(readerInfo);
}) })
); );
}, },
@@ -76,15 +77,18 @@ module.exports = {
if (this.openedReaders[jslid] && this.openedReaders[jslid].readedDataRowCount > offset) { if (this.openedReaders[jslid] && this.openedReaders[jslid].readedDataRowCount > offset) {
await this.closeReader(jslid); await this.closeReader(jslid);
} }
let readerInfo = this.openedReaders[jslid];
if (!this.openedReaders[jslid]) { if (!this.openedReaders[jslid]) {
await this.openReader(jslid); readerInfo = await this.openReader(jslid);
} }
if (!this.openedReaders[jslid].readedSchemaRow) { readerInfo.isReading = true;
await this.readLine(jslid); // skip structure if (!readerInfo.readedSchemaRow) {
await this.readLine(readerInfo); // skip structure
} }
while (this.openedReaders[jslid].readedDataRowCount < offset) { while (readerInfo.readedDataRowCount < offset) {
await this.readLine(jslid); await this.readLine(readerInfo);
} }
return readerInfo;
}, },
getInfo_meta: 'get', getInfo_meta: 'get',
@@ -97,13 +101,19 @@ module.exports = {
getRows_meta: 'get', getRows_meta: 'get',
async getRows({ jslid, offset, limit }) { async getRows({ jslid, offset, limit }) {
await this.ensureReader(jslid, offset); const readerInfo = await this.ensureReader(jslid, offset);
const res = []; const res = [];
for (let i = 0; i < limit; i += 1) { for (let i = 0; i < limit; i += 1) {
const line = await this.readLine(jslid); const line = await this.readLine(readerInfo);
if (line == null) break; if (line == null) break;
res.push(JSON.parse(line)); res.push(JSON.parse(line));
} }
readerInfo.isReading = false;
if (readerInfo.closeAfterReadAndSendStats) {
await this.closeReader(jslid);
socket.emit(`jsldata-stats-${jslid}`, readerInfo.closeAfterReadAndSendStats);
readerInfo.closeAfterReadAndSendStats = null;
}
return res; return res;
}, },
@@ -115,7 +125,12 @@ module.exports = {
async notifyChangedStats(stats) { async notifyChangedStats(stats) {
console.log('SENDING STATS', JSON.stringify(stats)); console.log('SENDING STATS', JSON.stringify(stats));
const readerInfo = this.openedReaders[stats.jslid];
if (readerInfo && readerInfo.isReading) {
readerInfo.closeAfterReadAndSendStats = stats;
} else {
await this.closeReader(stats.jslid); await this.closeReader(stats.jslid);
socket.emit(`jsldata-stats-${stats.jslid}`, stats); socket.emit(`jsldata-stats-${stats.jslid}`, stats);
}
}, },
}; };

View File

@@ -182,10 +182,11 @@ export default function QueryTab({
}; };
const handleKill = () => { const handleKill = () => {
axios.post('sessions/cancel', { axios.post('sessions/kill', {
sesid: sessionId, sesid: sessionId,
}); });
setSessionId(null); setSessionId(null);
setBusy(false);
}; };
const handleKeyDown = (data, hash, keyString, keyCode, event) => { const handleKeyDown = (data, hash, keyString, keyCode, event) => {