Created
June 27, 2014 18:43
-
-
Save mbejda/1304e88e62d955e88591 to your computer and use it in GitHub Desktop.
redis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var mongoose = require('mongoose'); | |
var Schema = mongoose.Schema; | |
var Hashids = require("hashids"); | |
var hashids = new Hashids("this is my salt"); | |
var sh = require("shorthash"); | |
var redis = require("redis"), | |
client = redis.createClient('6379', '107.170.143.179'); | |
var moment = require('moment'); | |
var Cookies = require("cookies") | |
var uaParser = require('ua-parser'); | |
var projectModel = new Schema({ | |
aid: { | |
type: Schema.Types.ObjectId, | |
ref: 'User' | |
}, | |
domain: { | |
type: 'string', | |
default: null | |
}, | |
description: { | |
type: 'string', | |
default: null | |
}, | |
hash: { | |
type: 'string', | |
required: true | |
}, | |
}); | |
projectModel.statics.newProject = function newProject(param) { | |
var Project = mongoose.model('Project'); | |
var project = new Project(param); | |
project.hash = sh.unique(param.aid + new Date().getTime()); | |
return { | |
exec: function(cb) { | |
project.save(function(error, results) { | |
cb(error, results); | |
}); | |
} | |
} | |
} | |
projectModel.statics.deleteHashKey = function newProject(param) { | |
return { | |
exec: function(cb) { | |
} | |
} | |
} | |
projectModel.statics.getHashKey = function clickTotal(param) { | |
var hashkey = param.hashkey; | |
var args = [ | |
['get', hashkey] | |
] | |
return { | |
exec: function(cb) { | |
client.multi(args).exec(function(err, replies) { | |
if (replies.length > 0) { | |
var rep = parseInt(replies[0]); | |
} | |
cb(null, { | |
hits: { | |
data: rep, | |
error: err, | |
} | |
}); | |
}); | |
} | |
} | |
} | |
projectModel.statics.getKeys = function getKeys(param) { | |
var pixel = param.pixel; | |
console.log(pixel) | |
var args = [ | |
['smembers', pixel + ':customs:cumulative'], | |
['smembers', pixel + ':customs:incremental'] | |
] | |
return { | |
exec: function(cb) { | |
client.multi(args).exec(function(err, replies) { | |
cb(null, { | |
cumulative: replies[0], | |
incremental: replies[1], | |
error: err | |
}); | |
}); | |
} | |
} | |
} | |
projectModel.statics.getHashKeyRange = function getStats(param) { | |
var from = param.start; | |
var to = param.end; | |
var project = param.hash; | |
var from_day = moment(from, "MM/DD/YYYY"); | |
var to_day = moment(to, "MM/DD/YYYY"); | |
var to_day = to_day.add('days', 1); | |
var args = []; | |
var dates = [] | |
for (var m = from_day; m.isBefore(to_day); m.add('days', 1)) { | |
var day = m.format("MM/DD/YYYY"); | |
args.push(['get', getHashKeyRange + ':day:' + day]); | |
dates.push({ | |
x: m.unix() * 1000 | |
}) | |
} | |
return { | |
exec: function(cb) { | |
client.multi(args).exec(function(err, replies) { | |
for (var i = 0; i < replies.length; i++) { | |
dates[i].y = replies[i] == null ? 0 : parseInt(replies[i]); | |
} | |
cb(null, { | |
all: dates, | |
error: err | |
}); | |
}); | |
} | |
} | |
} | |
projectModel.statics.getStats = function getStats(param) { | |
var from = param.start; | |
var to = param.end; | |
var project = param.hash; | |
var from_day = moment(from, "MM/DD/YYYY"); | |
var to_day = moment(to, "MM/DD/YYYY"); | |
var to_day = to_day.add('days', 1); | |
var args = []; | |
var dates = [] | |
for (var m = from_day; m.isBefore(to_day); m.add('days', 1)) { | |
var day = m.format("MM/DD/YYYY"); | |
args.push(['get', project + ':day:' + day]); | |
dates.push({ | |
x: m.unix() * 1000 | |
}) | |
} | |
return { | |
exec: function(cb) { | |
client.multi(args).exec(function(err, replies) { | |
for (var i = 0; i < replies.length; i++) { | |
dates[i].y = replies[i] == null ? 0 : parseInt(replies[i]); | |
} | |
cb(null, { | |
all: dates | |
}); | |
}); | |
} | |
} | |
} | |
projectModel.statics.clickTotal = function clickTotal(param) { | |
var project = param.pixel; | |
var args = [ | |
['get', project + ':'], | |
['get', project + ':unique'] | |
] | |
return { | |
exec: function(cb) { | |
client.multi(args).exec(function(err, replies) { | |
console.log(replies) | |
if (replies[0] == null) { | |
replies[0] = 0; | |
} | |
if (replies[1] == null) { | |
replies[1] = 0; | |
} | |
cb(null, { | |
hits: { | |
project: project, | |
total: parseInt(replies[0]), | |
unique: parseInt(replies[1]) | |
} | |
}); | |
}); | |
} | |
} | |
} | |
projectModel.statics.clickRange = function clickRange(param) { | |
var from = param.start; | |
var to = param.end; | |
var project = param.hash; | |
var from_day = moment(from, "MM/DD/YYYY"); | |
var to_day = moment(to, "MM/DD/YYYY"); | |
var to_day = to_day.add('days', 1); | |
var args = []; | |
var dates = [] | |
var unique = param.unique != undefined ? param.unique : false; | |
for (var m = from_day; m.isBefore(to_day); m.add('days', 1)) { | |
var day = m.format("MM/DD/YYYY"); | |
if (unique == true) { | |
args.push(['get', project + ':unique:day:' + day]); | |
} else { | |
args.push(['get', project + ':day:' + day]); | |
} | |
dates.push({ | |
x: m.unix() * 1000 | |
}) | |
} | |
return { | |
exec: function(cb) { | |
client.multi(args).exec(function(err, replies) { | |
for (var i = 0; i < replies.length; i++) { | |
dates[i].y = replies[i] == null ? 0 : parseInt(replies[i]); | |
} | |
cb(null, { | |
all: dates | |
}); | |
}); | |
} | |
} | |
} | |
projectModel.statics.deleteProject = function newProject(param) { | |
var self = this; | |
var aid = param.aid; | |
var hash = param.hash; | |
return { | |
exec: function(cb) { | |
self.findOneAndRemove({ | |
hash: hash | |
}).exec(function(error, results) { | |
client.delWildcard(hash + '*', function(err, res) { | |
cb(error, results); | |
}); | |
}); | |
} | |
} | |
} | |
module.exports = mongoose.model('Project', projectModel); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment