All files / src/utils exporter.js

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 601x 1x 1x 1x 1x   1x   9x 9x 9x 9x 9x       9x 9x 9x 9x 9x 9x 9x     9x 9x   9x 9x   9x 20005x 20005x 40016x   20005x 20005x   29x         29x   29x 20x 20x     9x 9x           1x  
const Promise = require('bluebird');
const fs = require('fs');
const path = require('path');
const jsonStream = require('JSONStream');
const debug = require('debug')('express-cassandra');
 
const exporter = {
  processTableExport(systemClient, fixtureDirectory, keyspace, table) {
    debug('==================================================');
    debug(`Reading table: ${table}`);
    return new Promise((resolve, reject) => {
      const jsonfile = fs.createWriteStream(path.join(fixtureDirectory, `${table}.json`));
      jsonfile.on('error', (err) => {
        reject(err);
      });
 
      let processed = 0;
      const startTime = Date.now();
      jsonfile.on('finish', () => {
        const timeTaken = (Date.now() - startTime) / 1000;
        const throughput = timeTaken ? processed / timeTaken : 0.00;
        debug(`Done with table, throughput: ${throughput.toFixed(1)} rows/s`);
        resolve();
      });
 
      const writeStream = jsonStream.stringify('[', ',', ']');
      writeStream.pipe(jsonfile);
 
      const query = `SELECT * FROM "${keyspace}"."${table}"`;
      const options = { prepare: true, fetchSize: 1000 };
 
      systemClient.eachRow(query, [], options, (n, row) => {
        const rowObject = {};
        row.forEach((value, key) => {
          rowObject[key] = value;
        });
        processed++;
        writeStream.write(rowObject);
      }, (err, result) => {
        Iif (err) {
          reject(err);
          return;
        }
 
        debug(`Streaming ${processed} rows to: ${table}.json`);
 
        if (result.nextPage) {
          result.nextPage();
          return;
        }
 
        debug(`Finalizing writes into: ${table}.json`);
        writeStream.end();
      });
    });
  },
};
 
module.exports = exporter;