Project

General

Profile

« Previous | Next » 

Revision 58495

[Cache | Trunk]: Fix some issues on metrics. Remove encode url

View differences:

modules/uoa-services-portal/trunk/services/cache/mecache/cache.js
15 15
const responses = new prom.Counter({
16 16
    name: 'cache_http_responses_total',
17 17
    help: 'A counter for cache response codes for every API request.',
18
    labelNames: ['scheme', 'target', 'code', 'cache'],
18
    labelNames: ['scheme', 'target', 'code'],
19 19
    registers: [register]
20 20
});
21 21

  
22
const entries = new prom.Counter({
22
const entries = new prom.Gauge({
23 23
    name: 'cache_used_entries',
24 24
    help: 'A counter to count cache entries',
25 25
    registers: [register]
......
28 28
const histogram = new prom.Histogram({
29 29
    name: 'cache_http_request_duration_seconds',
30 30
    help: 'A Histogram for cache. Providing information about a cache request and load latency in seconds.',
31
    labelNames: ['scheme', 'target'],
31
    labelNames: ['scheme', 'target', 'cache'],
32 32
    registers: [register],
33 33
    buckets: [0.1, 0.2, 0.5, 1, 2]
34 34
});
35 35

  
36 36
let cache = (duration) => {
37 37
    return (req, res, next) => {
38
        let key = '__express__' + req.originalUrl || req.url;
39
        let cachedBody = mcache.get(key);
40
        const url = new URL(req.query.url);
41
        const target = url.host + '/' + url.pathname.split('/')[1];
42
        const scheme = url.protocol.replace(':', '');
43
        const end = histogram.startTimer({scheme: scheme, target: target});
44
        entries.inc();
45
        if (cachedBody) {
46
            res.send(JSON.parse(cachedBody));
47
            responses.inc({scheme: scheme, target: target, code: res.statusCode, cache: 'hit'});
48
            end();
38
        if(req.query.url) {
39
            let key = '__express__' + req.query.url;
40
            let cachedBody = mcache.get(key);
41
            const url = new URL(req.query.url);
42
            const target = url.host + '/' + url.pathname.split('/')[1];
43
            const scheme = url.protocol.replace(':', '');
44
            if (cachedBody) {
45
                const end = histogram.startTimer({scheme: scheme, target: target, cache: 'hit'});
46
                res.send(JSON.parse(cachedBody));
47
                responses.inc({scheme: scheme, target: target, code: res.statusCode});
48
                end();
49
            } else {
50
                const end = histogram.startTimer({scheme: scheme, target: target, cache: 'miss'});
51
                res.sendResponse = res.send;
52
                res.send = (body) => {
53
                    let alreadyCached = !!mcache.get(key);
54
                    entries.set(mcache.size());
55
                    if(!alreadyCached) {
56
                        responses.inc({scheme: scheme, target: target, code: res.statusCode});
57
                        end();
58
                    }
59
                    if (res.statusCode === 200) {
60
                        mcache.put(key, body, duration * 1000, () => {
61
                            entries.set(mcache.size());
62
                        });
63
                    }
64
                    res.sendResponse(body);
65
                };
66
                next();
67
            }
49 68
        } else {
50
            end();
51
            res.sendResponse = res.send;
52
            res.send = (body) => {
53
                if (res.statusCode === 200) {
54
                    mcache.put(key, body, duration * 1000);
55
                }
56
                res.sendResponse(body);
57
                responses.inc({scheme: scheme, target: target, code: res.statusCode, cache: 'miss'});
58
            };
59 69
            next();
60 70
        }
61 71
    };
......
73 83
        if (!url) {
74 84
            res.status(404).send(getResponse(404, "Not Found ")) //not found
75 85
        } else {
76
            request.get(encodeURI(url), function (err, response) {
86
            request.get(url, function (err, response) {
77 87
                // res.header("Access-Control-Allow-Origin", "http://localhost:3000");
78 88
                res.header("Access-Control-Allow-Headers", "Origin, Content-Type,  Content-Length");
79 89
                res.header("Access-Control-Allow-Methods", "GET,  OPTIONS");

Also available in: Unified diff