123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- const h = require('../helper');
- const async = require('async');
- const mysql = require('mysql');
- const connection = mysql.createConnection({
- host : 'TFB-database',
- user : 'benchmarkdbuser',
- password : 'benchmarkdbpass',
- database : 'hello_world'
- });
- const NodeCache = require( "node-cache" );
- const myCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );
- let cachePopulated = false;
- connection.connect();
- const queries = {
- GET_RANDOM_WORLD: () => "SELECT * FROM world WHERE id = " + h.randomTfbNumber(),
- ALL_FORTUNES: "SELECT * FROM fortune",
- ALL_WORLDS: "SELECT * FROM world",
- UPDATE_WORLD: (rows) => {
- return [
- "UPDATE world SET randomNumber = ", rows[0].randomNumber,
- " WHERE id = ", rows[0]['id']
- ].join('');
- }
- };
- const populateCache = (callback) => {
- if (cachePopulated) return callback();
- connection.query(queries.ALL_WORLDS, (err, rows) => {
- rows.forEach(r =>
- myCache.set(r.id, { id: r.id, randomNumber: r.randomNumber }));
- cachePopulated = true;
- callback();
- });
- };
- const mysqlRandomWorld = (callback) =>
- connection.query(queries.GET_RANDOM_WORLD(), (err, rows, fields) => {
- callback(err, rows[0]);
- });
- const mysqlGetAllFortunes = (callback) =>
- connection.query(queries.ALL_FORTUNES, (err, rows, fields) => {
- callback(err, rows);
- });
- const mysqlUpdateQuery = (callback) =>
- connection.query(queries.GET_RANDOM_WORLD(), (err, rows, fields) => {
- if (err) { return process.exit(1); }
- rows[0].randomNumber = h.randomTfbNumber();
- const updateQuery = queries.UPDATE_WORLD(rows);
- connection.query(updateQuery, (err, result) => {
- callback(err, rows[0]);
- });
- });
- module.exports = {
- SingleQuery: (req, res) => {
- mysqlRandomWorld((err, result) => {
- if (err) { return process.exit(1); }
- h.addTfbHeaders(res, 'json');
- res.end(JSON.stringify(result));
- });
- },
- MultipleQueries: (queries, req, res) => {
- const queryFunctions = h.fillArray(mysqlRandomWorld, queries);
- async.parallel(queryFunctions, (err, results) => {
- if (err) { return process.exit(1); }
- h.addTfbHeaders(res, 'json');
- res.end(JSON.stringify(results));
- });
- },
- CachedQueries: (queries, req, res) => {
- populateCache(() => {
- let worlds = [];
- for (let i = 0; i < queries; i++) {
- const key = h.randomTfbNumber() + '';
- worlds.push(myCache.get(key));
- }
- h.addTfbHeaders(res, 'json');
- res.end(JSON.stringify(worlds));
- });
- },
- Fortunes: (req, res) => {
- mysqlGetAllFortunes((err, fortunes) => {
- if (err) { return process.exit(1); }
- fortunes.push(h.additionalFortune());
- fortunes.sort((a, b) => a.message.localeCompare(b.message));
- h.addTfbHeaders(res, 'html');
- res.end(h.fortunesTemplate({
- fortunes: fortunes
- }));
- });
- },
- Updates: (queries, req, res) => {
- const queryFunctions = h.fillArray(mysqlUpdateQuery, queries);
- async.parallel(queryFunctions, (err, results) => {
- if (err) { return process.exit(1); }
- h.addTfbHeaders(res, 'json');
- res.end(JSON.stringify(results));
- });
- }
- };
|