Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var Pusher = require('pusher-client');
- var pg = require('pg');
- var express = require('express');
- var http = require('http');
- var options = {
- host: 'live.alphatiming.co.uk',
- path: '/v2/bukc.json'
- };
- var competitor_number = "20";
- var competitor_id = -1;
- var channel = 'bukc';
- var start_race_state;
- var current_session;
- var session_found;
- var session_id = -1;
- var url = "postgres://ucuxggjntielio:hwaBLiHpQFcbP4s5SVFYub4tdo@ec2-54-247-178-94.eu-west-1.compute.amazonaws.com:5432/dbpigr0s43u14t?ssl=true";
- var pusher = new Pusher('3aaffebc8193ea83cb2f', { cluster: 'eu', encrypted:true });
- callback = function(response){
- var out = '';
- var race_state;
- //another chunk of data has been recieved, so append it to `str`
- response.on('data', function (data) {
- out += data;
- });
- response.on('error', function(err){
- console.log("ERROR: ");
- console.log(err);
- });
- //the whole response has been recieved, so we just print it out here
- response.on('end', function () {
- race_state = JSON.parse(out);
- if (race_state){
- for (var c in race_state.Competitors){
- var competitor = race_state.Competitors[c];
- if (competitor.CompetitorNumber == competitor_number){
- competitor_id = competitor.CompetitorId;
- start_race_state = generateLap(competitor);
- }
- }
- current_session = race_state;
- }
- });
- };
- http.request(options, callback).end();
- var app = express();
- app.set('port', (process.env.PORT || 5000));
- app.use(express.static(__dirname + '/public'));
- app.get('/', function(request, response) {
- response.send('Hello World!');
- });
- app.listen(app.get('port'), function() {
- console.log("Node app is running at localhost:" + app.get('port'));
- });
- pusher.connection.bind( 'error', function( err ) {
- console.log(err);
- });
- pusher.connection.bind('state_change', function(states) {
- console.log(states);
- });
- pusher.connection.bind('connected', function(){
- console.log("connected---");
- postConnected();
- });
- pusher.connection.bind('refresh', function(data){
- console.log("REFRESH: ");
- console.log(data);
- });
- function postConnected(){
- var testChannel = pusher.subscribe(channel+'prod');
- var laps;
- testChannel.bind('update', function(data){
- if (!session_found) {
- storeSessionInDB(start_race_state);
- storeLapInDB(start_race_state);
- }
- for (c in data.Competitors){
- var competitor = data.Competitors[c];
- var id = competitor.CompetitorId;
- if (competitor.CompetitorNumber) competitor_number = competitor.CompetitorNumber;
- if (id == competitor_id && competitor.NumberOfLaps != laps) {
- var lapData = generateLap(competitor);
- storeLapInDB(lapData);
- }
- }
- });
- testChannel.bind('new_session', function(session) {
- console.log("NEW_SESSION");
- session_id = session.SessionId;
- for (var c in session.Competitors){
- var competitor = session.Competitors[c];
- if (competitor.CompetitorNumber == competitor_number){
- competitor_id = competitor.CompetitorId;
- }
- }
- storeSessionInDB(session);
- });
- }
- function generateLap(competitor){
- var lapData = {};
- lapData['number_of_laps'] = competitor.NumberOfLaps;
- if (competitor.RaceTime) lapData['race_time'] = competitor.RaceTime;
- if (competitor.DriverName) lapData['driver_name'] = competitor.DriverName;
- if (competitor.Position) lapData['position'] = competitor.Position;
- if (competitor.LastLaptime) lapData['last_lap_time'] = competitor.LastLaptime;
- if (competitor.LastLapTimestamp) lapData['last_lap_timestamp'] = competitor.LastLapTimestamp;
- if (competitor.PositionChange) lapData['position_change'] = competitor.PositionChange;
- if (competitor.Gap) lapData['gap'] = competitor.Gap;
- if (competitor.Behind) lapData['behind'] = competitor.Behind;
- if (competitor.TakenChequered) lapData['taken_chequered'] = competitor.TakenChequered;
- if (competitor.IsCurrentLapPBestLap) lapData['is_current_lap_p_best_lap'] = competitor.IsCurrentLapPBestLap;
- if (competitor.IsBestLapInRace) lapData['is_best_lap_in_race'] = competitor.IsBestLapInRace;
- return lapData;
- }
- function storeLapInDB(lap){
- pg.connect(url, function(err, client, done) {
- var queryCols = "";
- var queryVals = "";
- var COMMA_SEP = ", ";
- var SM = "'";
- if (lap.race_time) {queryCols += "race_time" + COMMA_SEP; queryVals += lap.race_time + COMMA_SEP;}
- if (lap.driver_name) {queryCols +="driver_name" + COMMA_SEP; queryVals += SM+lap.driver+SM+ COMMA_SEP;}
- if (lap.position) {queryCols +="position" + COMMA_SEP; queryVals += lap.position + COMMA_SEP;}
- if (lap.last_lap_time) {queryCols +="last_lap_time" + COMMA_SEP; queryVals += lap.last_lap_time + COMMA_SEP;}
- if (lap.last_lap_timestamp) {queryCols +="last_lap_timestamp" + COMMA_SEP; queryVals += lap.last_lap_timestamp + COMMA_SEP;}
- if (lap.position_change) {queryCols += "position_change" + COMMA_SEP; queryVals += lap.position_change + COMMA_SEP;}
- if (lap.gap) {queryCols += "gap" + COMMA_SEP; queryVals += SM+lap.gap+SM + COMMA_SEP;}
- if (lap.behind) {queryCols += "behind" + COMMA_SEP; queryVals += SM+lap.behind+SM + COMMA_SEP;}
- if (lap.taken_chequered) {queryCols += "taken_chequered" + COMMA_SEP; queryVals += lap.taken_chequered + COMMA_SEP;}
- 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;}
- if (lap.is_best_lap_in_race) {queryCols += "is_best_lap_in_race" + COMMA_SEP; queryVals += lap.is_best_lap_in_race + COMMA_SEP;}
- queryCols += "number_of_laps" + COMMA_SEP;
- queryVals += lap.number_of_laps + COMMA_SEP;
- queryCols += "session_id";
- queryVals += session_id;
- var queryString = "INSERT INTO laps(" +queryCols+ ") values ("+queryVals+");";
- var query = client.query(queryString);
- console.log(queryString);
- });
- }
- function storeSessionInDB(session){
- pg.connect(url, function(err, client, done) {
- var queryCols = "";
- var queryVals = "";
- var COMMA_SEP = ", ";
- var SM = "'";
- if (session.Weather) {
- queryCols += "weather" + COMMA_SEP;
- queryVals += SM + session.Weather + SM + COMMA_SEP;
- }
- if (session.TimingSystem) {
- queryCols += "timing_system" + COMMA_SEP;
- queryVals += SM + session.TimingSystem + SM + COMMA_SEP;
- }
- if (session.Date) {
- queryCols += "date" + COMMA_SEP;
- queryVals += SM + session.Date + SM + COMMA_SEP;
- }
- if (session.IsTeamEvent) {
- queryCols += "is_team_event" + COMMA_SEP;
- queryVals += session.IsTeamEvent + COMMA_SEP;
- }
- if (session.SessionName) {
- queryCols += "session_name" + COMMA_SEP;
- queryVals += SM + session.SessionName + SM + COMMA_SEP;
- }
- if (session.SessionStartTime) {
- queryCols += "session_start_time" + COMMA_SEP;
- queryVals += SM + session.SessionStartTime + SM + COMMA_SEP;
- }
- if (session.TrackCondition) {
- queryCols += "track_condition" + COMMA_SEP;
- queryVals += SM + session.TrackCondition + SM + COMMA_SEP;
- }
- if (session.Temperature) {
- queryCols += "temperature" + COMMA_SEP;
- queryVals += SM + session.Temperature + SM + COMMA_SEP;
- }
- queryCols += "session_id";
- queryVals += session.SessionId;
- var queryString = "INSERT INTO sessions(" + queryCols + ") values (" + queryVals + ");";
- var query = client.query(queryString);
- console.log(queryString);
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement