all files / src/ server.js

83.67% Statements 41/49
60% Branches 6/10
33.33% Functions 1/3
87.23% Lines 41/47
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95                                                                                                           
"use strict";
 
const restify = require('restify');
const getTopStories = require("./topStories");
const getPool = require("./pools");
const getSections = require("./sections");
const getTags = require("./tags");
const config = require("config");
const hl = require("highland");
const utils = require("./utils");
const ebHealth = require('eb-healthd-middleware');
const restifyEtagCache = require('restify-etag-cache');
const BeneLogger = require('bene-logger');
const logger = new BeneLogger({logging: config.logging.enabled});
const redis = require('redis');
const apicache = require('apicache');
 
let AWS = require("aws-sdk");
AWS.config.update({
    region: config.dynamodb.region
});
Eif (config.dynamodb.endpoint) {
    AWS.config.update({
        "endpoint": config.dynamodb.endpoint
    });
}
let dc = hl.streamifyAll(new AWS.DynamoDB.DocumentClient());
const pg = require('tm-apps-db')(config.db);
 
function redisCache(config, redis, apicache) {
    return apicache.options({
        redisClient: redis.createClient(config.cache.redis),
        statusCodes: {
            exclude: [],
            include: [200]
        }
    }).middleware(config.cache.duration);
}
 
let app = (config, dc, pg) => {
 
    let server = restify.createServer({
        name: 'appsListAPI'
    });
    
    server.use(restify.queryParser());
    server.pre(restify.pre.sanitizePath());
    server.use(restify.bodyParser());
 
    Iif(config.logging.enhanced === true) server.use(ebHealth({}));
 
    Iif(config.cache.enabled === true) server.use(redisCache(config, redis, apicache));
 
    server.use(restifyEtagCache());
 
    config.cacheEndpoint = utils.setCacheEndpoint(config.articleEndpoint);
 
    server.get("/:source/:publicationId/top-stories", getTopStories(config, dc));
 
    server.get("/:source/:publicationId/pool/:escenicId/:area", getPool(config, dc));
 
    server.get("/:source/:publicationId/sections/:escenicId", getSections(config, pg));
 
    server.get("/:source/:publicationId/tags/:escenicId", getTags(config, pg));
 
    server.get('/healthcheck', (req, res) => {
        res.json({
            version: process.env.npm_package_version,
            server: {
                name: server.name,
                url: server.url
            }
        });
    });
 
    server.on('uncaughtException', function (req, res) {
        res.send(new restify.InternalServerError());
        res.end();
    });
 
    return server;
};
 
let server;
Iif (require.main === module) {
    server = app(config, dc, pg);
    server.listen(config.server.port, function () {
        logger.info('server listening', {
            server_name: server.name,
            server_url: server.url
        });
    });
}
 
module.exports = server || app;