Advertisement
Guest User

test1

a guest
Jul 8th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function toMySQLDate (date) {
  2.     return date.toISOString().slice(0, 19).replace('T', ' ');
  3. }
  4.  
  5. function authorize (socket, callback) {
  6.     var query = socket.handshake.query,
  7.         shop_hash = query.shop || '';
  8.  
  9.     var sql = "SELECT `shop_id`, `shopify_domain`, NOW() as `last_view`, `shop_iana_timezone`  FROM `shop` WHERE `shopify_domain_hash` = " + connection.escape(shop_hash);
  10.     connection.query(sql, function(err, rows, fields) {
  11.         if (err == null) {
  12.             if (rows[0].shop_id != null) {
  13.                process.nextTick(function(){
  14.                 callback (rows[0].shop_id, rows[0].shopify_domain, rows[0].last_view, rows[0].shop_iana_timezone);
  15.                });
  16.             } else {
  17.                 console.log('No shop ID found with hash: ', connection.escape(shop_hash));
  18.             }
  19.         } else {
  20.             console.log('Could not connect to shop with hash: ', connection.escape(shop_hash));
  21.         }
  22.     });
  23. }
  24.  
  25. var fs = require('fs'),
  26.     https = require('https'),
  27.     async =require('async'),
  28.     express = require('express'),
  29.     app = express(),
  30.     mysql = require('mysql'),
  31.     geoip = require('geoip-ultralight'),
  32.     moment = require('moment-timezone'),
  33.     argv = require('yargs').argv,
  34.     options = {
  35.         key: fs.readFileSync(__dirname + '/ssl/appifiny.key'),
  36.         cert: fs.readFileSync(__dirname + '/ssl/appifiny.crt')
  37.     },
  38.     server = https.createServer(options, app),
  39.     io = require('socket.io')(server),
  40.     env = argv.env || 'live';
  41.  
  42. switch (env) {
  43.     case 'dev':
  44.         var serverPort = 3002,
  45.         connection_data = {
  46.             host: '',
  47.             user: '',
  48.             password: '',
  49.             database: '',
  50.             dateStrings: true
  51.         };
  52.         break;
  53.     case 'uat':
  54.         var serverPort = 3001,
  55.         connection_data = {
  56.             host: '',
  57.             user: '',
  58.             password: '',
  59.             database: '',
  60.             dateStrings: true
  61.         };
  62.         break;
  63.     case 'live':
  64.         var serverPort = 3000,
  65.         connection_data = {
  66.             host: '',
  67.             user: '',
  68.             password: '',
  69.             database: '',
  70.             dateStrings: true
  71.         };
  72.         break;
  73. }
  74.  
  75. var connection = mysql.createConnection(connection_data);
  76. connection.connect(function(err) {
  77.     if (err) {
  78.         console.error('MySQL error connecting: ' + err.stack);
  79.         return;
  80.     }
  81.     console.log('MySQL connected as id ' + connection.threadId);
  82. });
  83.  
  84. io.on('connection', function(socket) {
  85.     authorize (socket, function(shop_id, shopify_domain, last_view, shop_iana_timezone) {
  86.  
  87.         console.log('Connected to shop:', shopify_domain, ' TZ: ', shop_iana_timezone, 'Last view: ' , last_view);
  88.  
  89.         var loop = setInterval(function() {
  90.             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";
  91.             console.log(sql);
  92.             connection.query(sql, function(err, rows, fields) {
  93.                 if (err == null) {
  94.                     if (rows[0].shop_id != null) {
  95.                         last_view = rows[0].last_view;
  96.                         var data = [];
  97.                         async.each(rows,function(NthRow,done){
  98.                           var date = moment(NthRow.created),
  99.                                 created = date.tz(shop_iana_timezone).format('hh:mm A'),
  100.                                 row = {
  101.                                     click  : NthRow.click,
  102.                                     created: created,
  103.                                     country: geoip.lookupCountry(NthRow.ip),
  104.                                     mobile : NthRow.mobile,
  105.                                     title  : NthRow.title
  106.                                  }
  107.                                 data.push(row);
  108.                                 async.setImmediate(function () {
  109.                                   done();
  110.                                 });
  111.                                
  112.                         },function(err){
  113.                             //if you need some error handling
  114.                             if(!err){
  115.                               data.reverse();
  116.                               socket.emit('message', data);
  117.                             }
  118.                         });  
  119.                     }
  120.                 }
  121.             });
  122.         }, 2000);
  123.        
  124.         socket.on('disconnect', function() {
  125.             clearInterval(loop);
  126.             console.log(shopify_domain, ' has disconnected');
  127.         });
  128.     });
  129. });
  130.  
  131. server.listen(serverPort, function() {
  132.     console.log('Server up and running at %s port', serverPort);
  133. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement