From a1749fb0296b4e17bbbf2a4db2d16b2c450e6a42 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 16:21:47 -0700 Subject: [PATCH 01/90] add Mixpanel, switch to ENV VARs, and split up debug logging --- app.js | 124 ++++++++++++++++++++++++++++++++++++++++++--------- package.json | 10 +++-- 2 files changed, 108 insertions(+), 26 deletions(-) diff --git a/app.js b/app.js index 2fcfbd6..687f646 100644 --- a/app.js +++ b/app.js @@ -1,9 +1,17 @@ +//Set up Env Vars +var env_var = { + debug: process.env.DEBUG, // supports: info and debug + ga_key: process.env.GOOGLE_ANALYTICS_PROD, + mixpanel_key: process.env.MIXPANEL_PROD +}; + //Set up Reqs var express = require('express'); var bodyParser = require('body-parser'); var request = require('request'); var qs = require('querystring'); - +var math = require('mathjs'); +var moment = require('moment'); //Server Details var app = express(); @@ -14,22 +22,41 @@ app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use(bodyParser.json({ type: 'application/vnd.api+json' })); +//Simple Base64 handler +var base64 = exports; +base64.encode = function (unencoded) { + return new Buffer(unencoded || '').toString('base64'); +}; + +base64.decode = function (encoded) { + return new Buffer(encoded || '', 'base64').toString('utf8'); +}; + //Routes app.get('/', function(req, res){ res.send('here'); }); -app.post('/collect', function(req, res){ +app.get('/ping', function(req, res){ + res.send('I\'m alive!'); +}); +app.post('/collect', function(req, res){ var channel = { id: req.body.channel_id, name: req.body.channel_name }; + var user = { - id: req.body.user_id + id: req.body.user_id, + name: req.body.user_name }; + + var teamDomain = req.body.team_domain; + + var msgTime = math.round(req.body.timestamp, 0); //in epoch var msgText = req.body.text; @@ -55,36 +82,89 @@ app.post('/collect', function(req, res){ var questionMark = searchM(/\?/g); var elipseCount = searchM(/\.\.\./g); - //Structure Data - var data = { + var GAdata = { v: 1, - tid: "UA-XXXXXXXX-1", + tid: env_var.ga_key, cid: user.id, - ds: "slack", //data source - cs: "slack", // campaign source - cd1: user.id, - cd2: channel.name, + uid: user.name, + ds: "slack", + cd1: user.name + " (" + user.id + ")", + cd2: channel.name + " (" + channel.id + ")", cd3: msgText, cm1: wordCount, cm2: emojiCount, cm3: exclaCount, - // cm4: letterCount, + //cm4: letterCount, cm5: elipseCount, - cm6: questionMark, //need to set up in GA - t: "event", - ec: "slack: "+ channel.name + "|" + channel.id, - ea: "post by " + user.id, + cm6: questionMark, + dh: teamDomain+".slack.com", + dp: "/"+channel.name, + dt: "Slack Channel: "+channel.name, + t: "event", + ec: "slack: "+ channel.name + " | " + channel.id, + ea: "message posted", el: msgText, ev: 1 }; - console.log(JSON.stringify(data)); - console.log(req.body); - //Make Post Request - request.post("https://www.google-analytics.com/collect?" + qs.stringify(data), - function(error, resp, body){ - console.log(error); - }) + + var mixTrack = { + event: "message posted", + properties: { + $os: "Slack", + $browser: "Slack", + $current_url: "https://"+teamDomain+".slack.com/" + channel.name, + mp_lib: "slack_nodeJS", + $lib_version: "Slack 0.0.1", + distinct_id: user.id, + num_words: wordCount, + num_emoji: emojiCount, + num_exclamation: exclaCount, + num_ellipsis: elipseCount, + num_questions: questionMark, + message: msgText, + channel: channel.name + " (" + channel.id + ")", + user: user.name + " (" + user.id + ")", + time: msgTime, + token: env_var.mixpanel_key + } + }; + + var engage_channel_info = {}; + engage_channel_info[channel.name] = 1; + engage_channel_info["total_posts"] = 1; + + var mixEngage = { + $distinct_id: user.id, + $time: msgTime, + $token: env_var.mixpanel_key, + $add: engage_channel_info, + $set: { + last_post: moment.unix(msgTime).format('YYYY-MM-DDThh:mm:ss') + } + }; + + + if (env_var.debug.toLowerCase() === "info") { + console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); + console.log("Google Analytics Data: "+JSON.stringify(GAdata)); + console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); + console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); + } + + if (env_var.debug.toLowerCase() === "debug") { + console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); + console.log("Google Analytics Data: "+JSON.stringify(GAdata)); + console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); + console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); + console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); + console.log("Mixpanel Tracking Post Output: https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0"); + console.log("Mixpanel Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0"); + } + //Make Post Requests + request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){console.log(error);}); + request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){console.log(error);}); + request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){console.log(error);}); }); //Start Server diff --git a/package.json b/package.json index 445d6e0..a4e2113 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,15 @@ { - "name": "SlackGAIntegration", - "version": "1.0.0", - "description": "Integration with GA to track Slack usage", + "name": "SlackAlytics", + "version": "1.1.0", + "description": "Integration with analytics tools to track Slack usage", "main": "app.js", "dependencies": { "express": "^4.12.3", "body-parser": "^1.12.2", "request": "^2.54.0", - "querystring": "^0.2.0" + "querystring": "^0.2.0", + "mathjs": "^2.0.0", + "moment": "^2.4.0" }, "scripts": { "start": "node app.js" From 2eaa726ecab94fc4e7a17b8538a93071b048d323 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 16:29:55 -0700 Subject: [PATCH 02/90] update README just making it less Googley --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 84ef58b..3cb604a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ # Slackalytics -Slackalytics is a textual analysis bot built in Node.js that allows for deeper custome analytics by sending message strings to Google Analysis via Slacks realtime API and Google Analytics Measurement Protocol. - -More Readme info is coming soon - -In the meantime checkout the post for this on my blog: http://nicomiceli.com/slackalytics/ +Slackalytics is a textual analysis bot built in Node.js that allows for deeper customer analytics by sending message strings to analytics solutions via Slacks realtime outbound webhook API and respective analytics solution data collection services. \ No newline at end of file From e358956e859d44a941c4b02aa4105d9f62dfb0da Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 16:41:46 -0700 Subject: [PATCH 03/90] save performance if env vars aren't set --- app.js | 174 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 98 insertions(+), 76 deletions(-) diff --git a/app.js b/app.js index 687f646..2693ab8 100644 --- a/app.js +++ b/app.js @@ -5,6 +5,7 @@ var env_var = { mixpanel_key: process.env.MIXPANEL_PROD }; + //Set up Reqs var express = require('express'); var bodyParser = require('body-parser'); @@ -82,89 +83,110 @@ app.post('/collect', function(req, res){ var questionMark = searchM(/\?/g); var elipseCount = searchM(/\.\.\./g); - //Structure Data - var GAdata = { - v: 1, - tid: env_var.ga_key, - cid: user.id, - uid: user.name, - ds: "slack", - cd1: user.name + " (" + user.id + ")", - cd2: channel.name + " (" + channel.id + ")", - cd3: msgText, - cm1: wordCount, - cm2: emojiCount, - cm3: exclaCount, - //cm4: letterCount, - cm5: elipseCount, - cm6: questionMark, - dh: teamDomain+".slack.com", - dp: "/"+channel.name, - dt: "Slack Channel: "+channel.name, - t: "event", - ec: "slack: "+ channel.name + " | " + channel.id, - ea: "message posted", - el: msgText, - ev: 1 - }; - - var mixTrack = { - event: "message posted", - properties: { - $os: "Slack", - $browser: "Slack", - $current_url: "https://"+teamDomain+".slack.com/" + channel.name, - mp_lib: "slack_nodeJS", - $lib_version: "Slack 0.0.1", - distinct_id: user.id, - num_words: wordCount, - num_emoji: emojiCount, - num_exclamation: exclaCount, - num_ellipsis: elipseCount, - num_questions: questionMark, - message: msgText, - channel: channel.name + " (" + channel.id + ")", - user: user.name + " (" + user.id + ")", - time: msgTime, - token: env_var.mixpanel_key - } - }; - var engage_channel_info = {}; - engage_channel_info[channel.name] = 1; - engage_channel_info["total_posts"] = 1; - - var mixEngage = { - $distinct_id: user.id, - $time: msgTime, - $token: env_var.mixpanel_key, - $add: engage_channel_info, - $set: { - last_post: moment.unix(msgTime).format('YYYY-MM-DDThh:mm:ss') - } - }; +// GOOGLE ANALYTICS COLLECT AND POST + if (env_var.ga_key) { + var GAdata = { + v: 1, + tid: env_var.ga_key, + cid: user.id, + uid: user.name, + ds: "slack", + cd1: user.name + " (" + user.id + ")", + cd2: channel.name + " (" + channel.id + ")", + cd3: msgText, + cm1: wordCount, + cm2: emojiCount, + cm3: exclaCount, + //cm4: letterCount, + cm5: elipseCount, + cm6: questionMark, + dh: teamDomain+".slack.com", + dp: "/"+channel.name, + dt: "Slack Channel: "+channel.name, + t: "event", + ec: "slack: "+ channel.name + " | " + channel.id, + ea: "message posted", + el: msgText, + ev: 1 + }; + + // Post Data + request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){console.log(error);}); + } else { + console.log("Google Analytics account ID not defined as environment variable"); + } - +// MIXPANEL COLLECT AND POST + if (env_var.mixpanel_key) { + var mixTrack = { + event: "message posted", + properties: { + $os: "Slack", + $browser: "Slack", + $current_url: "https://"+teamDomain+".slack.com/" + channel.name, + mp_lib: "slack_nodeJS", + $lib_version: "Slack 0.0.1", + distinct_id: user.id, + num_words: wordCount, + num_emoji: emojiCount, + num_exclamation: exclaCount, + num_ellipsis: elipseCount, + num_questions: questionMark, + message: msgText, + channel: channel.name + " (" + channel.id + ")", + user: user.name + " (" + user.id + ")", + time: msgTime, + token: env_var.mixpanel_key + } + }; + + var engage_channel_info = {}; + engage_channel_info[channel.name] = 1; + engage_channel_info["total_posts"] = 1; + + var mixEngage = { + $distinct_id: user.id, + $time: msgTime, + $token: env_var.mixpanel_key, + $add: engage_channel_info, + $set: { + last_post: moment.unix(msgTime).format('YYYY-MM-DDThh:mm:ss') + } + }; + + // Post Data + request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){console.log(error);}); + request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){console.log(error);}); + } else { + console.log("Mixpanel token not defined as environment variable"); + } + +// DEBUG LOGGING if (env_var.debug.toLowerCase() === "info") { - console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); - console.log("Google Analytics Data: "+JSON.stringify(GAdata)); - console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); - console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); + console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); + if (env_var.ga_key) { + console.log("Google Analytics Data: "+JSON.stringify(GAdata)); + } + if (env_var.mixpanel_key) { + console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); + console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); + } } if (env_var.debug.toLowerCase() === "debug") { - console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); - console.log("Google Analytics Data: "+JSON.stringify(GAdata)); - console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); - console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); - console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); - console.log("Mixpanel Tracking Post Output: https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0"); - console.log("Mixpanel Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0"); + console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); + if (env_var.ga_key) { + console.log("Google Analytics Data: "+JSON.stringify(GAdata)); + console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); + } + if (env_var.mixpanel_key) { + console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); + console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); + console.log("Mixpanel Tracking Post Output: https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0"); + console.log("Mixpanel Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0"); + } } - //Make Post Requests - request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){console.log(error);}); - request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){console.log(error);}); - request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){console.log(error);}); }); //Start Server From 4ad749b27ba896fc990fd4e127d1621a8ef6c19d Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 20:25:55 -0700 Subject: [PATCH 04/90] first attempt at Localytics --- app.js | 160 ++++++++++++++++++++++++++++++++++++++++++++++++--- package.json | 3 +- 2 files changed, 154 insertions(+), 9 deletions(-) diff --git a/app.js b/app.js index 2693ab8..b45015a 100644 --- a/app.js +++ b/app.js @@ -2,7 +2,8 @@ var env_var = { debug: process.env.DEBUG, // supports: info and debug ga_key: process.env.GOOGLE_ANALYTICS_PROD, - mixpanel_key: process.env.MIXPANEL_PROD + localytics_key: process.env.LOCALYTICS_PROD, + mixpanel_token: process.env.MIXPANEL_PROD }; @@ -13,6 +14,7 @@ var request = require('request'); var qs = require('querystring'); var math = require('mathjs'); var moment = require('moment'); +var uuid = require('node-uuid'); //Server Details var app = express(); @@ -67,7 +69,7 @@ app.post('/collect', function(req, res){ return searchStr.length; } return 0; - }; + } function searchS(regex){ var searchStr = msgText.split(regex); @@ -75,7 +77,7 @@ app.post('/collect', function(req, res){ return searchStr.length; } return 0; - }; + } var wordCount = searchS(/\s+\b/); var emojiCount = searchM(/:[a-z_0-9]*:/g); @@ -117,8 +119,143 @@ app.post('/collect', function(req, res){ console.log("Google Analytics account ID not defined as environment variable"); } + +// LOCALYTICS COLLECT AND POST + if (env_var.localytics_key) { + var lcl_sd_values = { + device_id: uuid.v4(), + session_id: uuid.v4(), + }; + + var LCLstartData = { + e: 1, + client_date: msgTime, + callback: "z", + data: { + dt: "h", + pa: msgTime - 1, + seq:1, + u: uuid.v4(), + attrs: { + dt: "a", + au: env_var.localytics_key, + iu: lcl_sd_values.device_id, + lv: "slackalytics_0.0.1", + dmo: "Slack", + dll: "EN-US", + dma: "Slack" + }, + ids: { + customer_name: user.name, + customer_id: user.id + } + }%0A{ + dt: "s", + ct: msgTime, + u: lcl_sd_values.session_id, + nth: 1, + mc: null, + mm: null, + ms: null, + cid: user.id, + utp: "known" + } + }; + + var LCLeventData = { + e: 1, + client_date: msgTime, + callback: z, + data: { + dt: "h", + pa: msgTime - 1, + seq: 2, + u: uuid.v4(), + attrs: { + dt: "a", + au: env_var.localytics_key, + iu: lcl_sd_values.device_id, + lv: "slackalytics_0.0.1", + dmo: "Slack", + dll: "EN-US", + dma: "Slack" + }, + ids: { + customer_name: user.name, + customer_id: user.id + } + }%0A{ + ct: msgTime, + u: uuid.v4(), + su: lcl_sd_values.session_id, + mc: null, + mm: null, + ms: null, + dt: "e", + n: "message posted", + cid: user.id, + utp: "known", + attrs: { + user: user.name + " (" + user.id + ")", + channel: channel.name + " (" + channel.id + ")", + words: wordCount, + emojis: emojiCount, + exclamations: exclaCount, + ellipsis: elipseCount, + question_marks: questionMark, + domain: teamDomain+".slack.com" + } + } + }; + + + var LCLcloseData = { + e: 1, + client_date: msgTime, + callback: "z", + data: { + dt: "h", + pa: msgTime - 1, + seq: 3, + u: uuid.v4(), + attrs: { + dt: "a", + au: env_var.localytics_key, + iu: lcl_sd_values.device_id, + lv: "slackalytics_0.0.1", + dmo: "Slack", + dll: "EN-US", + dma: "Slack" + }, + ids: { + customer_name: user.name, + customer_id: user.id + } + }%0A{ + dt: "c", + u: uuid.v4(), + ss: msgTime, + su: lcl_sd_values.session_id, + ct: msgTime, + ctl: 0, + cta: 0, + fl:[], + cid: user.id, + utp: "known" + } + }; + + // Post Data + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseData), function(error, resp, body){console.log(error);}); + } else { + console.log("Localytics application key not defined as environment variable"); + } + + // MIXPANEL COLLECT AND POST - if (env_var.mixpanel_key) { + if (env_var.mixpanel_token) { var mixTrack = { event: "message posted", properties: { @@ -137,7 +274,7 @@ app.post('/collect', function(req, res){ channel: channel.name + " (" + channel.id + ")", user: user.name + " (" + user.id + ")", time: msgTime, - token: env_var.mixpanel_key + token: env_var.mixpanel_token } }; @@ -148,7 +285,7 @@ app.post('/collect', function(req, res){ var mixEngage = { $distinct_id: user.id, $time: msgTime, - $token: env_var.mixpanel_key, + $token: env_var.mixpanel_token, $add: engage_channel_info, $set: { last_post: moment.unix(msgTime).format('YYYY-MM-DDThh:mm:ss') @@ -168,7 +305,10 @@ app.post('/collect', function(req, res){ if (env_var.ga_key) { console.log("Google Analytics Data: "+JSON.stringify(GAdata)); } - if (env_var.mixpanel_key) { + if (env_var.localytics_key) { + console.log("Localytics Data: "+JSON.stringify(LCLdata)); + } + if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); } @@ -180,7 +320,11 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Data: "+JSON.stringify(GAdata)); console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); } - if (env_var.mixpanel_key) { + if (env_var.localytics_key) { + console.log("Localytics Data: "+JSON.stringify(GAdata)); + console.log("Localytics Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLdata)); + } + if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); console.log("Mixpanel Tracking Post Output: https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0"); diff --git a/package.json b/package.json index a4e2113..0f77f4a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "request": "^2.54.0", "querystring": "^0.2.0", "mathjs": "^2.0.0", - "moment": "^2.4.0" + "moment": "^2.4.0", + "node-uuid": "^1.4.0" }, "scripts": { "start": "node app.js" From 32af4b4fd3e3534f77c9dc6628605ebd573620af Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 20:35:57 -0700 Subject: [PATCH 05/90] enable Localytics logging --- app.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index b45015a..5c2e4bc 100644 --- a/app.js +++ b/app.js @@ -246,8 +246,11 @@ app.post('/collect', function(req, res){ }; // Post Data + // session start request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartData), function(error, resp, body){console.log(error);}); + // event request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventData), function(error, resp, body){console.log(error);}); + // session close request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseData), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); @@ -306,7 +309,9 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Data: "+JSON.stringify(GAdata)); } if (env_var.localytics_key) { - console.log("Localytics Data: "+JSON.stringify(LCLdata)); + console.log("Localytics Session Start Data: "+JSON.stringify(LCLstartData)); + console.log("Localytics Event Data: "+JSON.stringify(LCLeventData)); + console.log("Localytics Session Close Data: "+JSON.stringify(LCLcloseData)); } if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); @@ -321,8 +326,12 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); } if (env_var.localytics_key) { - console.log("Localytics Data: "+JSON.stringify(GAdata)); - console.log("Localytics Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLdata)); + console.log("Localytics Session Start Data: "+JSON.stringify(LCLstartData)); + console.log("Localytics Event Data: "+JSON.stringify(LCLeventData)); + console.log("Localytics Session Close Data: "+JSON.stringify(LCLcloseData)); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartData)); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventData)); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseData)); } if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); From c8110e76d41ed0a6d2c34bb0e05a146bce19c9ef Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 20:51:56 -0700 Subject: [PATCH 06/90] new line fix example data shows %0A which causes an error --- app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 5c2e4bc..c8f0c65 100644 --- a/app.js +++ b/app.js @@ -149,7 +149,7 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - }%0A{ + }\n{ dt: "s", ct: msgTime, u: lcl_sd_values.session_id, @@ -184,7 +184,7 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - }%0A{ + }\n{ ct: msgTime, u: uuid.v4(), su: lcl_sd_values.session_id, @@ -231,7 +231,7 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - }%0A{ + }\n{ dt: "c", u: uuid.v4(), ss: msgTime, From c8e425956d02d9cfc41beca9a2bb710489e0ce3a Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 20:54:38 -0700 Subject: [PATCH 07/90] pad with extra brakes --- app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index c8f0c65..2695d49 100644 --- a/app.js +++ b/app.js @@ -128,7 +128,7 @@ app.post('/collect', function(req, res){ }; var LCLstartData = { - e: 1, + {e: 1, client_date: msgTime, callback: "z", data: { @@ -159,11 +159,11 @@ app.post('/collect', function(req, res){ ms: null, cid: user.id, utp: "known" - } + }} }; var LCLeventData = { - e: 1, + {e: 1, client_date: msgTime, callback: z, data: { @@ -205,12 +205,12 @@ app.post('/collect', function(req, res){ question_marks: questionMark, domain: teamDomain+".slack.com" } - } + }} }; var LCLcloseData = { - e: 1, + {e: 1, client_date: msgTime, callback: "z", data: { @@ -242,7 +242,7 @@ app.post('/collect', function(req, res){ fl:[], cid: user.id, utp: "known" - } + }} }; // Post Data From 821c90d90e01863f52017b2f4e37eb83bf67be0f Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:08:23 -0700 Subject: [PATCH 08/90] Try another way to handle blog newline --- app.js | 108 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 50 deletions(-) diff --git a/app.js b/app.js index 2695d49..55b9463 100644 --- a/app.js +++ b/app.js @@ -127,8 +127,8 @@ app.post('/collect', function(req, res){ session_id: uuid.v4(), }; - var LCLstartData = { - {e: 1, + var LCLstartHeadData = { + e: 1, client_date: msgTime, callback: "z", data: { @@ -149,21 +149,24 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - }\n{ - dt: "s", - ct: msgTime, - u: lcl_sd_values.session_id, - nth: 1, - mc: null, - mm: null, - ms: null, - cid: user.id, - utp: "known" - }} + } + }; + + var LCLstartBodyData = { + dt: "s", + ct: msgTime, + u: lcl_sd_values.session_id, + nth: 1, + mc: null, + mm: null, + ms: null, + cid: user.id, + utp: "known" }; - var LCLeventData = { - {e: 1, + + var LCLeventHeadData = { + e: 1, client_date: msgTime, callback: z, data: { @@ -184,33 +187,35 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - }\n{ - ct: msgTime, - u: uuid.v4(), - su: lcl_sd_values.session_id, - mc: null, - mm: null, - ms: null, - dt: "e", - n: "message posted", - cid: user.id, - utp: "known", - attrs: { - user: user.name + " (" + user.id + ")", - channel: channel.name + " (" + channel.id + ")", - words: wordCount, - emojis: emojiCount, - exclamations: exclaCount, - ellipsis: elipseCount, - question_marks: questionMark, - domain: teamDomain+".slack.com" - } - }} + } + }; + + var LCLeventBodyData = { + ct: msgTime, + u: uuid.v4(), + su: lcl_sd_values.session_id, + mc: null, + mm: null, + ms: null, + dt: "e", + n: "message posted", + cid: user.id, + utp: "known", + attrs: { + user: user.name + " (" + user.id + ")", + channel: channel.name + " (" + channel.id + ")", + words: wordCount, + emojis: emojiCount, + exclamations: exclaCount, + ellipsis: elipseCount, + question_marks: questionMark, + domain: teamDomain+".slack.com" + } }; - var LCLcloseData = { - {e: 1, + var LCLcloseHeadData = { + e: 1, client_date: msgTime, callback: "z", data: { @@ -231,7 +236,10 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - }\n{ + } + }; + + var LCLcloseBodyData = { dt: "c", u: uuid.v4(), ss: msgTime, @@ -242,16 +250,16 @@ app.post('/collect', function(req, res){ fl:[], cid: user.id, utp: "known" - }} }; + // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData) + "%0A" + qs.stringify(LCLstartBodyData), function(error, resp, body){console.log(error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData) + "%0A" + qs.stringify(LCLeventBodyData), function(error, resp, body){console.log(error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData) + "%0A" + qs.stringify(LCLcloseBodyData), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -326,12 +334,12 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); } if (env_var.localytics_key) { - console.log("Localytics Session Start Data: "+JSON.stringify(LCLstartData)); - console.log("Localytics Event Data: "+JSON.stringify(LCLeventData)); - console.log("Localytics Session Close Data: "+JSON.stringify(LCLcloseData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartData)); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventData)); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseData)); + console.log("Localytics Session Start Data:"+\n+"Head: "+JSON.stringify(LCLstartHeadData)+\n+"Body: "+JSON.stringify(LCLstartBodyData)); + console.log("Localytics Event Data:"+\n+"Head: "+JSON.stringify(LCLeventHeadData)+\n+"Body: "+JSON.stringify(LCLeventBodyData)); + console.log("Localytics Session Close Data:"+\n+"Head: "+JSON.stringify(LCLcloseHeadData)+\n+"Body: "+JSON.stringify(LCLcloseBodyData)); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData) + "%0A" + qs.stringify(LCLstartBodyData)); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData) + "%0A" + qs.stringify(LCLeventBodyData)); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData) + "%0A" + qs.stringify(LCLcloseBodyData)); } if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); From 278265816ee9d20954a7ccf8d886f27f3f22e765 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:12:22 -0700 Subject: [PATCH 09/90] newline in logs --- app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 55b9463..8bb6553 100644 --- a/app.js +++ b/app.js @@ -334,9 +334,9 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); } if (env_var.localytics_key) { - console.log("Localytics Session Start Data:"+\n+"Head: "+JSON.stringify(LCLstartHeadData)+\n+"Body: "+JSON.stringify(LCLstartBodyData)); - console.log("Localytics Event Data:"+\n+"Head: "+JSON.stringify(LCLeventHeadData)+\n+"Body: "+JSON.stringify(LCLeventBodyData)); - console.log("Localytics Session Close Data:"+\n+"Head: "+JSON.stringify(LCLcloseHeadData)+\n+"Body: "+JSON.stringify(LCLcloseBodyData)); + console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); + console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); + console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData) + "%0A" + qs.stringify(LCLstartBodyData)); console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData) + "%0A" + qs.stringify(LCLeventBodyData)); console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData) + "%0A" + qs.stringify(LCLcloseBodyData)); From 0dbf4dbac5ea7d354aacd9c92618091d09bb84a3 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:14:50 -0700 Subject: [PATCH 10/90] quote characters --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 8bb6553..56ffc13 100644 --- a/app.js +++ b/app.js @@ -134,7 +134,7 @@ app.post('/collect', function(req, res){ data: { dt: "h", pa: msgTime - 1, - seq:1, + seq: 1, u: uuid.v4(), attrs: { dt: "a", @@ -168,7 +168,7 @@ app.post('/collect', function(req, res){ var LCLeventHeadData = { e: 1, client_date: msgTime, - callback: z, + callback: "z", data: { dt: "h", pa: msgTime - 1, From 4f49f7a2d5af20afd4179f5b1acd48745169ab43 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:17:11 -0700 Subject: [PATCH 11/90] debug logging parity --- app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 56ffc13..8e1698b 100644 --- a/app.js +++ b/app.js @@ -317,9 +317,9 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Data: "+JSON.stringify(GAdata)); } if (env_var.localytics_key) { - console.log("Localytics Session Start Data: "+JSON.stringify(LCLstartData)); - console.log("Localytics Event Data: "+JSON.stringify(LCLeventData)); - console.log("Localytics Session Close Data: "+JSON.stringify(LCLcloseData)); + console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); + console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); + console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); } if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); From 7c26ade43299c53355362aced29e7c819e7feb94 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:35:36 -0700 Subject: [PATCH 12/90] remove double query string stringify --- app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 8e1698b..9f97e9b 100644 --- a/app.js +++ b/app.js @@ -255,11 +255,11 @@ app.post('/collect', function(req, res){ // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData) + "%0A" + qs.stringify(LCLstartBodyData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData), function(error, resp, body){console.log(error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData) + "%0A" + qs.stringify(LCLeventBodyData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData), function(error, resp, body){console.log(error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData) + "%0A" + qs.stringify(LCLcloseBodyData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -337,9 +337,9 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData) + "%0A" + qs.stringify(LCLstartBodyData)); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData) + "%0A" + qs.stringify(LCLeventBodyData)); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData) + "%0A" + qs.stringify(LCLcloseBodyData)); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData)); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData)); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData)); } if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); From 1713ebd64f0368401363641d3fed6c3dd1d52834 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:38:17 -0700 Subject: [PATCH 13/90] try grouping before string --- app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 9f97e9b..c5e56ce 100644 --- a/app.js +++ b/app.js @@ -337,9 +337,9 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData)); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData)); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData)); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); } if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); From 31bfc8f31807d90b38f9f1025ebf4d23c00e7b9b Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:47:23 -0700 Subject: [PATCH 14/90] move constants to qs and test logging --- app.js | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/app.js b/app.js index c5e56ce..0b9ace5 100644 --- a/app.js +++ b/app.js @@ -128,9 +128,6 @@ app.post('/collect', function(req, res){ }; var LCLstartHeadData = { - e: 1, - client_date: msgTime, - callback: "z", data: { dt: "h", pa: msgTime - 1, @@ -166,9 +163,6 @@ app.post('/collect', function(req, res){ var LCLeventHeadData = { - e: 1, - client_date: msgTime, - callback: "z", data: { dt: "h", pa: msgTime - 1, @@ -215,9 +209,6 @@ app.post('/collect', function(req, res){ var LCLcloseHeadData = { - e: 1, - client_date: msgTime, - callback: "z", data: { dt: "h", pa: msgTime - 1, @@ -255,11 +246,11 @@ app.post('/collect', function(req, res){ // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData), function(error, resp, body){console.log(error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData), function(error, resp, body){console.log(error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -337,9 +328,10 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); +// console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); +// console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventHeadData)); +// console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); } if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); From 341d93f429ce18b691e155f365565b6fea8b519c Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:51:37 -0700 Subject: [PATCH 15/90] no data passing test --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 0b9ace5..94ffe8e 100644 --- a/app.js +++ b/app.js @@ -330,7 +330,7 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); // console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); // console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventHeadData)); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventBodyData)); // console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); } if (env_var.mixpanel_token) { From b6562c39557fe494e1bdac849a48755f30f1290e Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 21:55:54 -0700 Subject: [PATCH 16/90] JSON String the QS String test --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 94ffe8e..c8be2ea 100644 --- a/app.js +++ b/app.js @@ -330,7 +330,7 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); // console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); // console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventBodyData)); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(JSON.stringify(LCLeventBodyData))); // console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); } if (env_var.mixpanel_token) { From 035f921a5f6ba6123eb217cc5bbffe7533ad3b4a Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 22:02:57 -0700 Subject: [PATCH 17/90] comment all the Localytics stuff out --- app.js | 302 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 153 insertions(+), 149 deletions(-) diff --git a/app.js b/app.js index c8be2ea..e40024e 100644 --- a/app.js +++ b/app.js @@ -2,7 +2,7 @@ var env_var = { debug: process.env.DEBUG, // supports: info and debug ga_key: process.env.GOOGLE_ANALYTICS_PROD, - localytics_key: process.env.LOCALYTICS_PROD, +/* localytics_key: process.env.LOCALYTICS_PROD, */ mixpanel_token: process.env.MIXPANEL_PROD }; @@ -121,140 +121,141 @@ app.post('/collect', function(req, res){ // LOCALYTICS COLLECT AND POST - if (env_var.localytics_key) { - var lcl_sd_values = { - device_id: uuid.v4(), - session_id: uuid.v4(), - }; - - var LCLstartHeadData = { - data: { - dt: "h", - pa: msgTime - 1, - seq: 1, - u: uuid.v4(), - attrs: { - dt: "a", - au: env_var.localytics_key, - iu: lcl_sd_values.device_id, - lv: "slackalytics_0.0.1", - dmo: "Slack", - dll: "EN-US", - dma: "Slack" - }, - ids: { - customer_name: user.name, - customer_id: user.id - } - } - }; - - var LCLstartBodyData = { - dt: "s", - ct: msgTime, - u: lcl_sd_values.session_id, - nth: 1, - mc: null, - mm: null, - ms: null, - cid: user.id, - utp: "known" - }; - - - var LCLeventHeadData = { - data: { - dt: "h", - pa: msgTime - 1, - seq: 2, - u: uuid.v4(), - attrs: { - dt: "a", - au: env_var.localytics_key, - iu: lcl_sd_values.device_id, - lv: "slackalytics_0.0.1", - dmo: "Slack", - dll: "EN-US", - dma: "Slack" - }, - ids: { - customer_name: user.name, - customer_id: user.id - } - } - }; - - var LCLeventBodyData = { - ct: msgTime, - u: uuid.v4(), - su: lcl_sd_values.session_id, - mc: null, - mm: null, - ms: null, - dt: "e", - n: "message posted", - cid: user.id, - utp: "known", - attrs: { - user: user.name + " (" + user.id + ")", - channel: channel.name + " (" + channel.id + ")", - words: wordCount, - emojis: emojiCount, - exclamations: exclaCount, - ellipsis: elipseCount, - question_marks: questionMark, - domain: teamDomain+".slack.com" - } - }; - - - var LCLcloseHeadData = { - data: { - dt: "h", - pa: msgTime - 1, - seq: 3, - u: uuid.v4(), - attrs: { - dt: "a", - au: env_var.localytics_key, - iu: lcl_sd_values.device_id, - lv: "slackalytics_0.0.1", - dmo: "Slack", - dll: "EN-US", - dma: "Slack" - }, - ids: { - customer_name: user.name, - customer_id: user.id - } - } - }; - - var LCLcloseBodyData = { - dt: "c", - u: uuid.v4(), - ss: msgTime, - su: lcl_sd_values.session_id, - ct: msgTime, - ctl: 0, - cta: 0, - fl:[], - cid: user.id, - utp: "known" - }; - - - // Post Data - // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData), function(error, resp, body){console.log(error);}); - // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData), function(error, resp, body){console.log(error);}); - // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData), function(error, resp, body){console.log(error);}); - } else { - console.log("Localytics application key not defined as environment variable"); - } - +/**** +* if (env_var.localytics_key) { +* var lcl_sd_values = { +* device_id: uuid.v4(), +* session_id: uuid.v4(), +* }; +* +* var LCLstartHeadData = { +* data: { +* dt: "h", +* pa: msgTime - 1, +* seq: 1, +* u: uuid.v4(), +* attrs: { +* dt: "a", +* au: env_var.localytics_key, +* iu: lcl_sd_values.device_id, +* lv: "slackalytics_0.0.1", +* dmo: "Slack", +* dll: "EN-US", +* dma: "Slack" +* }, +* ids: { +* customer_name: user.name, +* customer_id: user.id +* } +* } +* }; +* +* var LCLstartBodyData = { +* dt: "s", +* ct: msgTime, +* u: lcl_sd_values.session_id, +* nth: 1, +* mc: null, +* mm: null, +* ms: null, +* cid: user.id, +* utp: "known" +* }; +* +* +* var LCLeventHeadData = { +* data: { +* dt: "h", +* pa: msgTime - 1, +* seq: 2, +* u: uuid.v4(), +* attrs: { +* dt: "a", +* au: env_var.localytics_key, +* iu: lcl_sd_values.device_id, +* lv: "slackalytics_0.0.1", +* dmo: "Slack", +* dll: "EN-US", +* dma: "Slack" +* }, +* ids: { +* customer_name: user.name, +* customer_id: user.id +* } +* } +* }; +* +* var LCLeventBodyData = { +* ct: msgTime, +* u: uuid.v4(), +* su: lcl_sd_values.session_id, +* mc: null, +* mm: null, +* ms: null, +* dt: "e", +* n: "message posted", +* cid: user.id, +* utp: "known", +* attrs: { +* user: user.name + " (" + user.id + ")", +* channel: channel.name + " (" + channel.id + ")", +* words: wordCount, +* emojis: emojiCount, +* exclamations: exclaCount, +* ellipsis: elipseCount, +* question_marks: questionMark, +* domain: teamDomain+".slack.com" +* } +* }; +* +* +* var LCLcloseHeadData = { +* data: { +* dt: "h", +* pa: msgTime - 1, +* seq: 3, +* u: uuid.v4(), +* attrs: { +* dt: "a", +* au: env_var.localytics_key, +* iu: lcl_sd_values.device_id, +* lv: "slackalytics_0.0.1", +* dmo: "Slack", +* dll: "EN-US", +* dma: "Slack" +* }, +* ids: { +* customer_name: user.name, +* customer_id: user.id +* } +* } +* }; +* +* var LCLcloseBodyData = { +* dt: "c", +* u: uuid.v4(), +* ss: msgTime, +* su: lcl_sd_values.session_id, +* ct: msgTime, +* ctl: 0, +* cta: 0, +* fl:[], +* cid: user.id, +* utp: "known" +* }; +* +* +* // Post Data +* // session start +* request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData), function(error, resp, body){console.log(error);}); +* // event +* request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData), function(error, resp, body){console.log(error);}); +* // session close +* request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData), function(error, resp, body){console.log(error);}); +* } else { +* console.log("Localytics application key not defined as environment variable"); +* } +****/ // MIXPANEL COLLECT AND POST if (env_var.mixpanel_token) { @@ -307,11 +308,13 @@ app.post('/collect', function(req, res){ if (env_var.ga_key) { console.log("Google Analytics Data: "+JSON.stringify(GAdata)); } - if (env_var.localytics_key) { - console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); - console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); - console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - } +/**** +* if (env_var.localytics_key) { +* console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); +* console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); +* console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); +* } +****/ if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); @@ -324,15 +327,16 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Data: "+JSON.stringify(GAdata)); console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); } - if (env_var.localytics_key) { - console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); - console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); - console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); -// console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); -// console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(JSON.stringify(LCLeventBodyData))); -// console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); - } +/**** +* if (env_var.localytics_key) { +* console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); +* console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); +* console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); +* console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); +* console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); +* console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); +* } +****/ if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); From be0fba6ce950d86ddca983cead8afab723c77555 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 23:15:28 -0700 Subject: [PATCH 18/90] Localytics: switch to JSON stringify and then escape --- app.js | 304 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 151 insertions(+), 153 deletions(-) diff --git a/app.js b/app.js index e40024e..f684214 100644 --- a/app.js +++ b/app.js @@ -2,7 +2,7 @@ var env_var = { debug: process.env.DEBUG, // supports: info and debug ga_key: process.env.GOOGLE_ANALYTICS_PROD, -/* localytics_key: process.env.LOCALYTICS_PROD, */ + localytics_key: process.env.LOCALYTICS_PROD, mixpanel_token: process.env.MIXPANEL_PROD }; @@ -121,141 +121,139 @@ app.post('/collect', function(req, res){ // LOCALYTICS COLLECT AND POST -/**** -* if (env_var.localytics_key) { -* var lcl_sd_values = { -* device_id: uuid.v4(), -* session_id: uuid.v4(), -* }; -* -* var LCLstartHeadData = { -* data: { -* dt: "h", -* pa: msgTime - 1, -* seq: 1, -* u: uuid.v4(), -* attrs: { -* dt: "a", -* au: env_var.localytics_key, -* iu: lcl_sd_values.device_id, -* lv: "slackalytics_0.0.1", -* dmo: "Slack", -* dll: "EN-US", -* dma: "Slack" -* }, -* ids: { -* customer_name: user.name, -* customer_id: user.id -* } -* } -* }; -* -* var LCLstartBodyData = { -* dt: "s", -* ct: msgTime, -* u: lcl_sd_values.session_id, -* nth: 1, -* mc: null, -* mm: null, -* ms: null, -* cid: user.id, -* utp: "known" -* }; -* -* -* var LCLeventHeadData = { -* data: { -* dt: "h", -* pa: msgTime - 1, -* seq: 2, -* u: uuid.v4(), -* attrs: { -* dt: "a", -* au: env_var.localytics_key, -* iu: lcl_sd_values.device_id, -* lv: "slackalytics_0.0.1", -* dmo: "Slack", -* dll: "EN-US", -* dma: "Slack" -* }, -* ids: { -* customer_name: user.name, -* customer_id: user.id -* } -* } -* }; -* -* var LCLeventBodyData = { -* ct: msgTime, -* u: uuid.v4(), -* su: lcl_sd_values.session_id, -* mc: null, -* mm: null, -* ms: null, -* dt: "e", -* n: "message posted", -* cid: user.id, -* utp: "known", -* attrs: { -* user: user.name + " (" + user.id + ")", -* channel: channel.name + " (" + channel.id + ")", -* words: wordCount, -* emojis: emojiCount, -* exclamations: exclaCount, -* ellipsis: elipseCount, -* question_marks: questionMark, -* domain: teamDomain+".slack.com" -* } -* }; -* -* -* var LCLcloseHeadData = { -* data: { -* dt: "h", -* pa: msgTime - 1, -* seq: 3, -* u: uuid.v4(), -* attrs: { -* dt: "a", -* au: env_var.localytics_key, -* iu: lcl_sd_values.device_id, -* lv: "slackalytics_0.0.1", -* dmo: "Slack", -* dll: "EN-US", -* dma: "Slack" -* }, -* ids: { -* customer_name: user.name, -* customer_id: user.id -* } -* } -* }; -* -* var LCLcloseBodyData = { -* dt: "c", -* u: uuid.v4(), -* ss: msgTime, -* su: lcl_sd_values.session_id, -* ct: msgTime, -* ctl: 0, -* cta: 0, -* fl:[], -* cid: user.id, -* utp: "known" -* }; -* -* -* // Post Data -* // session start -* request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLstartHeadData + "%0A" + LCLstartBodyData), function(error, resp, body){console.log(error);}); -* // event -* request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLeventHeadData + "%0A" + LCLeventBodyData), function(error, resp, body){console.log(error);}); -* // session close -* request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify(LCLcloseHeadData + "%0A" + LCLcloseBodyData), function(error, resp, body){console.log(error);}); -* } else { -* console.log("Localytics application key not defined as environment variable"); -* } -****/ + if (env_var.localytics_key) { + var lcl_sd_values = { + device_id: uuid.v4(), + session_id: uuid.v4(), + }; + + var LCLstartHeadData = { + data: { + dt: "h", + pa: msgTime - 1, + seq: 1, + u: uuid.v4(), + attrs: { + dt: "a", + au: env_var.localytics_key, + iu: lcl_sd_values.device_id, + lv: "slackalytics_0.0.1", + dmo: "Slack", + dll: "EN-US", + dma: "Slack" + }, + ids: { + customer_name: user.name, + customer_id: user.id + } + } + }; + + var LCLstartBodyData = { + dt: "s", + ct: msgTime, + u: lcl_sd_values.session_id, + nth: 1, + mc: null, + mm: null, + ms: null, + cid: user.id, + utp: "known" + }; + + + var LCLeventHeadData = { + data: { + dt: "h", + pa: msgTime - 1, + seq: 2, + u: uuid.v4(), + attrs: { + dt: "a", + au: env_var.localytics_key, + iu: lcl_sd_values.device_id, + lv: "slackalytics_0.0.1", + dmo: "Slack", + dll: "EN-US", + dma: "Slack" + }, + ids: { + customer_name: user.name, + customer_id: user.id + } + } + }; + + var LCLeventBodyData = { + ct: msgTime, + u: uuid.v4(), + su: lcl_sd_values.session_id, + mc: null, + mm: null, + ms: null, + dt: "e", + n: "message posted", + cid: user.id, + utp: "known", + attrs: { + user: user.name + " (" + user.id + ")", + channel: channel.name + " (" + channel.id + ")", + words: wordCount, + emojis: emojiCount, + exclamations: exclaCount, + ellipsis: elipseCount, + question_marks: questionMark, + domain: teamDomain+".slack.com" + } + }; + + + var LCLcloseHeadData = { + data: { + dt: "h", + pa: msgTime - 1, + seq: 3, + u: uuid.v4(), + attrs: { + dt: "a", + au: env_var.localytics_key, + iu: lcl_sd_values.device_id, + lv: "slackalytics_0.0.1", + dmo: "Slack", + dll: "EN-US", + dma: "Slack" + }, + ids: { + customer_name: user.name, + customer_id: user.id + } + } + }; + + var LCLcloseBodyData = { + dt: "c", + u: uuid.v4(), + ss: msgTime, + su: lcl_sd_values.session_id, + ct: msgTime, + ctl: 0, + cta: 0, + fl:[], + cid: user.id, + utp: "known" + }; + + + // Post Data + // session start + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); + // event + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); + // session close + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); + } else { + console.log("Localytics application key not defined as environment variable"); + } // MIXPANEL COLLECT AND POST if (env_var.mixpanel_token) { @@ -308,13 +306,13 @@ app.post('/collect', function(req, res){ if (env_var.ga_key) { console.log("Google Analytics Data: "+JSON.stringify(GAdata)); } -/**** -* if (env_var.localytics_key) { -* console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); -* console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); -* console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); -* } -****/ + + if (env_var.localytics_key) { + console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); + console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); + console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); + } + if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); @@ -327,16 +325,16 @@ app.post('/collect', function(req, res){ console.log("Google Analytics Data: "+JSON.stringify(GAdata)); console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); } -/**** -* if (env_var.localytics_key) { -* console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); -* console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); -* console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); -* console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLstartHeadData + "%0A" + LCLstartBodyData))); -* console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLeventHeadData + "%0A" + LCLeventBodyData))); -* console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + qs.stringify((LCLcloseHeadData + "%0A" + LCLcloseBodyData))); -* } -****/ + + if (env_var.localytics_key) { + console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); + console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); + console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); + } + if (env_var.mixpanel_token) { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); From 7d4a98b1c32996cad8c76b297be729e0d7680618 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 23:19:35 -0700 Subject: [PATCH 19/90] Localytics: no need for "data" in the JSON. --- app.js | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/app.js b/app.js index f684214..38c916a 100644 --- a/app.js +++ b/app.js @@ -128,7 +128,6 @@ app.post('/collect', function(req, res){ }; var LCLstartHeadData = { - data: { dt: "h", pa: msgTime - 1, seq: 1, @@ -146,7 +145,6 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - } }; var LCLstartBodyData = { @@ -163,7 +161,6 @@ app.post('/collect', function(req, res){ var LCLeventHeadData = { - data: { dt: "h", pa: msgTime - 1, seq: 2, @@ -181,7 +178,6 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - } }; var LCLeventBodyData = { @@ -209,7 +205,6 @@ app.post('/collect', function(req, res){ var LCLcloseHeadData = { - data: { dt: "h", pa: msgTime - 1, seq: 3, @@ -227,7 +222,6 @@ app.post('/collect', function(req, res){ customer_name: user.name, customer_id: user.id } - } }; var LCLcloseBodyData = { @@ -246,11 +240,11 @@ app.post('/collect', function(req, res){ // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -330,9 +324,9 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); } if (env_var.mixpanel_token) { From 7e0598aa63d225358b0269ed033b710a982a0c3d Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 23:23:37 -0700 Subject: [PATCH 20/90] Localytics: switch escape to encodeURIComponent --- app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 38c916a..45dfbfe 100644 --- a/app.js +++ b/app.js @@ -240,11 +240,11 @@ app.post('/collect', function(req, res){ // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -324,9 +324,9 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + escape(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); } if (env_var.mixpanel_token) { From c2f7d20e34775e5de7a433cc67c73f5d3c2fc968 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 23:32:15 -0700 Subject: [PATCH 21/90] Localytics: playing with the newline issue --- app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 45dfbfe..bb2e0f6 100644 --- a/app.js +++ b/app.js @@ -240,11 +240,11 @@ app.post('/collect', function(req, res){ // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%250A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%250A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%250A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -324,9 +324,9 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%250A"+JSON.stringify(LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%250A"+JSON.stringify(LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%250A"+JSON.stringify(LCLcloseBodyData))); } if (env_var.mixpanel_token) { From 48f6d2da7faa27b55832c1618ae8ebfde047fa14 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Sun, 13 Sep 2015 23:35:08 -0700 Subject: [PATCH 22/90] Localytics: didn't need to manually encode. --- app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index bb2e0f6..45dfbfe 100644 --- a/app.js +++ b/app.js @@ -240,11 +240,11 @@ app.post('/collect', function(req, res){ // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%250A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%250A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%250A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -324,9 +324,9 @@ app.post('/collect', function(req, res){ console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%250A"+JSON.stringify(LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%250A"+JSON.stringify(LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%250A"+JSON.stringify(LCLcloseBodyData))); + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); } if (env_var.mixpanel_token) { From a398979c4fa8b4bae8f67cc7f09a6ae720e9b8a0 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 00:18:47 -0700 Subject: [PATCH 23/90] Mongo: Initial setup --- app.js | 37 ++++++++++++++++++++++++++++++++++++- package.json | 3 ++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 45dfbfe..3b1f7d8 100644 --- a/app.js +++ b/app.js @@ -1,9 +1,15 @@ //Set up Env Vars var env_var = { + environment = process.env.ENVIRONMENT, debug: process.env.DEBUG, // supports: info and debug + mongo_user: process.env.MONGO_USER_PROD, + mongo_password: process.env.MONGO_PASSWORD_PROD, + mongo_server: process.env.MONGO_SERVER_PROD, + mongo_port: process.env.MONGO_PORT_PROD, + mongo_db: process.env.MONGO_DB_PROD, ga_key: process.env.GOOGLE_ANALYTICS_PROD, localytics_key: process.env.LOCALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD + mixpanel_token: process.env.MIXPANEL_PROD, }; @@ -15,6 +21,7 @@ var qs = require('querystring'); var math = require('mathjs'); var moment = require('moment'); var uuid = require('node-uuid'); +var mongodb = require('mongodb'); //Server Details var app = express(); @@ -25,6 +32,10 @@ app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use(bodyParser.json({ type: 'application/vnd.api+json' })); +//MongoDB Setup +var MongoClient = mongodb.MongoClient; +var url = 'mongodb://'+mongo_user+':'+mongo_password+'@'+mongo_server+':'+mongo_port+'/'+mongo_db; + //Simple Base64 handler var base64 = exports; base64.encode = function (unencoded) { @@ -86,6 +97,30 @@ app.post('/collect', function(req, res){ var elipseCount = searchM(/\.\.\./g); + if (env_var.log_to_mongo) { + MongoClient.connect(url, function (err, db) { + if (err) { + console.log('Unable to connect to the mongoDB server. Error:', err); + } else { + console.log('Connection established to', url); + var collection = db.collection('posts'); + + // Insert post contents + collection.insert(req.body, function (err, result) { + if (err) { + console.log(err); + } else { + console.log('Inserted %d documents into the "posts" collection. The documents inserted with "_id" are:', result.length, result); + } + //Close connection + db.close(); + }); + } + } + ); + } + + // GOOGLE ANALYTICS COLLECT AND POST if (env_var.ga_key) { var GAdata = { diff --git a/package.json b/package.json index 0f77f4a..10e6b3e 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "querystring": "^0.2.0", "mathjs": "^2.0.0", "moment": "^2.4.0", - "node-uuid": "^1.4.0" + "node-uuid": "^1.4.0", + "mongodb": "~2.0" }, "scripts": { "start": "node app.js" From d4d7067e541f05bb4b7cf928482ffd12bff1c05b Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 00:20:34 -0700 Subject: [PATCH 24/90] object goof --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 3b1f7d8..c0c4aeb 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,6 @@ //Set up Env Vars var env_var = { - environment = process.env.ENVIRONMENT, + environment: process.env.ENVIRONMENT, debug: process.env.DEBUG, // supports: info and debug mongo_user: process.env.MONGO_USER_PROD, mongo_password: process.env.MONGO_PASSWORD_PROD, @@ -9,7 +9,7 @@ var env_var = { mongo_db: process.env.MONGO_DB_PROD, ga_key: process.env.GOOGLE_ANALYTICS_PROD, localytics_key: process.env.LOCALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD, + mixpanel_token: process.env.MIXPANEL_PROD }; From 6c4552669d5355657a2ddb33c63a27f3d5721233 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 00:22:19 -0700 Subject: [PATCH 25/90] double quotes are your friend --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index c0c4aeb..cbccb46 100644 --- a/app.js +++ b/app.js @@ -34,7 +34,7 @@ app.use(bodyParser.json({ type: 'application/vnd.api+json' })); //MongoDB Setup var MongoClient = mongodb.MongoClient; -var url = 'mongodb://'+mongo_user+':'+mongo_password+'@'+mongo_server+':'+mongo_port+'/'+mongo_db; +var url = "mongodb://"+mongo_user+":"+mongo_password+"@"+mongo_server+":"+mongo_port+"/"+mongo_db; //Simple Base64 handler var base64 = exports; From 69cb88a07e30ae8b1d76d463c29098ff7eb62880 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 00:25:29 -0700 Subject: [PATCH 26/90] Mongo: remember to user set env vars --- app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index cbccb46..f8716d6 100644 --- a/app.js +++ b/app.js @@ -2,6 +2,7 @@ var env_var = { environment: process.env.ENVIRONMENT, debug: process.env.DEBUG, // supports: info and debug + log_to_mongo: process.env.MONGO_ENABLED, mongo_user: process.env.MONGO_USER_PROD, mongo_password: process.env.MONGO_PASSWORD_PROD, mongo_server: process.env.MONGO_SERVER_PROD, @@ -34,7 +35,7 @@ app.use(bodyParser.json({ type: 'application/vnd.api+json' })); //MongoDB Setup var MongoClient = mongodb.MongoClient; -var url = "mongodb://"+mongo_user+":"+mongo_password+"@"+mongo_server+":"+mongo_port+"/"+mongo_db; +var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; //Simple Base64 handler var base64 = exports; From 3fdc9103fdcde2743b86d8a4b0580c1790e65234 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 01:00:06 -0700 Subject: [PATCH 27/90] better debugging, lighten logging if analytics option not enabled --- app.js | 103 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/app.js b/app.js index f8716d6..464eb58 100644 --- a/app.js +++ b/app.js @@ -34,7 +34,6 @@ app.use(bodyParser.json()); app.use(bodyParser.json({ type: 'application/vnd.api+json' })); //MongoDB Setup -var MongoClient = mongodb.MongoClient; var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; //Simple Base64 handler @@ -99,22 +98,30 @@ app.post('/collect', function(req, res){ if (env_var.log_to_mongo) { - MongoClient.connect(url, function (err, db) { + mongodb.MongoClient.connect(url, function (err, db) { if (err) { - console.log('Unable to connect to the mongoDB server. Error:', err); + console.log('Mongo Error: Unable to connect to the server. Error:', err); } else { - console.log('Connection established to', url); + if (env_var.debug.toLowerCase() === "debug") { + console.log('Mongo: Connection established to', url); + } var collection = db.collection('posts'); // Insert post contents collection.insert(req.body, function (err, result) { if (err) { - console.log(err); + console.log('Mongo Error: '+err); } else { - console.log('Inserted %d documents into the "posts" collection. The documents inserted with "_id" are:', result.length, result); + if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + console.log('Mongo: Inserted %d documents into the "posts" collection. The documents inserted with "_id" are:', result.length, result); + } } //Close connection - db.close(); + db.close(function (err) { + if (err) { + console.log('Mongo Error: '+err); + } + }); }); } } @@ -149,8 +156,16 @@ app.post('/collect', function(req, res){ ev: 1 }; + if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + console.log("Google Analytics Data: "+JSON.stringify(GAdata)); + } + + if (env_var.debug.toLowerCase() === "debug") { + console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); + } + // Post Data - request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){console.log(error);}); + request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){console.log('GA Error: '+error);}); } else { console.log("Google Analytics account ID not defined as environment variable"); } @@ -274,13 +289,25 @@ app.post('/collect', function(req, res){ }; + if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); + console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); + console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); + } + + if (env_var.debug.toLowerCase() === "debug") { + console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); + } + // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log('Localytics Error: '+error);}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log('Localytics Error: '+error);}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log(error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log('Localytics Error: '+error);}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -323,54 +350,26 @@ app.post('/collect', function(req, res){ } }; - // Post Data - request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){console.log(error);}); - request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){console.log(error);}); - } else { - console.log("Mixpanel token not defined as environment variable"); - } - -// DEBUG LOGGING - if (env_var.debug.toLowerCase() === "info") { - console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); - if (env_var.ga_key) { - console.log("Google Analytics Data: "+JSON.stringify(GAdata)); - } - - if (env_var.localytics_key) { - console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); - console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); - console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - } - - if (env_var.mixpanel_token) { + if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); } - } - - if (env_var.debug.toLowerCase() === "debug") { - console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); - if (env_var.ga_key) { - console.log("Google Analytics Data: "+JSON.stringify(GAdata)); - console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); - } - if (env_var.localytics_key) { - console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); - console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); - console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); - } - - if (env_var.mixpanel_token) { - console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); - console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); + if (env_var.debug.toLowerCase() === "debug") { console.log("Mixpanel Tracking Post Output: https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0"); console.log("Mixpanel Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0"); } + + // Post Data + request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){console.log('Mixpanel Error: '+error);}); + request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){console.log('Mixpanel Error: '+error);}); + } else { + console.log("Mixpanel token not defined as environment variable"); + } + +// DEBUG LOGGING + if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); } }); From 4e4d8f288e30811e8d34fb01581c13ffc7c7ceb1 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 01:05:48 -0700 Subject: [PATCH 28/90] quiet non-error console log --- app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 464eb58..bfefd96 100644 --- a/app.js +++ b/app.js @@ -165,7 +165,7 @@ app.post('/collect', function(req, res){ } // Post Data - request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){console.log('GA Error: '+error);}); + request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){ if(error){ console.log('GA Error: '+error);}}); } else { console.log("Google Analytics account ID not defined as environment variable"); } @@ -303,11 +303,11 @@ app.post('/collect', function(req, res){ // Post Data // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){console.log('Localytics Error: '+error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){ if(error){ console.log('Localytics Error: '+error);}}); // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){console.log('Localytics Error: '+error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){ if(error){ console.log('Localytics Error: '+error);}}); // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){console.log('Localytics Error: '+error);}); + request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){ if(error){ console.log('Localytics Error: '+error);}}); } else { console.log("Localytics application key not defined as environment variable"); } @@ -361,8 +361,8 @@ app.post('/collect', function(req, res){ } // Post Data - request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){console.log('Mixpanel Error: '+error);}); - request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){console.log('Mixpanel Error: '+error);}); + request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); + request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); } else { console.log("Mixpanel token not defined as environment variable"); } From e28e53462aaf29543f68ecd23f1d41e713432558 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 01:26:33 -0700 Subject: [PATCH 29/90] Mixpanel: Engage Set and Add must be separate --- app.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app.js b/app.js index bfefd96..a70a7b1 100644 --- a/app.js +++ b/app.js @@ -340,11 +340,17 @@ app.post('/collect', function(req, res){ engage_channel_info[channel.name] = 1; engage_channel_info["total_posts"] = 1; - var mixEngage = { + var mixAddEngage = { + $distinct_id: user.id, + $time: msgTime, + $token: env_var.mixpanel_token, + $add: engage_channel_info + }; + + var mixSetEngage = { $distinct_id: user.id, $time: msgTime, $token: env_var.mixpanel_token, - $add: engage_channel_info, $set: { last_post: moment.unix(msgTime).format('YYYY-MM-DDThh:mm:ss') } @@ -352,17 +358,20 @@ app.post('/collect', function(req, res){ if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); - console.log("Mixpanel Engage Data: "+JSON.stringify(mixEngage)); + console.log("Mixpanel Add Engage Data: "+JSON.stringify(mixAddEngage)); + console.log("Mixpanel Set Engage Data: "+JSON.stringify(mixSetEngage)); } if (env_var.debug.toLowerCase() === "debug") { console.log("Mixpanel Tracking Post Output: https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0"); - console.log("Mixpanel Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0"); + console.log("Mixpanel Add Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))) + "&ip=0"); + console.log("Mixpanel Set Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))) + "&ip=0"); } // Post Data request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); - request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixEngage))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); + request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); + request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); } else { console.log("Mixpanel token not defined as environment variable"); } From 55a8380732902d2278722cd3c2dd6eee07598e9c Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 02:06:24 -0700 Subject: [PATCH 30/90] separate out mongo and analytics to lighten memory --- app.js | 58 ++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/app.js b/app.js index a70a7b1..e9e910b 100644 --- a/app.js +++ b/app.js @@ -1,16 +1,37 @@ //Set up Env Vars var env_var = { - environment: process.env.ENVIRONMENT, - debug: process.env.DEBUG, // supports: info and debug - log_to_mongo: process.env.MONGO_ENABLED, - mongo_user: process.env.MONGO_USER_PROD, - mongo_password: process.env.MONGO_PASSWORD_PROD, - mongo_server: process.env.MONGO_SERVER_PROD, - mongo_port: process.env.MONGO_PORT_PROD, - mongo_db: process.env.MONGO_DB_PROD, - ga_key: process.env.GOOGLE_ANALYTICS_PROD, - localytics_key: process.env.LOCALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD + environment: process.env.NODE_ENV, // supports: production and development + log_level: process.env.LOGLEVEL, // supports: info and debug + write_mongo: process.env.MONGO_ENABLED, // true / false + analytics_track: process.env.ANALYTICS_ENABLED, // true / false + + if (environment.toLowerCase() === "production") { + if (env_var.write_mongo === true) { + mongo_user: process.env.MONGO_USER_PROD, + mongo_password: process.env.MONGO_PASSWORD_PROD, + mongo_server: process.env.MONGO_SERVER_PROD, + mongo_port: process.env.MONGO_PORT_PROD, + mongo_db: process.env.MONGO_DB_PROD + } + if (env_var.analytics_track === true) { + ga_key: process.env.GOOGLE_ANALYTICS_PROD, + localytics_key: process.env.LOCALYTICS_PROD, + mixpanel_token: process.env.MIXPANEL_PROD + } + } else { + if (env_var.write_mongo === true) { + mongo_user: process.env.MONGO_USER_DEV, + mongo_password: process.env.MONGO_PASSWORD_DEV, + mongo_server: process.env.MONGO_SERVER_DEV, + mongo_port: process.env.MONGO_PORT_DEV, + mongo_db: process.env.MONGO_DB_DEV, + } + if (env_var.analytics_track === true) { + ga_key: process.env.GOOGLE_ANALYTICS_DEV, + localytics_key: process.env.LOCALYTICS_DEV, + mixpanel_token: process.env.MIXPANEL_DEV + } + } }; @@ -33,9 +54,6 @@ app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use(bodyParser.json({ type: 'application/vnd.api+json' })); -//MongoDB Setup -var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; - //Simple Base64 handler var base64 = exports; base64.encode = function (unencoded) { @@ -97,7 +115,8 @@ app.post('/collect', function(req, res){ var elipseCount = searchM(/\.\.\./g); - if (env_var.log_to_mongo) { + if (env_var.write_mongo === true) { + var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; mongodb.MongoClient.connect(url, function (err, db) { if (err) { console.log('Mongo Error: Unable to connect to the server. Error:', err); @@ -129,7 +148,8 @@ app.post('/collect', function(req, res){ } -// GOOGLE ANALYTICS COLLECT AND POST + if (env_var.analytics_track === true) { + // GOOGLE ANALYTICS COLLECT AND POST if (env_var.ga_key) { var GAdata = { v: 1, @@ -171,7 +191,7 @@ app.post('/collect', function(req, res){ } -// LOCALYTICS COLLECT AND POST + // LOCALYTICS COLLECT AND POST if (env_var.localytics_key) { var lcl_sd_values = { device_id: uuid.v4(), @@ -312,7 +332,8 @@ app.post('/collect', function(req, res){ console.log("Localytics application key not defined as environment variable"); } -// MIXPANEL COLLECT AND POST + + // MIXPANEL COLLECT AND POST if (env_var.mixpanel_token) { var mixTrack = { event: "message posted", @@ -375,6 +396,7 @@ app.post('/collect', function(req, res){ } else { console.log("Mixpanel token not defined as environment variable"); } + } // DEBUG LOGGING if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { From 0812fcebe501276ace533e16cb43818684a6ad46 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 02:09:09 -0700 Subject: [PATCH 31/90] env var environment --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index e9e910b..6e2bae1 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,7 @@ var env_var = { write_mongo: process.env.MONGO_ENABLED, // true / false analytics_track: process.env.ANALYTICS_ENABLED, // true / false - if (environment.toLowerCase() === "production") { + if (env_var.environment.toLowerCase() === "production") { if (env_var.write_mongo === true) { mongo_user: process.env.MONGO_USER_PROD, mongo_password: process.env.MONGO_PASSWORD_PROD, From 8a1a6564663e055da135d95ed5ca77d4669089ad Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 02:12:47 -0700 Subject: [PATCH 32/90] maybe extended values --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 6e2bae1..ad4b574 100644 --- a/app.js +++ b/app.js @@ -3,7 +3,7 @@ var env_var = { environment: process.env.NODE_ENV, // supports: production and development log_level: process.env.LOGLEVEL, // supports: info and debug write_mongo: process.env.MONGO_ENABLED, // true / false - analytics_track: process.env.ANALYTICS_ENABLED, // true / false + analytics_track: process.env.ANALYTICS_ENABLED // true / false if (env_var.environment.toLowerCase() === "production") { if (env_var.write_mongo === true) { From 6dddab735ef31ff98d037ffd3b5afaa16c35c6fb Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 02:14:59 -0700 Subject: [PATCH 33/90] nope, that wasn't it --- app.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index ad4b574..38af444 100644 --- a/app.js +++ b/app.js @@ -3,7 +3,7 @@ var env_var = { environment: process.env.NODE_ENV, // supports: production and development log_level: process.env.LOGLEVEL, // supports: info and debug write_mongo: process.env.MONGO_ENABLED, // true / false - analytics_track: process.env.ANALYTICS_ENABLED // true / false + analytics_track: process.env.ANALYTICS_ENABLED, // true / false if (env_var.environment.toLowerCase() === "production") { if (env_var.write_mongo === true) { @@ -11,12 +11,12 @@ var env_var = { mongo_password: process.env.MONGO_PASSWORD_PROD, mongo_server: process.env.MONGO_SERVER_PROD, mongo_port: process.env.MONGO_PORT_PROD, - mongo_db: process.env.MONGO_DB_PROD + mongo_db: process.env.MONGO_DB_PROD, } if (env_var.analytics_track === true) { ga_key: process.env.GOOGLE_ANALYTICS_PROD, localytics_key: process.env.LOCALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD + mixpanel_token: process.env.MIXPANEL_PROD, } } else { if (env_var.write_mongo === true) { @@ -29,7 +29,7 @@ var env_var = { if (env_var.analytics_track === true) { ga_key: process.env.GOOGLE_ANALYTICS_DEV, localytics_key: process.env.LOCALYTICS_DEV, - mixpanel_token: process.env.MIXPANEL_DEV + mixpanel_token: process.env.MIXPANEL_DEV, } } }; From 5a58ba27faa6c879645257337e2a301b657a3a47 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 02:17:40 -0700 Subject: [PATCH 34/90] why not try - prod vs dev --- app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 38af444..f717f6e 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,7 @@ var env_var = { write_mongo: process.env.MONGO_ENABLED, // true / false analytics_track: process.env.ANALYTICS_ENABLED, // true / false - if (env_var.environment.toLowerCase() === "production") { +/* if (env_var.environment.toLowerCase() === "production") { */ if (env_var.write_mongo === true) { mongo_user: process.env.MONGO_USER_PROD, mongo_password: process.env.MONGO_PASSWORD_PROD, @@ -18,7 +18,7 @@ var env_var = { localytics_key: process.env.LOCALYTICS_PROD, mixpanel_token: process.env.MIXPANEL_PROD, } - } else { +/* } else { if (env_var.write_mongo === true) { mongo_user: process.env.MONGO_USER_DEV, mongo_password: process.env.MONGO_PASSWORD_DEV, @@ -31,7 +31,7 @@ var env_var = { localytics_key: process.env.LOCALYTICS_DEV, mixpanel_token: process.env.MIXPANEL_DEV, } - } + } */ }; From 63873227521f9e2b242b16bb8c5095471ec40bfc Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 02:21:00 -0700 Subject: [PATCH 35/90] ugh, if statements --- app.js | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/app.js b/app.js index f717f6e..2af6867 100644 --- a/app.js +++ b/app.js @@ -4,34 +4,14 @@ var env_var = { log_level: process.env.LOGLEVEL, // supports: info and debug write_mongo: process.env.MONGO_ENABLED, // true / false analytics_track: process.env.ANALYTICS_ENABLED, // true / false - -/* if (env_var.environment.toLowerCase() === "production") { */ - if (env_var.write_mongo === true) { mongo_user: process.env.MONGO_USER_PROD, mongo_password: process.env.MONGO_PASSWORD_PROD, mongo_server: process.env.MONGO_SERVER_PROD, mongo_port: process.env.MONGO_PORT_PROD, mongo_db: process.env.MONGO_DB_PROD, - } - if (env_var.analytics_track === true) { ga_key: process.env.GOOGLE_ANALYTICS_PROD, localytics_key: process.env.LOCALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD, - } -/* } else { - if (env_var.write_mongo === true) { - mongo_user: process.env.MONGO_USER_DEV, - mongo_password: process.env.MONGO_PASSWORD_DEV, - mongo_server: process.env.MONGO_SERVER_DEV, - mongo_port: process.env.MONGO_PORT_DEV, - mongo_db: process.env.MONGO_DB_DEV, - } - if (env_var.analytics_track === true) { - ga_key: process.env.GOOGLE_ANALYTICS_DEV, - localytics_key: process.env.LOCALYTICS_DEV, - mixpanel_token: process.env.MIXPANEL_DEV, - } - } */ + mixpanel_token: process.env.MIXPANEL_PROD }; From f709a20f563e5b6066001e545cd24909d2b80e36 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 12:51:40 -0700 Subject: [PATCH 36/90] support for verbose post response, set separate string for URLs --- app.js | 122 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 100 insertions(+), 22 deletions(-) diff --git a/app.js b/app.js index 2af6867..5556dc4 100644 --- a/app.js +++ b/app.js @@ -97,6 +97,8 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo === true) { var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; + var collection_name = "posts"; + mongodb.MongoClient.connect(url, function (err, db) { if (err) { console.log('Mongo Error: Unable to connect to the server. Error:', err); @@ -104,7 +106,7 @@ app.post('/collect', function(req, res){ if (env_var.debug.toLowerCase() === "debug") { console.log('Mongo: Connection established to', url); } - var collection = db.collection('posts'); + var collection = db.collection(collection_name); // Insert post contents collection.insert(req.body, function (err, result) { @@ -112,7 +114,7 @@ app.post('/collect', function(req, res){ console.log('Mongo Error: '+err); } else { if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { - console.log('Mongo: Inserted %d documents into the "posts" collection. The documents inserted with "_id" are:', result.length, result); + console.log('Mongo: Inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are:', result.length, result); } } //Close connection @@ -156,16 +158,31 @@ app.post('/collect', function(req, res){ ev: 1 }; + var google_url = { + if (env_var.debug.toLowerCase() === "debug") { + track: "https://www.google-analytics.com/collect?" + } else { + track: "https://www.google-analytics.com/collect?" + } + } + if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { console.log("Google Analytics Data: "+JSON.stringify(GAdata)); } if (env_var.debug.toLowerCase() === "debug") { - console.log("Google Analytics Tracking Post Output: https://www.google-analytics.com/collect?" + qs.stringify(GAdata)); + console.log("Google Analytics Tracking Post Output: "google_url.track + qs.stringify(GAdata)); } // Post Data - request.post("https://www.google-analytics.com/collect?" + qs.stringify(GAdata), function(error, resp, body){ if(error){ console.log('GA Error: '+error);}}); + request.post(google_url.track + qs.stringify(GAdata), function(error, resp, body) { + if(error || env_var.debug.toLowerCase() === "debug") { + console.log('Google Analytics Tracking Response Debug: '+resp); + if(error) { + console.log('Google Analytics Error: '+error); + } + } + }); } else { console.log("Google Analytics account ID not defined as environment variable"); } @@ -177,7 +194,8 @@ app.post('/collect', function(req, res){ device_id: uuid.v4(), session_id: uuid.v4(), }; - + + // Localytics Session Start var LCLstartHeadData = { dt: "h", pa: msgTime - 1, @@ -210,7 +228,7 @@ app.post('/collect', function(req, res){ utp: "known" }; - + // Localytics Event var LCLeventHeadData = { dt: "h", pa: msgTime - 1, @@ -254,7 +272,7 @@ app.post('/collect', function(req, res){ } }; - + // Localytics Session Close var LCLcloseHeadData = { dt: "h", pa: msgTime - 1, @@ -288,6 +306,13 @@ app.post('/collect', function(req, res){ utp: "known" }; + var localytics_url = { + if (env_var.debug.toLowerCase() === "debug") { + track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + } else { + track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + } + } if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); @@ -296,18 +321,39 @@ app.post('/collect', function(req, res){ } if (env_var.debug.toLowerCase() === "debug") { - console.log("Localytics Session Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); + console.log("Localytics Session Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + console.log("Localytics Event Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + console.log("Localytics Session Close Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); } // Post Data - // session start - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body){ if(error){ console.log('Localytics Error: '+error);}}); - // event - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body){ if(error){ console.log('Localytics Error: '+error);}}); - // session close - request.post("https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body){ if(error){ console.log('Localytics Error: '+error);}}); + // Session Start + request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body) { + if(error || env_var.debug.toLowerCase() === "debug") { + console.log('Localytics Tracking Start Response Debug: '+resp); + if(error) { + console.log('Localytics Error: '+error); + } + } + }); + // Event + request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body) { + if(error || env_var.debug.toLowerCase() === "debug") { + console.log('Localytics Tracking Event Response Debug: '+resp); + if(error) { + console.log('Localytics Error: '+error); + } + } + }); + // Session Close + request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body) { + if(error || env_var.debug.toLowerCase() === "debug") { + console.log('Localytics Tracking Close Response Debug: '+resp); + if(error) { + console.log('Localytics Error: '+error); + } + } + }); } else { console.log("Localytics application key not defined as environment variable"); } @@ -357,6 +403,17 @@ app.post('/collect', function(req, res){ } }; + + var mixpanel_url = { + if (env_var.debug.toLowerCase() === "debug") { + track: "https://api.mixpanel.com/track/?verbose=1&ip=0&data=", + engage: "https://api.mixpanel.com/engage/?verbose=1&ip=0&data=" + } else { + track: "https://api.mixpanel.com/track/?ip=0&data=", + engage: "https://api.mixpanel.com/engage/?ip=0&data=" + } + } + if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Add Engage Data: "+JSON.stringify(mixAddEngage)); @@ -364,15 +421,36 @@ app.post('/collect', function(req, res){ } if (env_var.debug.toLowerCase() === "debug") { - console.log("Mixpanel Tracking Post Output: https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0"); - console.log("Mixpanel Add Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))) + "&ip=0"); - console.log("Mixpanel Set Engage Post Output: https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))) + "&ip=0"); + console.log("Mixpanel Tracking Post Output: "mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); + console.log("Mixpanel Add Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage)))); + console.log("Mixpanel Set Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage)))); } // Post Data - request.post("https://api.mixpanel.com/track/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); - request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); - request.post("https://api.mixpanel.com/engage/?data=" + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))) + "&ip=0", function(error, resp, body){ if(error){ console.log('Mixpanel Error: '+error);}}); + request.post(mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))), function(error, resp, body) { + if(error || env_var.debug.toLowerCase() === "debug") { + console.log('Mixpanel Tracking Response Debug: '+resp); + if(error) { + console.log('Mixpanel Error: '+error); + } + } + }); + request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))), function(error, resp, body) { + if(error || env_var.debug.toLowerCase() === "debug") { + console.log('Mixpanel Engage Response Debug: '+resp); + if(error) { + console.log('Mixpanel Error: '+error); + } + } + }); + request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))), function(error, resp, body) { + if(error || env_var.debug.toLowerCase() === "debug") { + console.log('Mixpanel Engage Response Debug: '+resp); + if(error) { + console.log('Mixpanel Error: '+error); + } + } + }); } else { console.log("Mixpanel token not defined as environment variable"); } From 722a5a344394dd4f10c79e6d275012e046e4796e Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 13:02:40 -0700 Subject: [PATCH 37/90] switch env_var debug to string --- app.js | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/app.js b/app.js index 5556dc4..1c1d748 100644 --- a/app.js +++ b/app.js @@ -14,7 +14,9 @@ var env_var = { mixpanel_token: process.env.MIXPANEL_PROD }; - +var logging = {}; +logging["level"] = log_level; + //Set up Reqs var express = require('express'); var bodyParser = require('body-parser'); @@ -103,7 +105,7 @@ app.post('/collect', function(req, res){ if (err) { console.log('Mongo Error: Unable to connect to the server. Error:', err); } else { - if (env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "debug") { console.log('Mongo: Connection established to', url); } var collection = db.collection(collection_name); @@ -113,7 +115,7 @@ app.post('/collect', function(req, res){ if (err) { console.log('Mongo Error: '+err); } else { - if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { console.log('Mongo: Inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are:', result.length, result); } } @@ -159,24 +161,24 @@ app.post('/collect', function(req, res){ }; var google_url = { - if (env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "debug") { track: "https://www.google-analytics.com/collect?" } else { track: "https://www.google-analytics.com/collect?" } } - if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { console.log("Google Analytics Data: "+JSON.stringify(GAdata)); } - if (env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "debug") { console.log("Google Analytics Tracking Post Output: "google_url.track + qs.stringify(GAdata)); } // Post Data request.post(google_url.track + qs.stringify(GAdata), function(error, resp, body) { - if(error || env_var.debug.toLowerCase() === "debug") { + if(error || logging["level"].toLowerCase() === "debug") { console.log('Google Analytics Tracking Response Debug: '+resp); if(error) { console.log('Google Analytics Error: '+error); @@ -307,20 +309,20 @@ app.post('/collect', function(req, res){ }; var localytics_url = { - if (env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "debug") { track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" } else { track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" } } - if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); } - if (env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "debug") { console.log("Localytics Session Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); console.log("Localytics Event Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); console.log("Localytics Session Close Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); @@ -329,7 +331,7 @@ app.post('/collect', function(req, res){ // Post Data // Session Start request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body) { - if(error || env_var.debug.toLowerCase() === "debug") { + if(error || logging["level"].toLowerCase() === "debug") { console.log('Localytics Tracking Start Response Debug: '+resp); if(error) { console.log('Localytics Error: '+error); @@ -338,7 +340,7 @@ app.post('/collect', function(req, res){ }); // Event request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body) { - if(error || env_var.debug.toLowerCase() === "debug") { + if(error || logging["level"].toLowerCase() === "debug") { console.log('Localytics Tracking Event Response Debug: '+resp); if(error) { console.log('Localytics Error: '+error); @@ -347,7 +349,7 @@ app.post('/collect', function(req, res){ }); // Session Close request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body) { - if(error || env_var.debug.toLowerCase() === "debug") { + if(error || logging["level"].toLowerCase() === "debug") { console.log('Localytics Tracking Close Response Debug: '+resp); if(error) { console.log('Localytics Error: '+error); @@ -405,7 +407,7 @@ app.post('/collect', function(req, res){ var mixpanel_url = { - if (env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "debug") { track: "https://api.mixpanel.com/track/?verbose=1&ip=0&data=", engage: "https://api.mixpanel.com/engage/?verbose=1&ip=0&data=" } else { @@ -414,13 +416,13 @@ app.post('/collect', function(req, res){ } } - if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); console.log("Mixpanel Add Engage Data: "+JSON.stringify(mixAddEngage)); console.log("Mixpanel Set Engage Data: "+JSON.stringify(mixSetEngage)); } - if (env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "debug") { console.log("Mixpanel Tracking Post Output: "mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); console.log("Mixpanel Add Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage)))); console.log("Mixpanel Set Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage)))); @@ -428,7 +430,7 @@ app.post('/collect', function(req, res){ // Post Data request.post(mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))), function(error, resp, body) { - if(error || env_var.debug.toLowerCase() === "debug") { + if(error || logging["level"].toLowerCase() === "debug") { console.log('Mixpanel Tracking Response Debug: '+resp); if(error) { console.log('Mixpanel Error: '+error); @@ -436,7 +438,7 @@ app.post('/collect', function(req, res){ } }); request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))), function(error, resp, body) { - if(error || env_var.debug.toLowerCase() === "debug") { + if(error || logging["level"].toLowerCase() === "debug") { console.log('Mixpanel Engage Response Debug: '+resp); if(error) { console.log('Mixpanel Error: '+error); @@ -444,7 +446,7 @@ app.post('/collect', function(req, res){ } }); request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))), function(error, resp, body) { - if(error || env_var.debug.toLowerCase() === "debug") { + if(error || logging["level"].toLowerCase() === "debug") { console.log('Mixpanel Engage Response Debug: '+resp); if(error) { console.log('Mixpanel Error: '+error); @@ -457,7 +459,7 @@ app.post('/collect', function(req, res){ } // DEBUG LOGGING - if (env_var.debug.toLowerCase() === "info" || env_var.debug.toLowerCase() === "debug") { + if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); } }); From 74be406a410d9fe83ab323a071b9a8a7724cd657 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 13:57:33 -0700 Subject: [PATCH 38/90] redesign logging --- app.js | 158 ++++++++++++++++++++++++--------------------------------- 1 file changed, 67 insertions(+), 91 deletions(-) diff --git a/app.js b/app.js index 1c1d748..61dbeec 100644 --- a/app.js +++ b/app.js @@ -1,7 +1,7 @@ //Set up Env Vars var env_var = { - environment: process.env.NODE_ENV, // supports: production and development - log_level: process.env.LOGLEVEL, // supports: info and debug + environment: process.env.NODE_ENV || 'development';, // supports: production and development + log_level: process.env.LOGLEVEL, // supports: debug, error, warn, info, off write_mongo: process.env.MONGO_ENABLED, // true / false analytics_track: process.env.ANALYTICS_ENABLED, // true / false mongo_user: process.env.MONGO_USER_PROD, @@ -14,8 +14,6 @@ var env_var = { mixpanel_token: process.env.MIXPANEL_PROD }; -var logging = {}; -logging["level"] = log_level; //Set up Reqs var express = require('express'); @@ -31,6 +29,20 @@ var mongodb = require('mongodb'); var app = express(); var port = process.env.PORT || 3000; +//Logger +var logger = exports; +logger.debugLevel = env_var.log_level || 'warn'; +logger.log = function(level, message) { + var levels = ['debug', 'error', 'warn', 'info', 'off']; + if (levels.indexOf(level) >= levels.indexOf(logger.debugLevel) ) { + if (typeof message !== 'string') { + message = JSON.stringify(message); + }; + console.log(level+': '+message); + } +} + + //Set Body Parser app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); @@ -103,26 +115,22 @@ app.post('/collect', function(req, res){ mongodb.MongoClient.connect(url, function (err, db) { if (err) { - console.log('Mongo Error: Unable to connect to the server. Error:', err); + logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + err); } else { - if (logging["level"].toLowerCase() === "debug") { - console.log('Mongo: Connection established to', url); - } + logger.log('debug','Mongo: Connection established to '+url); var collection = db.collection(collection_name); // Insert post contents collection.insert(req.body, function (err, result) { if (err) { - console.log('Mongo Error: '+err); + logger.log('error', 'Mongo Error: '+err); } else { - if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { - console.log('Mongo: Inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are:', result.length, result); - } + logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+result); } //Close connection db.close(function (err) { if (err) { - console.log('Mongo Error: '+err); + logger.log('error','Mongo Error: '+err); } }); }); @@ -131,7 +139,6 @@ app.post('/collect', function(req, res){ ); } - if (env_var.analytics_track === true) { // GOOGLE ANALYTICS COLLECT AND POST if (env_var.ga_key) { @@ -161,32 +168,25 @@ app.post('/collect', function(req, res){ }; var google_url = { - if (logging["level"].toLowerCase() === "debug") { - track: "https://www.google-analytics.com/collect?" - } else { +// if (logging["level"].toLowerCase() === "debug") { track: "https://www.google-analytics.com/collect?" - } - } - - if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { - console.log("Google Analytics Data: "+JSON.stringify(GAdata)); +// } else { +// track: "https://www.google-analytics.com/collect?" +// } } - if (logging["level"].toLowerCase() === "debug") { - console.log("Google Analytics Tracking Post Output: "google_url.track + qs.stringify(GAdata)); - } + logger.log('debug', "Google Analytics Data: "+JSON.stringify(GAdata)); + logger.log('debug', "Google Analytics Tracking Post Output: "google_url.track + qs.stringify(GAdata)); // Post Data request.post(google_url.track + qs.stringify(GAdata), function(error, resp, body) { - if(error || logging["level"].toLowerCase() === "debug") { - console.log('Google Analytics Tracking Response Debug: '+resp); if(error) { - console.log('Google Analytics Error: '+error); + logger.log('error', 'Google Analytics Error: '+error); } - } + logger.log('debug', 'Google Analytics Tracking Response Debug: '+resp); }); } else { - console.log("Google Analytics account ID not defined as environment variable"); + logger.log('info',"Google Analytics account ID not defined as environment variable"); } @@ -309,55 +309,44 @@ app.post('/collect', function(req, res){ }; var localytics_url = { - if (logging["level"].toLowerCase() === "debug") { - track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" - } else { +// if (logging["level"].toLowerCase() === "debug") { +// track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" +// } else { track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" - } +// } } - if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { - console.log("Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); - console.log("Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); - console.log("Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - } - - if (logging["level"].toLowerCase() === "debug") { - console.log("Localytics Session Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - console.log("Localytics Event Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - console.log("Localytics Session Close Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); - } + logger.log('info', "Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); + logger.log('info', "Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); + logger.log('info', "Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); + logger.log('debug', "Localytics Session Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + logger.log('debug', "Localytics Event Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + logger.log('debug', "Localytics Session Close Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); // Post Data // Session Start request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body) { - if(error || logging["level"].toLowerCase() === "debug") { - console.log('Localytics Tracking Start Response Debug: '+resp); + logger.log('debug','Localytics Tracking Start Response Debug: '+resp); if(error) { - console.log('Localytics Error: '+error); + logger.log('error', 'Localytics Error: '+error); } - } }); // Event request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body) { - if(error || logging["level"].toLowerCase() === "debug") { - console.log('Localytics Tracking Event Response Debug: '+resp); + logger.log('debug','Localytics Tracking Event Response Debug: '+resp); if(error) { - console.log('Localytics Error: '+error); + logger.log('error', 'Localytics Error: '+error); } - } }); // Session Close request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body) { - if(error || logging["level"].toLowerCase() === "debug") { - console.log('Localytics Tracking Close Response Debug: '+resp); + logger.log('debug','Localytics Tracking Close Response Debug: '+resp); if(error) { - console.log('Localytics Error: '+error); + logger.log('error', 'Localytics Error: '+error); } - } }); } else { - console.log("Localytics application key not defined as environment variable"); + logger.log('info', "Localytics application key not defined as environment variable"); } @@ -407,64 +396,51 @@ app.post('/collect', function(req, res){ var mixpanel_url = { - if (logging["level"].toLowerCase() === "debug") { - track: "https://api.mixpanel.com/track/?verbose=1&ip=0&data=", - engage: "https://api.mixpanel.com/engage/?verbose=1&ip=0&data=" - } else { +// if (logging["level"].toLowerCase() === "debug") { +// track: "https://api.mixpanel.com/track/?verbose=1&ip=0&data=", +// engage: "https://api.mixpanel.com/engage/?verbose=1&ip=0&data=" +// } else { track: "https://api.mixpanel.com/track/?ip=0&data=", engage: "https://api.mixpanel.com/engage/?ip=0&data=" - } +// } } - if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { - console.log("Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); - console.log("Mixpanel Add Engage Data: "+JSON.stringify(mixAddEngage)); - console.log("Mixpanel Set Engage Data: "+JSON.stringify(mixSetEngage)); - } - - if (logging["level"].toLowerCase() === "debug") { - console.log("Mixpanel Tracking Post Output: "mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); - console.log("Mixpanel Add Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage)))); - console.log("Mixpanel Set Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage)))); - } + logger.log('info', "Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); + logger.log('info', "Mixpanel Add Engage Data: "+JSON.stringify(mixAddEngage)); + logger.log('info', "Mixpanel Set Engage Data: "+JSON.stringify(mixSetEngage)); + logger.log('debug', "Mixpanel Tracking Post Output: "mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); + logger.log('debug', "Mixpanel Add Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage)))); + logger.log('debug', "Mixpanel Set Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage)))); // Post Data request.post(mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))), function(error, resp, body) { - if(error || logging["level"].toLowerCase() === "debug") { - console.log('Mixpanel Tracking Response Debug: '+resp); + logger.log('debug', 'Mixpanel Tracking Response Debug: '+resp); if(error) { - console.log('Mixpanel Error: '+error); + logger.log('error','Mixpanel Error: '+error); } - } }); request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))), function(error, resp, body) { - if(error || logging["level"].toLowerCase() === "debug") { - console.log('Mixpanel Engage Response Debug: '+resp); + logger.log('debug', 'Mixpanel Engage Response Debug: '+resp); if(error) { - console.log('Mixpanel Error: '+error); + logger.log('error', 'Mixpanel Error: '+error); } - } }); request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))), function(error, resp, body) { - if(error || logging["level"].toLowerCase() === "debug") { - console.log('Mixpanel Engage Response Debug: '+resp); + logger.log('debug', 'Mixpanel Engage Response Debug: '+resp); if(error) { - console.log('Mixpanel Error: '+error); + logger.log('error', 'Mixpanel Error: '+error); } - } }); } else { - console.log("Mixpanel token not defined as environment variable"); + logger.log('info', "Mixpanel token not defined as environment variable"); } } // DEBUG LOGGING - if (logging["level"].toLowerCase() === "info" || logging["level"].toLowerCase() === "debug") { - console.log("Raw Slack Webhook Post: "+JSON.stringify(req.body)); - } + logger.log('info', "Raw Slack Webhook Post: "+JSON.stringify(req.body)); }); //Start Server app.listen(port, function () { - console.log('Listening on port ' + port); + logger.log('info', 'Listening on port ' + port); }); From 3557f4b733531c08a4760cfbfd10bde82947106f Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 13:58:33 -0700 Subject: [PATCH 39/90] oops --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 61dbeec..752a92e 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,6 @@ //Set up Env Vars var env_var = { - environment: process.env.NODE_ENV || 'development';, // supports: production and development + environment: process.env.NODE_ENV || 'development', // supports: production and development log_level: process.env.LOGLEVEL, // supports: debug, error, warn, info, off write_mongo: process.env.MONGO_ENABLED, // true / false analytics_track: process.env.ANALYTICS_ENABLED, // true / false From 7106e87f9b4d8aa00aedb40e2cd80eb10c4c8a94 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 14:01:18 -0700 Subject: [PATCH 40/90] wrong identifier --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 752a92e..0e1447d 100644 --- a/app.js +++ b/app.js @@ -173,7 +173,7 @@ app.post('/collect', function(req, res){ // } else { // track: "https://www.google-analytics.com/collect?" // } - } + }; logger.log('debug', "Google Analytics Data: "+JSON.stringify(GAdata)); logger.log('debug', "Google Analytics Tracking Post Output: "google_url.track + qs.stringify(GAdata)); From 9ff24fa8192180b9b27d54e31d14b0d2d18bb450 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 14:03:54 -0700 Subject: [PATCH 41/90] non-identifiable hmmm --- app.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/app.js b/app.js index 0e1447d..539bb10 100644 --- a/app.js +++ b/app.js @@ -168,15 +168,11 @@ app.post('/collect', function(req, res){ }; var google_url = { -// if (logging["level"].toLowerCase() === "debug") { - track: "https://www.google-analytics.com/collect?" -// } else { -// track: "https://www.google-analytics.com/collect?" -// } + track: "https://www.google-analytics.com/collect?" }; - logger.log('debug', "Google Analytics Data: "+JSON.stringify(GAdata)); - logger.log('debug', "Google Analytics Tracking Post Output: "google_url.track + qs.stringify(GAdata)); + logger.log('debug', 'Google Analytics Data: '+JSON.stringify(GAdata)); + logger.log('debug', 'Google Analytics Tracking Post Output: 'google_url.track + qs.stringify(GAdata)); // Post Data request.post(google_url.track + qs.stringify(GAdata), function(error, resp, body) { From 2a332f72b62752be261db412a59c709ed2d3ff73 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 15:08:28 -0700 Subject: [PATCH 42/90] simplify GA to find bug --- app.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app.js b/app.js index 539bb10..c86d4b9 100644 --- a/app.js +++ b/app.js @@ -167,9 +167,7 @@ app.post('/collect', function(req, res){ ev: 1 }; - var google_url = { - track: "https://www.google-analytics.com/collect?" - }; + var google_url_track = "https://www.google-analytics.com/collect?"; logger.log('debug', 'Google Analytics Data: '+JSON.stringify(GAdata)); logger.log('debug', 'Google Analytics Tracking Post Output: 'google_url.track + qs.stringify(GAdata)); From f8a679f25898fde185bc175f1e862cd4b125b5bd Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 15:26:21 -0700 Subject: [PATCH 43/90] need to use JSLint more often --- app.js | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/app.js b/app.js index c86d4b9..e8a0640 100644 --- a/app.js +++ b/app.js @@ -37,10 +37,10 @@ logger.log = function(level, message) { if (levels.indexOf(level) >= levels.indexOf(logger.debugLevel) ) { if (typeof message !== 'string') { message = JSON.stringify(message); - }; + } console.log(level+': '+message); } -} +}; //Set Body Parser @@ -167,10 +167,16 @@ app.post('/collect', function(req, res){ ev: 1 }; - var google_url_track = "https://www.google-analytics.com/collect?"; + var google_url = { +// if (logging["level"].toLowerCase() === "debug") { + track: "https://www.google-analytics.com/collect?" +// } else { +// track: "https://www.google-analytics.com/collect?" +// } + }; - logger.log('debug', 'Google Analytics Data: '+JSON.stringify(GAdata)); - logger.log('debug', 'Google Analytics Tracking Post Output: 'google_url.track + qs.stringify(GAdata)); + logger.log('debug', "Google Analytics Data: "+JSON.stringify(GAdata)); + logger.log('debug', "Google Analytics Tracking Post Output: "+google_url.track + qs.stringify(GAdata)); // Post Data request.post(google_url.track + qs.stringify(GAdata), function(error, resp, body) { @@ -188,7 +194,7 @@ app.post('/collect', function(req, res){ if (env_var.localytics_key) { var lcl_sd_values = { device_id: uuid.v4(), - session_id: uuid.v4(), + session_id: uuid.v4() }; // Localytics Session Start @@ -308,14 +314,14 @@ app.post('/collect', function(req, res){ // } else { track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" // } - } + }; logger.log('info', "Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); logger.log('info', "Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); logger.log('info', "Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - logger.log('debug', "Localytics Session Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - logger.log('debug', "Localytics Event Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - logger.log('debug', "Localytics Session Close Start Tracking Post Output: "localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); + logger.log('debug', "Localytics Session Start Tracking Post Output: "+localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); + logger.log('debug', "Localytics Event Tracking Post Output: "+localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); + logger.log('debug', "Localytics Session Close Start Tracking Post Output: "+localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); // Post Data // Session Start @@ -397,14 +403,14 @@ app.post('/collect', function(req, res){ track: "https://api.mixpanel.com/track/?ip=0&data=", engage: "https://api.mixpanel.com/engage/?ip=0&data=" // } - } + }; logger.log('info', "Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); logger.log('info', "Mixpanel Add Engage Data: "+JSON.stringify(mixAddEngage)); logger.log('info', "Mixpanel Set Engage Data: "+JSON.stringify(mixSetEngage)); - logger.log('debug', "Mixpanel Tracking Post Output: "mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); - logger.log('debug', "Mixpanel Add Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage)))); - logger.log('debug', "Mixpanel Set Engage Post Output: "mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage)))); + logger.log('debug', "Mixpanel Tracking Post Output: "+mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); + logger.log('debug', "Mixpanel Add Engage Post Output: "+mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage)))); + logger.log('debug', "Mixpanel Set Engage Post Output: "+mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage)))); // Post Data request.post(mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))), function(error, resp, body) { From 2ca1d05a71a1c4682070d96a354a5e777d8b9990 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 15:37:00 -0700 Subject: [PATCH 44/90] deal with true/false on db and analytics options later --- app.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app.js b/app.js index e8a0640..dd56eba 100644 --- a/app.js +++ b/app.js @@ -4,14 +4,14 @@ var env_var = { log_level: process.env.LOGLEVEL, // supports: debug, error, warn, info, off write_mongo: process.env.MONGO_ENABLED, // true / false analytics_track: process.env.ANALYTICS_ENABLED, // true / false - mongo_user: process.env.MONGO_USER_PROD, - mongo_password: process.env.MONGO_PASSWORD_PROD, - mongo_server: process.env.MONGO_SERVER_PROD, - mongo_port: process.env.MONGO_PORT_PROD, - mongo_db: process.env.MONGO_DB_PROD, - ga_key: process.env.GOOGLE_ANALYTICS_PROD, - localytics_key: process.env.LOCALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD + mongo_user: process.env.MONGO_USER_PROD, + mongo_password: process.env.MONGO_PASSWORD_PROD, + mongo_server: process.env.MONGO_SERVER_PROD, + mongo_port: process.env.MONGO_PORT_PROD, + mongo_db: process.env.MONGO_DB_PROD, + ga_key: process.env.GOOGLE_ANALYTICS_PROD, + localytics_key: process.env.LOCALYTICS_PROD, + mixpanel_token: process.env.MIXPANEL_PROD }; @@ -109,7 +109,7 @@ app.post('/collect', function(req, res){ var elipseCount = searchM(/\.\.\./g); - if (env_var.write_mongo === true) { + if (env_var.write_mongo) { var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; var collection_name = "posts"; @@ -139,7 +139,7 @@ app.post('/collect', function(req, res){ ); } - if (env_var.analytics_track === true) { + if (env_var.analytics_track) { // GOOGLE ANALYTICS COLLECT AND POST if (env_var.ga_key) { var GAdata = { From 636a2b0c721ad7b7bb003fa01f6a827d0303891a Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 15:46:57 -0700 Subject: [PATCH 45/90] stringify errors --- app.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app.js b/app.js index dd56eba..047454c 100644 --- a/app.js +++ b/app.js @@ -115,7 +115,7 @@ app.post('/collect', function(req, res){ mongodb.MongoClient.connect(url, function (err, db) { if (err) { - logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + err); + logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err)); } else { logger.log('debug','Mongo: Connection established to '+url); var collection = db.collection(collection_name); @@ -123,14 +123,14 @@ app.post('/collect', function(req, res){ // Insert post contents collection.insert(req.body, function (err, result) { if (err) { - logger.log('error', 'Mongo Error: '+err); + logger.log('error', 'Mongo Error: '+JSON.stringify(err)); } else { - logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+result); + logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } //Close connection db.close(function (err) { if (err) { - logger.log('error','Mongo Error: '+err); + logger.log('error','Mongo Error: '+JSON.stringify(err)); } }); }); @@ -181,9 +181,9 @@ app.post('/collect', function(req, res){ // Post Data request.post(google_url.track + qs.stringify(GAdata), function(error, resp, body) { if(error) { - logger.log('error', 'Google Analytics Error: '+error); + logger.log('error', 'Google Analytics Error: '+JSON.stringify(error)); } - logger.log('debug', 'Google Analytics Tracking Response Debug: '+resp); + logger.log('debug', 'Google Analytics Tracking Response Debug: '+JSON.stringify(resp)); }); } else { logger.log('info',"Google Analytics account ID not defined as environment variable"); @@ -326,23 +326,23 @@ app.post('/collect', function(req, res){ // Post Data // Session Start request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body) { - logger.log('debug','Localytics Tracking Start Response Debug: '+resp); + logger.log('debug','Localytics Tracking Start Response Debug: '+JSON.stringify(resp)); if(error) { - logger.log('error', 'Localytics Error: '+error); + logger.log('error', 'Localytics Error: '+JSON.stringify(error)); } }); // Event request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body) { - logger.log('debug','Localytics Tracking Event Response Debug: '+resp); + logger.log('debug','Localytics Tracking Event Response Debug: '+JSON.stringify(resp)); if(error) { - logger.log('error', 'Localytics Error: '+error); + logger.log('error', 'Localytics Error: '+JSON.stringify(error)); } }); // Session Close request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body) { - logger.log('debug','Localytics Tracking Close Response Debug: '+resp); + logger.log('debug','Localytics Tracking Close Response Debug: '+JSON.stringify(resp)); if(error) { - logger.log('error', 'Localytics Error: '+error); + logger.log('error', 'Localytics Error: '+JSON.stringify(error)); } }); } else { @@ -414,21 +414,21 @@ app.post('/collect', function(req, res){ // Post Data request.post(mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))), function(error, resp, body) { - logger.log('debug', 'Mixpanel Tracking Response Debug: '+resp); + logger.log('debug', 'Mixpanel Tracking Response Debug: '+JSON.stringify(resp)); if(error) { - logger.log('error','Mixpanel Error: '+error); + logger.log('error','Mixpanel Error: '+JSON.stringify(error)); } }); request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))), function(error, resp, body) { - logger.log('debug', 'Mixpanel Engage Response Debug: '+resp); + logger.log('debug', 'Mixpanel Engage Response Debug: '+JSON.stringify(resp)); if(error) { - logger.log('error', 'Mixpanel Error: '+error); + logger.log('error', 'Mixpanel Error: '+JSON.stringify(error)); } }); request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))), function(error, resp, body) { - logger.log('debug', 'Mixpanel Engage Response Debug: '+resp); + logger.log('debug', 'Mixpanel Engage Response Debug: '+JSON.stringify(resp)); if(error) { - logger.log('error', 'Mixpanel Error: '+error); + logger.log('error', 'Mixpanel Error: '+JSON.stringify(error)); } }); } else { From 8b1c15300da45c5958818325b09828a7ac658845 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 14 Sep 2015 17:13:03 -0700 Subject: [PATCH 46/90] deal with debug tracking paths later --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 047454c..bfde6df 100644 --- a/app.js +++ b/app.js @@ -309,7 +309,7 @@ app.post('/collect', function(req, res){ }; var localytics_url = { -// if (logging["level"].toLowerCase() === "debug") { +// if (logger[debugLevel].toLowerCase() == "debug") { // track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" // } else { track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" From b5a2806ce66dc7a768a144669d7f20d2963c20df Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Wed, 16 Sep 2015 13:27:30 -0700 Subject: [PATCH 47/90] include Logentries service --- app.js | 11 +++++++++-- package.json | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index bfde6df..259e079 100644 --- a/app.js +++ b/app.js @@ -11,7 +11,8 @@ var env_var = { mongo_db: process.env.MONGO_DB_PROD, ga_key: process.env.GOOGLE_ANALYTICS_PROD, localytics_key: process.env.LOCALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD + mixpanel_token: process.env.MIXPANEL_PROD, + logentries_token: process.env.LOGENTRIES_PROD }; @@ -24,11 +25,17 @@ var math = require('mathjs'); var moment = require('moment'); var uuid = require('node-uuid'); var mongodb = require('mongodb'); +var logentries = require('le_node'); //Server Details var app = express(); var port = process.env.PORT || 3000; +//Logentries Service +var le = new logentries({ + token: logentries_token +}); + //Logger var logger = exports; logger.debugLevel = env_var.log_level || 'warn'; @@ -39,10 +46,10 @@ logger.log = function(level, message) { message = JSON.stringify(message); } console.log(level+': '+message); + le.log(level, message); } }; - //Set Body Parser app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); diff --git a/package.json b/package.json index 10e6b3e..0a5828f 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "mathjs": "^2.0.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", - "mongodb": "~2.0" + "mongodb": "~2.0", + "le-node": "^1.1.0" }, "scripts": { "start": "node app.js" From 91c9cbb8f6877e832d6dd3ec527a5471d0168a6d Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Wed, 16 Sep 2015 13:29:09 -0700 Subject: [PATCH 48/90] Logentries: locate le_node --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0a5828f..36ffbbc 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "moment": "^2.4.0", "node-uuid": "^1.4.0", "mongodb": "~2.0", - "le-node": "^1.1.0" + "le-node": "~1.0" }, "scripts": { "start": "node app.js" From 26f0973202dfb4ca7331cd9c11a91927d75bcebf Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Wed, 16 Sep 2015 13:31:02 -0700 Subject: [PATCH 49/90] Logentries: underscore not dash --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36ffbbc..a5a119d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "moment": "^2.4.0", "node-uuid": "^1.4.0", "mongodb": "~2.0", - "le-node": "~1.0" + "le_node": "~1.0" }, "scripts": { "start": "node app.js" From b8a92aab324ee3f1201ecef400ec7bbc6802adde Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Wed, 16 Sep 2015 13:33:31 -0700 Subject: [PATCH 50/90] env_var keeps on catching me --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 259e079..1501861 100644 --- a/app.js +++ b/app.js @@ -33,7 +33,7 @@ var port = process.env.PORT || 3000; //Logentries Service var le = new logentries({ - token: logentries_token + token: env_var.logentries_token }); //Logger From 4fb737ddc0af7f0c648ae6860669019d74098787 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Wed, 16 Sep 2015 13:34:46 -0700 Subject: [PATCH 51/90] Logentries: bump to 1.1.x --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a5a119d..295492d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "moment": "^2.4.0", "node-uuid": "^1.4.0", "mongodb": "~2.0", - "le_node": "~1.0" + "le_node": "~1.1" }, "scripts": { "start": "node app.js" From 8a1f7eaa6a39632dad1ce56b1074facf39c36f01 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 29 Jan 2018 23:14:12 -0800 Subject: [PATCH 52/90] -Localytics -MixpanelEngage closed conn Removed all of Localytics, Mixpanel Engage (People), and closed hanging connections --- app.js | 212 +-------------------------------------------------- package.json | 7 +- 2 files changed, 9 insertions(+), 210 deletions(-) diff --git a/app.js b/app.js index 1501861..da6f5ad 100644 --- a/app.js +++ b/app.js @@ -175,11 +175,7 @@ app.post('/collect', function(req, res){ }; var google_url = { -// if (logging["level"].toLowerCase() === "debug") { track: "https://www.google-analytics.com/collect?" -// } else { -// track: "https://www.google-analytics.com/collect?" -// } }; logger.log('debug', "Google Analytics Data: "+JSON.stringify(GAdata)); @@ -196,167 +192,6 @@ app.post('/collect', function(req, res){ logger.log('info',"Google Analytics account ID not defined as environment variable"); } - - // LOCALYTICS COLLECT AND POST - if (env_var.localytics_key) { - var lcl_sd_values = { - device_id: uuid.v4(), - session_id: uuid.v4() - }; - - // Localytics Session Start - var LCLstartHeadData = { - dt: "h", - pa: msgTime - 1, - seq: 1, - u: uuid.v4(), - attrs: { - dt: "a", - au: env_var.localytics_key, - iu: lcl_sd_values.device_id, - lv: "slackalytics_0.0.1", - dmo: "Slack", - dll: "EN-US", - dma: "Slack" - }, - ids: { - customer_name: user.name, - customer_id: user.id - } - }; - - var LCLstartBodyData = { - dt: "s", - ct: msgTime, - u: lcl_sd_values.session_id, - nth: 1, - mc: null, - mm: null, - ms: null, - cid: user.id, - utp: "known" - }; - - // Localytics Event - var LCLeventHeadData = { - dt: "h", - pa: msgTime - 1, - seq: 2, - u: uuid.v4(), - attrs: { - dt: "a", - au: env_var.localytics_key, - iu: lcl_sd_values.device_id, - lv: "slackalytics_0.0.1", - dmo: "Slack", - dll: "EN-US", - dma: "Slack" - }, - ids: { - customer_name: user.name, - customer_id: user.id - } - }; - - var LCLeventBodyData = { - ct: msgTime, - u: uuid.v4(), - su: lcl_sd_values.session_id, - mc: null, - mm: null, - ms: null, - dt: "e", - n: "message posted", - cid: user.id, - utp: "known", - attrs: { - user: user.name + " (" + user.id + ")", - channel: channel.name + " (" + channel.id + ")", - words: wordCount, - emojis: emojiCount, - exclamations: exclaCount, - ellipsis: elipseCount, - question_marks: questionMark, - domain: teamDomain+".slack.com" - } - }; - - // Localytics Session Close - var LCLcloseHeadData = { - dt: "h", - pa: msgTime - 1, - seq: 3, - u: uuid.v4(), - attrs: { - dt: "a", - au: env_var.localytics_key, - iu: lcl_sd_values.device_id, - lv: "slackalytics_0.0.1", - dmo: "Slack", - dll: "EN-US", - dma: "Slack" - }, - ids: { - customer_name: user.name, - customer_id: user.id - } - }; - - var LCLcloseBodyData = { - dt: "c", - u: uuid.v4(), - ss: msgTime, - su: lcl_sd_values.session_id, - ct: msgTime, - ctl: 0, - cta: 0, - fl:[], - cid: user.id, - utp: "known" - }; - - var localytics_url = { -// if (logger[debugLevel].toLowerCase() == "debug") { -// track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" -// } else { - track: "https://webanalytics.localytics.com/api/v2/applications/" + env_var.localytics_key + "/uploads/image.gif?e=1&client_date="+msgTime+"&callback=z&data=" -// } - }; - - logger.log('info', "Localytics Session Start Data: \n Head: "+JSON.stringify(LCLstartHeadData)+"\n Body: "+JSON.stringify(LCLstartBodyData)); - logger.log('info', "Localytics Event Data: \n Head: "+JSON.stringify(LCLeventHeadData)+"\n Body: "+JSON.stringify(LCLeventBodyData)); - logger.log('info', "Localytics Session Close Data: \n Head: "+JSON.stringify(LCLcloseHeadData)+"\n Body: "+JSON.stringify(LCLcloseBodyData)); - logger.log('debug', "Localytics Session Start Tracking Post Output: "+localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData))); - logger.log('debug', "Localytics Event Tracking Post Output: "+localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData))); - logger.log('debug', "Localytics Session Close Start Tracking Post Output: "+localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData))); - - // Post Data - // Session Start - request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLstartHeadData)+"%0A"+JSON.stringify(LCLstartBodyData)), function(error, resp, body) { - logger.log('debug','Localytics Tracking Start Response Debug: '+JSON.stringify(resp)); - if(error) { - logger.log('error', 'Localytics Error: '+JSON.stringify(error)); - } - }); - // Event - request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLeventHeadData)+"%0A"+JSON.stringify(LCLeventBodyData)), function(error, resp, body) { - logger.log('debug','Localytics Tracking Event Response Debug: '+JSON.stringify(resp)); - if(error) { - logger.log('error', 'Localytics Error: '+JSON.stringify(error)); - } - }); - // Session Close - request.post(localytics_url.track + encodeURIComponent(JSON.stringify(LCLcloseHeadData)+"%0A"+JSON.stringify(LCLcloseBodyData)), function(error, resp, body) { - logger.log('debug','Localytics Tracking Close Response Debug: '+JSON.stringify(resp)); - if(error) { - logger.log('error', 'Localytics Error: '+JSON.stringify(error)); - } - }); - } else { - logger.log('info', "Localytics application key not defined as environment variable"); - } - - // MIXPANEL COLLECT AND POST if (env_var.mixpanel_token) { var mixTrack = { @@ -381,43 +216,12 @@ app.post('/collect', function(req, res){ } }; - var engage_channel_info = {}; - engage_channel_info[channel.name] = 1; - engage_channel_info["total_posts"] = 1; - - var mixAddEngage = { - $distinct_id: user.id, - $time: msgTime, - $token: env_var.mixpanel_token, - $add: engage_channel_info - }; - - var mixSetEngage = { - $distinct_id: user.id, - $time: msgTime, - $token: env_var.mixpanel_token, - $set: { - last_post: moment.unix(msgTime).format('YYYY-MM-DDThh:mm:ss') - } - }; - - var mixpanel_url = { -// if (logging["level"].toLowerCase() === "debug") { -// track: "https://api.mixpanel.com/track/?verbose=1&ip=0&data=", -// engage: "https://api.mixpanel.com/engage/?verbose=1&ip=0&data=" -// } else { - track: "https://api.mixpanel.com/track/?ip=0&data=", - engage: "https://api.mixpanel.com/engage/?ip=0&data=" -// } + track: "https://api.mixpanel.com/track/?ip=0&data=" }; logger.log('info', "Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); - logger.log('info', "Mixpanel Add Engage Data: "+JSON.stringify(mixAddEngage)); - logger.log('info', "Mixpanel Set Engage Data: "+JSON.stringify(mixSetEngage)); logger.log('debug', "Mixpanel Tracking Post Output: "+mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); - logger.log('debug', "Mixpanel Add Engage Post Output: "+mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage)))); - logger.log('debug', "Mixpanel Set Engage Post Output: "+mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage)))); // Post Data request.post(mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))), function(error, resp, body) { @@ -426,18 +230,6 @@ app.post('/collect', function(req, res){ logger.log('error','Mixpanel Error: '+JSON.stringify(error)); } }); - request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixAddEngage))), function(error, resp, body) { - logger.log('debug', 'Mixpanel Engage Response Debug: '+JSON.stringify(resp)); - if(error) { - logger.log('error', 'Mixpanel Error: '+JSON.stringify(error)); - } - }); - request.post(mixpanel_url.engage + encodeURIComponent(base64.encode(JSON.stringify(mixSetEngage))), function(error, resp, body) { - logger.log('debug', 'Mixpanel Engage Response Debug: '+JSON.stringify(resp)); - if(error) { - logger.log('error', 'Mixpanel Error: '+JSON.stringify(error)); - } - }); } else { logger.log('info', "Mixpanel token not defined as environment variable"); } @@ -445,6 +237,8 @@ app.post('/collect', function(req, res){ // DEBUG LOGGING logger.log('info', "Raw Slack Webhook Post: "+JSON.stringify(req.body)); + + res.send("OK") }); //Start Server diff --git a/package.json b/package.json index 295492d..49c6555 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,12 @@ { "name": "SlackAlytics", - "version": "1.1.0", + "version": "1.2.0", "description": "Integration with analytics tools to track Slack usage", + "repository": { + "type": "git", + "url": "git+https://github.com/lisensee/slackalytics" + }, + "license": "MIT", "main": "app.js", "dependencies": { "express": "^4.12.3", From 5dd26d03085bbad551374d24bc0ddd39eb30b79c Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 7 Jul 2018 21:13:20 -0700 Subject: [PATCH 53/90] general clean up, quieting metrics not used, event label no longer include message --- app.js | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/app.js b/app.js index da6f5ad..aef1f0b 100644 --- a/app.js +++ b/app.js @@ -10,7 +10,7 @@ var env_var = { mongo_port: process.env.MONGO_PORT_PROD, mongo_db: process.env.MONGO_DB_PROD, ga_key: process.env.GOOGLE_ANALYTICS_PROD, - localytics_key: process.env.LOCALYTICS_PROD, +// localytics_key: process.env.LOCALYTICS_PROD, mixpanel_token: process.env.MIXPANEL_PROD, logentries_token: process.env.LOGENTRIES_PROD }; @@ -95,7 +95,7 @@ app.post('/collect', function(req, res){ function searchM(regex){ var searchStr = msgText.match(regex); - if(searchStr != null){ + if(searchStr !== null){ return searchStr.length; } return 0; @@ -103,17 +103,19 @@ app.post('/collect', function(req, res){ function searchS(regex){ var searchStr = msgText.split(regex); - if(searchStr != undefined){ + if(searchStr !== undefined){ return searchStr.length; } return 0; } var wordCount = searchS(/\s+\b/); - var emojiCount = searchM(/:[a-z_0-9]*:/g); + var emojiCount = searchM(/:[a-z_0-9_-]*:/g); var exclaCount = searchM(/!/g); var questionMark = searchM(/\?/g); - var elipseCount = searchM(/\.\.\./g); + var elipsisCount = searchM(/\.\.\./g); + var alertCount = searchM(/ Date: Sun, 8 Jul 2018 13:24:09 -0700 Subject: [PATCH 54/90] include segmentio package --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 49c6555..5d4c96c 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "moment": "^2.4.0", "node-uuid": "^1.4.0", "mongodb": "~2.0", - "le_node": "~1.1" + "le_node": "~1.1", + "analytics-node": "^3.0.0" }, "scripts": { "start": "node app.js" From 90ec3c6cad28eb7c1868730056d6b3970f3d5b3e Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 8 Jul 2018 14:03:10 -0700 Subject: [PATCH 55/90] Date/Time for ping --- app.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app.js b/app.js index aef1f0b..d206070 100644 --- a/app.js +++ b/app.js @@ -65,6 +65,29 @@ base64.decode = function (encoded) { return new Buffer(encoded || '', 'base64').toString('utf8'); }; +function getDateTime() { + var date = new Date(); + + var hour = date.getHours(); + hour = (hour < 10 ? "0" : "") + hour; + + var min = date.getMinutes(); + min = (min < 10 ? "0" : "") + min; + + var sec = date.getSeconds(); + sec = (sec < 10 ? "0" : "") + sec; + + var year = date.getFullYear(); + + var month = date.getMonth() + 1; + month = (month < 10 ? "0" : "") + month; + + var day = date.getDate(); + day = (day < 10 ? "0" : "") + day; + + return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec; +}; + //Routes app.get('/', function(req, res){ @@ -73,6 +96,7 @@ app.get('/', function(req, res){ app.get('/ping', function(req, res){ res.send('I\'m alive!'); + res.send(getDateTime()); }); app.post('/collect', function(req, res){ From 8f26eb13dcc63218c73dbe8715135d0fb690b866 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 8 Jul 2018 14:05:08 -0700 Subject: [PATCH 56/90] oops, semicolon --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index d206070..6c546b8 100644 --- a/app.js +++ b/app.js @@ -96,7 +96,7 @@ app.get('/', function(req, res){ app.get('/ping', function(req, res){ res.send('I\'m alive!'); - res.send(getDateTime()); + res.send(getDateTime();); }); app.post('/collect', function(req, res){ From e5e6bc6112cb4cc3148e3806be4e7ad623b656d4 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 8 Jul 2018 14:06:48 -0700 Subject: [PATCH 57/90] - --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 6c546b8..64d2848 100644 --- a/app.js +++ b/app.js @@ -96,7 +96,7 @@ app.get('/', function(req, res){ app.get('/ping', function(req, res){ res.send('I\'m alive!'); - res.send(getDateTime();); +/* res.send(getDateTime()); */ }); app.post('/collect', function(req, res){ From f2241c0c6981a6dd3096d88efbdbe3f6fdb44487 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 8 Jul 2018 14:16:05 -0700 Subject: [PATCH 58/90] Date Time changes --- app.js | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/app.js b/app.js index 64d2848..0e69eca 100644 --- a/app.js +++ b/app.js @@ -26,6 +26,12 @@ var moment = require('moment'); var uuid = require('node-uuid'); var mongodb = require('mongodb'); var logentries = require('le_node'); +var dateTime = require('node-datetime'); + + +//Date Time +var dt = dateTime.create(); +var DTformatted = dt.format('Y-m-d H:M:S'); //Server Details var app = express(); @@ -65,29 +71,6 @@ base64.decode = function (encoded) { return new Buffer(encoded || '', 'base64').toString('utf8'); }; -function getDateTime() { - var date = new Date(); - - var hour = date.getHours(); - hour = (hour < 10 ? "0" : "") + hour; - - var min = date.getMinutes(); - min = (min < 10 ? "0" : "") + min; - - var sec = date.getSeconds(); - sec = (sec < 10 ? "0" : "") + sec; - - var year = date.getFullYear(); - - var month = date.getMonth() + 1; - month = (month < 10 ? "0" : "") + month; - - var day = date.getDate(); - day = (day < 10 ? "0" : "") + day; - - return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec; -}; - //Routes app.get('/', function(req, res){ @@ -96,7 +79,7 @@ app.get('/', function(req, res){ app.get('/ping', function(req, res){ res.send('I\'m alive!'); -/* res.send(getDateTime()); */ + console.log(DTformatted); }); app.post('/collect', function(req, res){ From e6c9855e57abcaa3a3345310a73a8c705df1a057 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 8 Jul 2018 14:18:19 -0700 Subject: [PATCH 59/90] include DT package --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 5d4c96c..d5c78e8 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "node-uuid": "^1.4.0", "mongodb": "~2.0", "le_node": "~1.1", - "analytics-node": "^3.0.0" + "analytics-node": "^3.0.0", + "node-datetime": "^2.0.0" }, "scripts": { "start": "node app.js" From a05edcffd285a82e7a22425a3d756d453efba88b Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 8 Jul 2018 14:20:58 -0700 Subject: [PATCH 60/90] DT formtting --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 0e69eca..6356f40 100644 --- a/app.js +++ b/app.js @@ -79,7 +79,7 @@ app.get('/', function(req, res){ app.get('/ping', function(req, res){ res.send('I\'m alive!'); - console.log(DTformatted); + res.send(DTformatted + ' UTC'); }); app.post('/collect', function(req, res){ From 99d025b065d6bb39714b80f00af0e7c0264d3d3a Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 8 Jul 2018 14:22:59 -0700 Subject: [PATCH 61/90] - --- app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app.js b/app.js index 6356f40..4a0f879 100644 --- a/app.js +++ b/app.js @@ -78,8 +78,7 @@ app.get('/', function(req, res){ }); app.get('/ping', function(req, res){ - res.send('I\'m alive!'); - res.send(DTformatted + ' UTC'); + res.send('I\'m alive!' + " Ping Time: " + DTformatted + ' UTC'); }); app.post('/collect', function(req, res){ From 6952ed41f6231b4a1ded3fdc18773f12ecee3439 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 9 Jul 2018 16:49:34 -0700 Subject: [PATCH 62/90] SegmentIO Add segmentIO --- app.js | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 4a0f879..07b31f2 100644 --- a/app.js +++ b/app.js @@ -10,8 +10,8 @@ var env_var = { mongo_port: process.env.MONGO_PORT_PROD, mongo_db: process.env.MONGO_DB_PROD, ga_key: process.env.GOOGLE_ANALYTICS_PROD, -// localytics_key: process.env.LOCALYTICS_PROD, mixpanel_token: process.env.MIXPANEL_PROD, + segmentio_key: process.env.SEGMENTIO_PROD, logentries_token: process.env.LOGENTRIES_PROD }; @@ -25,6 +25,7 @@ var math = require('mathjs'); var moment = require('moment'); var uuid = require('node-uuid'); var mongodb = require('mongodb'); +var Analytics = require('analytics-node'); var logentries = require('le_node'); var dateTime = require('node-datetime'); @@ -37,6 +38,9 @@ var DTformatted = dt.format('Y-m-d H:M:S'); var app = express(); var port = process.env.PORT || 3000; +//SegmentIO +var analytics = new Analytics(env_var.segmentio_prod); + //Logentries Service var le = new logentries({ token: env_var.logentries_token @@ -247,6 +251,40 @@ app.post('/collect', function(req, res){ } } + // SEGMENTIO COLLECT AND POST + if (env_var.segmentio_prod) { + analytics.identify({ + userId: user.id, + traits: { + username: user.name + } + }); + + analytics.track({ + userId: user.id, + event: 'message posted', + properties: { + message: msgText, + channel: channel.name + " (" + channel.id + ")", + user: user.name + " (" + user.id + ")", + time: msgTime, + os: "Slack", + browser: "Slack", + current_url: "https://"+teamDomain+".slack.com/" + channel.name, + lib_version: "Slack 1.2.0" + } + }); + + analytics.screen({ + userId: user.id, + name: channel.name + " (" + channel.id + ")" + }); + } else { + logger.log('info', "SegmentIO token not defined as environment variable"); + } + } + + // DEBUG LOGGING logger.log('info', "Raw Slack Webhook Post: "+JSON.stringify(req.body)); From db0a2de4437db58d1b00b52247f98bed1b5d12f7 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 9 Jul 2018 16:55:31 -0700 Subject: [PATCH 63/90] - --- app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app.js b/app.js index 07b31f2..b3392e6 100644 --- a/app.js +++ b/app.js @@ -280,9 +280,8 @@ app.post('/collect', function(req, res){ name: channel.name + " (" + channel.id + ")" }); } else { - logger.log('info', "SegmentIO token not defined as environment variable"); + logger.log("info", "SegmentIO token not defined as environment variable"); } - } // DEBUG LOGGING From aef1b95e969c9be3e17568adbe46b20a7d57df46 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 9 Jul 2018 16:59:04 -0700 Subject: [PATCH 64/90] fix env var segmentio key --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index b3392e6..192f692 100644 --- a/app.js +++ b/app.js @@ -39,7 +39,7 @@ var app = express(); var port = process.env.PORT || 3000; //SegmentIO -var analytics = new Analytics(env_var.segmentio_prod); +var analytics = new Analytics(env_var.segmentio_key); //Logentries Service var le = new logentries({ @@ -252,7 +252,7 @@ app.post('/collect', function(req, res){ } // SEGMENTIO COLLECT AND POST - if (env_var.segmentio_prod) { + if (env_var.segmentio_key) { analytics.identify({ userId: user.id, traits: { From 24b43ba0c5a3b54a5559f0fb4f7f64536dec636a Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 10 Jul 2018 16:48:29 -0700 Subject: [PATCH 65/90] Log fix & tight code remove unneeded whitespace/new lines, and fixed logging levels. --- app.js | 78 ++++++++++++++++++++-------------------------------------- 1 file changed, 27 insertions(+), 51 deletions(-) diff --git a/app.js b/app.js index 192f692..062ed95 100644 --- a/app.js +++ b/app.js @@ -10,12 +10,11 @@ var env_var = { mongo_port: process.env.MONGO_PORT_PROD, mongo_db: process.env.MONGO_DB_PROD, ga_key: process.env.GOOGLE_ANALYTICS_PROD, - mixpanel_token: process.env.MIXPANEL_PROD, + mixpanel_key: process.env.MIXPANEL_PROD, segmentio_key: process.env.SEGMENTIO_PROD, - logentries_token: process.env.LOGENTRIES_PROD + logentries_key: process.env.LOGENTRIES_PROD }; - //Set up Reqs var express = require('express'); var bodyParser = require('body-parser'); @@ -29,7 +28,6 @@ var Analytics = require('analytics-node'); var logentries = require('le_node'); var dateTime = require('node-datetime'); - //Date Time var dt = dateTime.create(); var DTformatted = dt.format('Y-m-d H:M:S'); @@ -43,7 +41,7 @@ var analytics = new Analytics(env_var.segmentio_key); //Logentries Service var le = new logentries({ - token: env_var.logentries_token + token: env_var.logentries_key }); //Logger @@ -70,12 +68,10 @@ var base64 = exports; base64.encode = function (unencoded) { return new Buffer(unencoded || '').toString('base64'); }; - base64.decode = function (encoded) { return new Buffer(encoded || '', 'base64').toString('utf8'); }; - //Routes app.get('/', function(req, res){ res.send('here'); @@ -99,7 +95,9 @@ app.post('/collect', function(req, res){ var teamDomain = req.body.team_domain; - var msgTime = math.round(req.body.timestamp, 0); //in epoch + var msgTime = math.round(req.body.timestamp, 0); //in epoch by day + + var msgSeconds = req.body.timestamp.replace(/./g,''); //in epoch by millisecond var msgText = req.body.text; @@ -133,24 +131,17 @@ app.post('/collect', function(req, res){ var collection_name = "posts"; mongodb.MongoClient.connect(url, function (err, db) { - if (err) { - logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err)); - } else { - logger.log('debug','Mongo: Connection established to '+url); + if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} + else {logger.log('debug','Mongo: Connection established to '+url); var collection = db.collection(collection_name); // Insert post contents collection.insert(req.body, function (err, result) { - if (err) { - logger.log('error', 'Mongo Error: '+JSON.stringify(err)); - } else { - logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); - } + if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} + else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } //Close connection db.close(function (err) { - if (err) { - logger.log('error','Mongo Error: '+JSON.stringify(err)); - } + if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} }); }); } @@ -190,26 +181,20 @@ app.post('/collect', function(req, res){ ev: 1 }; - var google_url = { - track: "https://www.google-analytics.com/collect?" - }; + var google_url = {track: "https://www.google-analytics.com/collect?"}; logger.log('debug', "Google Analytics Data: "+JSON.stringify(GAdata)); logger.log('debug', "Google Analytics Tracking Post Output: "+google_url.track + qs.stringify(GAdata)); // Post Data request.post(google_url.track + qs.stringify(GAdata), function(error, resp, body) { - if(error) { - logger.log('error', 'Google Analytics Error: '+JSON.stringify(error)); - } - logger.log('debug', 'Google Analytics Tracking Response Debug: '+JSON.stringify(resp)); + if(error) {logger.log('error', 'Google Analytics Error: '+JSON.stringify(error));} + else {logger.log('debug', 'Google Analytics Tracking Response Debug: '+JSON.stringify(resp));} }); - } else { - logger.log('info',"Google Analytics account ID not defined as environment variable"); - } + } else {logger.log('error',"Google Analytics account ID not defined as environment variable");} // MIXPANEL COLLECT AND POST - if (env_var.mixpanel_token) { + if (env_var.mixpanel_key) { var mixTrack = { event: "message posted", properties: { @@ -228,28 +213,22 @@ app.post('/collect', function(req, res){ channel: channel.name + " (" + channel.id + ")", user: user.name + " (" + user.id + ")", time: msgTime, - token: env_var.mixpanel_token + seconds: msgSeconds, + token: env_var.mixpanel_key } }; - var mixpanel_url = { - track: "https://api.mixpanel.com/track/?ip=0&data=" - }; + var mixpanel_url = {track: "https://api.mixpanel.com/track/?ip=0&data="}; - logger.log('info', "Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); + logger.log('debug', "Mixpanel Tracking Data: "+JSON.stringify(mixTrack)); logger.log('debug', "Mixpanel Tracking Post Output: "+mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack)))); // Post Data request.post(mixpanel_url.track + encodeURIComponent(base64.encode(JSON.stringify(mixTrack))), function(error, resp, body) { - logger.log('debug', 'Mixpanel Tracking Response Debug: '+JSON.stringify(resp)); - if(error) { - logger.log('error','Mixpanel Error: '+JSON.stringify(error)); - } + if(error) {logger.log('error','Mixpanel Error: '+JSON.stringify(error));} + else {logger.log('debug', 'Mixpanel Tracking Response Debug: '+JSON.stringify(resp));} }); - } else { - logger.log('info', "Mixpanel token not defined as environment variable"); - } - } + } else {logger.log('error', "Mixpanel account ID not defined as environment variable");} // SEGMENTIO COLLECT AND POST if (env_var.segmentio_key) { @@ -268,6 +247,7 @@ app.post('/collect', function(req, res){ channel: channel.name + " (" + channel.id + ")", user: user.name + " (" + user.id + ")", time: msgTime, + seconds: msgSeconds, os: "Slack", browser: "Slack", current_url: "https://"+teamDomain+".slack.com/" + channel.name, @@ -279,10 +259,8 @@ app.post('/collect', function(req, res){ userId: user.id, name: channel.name + " (" + channel.id + ")" }); - } else { - logger.log("info", "SegmentIO token not defined as environment variable"); - } - + } else { logger.log("error", "SegmentIO token not defined as environment variable");} + } // DEBUG LOGGING logger.log('info', "Raw Slack Webhook Post: "+JSON.stringify(req.body)); @@ -291,6 +269,4 @@ app.post('/collect', function(req, res){ }); //Start Server -app.listen(port, function () { - logger.log('info', 'Listening on port ' + port); -}); +app.listen(port, function () {logger.log('info', 'Listening on port ' + port);}); From 47c52f8623801d1bb8f64d8e19f7ec6e2c6eb2c3 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 22 Jan 2019 12:58:49 -0800 Subject: [PATCH 66/90] Ping Date Time --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 062ed95..7bd8086 100644 --- a/app.js +++ b/app.js @@ -78,7 +78,7 @@ app.get('/', function(req, res){ }); app.get('/ping', function(req, res){ - res.send('I\'m alive!' + " Ping Time: " + DTformatted + ' UTC'); + res.send('I\'m alive!' + " Ping Time: " + dt); }); app.post('/collect', function(req, res){ From b370c959dc2e19b0de8045146352c3d8c41a2fa5 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 22 Jan 2019 13:05:13 -0800 Subject: [PATCH 67/90] D/T & math security update --- app.js | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 7bd8086..3e57453 100644 --- a/app.js +++ b/app.js @@ -78,7 +78,7 @@ app.get('/', function(req, res){ }); app.get('/ping', function(req, res){ - res.send('I\'m alive!' + " Ping Time: " + dt); + res.send('I\'m alive!' + " Ping Time: " + new Date().toISOString()); }); app.post('/collect', function(req, res){ diff --git a/package.json b/package.json index d5c78e8..5134eb4 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "body-parser": "^1.12.2", "request": "^2.54.0", "querystring": "^0.2.0", - "mathjs": "^2.0.0", + "mathjs": "~3.17.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", "mongodb": "~2.0", From 836ecc5f67109e0285f5ead9c12513b0c297d934 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 22 Jan 2019 13:20:13 -0800 Subject: [PATCH 68/90] remove datetime and cleanup datetime formatting --- app.js | 7 +------ package.json | 3 +-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/app.js b/app.js index 3e57453..ae21e7c 100644 --- a/app.js +++ b/app.js @@ -26,11 +26,6 @@ var uuid = require('node-uuid'); var mongodb = require('mongodb'); var Analytics = require('analytics-node'); var logentries = require('le_node'); -var dateTime = require('node-datetime'); - -//Date Time -var dt = dateTime.create(); -var DTformatted = dt.format('Y-m-d H:M:S'); //Server Details var app = express(); @@ -78,7 +73,7 @@ app.get('/', function(req, res){ }); app.get('/ping', function(req, res){ - res.send('I\'m alive!' + " Ping Time: " + new Date().toISOString()); + res.send('I\'m alive!' + " Ping Time: " + new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')); }); app.post('/collect', function(req, res){ diff --git a/package.json b/package.json index 5134eb4..71d55fc 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,7 @@ "node-uuid": "^1.4.0", "mongodb": "~2.0", "le_node": "~1.1", - "analytics-node": "^3.0.0", - "node-datetime": "^2.0.0" + "analytics-node": "^3.0.0" }, "scripts": { "start": "node app.js" From b2a7ba5948ce8f409be53305250b4b6eb7bbd932 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 27 Apr 2020 14:02:25 -0700 Subject: [PATCH 69/90] fix Buffer change Buffer to add .from --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index ae21e7c..e7c9942 100644 --- a/app.js +++ b/app.js @@ -61,10 +61,10 @@ app.use(bodyParser.json({ type: 'application/vnd.api+json' })); //Simple Base64 handler var base64 = exports; base64.encode = function (unencoded) { - return new Buffer(unencoded || '').toString('base64'); + return new Buffer.from(unencoded || '').toString('base64'); }; base64.decode = function (encoded) { - return new Buffer(encoded || '', 'base64').toString('utf8'); + return new Buffer.from(encoded || '', 'base64').toString('utf8'); }; //Routes From ea67d744cefed30e92295e1a650109e94cefece5 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 27 Apr 2020 20:21:14 -0700 Subject: [PATCH 70/90] mongodb clusters support for mongodb clusters using +srv --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index e7c9942..fea444b 100644 --- a/app.js +++ b/app.js @@ -122,7 +122,7 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { - var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; + var url = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; var collection_name = "posts"; mongodb.MongoClient.connect(url, function (err, db) { From 5a0a01709eeb92d0049172bd81cf994cc547159e Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 27 Apr 2020 20:27:09 -0700 Subject: [PATCH 71/90] Upgrade mongo version increase mongo version above 3.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 71d55fc..b456ba0 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "mathjs": "~3.17.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", - "mongodb": "~2.0", + "mongodb": "^3.5", "le_node": "~1.1", "analytics-node": "^3.0.0" }, From 743c8f8cf879706ab656c8dfd6f1bb2d6c4aac77 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 27 Apr 2020 20:55:26 -0700 Subject: [PATCH 72/90] new mongo connection just trying a new mongo connection method --- app.js | 59 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/app.js b/app.js index fea444b..14c287f 100644 --- a/app.js +++ b/app.js @@ -122,27 +122,46 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { - var url = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; - var collection_name = "posts"; + // var url = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+"/"+env_var.mongo_db+"?retryWrites=true&w=majority"; + // var collection_name = "posts"; - mongodb.MongoClient.connect(url, function (err, db) { - if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} - else {logger.log('debug','Mongo: Connection established to '+url); - var collection = db.collection(collection_name); - - // Insert post contents - collection.insert(req.body, function (err, result) { - if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} - else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } - //Close connection - db.close(function (err) { - if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} - }); - }); - } - } - ); - } + const MongoClient = require('mongodb').MongoClient; + const uri = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+"/"+env_var.mongo_db+"?retryWrites=true&w=majority"; + const client = new MongoClient(uri, { useNewUrlParser: true }); + client.connect(err => { + const collection = client.db(env_var.mongo_db).collection(collection_name); + if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} + else {logger.log('debug','Mongo: Connection established to '+url); + collection.insert(req.body, function (err, result) { + if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} + else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result));} + client.close(function (err) { + if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} + }); + }); +}); + }; +}); +} + +// mongodb.MongoClient.connect(url, function (err, db) { +// if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} +// else {logger.log('debug','Mongo: Connection established to '+url); +// var collection = db.collection(collection_name); +// +// // Insert post contents +// collection.insert(req.body, function (err, result) { +// if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} +// else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } +// //Close connection +// db.close(function (err) { +// if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} +// }); +// }); +// } +// } +// ); +// } if (env_var.analytics_track) { // GOOGLE ANALYTICS COLLECT AND POST From a09b27adabdb644057f965d4abbae3c87fbb93a7 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 27 Apr 2020 20:55:26 -0700 Subject: [PATCH 73/90] Revert "new mongo connection" This reverts commit 743c8f8cf879706ab656c8dfd6f1bb2d6c4aac77. --- app.js | 59 ++++++++++++++++++++-------------------------------------- 1 file changed, 20 insertions(+), 39 deletions(-) diff --git a/app.js b/app.js index 14c287f..fea444b 100644 --- a/app.js +++ b/app.js @@ -122,46 +122,27 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { - // var url = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+"/"+env_var.mongo_db+"?retryWrites=true&w=majority"; - // var collection_name = "posts"; + var url = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; + var collection_name = "posts"; - const MongoClient = require('mongodb').MongoClient; - const uri = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+"/"+env_var.mongo_db+"?retryWrites=true&w=majority"; - const client = new MongoClient(uri, { useNewUrlParser: true }); - client.connect(err => { - const collection = client.db(env_var.mongo_db).collection(collection_name); - if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} - else {logger.log('debug','Mongo: Connection established to '+url); - collection.insert(req.body, function (err, result) { - if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} - else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result));} - client.close(function (err) { - if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} - }); - }); -}); - }; -}); -} - -// mongodb.MongoClient.connect(url, function (err, db) { -// if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} -// else {logger.log('debug','Mongo: Connection established to '+url); -// var collection = db.collection(collection_name); -// -// // Insert post contents -// collection.insert(req.body, function (err, result) { -// if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} -// else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } -// //Close connection -// db.close(function (err) { -// if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} -// }); -// }); -// } -// } -// ); -// } + mongodb.MongoClient.connect(url, function (err, db) { + if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} + else {logger.log('debug','Mongo: Connection established to '+url); + var collection = db.collection(collection_name); + + // Insert post contents + collection.insert(req.body, function (err, result) { + if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} + else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } + //Close connection + db.close(function (err) { + if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} + }); + }); + } + } + ); + } if (env_var.analytics_track) { // GOOGLE ANALYTICS COLLECT AND POST From e1f7500adb71dc588f66507530a348321b10b629 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Mon, 27 Apr 2020 21:07:14 -0700 Subject: [PATCH 74/90] put back old mongo stuff --- app.js | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index fea444b..e7c9942 100644 --- a/app.js +++ b/app.js @@ -122,7 +122,7 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { - var url = "mongodb+srv://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; + var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; var collection_name = "posts"; mongodb.MongoClient.connect(url, function (err, db) { diff --git a/package.json b/package.json index b456ba0..71d55fc 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "mathjs": "~3.17.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", - "mongodb": "^3.5", + "mongodb": "~2.0", "le_node": "~1.1", "analytics-node": "^3.0.0" }, From d75399829951c19791645793cd9db50b22d41413 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Thu, 30 Apr 2020 17:28:25 -0700 Subject: [PATCH 75/90] upgrade mongo connector upgrade the mongodb connector and try cluestered servers shard by shard, before upgrading to mongodb3 driver --- app.js | 9 ++++++++- package.json | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index e7c9942..19e1bbe 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,13 @@ var env_var = { mongo_server: process.env.MONGO_SERVER_PROD, mongo_port: process.env.MONGO_PORT_PROD, mongo_db: process.env.MONGO_DB_PROD, + mongo_shard_1: process.env.MONGO_SHARD_ONE, + mongo_shard_1_port: process.env.MONGO_SHARD_ONE_PORT, + mongo_shard_2: process.env.MONGO_SHARD_TWO, + mongo_shard_2_port: process.env.MONGO_SHARD_TWO_PORT, + mongo_shard_3: process.env.MONGO_SHARD_THREE, + mongo_shard_3_port: process.env.MONGO_SHARD_THREE_PORT, + mongo_shard_query: process.env.MONGO_QUERY, ga_key: process.env.GOOGLE_ANALYTICS_PROD, mixpanel_key: process.env.MIXPANEL_PROD, segmentio_key: process.env.SEGMENTIO_PROD, @@ -122,7 +129,7 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { - var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; + var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_db+"?"+env_var.mongo_shard_query; var collection_name = "posts"; mongodb.MongoClient.connect(url, function (err, db) { diff --git a/package.json b/package.json index 71d55fc..8b1aa4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SlackAlytics", - "version": "1.2.0", + "version": "1.5.0", "description": "Integration with analytics tools to track Slack usage", "repository": { "type": "git", @@ -16,7 +16,7 @@ "mathjs": "~3.17.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", - "mongodb": "~2.0", + "mongodb": "~2.2", "le_node": "~1.1", "analytics-node": "^3.0.0" }, From 388645c1fd1bd3c60fb3dd2a89b1f43f0abb6b85 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Thu, 30 Apr 2020 17:31:22 -0700 Subject: [PATCH 76/90] mongodb2.2+ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8b1aa4a..d0a025f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "mathjs": "~3.17.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", - "mongodb": "~2.2", + "mongodb": "^2.2", "le_node": "~1.1", "analytics-node": "^3.0.0" }, From f21af8dba721cb4e187c74d5f75ee697afdcf6c0 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Fri, 1 May 2020 16:21:34 -0700 Subject: [PATCH 77/90] switch back to old db setup --- app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 19e1bbe..758854f 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,7 @@ var env_var = { mongo_server: process.env.MONGO_SERVER_PROD, mongo_port: process.env.MONGO_PORT_PROD, mongo_db: process.env.MONGO_DB_PROD, + mongo_cluster_db: process.env.MONGO_CLUSTER_DB, mongo_shard_1: process.env.MONGO_SHARD_ONE, mongo_shard_1_port: process.env.MONGO_SHARD_ONE_PORT, mongo_shard_2: process.env.MONGO_SHARD_TWO, @@ -129,7 +130,8 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { - var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_db+"?"+env_var.mongo_shard_query; +// var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_cluster_db+"?"+env_var.mongo_shard_query; + var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; var collection_name = "posts"; mongodb.MongoClient.connect(url, function (err, db) { From 9433481fc55776979d6a7c74c91a5e11ce988b06 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Fri, 1 May 2020 16:33:41 -0700 Subject: [PATCH 78/90] back to mongo cluster --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 758854f..3efbf8e 100644 --- a/app.js +++ b/app.js @@ -130,8 +130,8 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { -// var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_cluster_db+"?"+env_var.mongo_shard_query; - var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; + var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_cluster_db+"?"+env_var.mongo_shard_query; +// var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; var collection_name = "posts"; mongodb.MongoClient.connect(url, function (err, db) { From cb9e7ee9263e889314072f2c69b714092855765a Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 15 Sep 2020 10:12:12 -0700 Subject: [PATCH 79/90] Mongo Security Fix Upgraded mongodb requirement from 2.2 to 3.1.13 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d0a025f..699baf2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SlackAlytics", - "version": "1.5.0", + "version": "1.5.1", "description": "Integration with analytics tools to track Slack usage", "repository": { "type": "git", @@ -16,7 +16,7 @@ "mathjs": "~3.17.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", - "mongodb": "^2.2", + "mongodb": "~>3.1.13", "le_node": "~1.1", "analytics-node": "^3.0.0" }, From 6a725b229afefacf4e3809a2eac3b52ec8e8d8ad Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 15 Sep 2020 10:23:26 -0700 Subject: [PATCH 80/90] Rollback --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d0a025f..699baf2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SlackAlytics", - "version": "1.5.0", + "version": "1.5.1", "description": "Integration with analytics tools to track Slack usage", "repository": { "type": "git", @@ -16,7 +16,7 @@ "mathjs": "~3.17.0", "moment": "^2.4.0", "node-uuid": "^1.4.0", - "mongodb": "^2.2", + "mongodb": "~>3.1.13", "le_node": "~1.1", "analytics-node": "^3.0.0" }, From 8df765716c2e3a74a7c02e9d912f036e7b3070d9 Mon Sep 17 00:00:00 2001 From: Simo Ahava Date: Tue, 27 Oct 2020 22:39:56 +0200 Subject: [PATCH 81/90] Fix le_node error levels --- app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 3efbf8e..f08d0e0 100644 --- a/app.js +++ b/app.js @@ -57,7 +57,9 @@ logger.log = function(level, message) { message = JSON.stringify(message); } console.log(level+': '+message); - le.log(level, message); + if (level === 'error') { le.log('err', message); } + else if (level === 'warn') { le.log('warning', message); } + else { le.log(level, message); } } }; From b11e09c1abda44fb3f8f1594abc6a517747cb34e Mon Sep 17 00:00:00 2001 From: Simo Ahava Date: Tue, 27 Oct 2020 22:49:43 +0200 Subject: [PATCH 82/90] Update mongodb and refactor code to use latest client. --- app.js | 9 ++++++--- package.json | 12 ++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app.js b/app.js index f08d0e0..24f38d3 100644 --- a/app.js +++ b/app.js @@ -132,14 +132,17 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { - var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_cluster_db+"?"+env_var.mongo_shard_query; +// var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_cluster_db+"?"+env_var.mongo_shard_query; // var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; + var url = "mongodb+srv://"+env_var.mongo_user+":"+encodeURIComponent(env_var.mongo_password)+"@measurechat.rz4ev.mongodb.net/"+env_var.mongo_cluster_db+"?retryWrites=true&w=majority"; var collection_name = "posts"; + + var client = new mongodb.MongoClient(url, { useNewUrlParser: true }); - mongodb.MongoClient.connect(url, function (err, db) { + client.connect(function(err) { if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} else {logger.log('debug','Mongo: Connection established to '+url); - var collection = db.collection(collection_name); + var collection = client.db(env_var.mongo_cluster_db).collection(collection_name); // Insert post contents collection.insert(req.body, function (err, result) { diff --git a/package.json b/package.json index 699baf2..59c8088 100644 --- a/package.json +++ b/package.json @@ -9,16 +9,16 @@ "license": "MIT", "main": "app.js", "dependencies": { - "express": "^4.12.3", + "analytics-node": "^3.0.0", "body-parser": "^1.12.2", - "request": "^2.54.0", - "querystring": "^0.2.0", + "express": "^4.12.3", + "le_node": "~1.1", "mathjs": "~3.17.0", "moment": "^2.4.0", + "mongodb": "^3.6.2", "node-uuid": "^1.4.0", - "mongodb": "~>3.1.13", - "le_node": "~1.1", - "analytics-node": "^3.0.0" + "querystring": "^0.2.0", + "request": "^2.54.0" }, "scripts": { "start": "node app.js" From c2548aa83dc549c337d9df8c932c9b239f1f1b3c Mon Sep 17 00:00:00 2001 From: Simo Ahava Date: Tue, 27 Oct 2020 23:00:06 +0200 Subject: [PATCH 83/90] Update mongodb to use .insertOne() --- app.js | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/app.js b/app.js index 24f38d3..aa627dd 100644 --- a/app.js +++ b/app.js @@ -136,26 +136,24 @@ app.post('/collect', function(req, res){ // var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; var url = "mongodb+srv://"+env_var.mongo_user+":"+encodeURIComponent(env_var.mongo_password)+"@measurechat.rz4ev.mongodb.net/"+env_var.mongo_cluster_db+"?retryWrites=true&w=majority"; var collection_name = "posts"; - - var client = new mongodb.MongoClient(url, { useNewUrlParser: true }); - client.connect(function(err) { - if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} - else {logger.log('debug','Mongo: Connection established to '+url); - var collection = client.db(env_var.mongo_cluster_db).collection(collection_name); - - // Insert post contents - collection.insert(req.body, function (err, result) { - if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} - else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } - //Close connection - db.close(function (err) { - if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} - }); - }); - } - } - ); + mongodb.MongoClient.connect(url, function(err, client) { + if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} + else { + logger.log('debug','Mongo: Connection established to '+url); + var collection = client.db(env_var.mongo_cluster_db).collection(collection_name); + + // Insert post contents + collection.insertOne(req.body, function (err, result) { + if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} + else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } + //Close connection + db.close(function (err) { + if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} + }); + }); + } + }); } if (env_var.analytics_track) { From f90d9be72b0dd4759cb76751a8c1839c4bd29e21 Mon Sep 17 00:00:00 2001 From: Simo Ahava Date: Tue, 27 Oct 2020 23:03:04 +0200 Subject: [PATCH 84/90] Fix missing db reference --- app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index aa627dd..3790875 100644 --- a/app.js +++ b/app.js @@ -141,7 +141,8 @@ app.post('/collect', function(req, res){ if (err) {logger.log('error', 'Mongo Error: Unable to connect to the server. Error: ' + JSON.stringify(err));} else { logger.log('debug','Mongo: Connection established to '+url); - var collection = client.db(env_var.mongo_cluster_db).collection(collection_name); + var db = client.db(env_var.mongo_cluster_db); + var collection = db.collection(collection_name); // Insert post contents collection.insertOne(req.body, function (err, result) { From ddaf1206959879b5b53552a56e5e4ae103ad1bbb Mon Sep 17 00:00:00 2001 From: Simo Ahava Date: Tue, 27 Oct 2020 23:05:12 +0200 Subject: [PATCH 85/90] Switch db.close() to client.close() --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 3790875..ea2bcb0 100644 --- a/app.js +++ b/app.js @@ -149,7 +149,7 @@ app.post('/collect', function(req, res){ if (err) {logger.log('error', 'Mongo Error: '+JSON.stringify(err));} else {logger.log('debug', 'Mongo: '+result.length+' inserted documents into the '+collection_name+' collection. The documents inserted with "_id" are: '+JSON.stringify(result)); } //Close connection - db.close(function (err) { + client.close(function (err) { if (err) {logger.log('error','Mongo Error: '+JSON.stringify(err));} }); }); From ebc8926260e4b193a023ce834828813653c6c242 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 27 Jul 2021 11:17:09 -0700 Subject: [PATCH 86/90] Update mathjs version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 59c8088..1cce39c 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "body-parser": "^1.12.2", "express": "^4.12.3", "le_node": "~1.1", - "mathjs": "~3.17.0", + "mathjs": "~>7.5.1", "moment": "^2.4.0", "mongodb": "^3.6.2", "node-uuid": "^1.4.0", From 4164eacaa3f9bfb7a1595b4ee42e7c95eb843747 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 27 Jul 2021 11:23:55 -0700 Subject: [PATCH 87/90] Upgrade le_node version --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1cce39c..8eae46e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SlackAlytics", - "version": "1.5.1", + "version": "1.5.3", "description": "Integration with analytics tools to track Slack usage", "repository": { "type": "git", @@ -12,7 +12,7 @@ "analytics-node": "^3.0.0", "body-parser": "^1.12.2", "express": "^4.12.3", - "le_node": "~1.1", + "le_node": "~>1.8", "mathjs": "~>7.5.1", "moment": "^2.4.0", "mongodb": "^3.6.2", From 2f43234f1be0a16f281ecd2af6a7a99d6e9211ca Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 27 Jul 2021 11:29:57 -0700 Subject: [PATCH 88/90] Patch lodash --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8eae46e..1968f24 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SlackAlytics", - "version": "1.5.3", + "version": "1.5.4", "description": "Integration with analytics tools to track Slack usage", "repository": { "type": "git", @@ -12,6 +12,7 @@ "analytics-node": "^3.0.0", "body-parser": "^1.12.2", "express": "^4.12.3", + "lodash": "~>4.17.21", "le_node": "~>1.8", "mathjs": "~>7.5.1", "moment": "^2.4.0", From 6141e15bb5972ecd0647571ee3aedb9bbcf05e77 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 27 Jul 2021 11:33:37 -0700 Subject: [PATCH 89/90] Rollback lodash --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 1968f24..8eae46e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SlackAlytics", - "version": "1.5.4", + "version": "1.5.3", "description": "Integration with analytics tools to track Slack usage", "repository": { "type": "git", @@ -12,7 +12,6 @@ "analytics-node": "^3.0.0", "body-parser": "^1.12.2", "express": "^4.12.3", - "lodash": "~>4.17.21", "le_node": "~>1.8", "mathjs": "~>7.5.1", "moment": "^2.4.0", From 31530655a94565c7370fe5d7096ee82e51eacfb7 Mon Sep 17 00:00:00 2001 From: Lee Isensee Date: Tue, 8 Nov 2022 11:29:01 -0800 Subject: [PATCH 90/90] Drop LogEntries & Env Mongo Dropping LogEntries (EOL) and move MongoDB cluster server to an env var --- app.js | 15 +++------------ package.json | 3 +-- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/app.js b/app.js index ea2bcb0..bf781dc 100644 --- a/app.js +++ b/app.js @@ -17,10 +17,10 @@ var env_var = { mongo_shard_3: process.env.MONGO_SHARD_THREE, mongo_shard_3_port: process.env.MONGO_SHARD_THREE_PORT, mongo_shard_query: process.env.MONGO_QUERY, + mongo_cluster_server: process.env.MONGO_CLUSTER_SERVER, ga_key: process.env.GOOGLE_ANALYTICS_PROD, mixpanel_key: process.env.MIXPANEL_PROD, - segmentio_key: process.env.SEGMENTIO_PROD, - logentries_key: process.env.LOGENTRIES_PROD + segmentio_key: process.env.SEGMENTIO_PROD }; //Set up Reqs @@ -33,7 +33,6 @@ var moment = require('moment'); var uuid = require('node-uuid'); var mongodb = require('mongodb'); var Analytics = require('analytics-node'); -var logentries = require('le_node'); //Server Details var app = express(); @@ -42,11 +41,6 @@ var port = process.env.PORT || 3000; //SegmentIO var analytics = new Analytics(env_var.segmentio_key); -//Logentries Service -var le = new logentries({ - token: env_var.logentries_key -}); - //Logger var logger = exports; logger.debugLevel = env_var.log_level || 'warn'; @@ -57,9 +51,6 @@ logger.log = function(level, message) { message = JSON.stringify(message); } console.log(level+': '+message); - if (level === 'error') { le.log('err', message); } - else if (level === 'warn') { le.log('warning', message); } - else { le.log(level, message); } } }; @@ -134,7 +125,7 @@ app.post('/collect', function(req, res){ if (env_var.write_mongo) { // var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_shard_1+":"+env_var.mongo_shard_1_port+","+env_var.mongo_shard_2+":"+env_var.mongo_shard_2_port+","+env_var.mongo_shard_3+":"+env_var.mongo_shard_3_port+"/"+env_var.mongo_cluster_db+"?"+env_var.mongo_shard_query; // var url = "mongodb://"+env_var.mongo_user+":"+env_var.mongo_password+"@"+env_var.mongo_server+":"+env_var.mongo_port+"/"+env_var.mongo_db; - var url = "mongodb+srv://"+env_var.mongo_user+":"+encodeURIComponent(env_var.mongo_password)+"@measurechat.rz4ev.mongodb.net/"+env_var.mongo_cluster_db+"?retryWrites=true&w=majority"; + var url = "mongodb+srv://"+env_var.mongo_user+":"+encodeURIComponent(env_var.mongo_password)+"@"+env_var.mongo_cluster_server+"/"+env_var.mongo_cluster_db+"?retryWrites=true&w=majority"; var collection_name = "posts"; mongodb.MongoClient.connect(url, function(err, client) { diff --git a/package.json b/package.json index 8eae46e..b2da050 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SlackAlytics", - "version": "1.5.3", + "version": "1.5.4", "description": "Integration with analytics tools to track Slack usage", "repository": { "type": "git", @@ -12,7 +12,6 @@ "analytics-node": "^3.0.0", "body-parser": "^1.12.2", "express": "^4.12.3", - "le_node": "~>1.8", "mathjs": "~>7.5.1", "moment": "^2.4.0", "mongodb": "^3.6.2",