Skip to content

Instantly share code, notes, and snippets.

@alastaircoote
Created September 15, 2016 16:15

Revisions

  1. alastaircoote created this gist Sep 15, 2016.
    39 changes: 39 additions & 0 deletions db-stream.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    class DbStream extends stream.Writable {

    constructor() {
    super( {objectMode: true} );
    }

    _write(data, encoding, cb) {

    let specificFields = ["name", "pid", "hostname", "time", "level", "msg", "req_id", "v"];
    let fieldData = [];

    specificFields.forEach( (field) => {
    fieldData.push(data[field]);
    delete data[field];
    } );

    // Manually add the data field, as we didn't want to iterate over it earlier

    specificFields.push("data");
    fieldData.push(data);

    // The query needs to be formatted as $1, $2, $3 etc. So create an array for that.
    let variableNumbers = specificFields.map((item, i) => "$" + (i + 1));

    let query = "INSERT INTO log_entries (" +
    specificFields.join(",") +
    ") VALUES (" +
    variableNumbers.join(",")
    + ":: jsonb)";

    client.query(query, fieldData, (err, result) => {
    if (err) {
    console.error(err);
    }
    cb()
    });

    }
    }