Skip to content

Instantly share code, notes, and snippets.

@mtavkhelidze
Last active September 4, 2016 12:29
Show Gist options
  • Save mtavkhelidze/ce597dc70acd91439e53591e705c7539 to your computer and use it in GitHub Desktop.
Save mtavkhelidze/ce597dc70acd91439e53591e705c7539 to your computer and use it in GitHub Desktop.
Poor man's Google Analytics with webtask.io
/*eslint no-console: 0*/
/**
Poor man's Google Analytics webtask.io Task.
Written by Misha Tavkhelidze
*/
'use strict';
var mongo = require('mongodb').MongoClient;
module.exports = (ctx, cb) => {
let getId = (qp) => {
let id = null;
try {
id = parseInt(qp);
} catch(e) {
// noop
}
return id;
};
let id = getId(ctx.query.id);
if(!id) return cb(new Error('არ გიცნობ საერთოდ!'));
if(!ctx.data.data) return cb(new Error('მითხარი რამე, რომ ჩავიწერო!'));
let data = JSON.parse(ctx.data.data);
data.ts = new Date();
mongo.connect(ctx.data.MONGO_URL, (err, db) => {
if(err) return cb(err);
if(db === null) return cb(new Error('ბაზა ვერ მოვძებნე!'));
let cname = 'user_' + id;
db.collection(cname)
.insert(data, (err, res) => {
if(err) return cb(err);
db.collection(cname).count((err, res) => {
return cb(err, res);
});
});
});
};
@mtavkhelidze
Copy link
Author

First create task

$ wt create --secret MONGO_URL=<your_mongodb_url_with_credentials> pmga.js

Than use it like below

<!doctype html>
<html>
  <head>
    <title>Poor man's Google Analytics</title>
    <meta charset="utf-8" />
  </head>
  <body onload="ready();">
    <div id="cntr" style="display: none">
      You are visitor number: <span id="cntr-number"></span>
    </div>
  </body>
  <script>
   function ready() {
       var http = new XMLHttpRequest();
       http.onreadystatechange = function() {
           if(http.readyState == XMLHttpRequest.DONE) {
               switch(http.status) {
                   case 200:
                       // number of visitors
                       document.getElementById("cntr-number")
                               .innerHTML = http.responseText;
                       document.getElementById("cntr").style.display = 'block';
                       break;
                   default:
                       var er = JSON.parse(http.responseText);
                       console.log(er.code, er.message);
               }
           }
       };

       http.open("POST", "<YOUR_TASK_URL>?id=1", true);
       http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
       // say, we want to collect screen resolutions only
       // actually, you can collect anything
       http.send('data=' + JSON.stringify({
           height: screen.height,
           width: screen.width
       }));
   }
  </script>
</html>

PS Strange characters in webtask's error messages are Georgian

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment