summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2017-04-20 12:03:03 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2017-04-20 12:03:03 +0200
commit087d74e0632408c00055b3f69251df4cc1ba4d48 (patch)
tree148d6ea0446a0e2f4f9b1f0eee033ad54324949d
parentdfd312fc5eee5562ced8273b43f01387edd32753 (diff)
downloadbridge-release/2.1.0.tar.gz
bridge-release/2.1.0.zip
-rw-r--r--package.json3
-rw-r--r--server.js42
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": {
diff --git a/server.js b/server.js
index e38ef94..bc5141f 100644
--- a/server.js
+++ b/server.js
@@ -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);