Commit ab029eae authored by John Crepezzi's avatar John Crepezzi
Browse files

Added postgres adapter

parent 447d0aae
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@ DocumentHandler.prototype.handlePost = function (request, response) {
  // What to do when done
  var onSuccess = function () {
    // Check length
    console.log(buffer);
    if (_this.maxLength && buffer.length > _this.maxLength) {
      cancelled = true;
      winston.warn('document >maxLength', { maxLength: _this.maxLength });
+63 −57
Original line number Diff line number Diff line
@@ -3,28 +3,27 @@
var postgres = require('pg');
var winston = require('winston');

(function () {

  'use strict';
// create table entries (id SERIAL primary key, key varchar(255) not null, value text not null, expiration int);
// CREATE UNIQUE INDEX unique_key ON entries (key);

// A postgres document store
var PostgresDocumentStore = function (options) {
    this.expireJS = options.expire * 1000;
    this.connectionString = process.env.DATABASE_URL;
  this.expireJS = options.expire;
  this.connectionUrl = process.env.DATABASE_URL || options.connectionUrl;
};

PostgresDocumentStore.prototype = {

  // Set a given key
  set: function (key, data, callback, skipExpire) {
      var now = new Date().getTime() / 1000;
    var now = Math.floor(new Date().getTime() / 1000);
    var that = this;
    this.safeConnect(function (err, client, done) {
      if (err) { return callback(false); }
      client.query('INSERT INTO entries (key, value, expiration) VALUES ($1, $2, $3)', [
        key,
        data,
          that.expireJS && !skipExpire ? now + that.expireJS : null
        that.expireJS && !skipExpire ? that.expireJS + now : null
      ], function (err, result) {
        if (err) {
          winston.error('error persisting value to postgres', { error: err });
@@ -38,26 +37,35 @@ var winston = require('winston');

  // Get a given key's data
  get: function (key, callback, skipExpire) {
      var now = new Date().getTime() / 1000;
    var now = Math.floor(new Date().getTime() / 1000);
    var that = this;
    this.safeConnect(function (err, client, done) {
      if (err) { return callback(false); }
        client.query('SELECT value from entries where KEY = $1 AND (expiration IS NULL or expiration < $2)', [
          key,
          that.expireJS ? now - that.expireJS : 0
        ], function (err, result) {
      client.query('SELECT id,value,expiration from entries where KEY = $1 and (expiration IS NULL or expiration > $2)', [key, now], function (err, result) {
        if (err) {
          winston.error('error retrieving value from postgres', { error: err });
          return callback(false);
        }
        callback(result.rows.length ? result.rows[0].value : false);
        if (result.rows.length && that.expireJS && !skipExpire) {
          client.query('UPDATE entries SET expiration = $1 WHERE ID = $2', [
            that.expireJS + now,
            result.rows[0].id
          ], function (err, result) {
            if (!err) {
              done();
            }
          });
        } else {
          done();
        }
      });
    });
  },

  // A connection wrapper
  safeConnect: function (callback) {
      postgres.connect(this.connectionString, function (err, client, done) {
    postgres.connect(this.connectionUrl, function (err, client, done) {
      if (err) {
        winston.error('error connecting to postgres', { error: err });
        callback(err);
@@ -69,6 +77,4 @@ var winston = require('winston');

};

  module.export = PostgresDocumentStore;

}());
module.exports = PostgresDocumentStore;
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ if (!config.storage.type) {

var Store, preferredStore;

if (process.env.REDISTOGO_URL) {
if (process.env.REDISTOGO_URL && config.storage.type === 'redis') {
  var redisClient = require('redis-url').connect(process.env.REDISTOGO_URL);
  Store = require('./lib/document_stores/redis');
  preferredStore = new Store(config.storage, redisClient);