A future post will detail the Android app we built for testing this POC. As always, our goal is to use kinetic learning to drive conversation. In other words, none of this is production ready, it’s simply tools to allow us to drive design realtime.
MySQL [users]> desc beacon_sightings;
+-----------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+-------------------+-----------------------------+
| client_id | varchar(100) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| tx_power | int(11) | YES | | NULL | |
| rssi | int(11) | YES | | NULL | |
| beacon_id | varchar(100) | YES | | NULL | |
+-----------+--------------+------+-----+-------------------+-----------------------------+
5 rows in set (0.00 sec)
MySQL [users]> select * from beacon_sightings limit 10;
+--------------------------------------+---------------------+----------+------+--------------------------------------+
| client_id | ts | tx_power | rssi | beacon_id |
+--------------------------------------+---------------------+----------+------+--------------------------------------+
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:23:58 | -41 | -55 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:23:59 | -41 | -54 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:00 | -41 | -73 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:01 | -41 | -54 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:03 | -41 | -74 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:05 | -41 | -74 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:06 | -41 | -70 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:07 | -41 | -66 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:08 | -41 | -66 | 0x0377656267617a6572080x000000000000 |
| d8b69863-7186-4eb5-84dd-d2e9f48a8ed6 | 2017-03-12 11:24:14 | -41 | -64 | 0x0377656267617a6572080x000000000000 |
+--------------------------------------+---------------------+----------+------+--------------------------------------+
10 rows in set (0.00 sec)
MySQL [users]>
[root@poc01 dockerNode]# cat server.js
'use strict';
var bodyParser = require('body-parser')
var mysql = require('mysql');
const express = require('express');
const app = express();
app.use(bodyParser.urlencoded());
//this routine catches any post requests to the url noted and logs the post data into a mysql table
app.post("/beaconsighting",(req,res)=>{
var connection = mysql.createConnection({host : '172.17.0.1',user : 'root', database: 'users', password : '123'});
connection.query('insert into beacon_sightings(beacon_id,ts,tx_power,rssi,client_id) values(?,current_timestamp(),?,?,?)',
[req.body.beaconId,req.body.txPower,req.body.rssi,req.body.clientId], (err, results) => {
if(err) {
console.log(err);
return err;
}
});
connection.end();
console.log(req.body);
res.sendStatus(200);
});
app.listen(8080);
[root@poc01 dockerNode]# cat package.json
{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "Steve Howard ",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"mysql": "latest",
"node-mysql": "latest",
"body-parser": "latest",
"express": "latest"
}
}
[root@poc01 dockerNode]# cat Dockerfile
FROM node:boron
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
[root@poc01 dockerNode]#