Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function toMySQLDate (date) {
- return date.toISOString().slice(0, 19).replace('T', ' ');
- }
- function authorize (socket, callback) {
- var query = socket.handshake.query,
- shop_hash = query.shop || '';
- var sql = "SELECT `shop_id`, `shopify_domain`, NOW() as `last_view`, `shop_iana_timezone` FROM `shop` WHERE `shopify_domain_hash` = " + connection.escape(shop_hash);
- connection.query(sql, function(err, rows, fields) {
- if (err == null) {
- if (rows[0].shop_id != null) {
- process.nextTick(function(){
- callback (rows[0].shop_id, rows[0].shopify_domain, rows[0].last_view, rows[0].shop_iana_timezone);
- });
- } else {
- console.log('No shop ID found with hash: ', connection.escape(shop_hash));
- }
- } else {
- console.log('Could not connect to shop with hash: ', connection.escape(shop_hash));
- }
- });
- }
- var fs = require('fs'),
- https = require('https'),
- async =require('async'),
- express = require('express'),
- app = express(),
- mysql = require('mysql'),
- geoip = require('geoip-ultralight'),
- moment = require('moment-timezone'),
- argv = require('yargs').argv,
- options = {
- key: fs.readFileSync(__dirname + '/ssl/appifiny.key'),
- cert: fs.readFileSync(__dirname + '/ssl/appifiny.crt')
- },
- server = https.createServer(options, app),
- io = require('socket.io')(server),
- env = argv.env || 'live';
- switch (env) {
- case 'dev':
- var serverPort = 3002,
- connection_data = {
- host: '',
- user: '',
- password: '',
- database: '',
- dateStrings: true
- };
- break;
- case 'uat':
- var serverPort = 3001,
- connection_data = {
- host: '',
- user: '',
- password: '',
- database: '',
- dateStrings: true
- };
- break;
- case 'live':
- var serverPort = 3000,
- connection_data = {
- host: '',
- user: '',
- password: '',
- database: '',
- dateStrings: true
- };
- break;
- }
- var connection = mysql.createConnection(connection_data);
- connection.connect(function(err) {
- if (err) {
- console.error('MySQL error connecting: ' + err.stack);
- return;
- }
- console.log('MySQL connected as id ' + connection.threadId);
- });
- io.on('connection', function(socket) {
- authorize (socket, function(shop_id, shopify_domain, last_view, shop_iana_timezone) {
- console.log('Connected to shop:', shopify_domain, ' TZ: ', shop_iana_timezone, 'Last view: ' , last_view);
- var loop = setInterval(function() {
- var sql = "SELECT *, MAX(`created`) AS `last_view` FROM `stats` WHERE `shop_id` = " + connection.escape(shop_id) + " AND `created` > '" + last_view + "' ORDER BY `created` DESC";
- console.log(sql);
- connection.query(sql, function(err, rows, fields) {
- if (err == null) {
- if (rows[0].shop_id != null) {
- last_view = rows[0].last_view;
- var data = [];
- async.each(rows,function(NthRow,done){
- var date = moment(NthRow.created),
- created = date.tz(shop_iana_timezone).format('hh:mm A'),
- row = {
- click : NthRow.click,
- created: created,
- country: geoip.lookupCountry(NthRow.ip),
- mobile : NthRow.mobile,
- title : NthRow.title
- }
- data.push(row);
- async.setImmediate(function () {
- done();
- });
- },function(err){
- //if you need some error handling
- if(!err){
- data.reverse();
- socket.emit('message', data);
- }
- });
- }
- }
- });
- }, 2000);
- socket.on('disconnect', function() {
- clearInterval(loop);
- console.log(shopify_domain, ' has disconnected');
- });
- });
- });
- server.listen(serverPort, function() {
- console.log('Server up and running at %s port', serverPort);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement