Skip to content

Instantly share code, notes, and snippets.

@spark2ignite
Last active August 14, 2017 11:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spark2ignite/d9e927f589f2b3b998988b913ee27dc4 to your computer and use it in GitHub Desktop.
Save spark2ignite/d9e927f589f2b3b998988b913ee27dc4 to your computer and use it in GitHub Desktop.
How we saved over $240K per year by replacing Mixpanel with Google BigQuery, Pub/Sub, Dataflow & Kubernetes (code snippet #1)
"use strict";
require('@google/cloud-trace').start();
const fs = require('fs');
const stream = require('stream');
const PubSub = require('@google-cloud/pubsub');
const util = require("util");
const request = require("request");
const bodyParser = require("body-parser");
const pubsubClient = PubSub({});
const topicPeople = pubsubClient.topic('people');
const topicEvents = pubsubClient.topic('events');
const express = require('express');
const app = express();
app.use(bodyParser.text({type: '*/*'}));
app.use(bodyParser.text({type: '*'}));
app.use(bodyParser.text({type: ''}));
function parse(req, res, topic) {
let user_ip = req.get("X-Forwarded-For");
console.log(user_ip);
if (!user_ip) {
user_ip = req.connection.remoteAddress;
}
else {
user_ip = user_ip.split(', ')[0];
}
let msg = {
'dataset': req.params.dataset,
'server_time': new Date().getTime()/1000,
'ip': user_ip,
'raw_input': req.body
};
topic.publish(msg, (err, messageIds, apiResponse) => {
if (!!err) {
res.status(500).send(`${err}\n${apiResponse}`);
}
else {
res.status(200).send('ok');
}
});
}
app.get('/', function (req, res) {
res.send('ok')
});
app.post('/:dataset/events', function (req, res) {
parse(req, res, topicEvents);
});
app.post('/:dataset/people', function (req, res) {
parse(req, res, topicPeople);
});
app.listen(5000, function () {
console.log('App listening!')
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment