Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Pusher = require('pusher-client');
  2. var pg = require('pg');
  3. var express = require('express');
  4. var http = require('http');
  5.  
  6. var options = {
  7.     host: 'live.alphatiming.co.uk',
  8.     path: '/v2/bukc.json'
  9. };
  10.  
  11. var competitor_number = "20";
  12. var competitor_id = -1;
  13. var channel = 'bukc';
  14. var start_race_state;
  15. var current_session;
  16. var session_found;
  17. var session_id = -1;
  18.  
  19. var url = "postgres://ucuxggjntielio:hwaBLiHpQFcbP4s5SVFYub4tdo@ec2-54-247-178-94.eu-west-1.compute.amazonaws.com:5432/dbpigr0s43u14t?ssl=true";
  20. var pusher = new Pusher('3aaffebc8193ea83cb2f', { cluster: 'eu', encrypted:true });
  21.  
  22.  
  23. callback = function(response){
  24.  
  25.     var out = '';
  26.     var race_state;
  27.  
  28.     //another chunk of data has been recieved, so append it to `str`
  29.     response.on('data', function (data) {
  30.         out += data;
  31.     });
  32.  
  33.     response.on('error', function(err){
  34.         console.log("ERROR: ");
  35.         console.log(err);
  36.     });
  37.  
  38.     //the whole response has been recieved, so we just print it out here
  39.     response.on('end', function () {
  40.         race_state  = JSON.parse(out);
  41.         if (race_state){
  42.             for (var c in race_state.Competitors){
  43.                 var competitor = race_state.Competitors[c];
  44.                 if (competitor.CompetitorNumber == competitor_number){
  45.                     competitor_id = competitor.CompetitorId;
  46.                     start_race_state = generateLap(competitor);
  47.                 }
  48.             }
  49.             current_session = race_state;
  50.         }
  51.     });
  52. };
  53.  
  54. http.request(options, callback).end();
  55.  
  56. var app = express();
  57. app.set('port', (process.env.PORT || 5000));
  58. app.use(express.static(__dirname + '/public'));
  59. app.get('/', function(request, response) {
  60.     response.send('Hello World!');
  61. });
  62. app.listen(app.get('port'), function() {
  63.     console.log("Node app is running at localhost:" + app.get('port'));
  64. });
  65.  
  66. pusher.connection.bind( 'error', function( err ) {
  67.     console.log(err);
  68. });
  69.  
  70. pusher.connection.bind('state_change', function(states) {
  71.     console.log(states);
  72. });
  73.  
  74. pusher.connection.bind('connected', function(){
  75.     console.log("connected---");
  76.     postConnected();
  77. });
  78.  
  79. pusher.connection.bind('refresh', function(data){
  80.     console.log("REFRESH: ");
  81.     console.log(data);
  82. });
  83.  
  84. function postConnected(){
  85.  
  86.     var testChannel = pusher.subscribe(channel+'prod');
  87.  
  88.     var laps;
  89.  
  90.     testChannel.bind('update', function(data){
  91.         if (!session_found) {
  92.             storeSessionInDB(start_race_state);
  93.             storeLapInDB(start_race_state);
  94.         }
  95.         for (c in data.Competitors){
  96.             var competitor = data.Competitors[c];
  97.             var id = competitor.CompetitorId;
  98.             if (competitor.CompetitorNumber) competitor_number = competitor.CompetitorNumber;
  99.  
  100.  
  101.  
  102.             if (id == competitor_id && competitor.NumberOfLaps != laps) {
  103.                 var lapData = generateLap(competitor);
  104.                 storeLapInDB(lapData);
  105.             }
  106.         }
  107.     });
  108.  
  109.     testChannel.bind('new_session', function(session) {
  110.         console.log("NEW_SESSION");
  111.         session_id = session.SessionId;
  112.  
  113.         for (var c in session.Competitors){
  114.             var competitor = session.Competitors[c];
  115.             if (competitor.CompetitorNumber == competitor_number){
  116.                 competitor_id = competitor.CompetitorId;
  117.             }
  118.         }
  119.  
  120.         storeSessionInDB(session);
  121.     });
  122. }
  123.  
  124. function generateLap(competitor){
  125.     var lapData = {};
  126.     lapData['number_of_laps'] = competitor.NumberOfLaps;
  127.     if (competitor.RaceTime) lapData['race_time'] = competitor.RaceTime;
  128.     if (competitor.DriverName) lapData['driver_name'] = competitor.DriverName;
  129.     if (competitor.Position) lapData['position'] = competitor.Position;
  130.     if (competitor.LastLaptime) lapData['last_lap_time'] = competitor.LastLaptime;
  131.     if (competitor.LastLapTimestamp) lapData['last_lap_timestamp'] = competitor.LastLapTimestamp;
  132.     if (competitor.PositionChange) lapData['position_change'] = competitor.PositionChange;
  133.     if (competitor.Gap) lapData['gap'] = competitor.Gap;
  134.     if (competitor.Behind) lapData['behind'] = competitor.Behind;
  135.     if (competitor.TakenChequered) lapData['taken_chequered'] = competitor.TakenChequered;
  136.     if (competitor.IsCurrentLapPBestLap) lapData['is_current_lap_p_best_lap'] = competitor.IsCurrentLapPBestLap;
  137.     if (competitor.IsBestLapInRace) lapData['is_best_lap_in_race'] = competitor.IsBestLapInRace;
  138.     return lapData;
  139. }
  140.  
  141. function storeLapInDB(lap){
  142.     pg.connect(url, function(err, client, done) {
  143.         var queryCols = "";
  144.         var queryVals = "";
  145.         var COMMA_SEP = ", ";
  146.         var SM = "'";
  147.  
  148.         if (lap.race_time) {queryCols += "race_time" + COMMA_SEP; queryVals += lap.race_time + COMMA_SEP;}
  149.         if (lap.driver_name) {queryCols +="driver_name" + COMMA_SEP; queryVals += SM+lap.driver+SM+ COMMA_SEP;}
  150.         if (lap.position) {queryCols +="position" + COMMA_SEP; queryVals += lap.position + COMMA_SEP;}
  151.         if (lap.last_lap_time) {queryCols +="last_lap_time" + COMMA_SEP; queryVals += lap.last_lap_time + COMMA_SEP;}
  152.         if (lap.last_lap_timestamp) {queryCols +="last_lap_timestamp" + COMMA_SEP; queryVals += lap.last_lap_timestamp + COMMA_SEP;}
  153.         if (lap.position_change) {queryCols += "position_change" + COMMA_SEP; queryVals += lap.position_change + COMMA_SEP;}
  154.         if (lap.gap) {queryCols += "gap" + COMMA_SEP; queryVals += SM+lap.gap+SM + COMMA_SEP;}
  155.         if (lap.behind) {queryCols += "behind" + COMMA_SEP; queryVals += SM+lap.behind+SM + COMMA_SEP;}
  156.         if (lap.taken_chequered) {queryCols += "taken_chequered" + COMMA_SEP; queryVals += lap.taken_chequered + COMMA_SEP;}
  157.         if (lap.is_current_lap_p_best_lap) {queryCols += "is_current_lap_p_best_lap" + COMMA_SEP; queryVals += lap.is_current_lap_p_best_lap + COMMA_SEP;}
  158.         if (lap.is_best_lap_in_race) {queryCols += "is_best_lap_in_race" + COMMA_SEP; queryVals += lap.is_best_lap_in_race + COMMA_SEP;}
  159.  
  160.         queryCols += "number_of_laps" + COMMA_SEP;
  161.         queryVals += lap.number_of_laps + COMMA_SEP;
  162.         queryCols += "session_id";
  163.         queryVals += session_id;
  164.  
  165.         var queryString = "INSERT INTO laps(" +queryCols+ ") values ("+queryVals+");";
  166.  
  167.         var query = client.query(queryString);
  168.  
  169.         console.log(queryString);
  170.     });
  171. }
  172.  
  173. function storeSessionInDB(session){
  174.  
  175.     pg.connect(url, function(err, client, done) {
  176.         var queryCols = "";
  177.         var queryVals = "";
  178.         var COMMA_SEP = ", ";
  179.         var SM = "'";
  180.  
  181.         if (session.Weather) {
  182.             queryCols += "weather" + COMMA_SEP;
  183.             queryVals += SM + session.Weather + SM + COMMA_SEP;
  184.         }
  185.         if (session.TimingSystem) {
  186.             queryCols += "timing_system" + COMMA_SEP;
  187.             queryVals += SM + session.TimingSystem + SM + COMMA_SEP;
  188.         }
  189.         if (session.Date) {
  190.             queryCols += "date" + COMMA_SEP;
  191.             queryVals += SM + session.Date + SM + COMMA_SEP;
  192.         }
  193.         if (session.IsTeamEvent) {
  194.             queryCols += "is_team_event" + COMMA_SEP;
  195.             queryVals += session.IsTeamEvent + COMMA_SEP;
  196.         }
  197.         if (session.SessionName) {
  198.             queryCols += "session_name" + COMMA_SEP;
  199.             queryVals += SM + session.SessionName + SM + COMMA_SEP;
  200.         }
  201.         if (session.SessionStartTime) {
  202.             queryCols += "session_start_time" + COMMA_SEP;
  203.             queryVals += SM + session.SessionStartTime + SM + COMMA_SEP;
  204.         }
  205.         if (session.TrackCondition) {
  206.             queryCols += "track_condition" + COMMA_SEP;
  207.             queryVals += SM + session.TrackCondition + SM + COMMA_SEP;
  208.         }
  209.         if (session.Temperature) {
  210.             queryCols += "temperature" + COMMA_SEP;
  211.             queryVals += SM + session.Temperature + SM + COMMA_SEP;
  212.         }
  213.  
  214.         queryCols += "session_id";
  215.         queryVals += session.SessionId;
  216.  
  217.         var queryString = "INSERT INTO sessions(" + queryCols + ") values (" + queryVals + ");";
  218.  
  219.         var query = client.query(queryString);
  220.  
  221.         console.log(queryString);
  222.     });
  223.  
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement