This repository was archived by the owner on Aug 16, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpodlet.js
86 lines (69 loc) · 2.87 KB
/
podlet.js
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
const express = require("express");
const Podlet = require("@podium/podlet");
const fs = require("fs");
const promClient = require("prom-client");
const PrometheusConsumer = require("@metrics/prometheus-consumer");
const basePath = process.env.BASE_PATH || "/arbeid/podlet-veientilarbeid";
const port = process.env.PORT || 7100;
const podletVersion = process.env.VERSION_HASH || `${new Date().getTime()}`;
const isDevelopmentEnv = true;
const podletName = "podlet-veientilarbeid";
let rawdata = fs.readFileSync("build/asset-manifest.json");
let assets = JSON.parse(rawdata);
const podlet = new Podlet({
name: podletName,
version: podletVersion,
pathname: basePath,
fallback: "/fallback",
development: isDevelopmentEnv,
logger: console,
});
podlet.defaults({
authlevel: "N/A",
});
assets.entrypoints.forEach((element, index) => {
if (element.indexOf(".css") !== -1) {
podlet.css({ value: `/${element}` });
} else if (element.indexOf(".js") !== -1) {
podlet.js({ value: `/${element}`, defer: true });
}
});
// Set up prometheus client with podium metrics
const metricsConsumer = new PrometheusConsumer({ client: promClient });
promClient.collectDefaultMetrics({ register: metricsConsumer.registry });
metricsConsumer.on("error", (err) => console.error(err));
podlet.metrics.pipe(metricsConsumer);
// Express setup
const app = express();
app.use(podlet.middleware());
app.use("/static", express.static("./build/static"));
app.use("/assets", express.static("./build/"));
app.use(`${basePath}/static`, express.static("./build/static"));
app.use(`${basePath}/assets`, express.static("./build/"));
app.get(`${basePath}${podlet.proxy({ target: "/api", name: "api" })}`, (req, res) => {
res.status(200).send({ resultat: "flott resultat med basepath" });
});
podlet.proxy({ target: "https://innloggingsstatus.dev.nav.no/person/innloggingsstatus/auth", name: "authapi" });
app.get(`${basePath}${podlet.content()}`, (req, res) => {
const { authlevel } = res.locals.podium.context;
res.status(200).podiumSend(`<div id="${podletName}" data-authlevel="${authlevel}"></div>`);
});
app.get(`${basePath}${podlet.fallback()}`, (req, res) => {
res.status(200).podiumSend(`<div>Fallback for ${podletName}:${podletVersion}</div>`);
});
// generate the podlet manifest
app.get(`${basePath}${podlet.manifest()}`, (req, res) => {
res.status(200).send(podlet);
});
// Prometheus metrics
app.get("/metrics", async function (req, res) {
const metrics = await metricsConsumer.metrics();
res.set("Content-Type", metricsConsumer.contentType()).send(metrics);
});
// isAlive/isReady route for Nais
app.get(`${basePath}/isAlive|isReady`, (req, res) => res.sendStatus(200));
console.log(JSON.stringify(podlet, undefined, 2));
console.log(`Content path ${podlet.content()}`);
console.log(`Manifest path ${podlet.manifest()}`);
console.log(`Starting on port ${port} with basePath ${basePath}`);
app.listen(port);