diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2017-04-20 12:03:03 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2017-04-20 12:03:03 +0200 |
| commit | 087d74e0632408c00055b3f69251df4cc1ba4d48 (patch) | |
| tree | 148d6ea0446a0e2f4f9b1f0eee033ad54324949d | |
| parent | dfd312fc5eee5562ced8273b43f01387edd32753 (diff) | |
| download | bridge-release/2.1.0.tar.gz bridge-release/2.1.0.zip | |
integrate logglyrelease/2.1.0release/2.0.0
| -rw-r--r-- | package.json | 3 | ||||
| -rw-r--r-- | server.js | 42 |
2 files changed, 28 insertions, 17 deletions
diff --git a/package.json b/package.json index c1465c4..56dedde 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "sequelize": "^3.30.4", "sleep-promise": "^2.0.0", "webstomp-client": "^1.0.6", - "winston": "^2.3.1" + "winston": "^2.3.1", + "winston-loggly-bulk": "^1.4.2" }, "devDependencies": {}, "scripts": { @@ -4,6 +4,7 @@ const amqp = require("amqplib"), winston = require("winston"), + loggly = require("winston-loggly-bulk"), Seq = require("sequelize"), request = require("request-promise"), express = require("express"), @@ -13,6 +14,7 @@ const amqp = require("amqplib"), const MADGLORY_TOKEN = process.env.MADGLORY_TOKEN, DATABASE_URI = process.env.DATABASE_URI, RABBITMQ_URI = process.env.RABBITMQ_URI || "amqp://localhost", + LOGGLY_TOKEN = process.env.LOGGLY_TOKEN, REGIONS = ["na", "eu", "sg", "sa", "ea"]; if (MADGLORY_TOKEN == undefined) throw "Need an API token"; @@ -21,14 +23,22 @@ const app = express(), logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)({ - timestamp: () => Date.now(), - formatter: (options) => winston.config.colorize(options.level, -`${new Date(options.timestamp()).toISOString()} ${options.level.toUpperCase()} ${(options.message? options.message:"")} ${(options.meta && Object.keys(options.meta).length? JSON.stringify(options.meta):"")}`) + timestamp: true, + colorize: true }) ] }); let rabbit, ch, seq, model; +// loggly integration +if (LOGGLY_TOKEN) + logger.add(winston.transports.Loggly, { + inputToken: LOGGLY_TOKEN, + subdomain: "kvahuja", + tags: ["backend", "bridge"], + json: true + }); + // connect to broker, retrying forever (async () => { while (true) { @@ -67,7 +77,7 @@ function grabPlayer(name, region, last_match_created_date, id) { "sort": "-createdAt" } }; - logger.info("requesting update for '%s' in '%s'", name, region); + logger.info("requesting update", { name: name, region: region }); return ch.sendToQueue("grab", new Buffer(JSON.stringify(payload)), { persistent: true, @@ -84,7 +94,7 @@ async function searchPlayerInRegion(region, name, id) { players = [], found = false; while (true) { - logger.info("searching '%s' ('%s') in '%s'", name, id, region); + logger.info("searching", { name: name, id: id, region: region }); try { // find players by name let opts = { @@ -108,7 +118,7 @@ async function searchPlayerInRegion(region, name, id) { response = await request(opts); players = response.body; - logger.info("found '%s' ('%s') in '%s'", name, id, region); + logger.info("found", { name: name, id: id, region: region }); found = true; break; } catch (err) { @@ -118,13 +128,13 @@ async function searchPlayerInRegion(region, name, id) { await sleep(100); // no return, no break => retry } else if (err.statusCode != 404) console.error(err); if (err.statusCode != 429) { - logger.warn("did not find '%s' ('%s') in '%s')", name, id, region, - {uri: err.options.uri, qs: err.options.qs, error: err.response.body}); + logger.warn("not found", name, id, region, + { name: name, id: id, region: region, uri: err.options.uri, qs: err.options.qs, error: err.response.body }); return []; } } finally { - logger.info("API response: status %s, connection start %s, connection end %s, ratelimit remaining: %s", - response.statusCode, response.timings.connect, response.timings.end, response.headers["x-ratelimit-remaining"]); + logger.info("API response", + { status: response.statusCode, connection_start: response.timings.connect, connection_end: response.timings.end, ratelimit_remaining: response.headers["x-ratelimit-remaining"] }); } } @@ -149,7 +159,7 @@ async function searchPlayerInRegion(region, name, id) { // send a notification for results and request updates async function searchPlayer(name) { let found = false; - logger.info("searching '%s'", name); + logger.info("searching", { name: name }); await Promise.all(REGIONS.map(async (region) => { let players = await searchPlayerInRegion(region, name, undefined); if (players.length > 0) @@ -206,7 +216,7 @@ async function updateSamples(region) { last_update = (new Date(value=0)).toISOString(); else last_update = record.get("value"); - logger.info("updating samples in '%s' since %s", region, last_update); + logger.info("updating samples", { region: region, last_update: last_update }); await ch.sendToQueue("grab", new Buffer( JSON.stringify({ region: region, params: { @@ -241,12 +251,12 @@ app.post("/api/player/:name/search", async (req, res) => { app.post("/api/player/:name/update", async (req, res) => { let player = await model.Player.findOne({ where: { name: req.params.name } }); if (player == undefined) { - logger.warn("player '%s' not found in db, searching instead", req.params.name); + logger.warn("player not found in db, searching instead", { name: req.params.name }); searchPlayer(req.params.name); // fire away res.sendStatus(204); return; } - logger.info("player '%s' in db, updating", req.params.name); + logger.info("player in db, updating", { name: req.params.name }); updatePlayer(player); // fire away res.sendStatus(204); }); @@ -254,11 +264,11 @@ app.post("/api/player/:name/update", async (req, res) => { app.post("/api/player/:name/crunch", async (req, res) => { let player = await model.Player.findOne({ where: { name: req.params.name } }); if (player == undefined) { - logger.warn("player '%s' not found in db, won't crunch", req.params.name); + logger.warn("player not found in db, won't crunch", { name: req.params.name }); res.sendStatus(404); return; } - logger.info("player '%s' in db, crunching", req.params.name); + logger.info("player in db, crunching", { name: req.params.name }); await ch.sendToQueue("crunch", new Buffer(player.api_id), { persistent: true, type: "player" }); res.sendStatus(204); |
