Skip to content

Commit 22dc7de

Browse files
committed
(feature) add fastify compatibility to node ingestor
1 parent 538dd56 commit 22dc7de

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

ingestors/node/src/modules/fastify.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
const ritm = require("require-in-the-middle")
2+
3+
function versionCheck() {
4+
return true
5+
}
6+
7+
const METLO_DETAILS = {
8+
key: "",
9+
host: "",
10+
pool: null
11+
}
12+
13+
function initialize({ key, host, pool }) {
14+
if (versionCheck()) {
15+
METLO_DETAILS.key = key
16+
METLO_DETAILS.host = host
17+
METLO_DETAILS.pool = pool
18+
19+
20+
async function compileInformation(request, response) {
21+
const data = JSON.stringify(
22+
{
23+
request: {
24+
url: {
25+
host: request.hostname,
26+
path: request.routerPath,
27+
parameters: Object.entries(request.query).map(([k, v]) => ({ name: k, value: v })),
28+
},
29+
headers: Object.entries(request.headers).map(([k, v]) => ({ name: k, value: v })),
30+
body: request.body || "No Body",
31+
method: request.method,
32+
},
33+
response: {
34+
url: `${response.raw.socket.remoteAddress}:${response.raw.socket.remotePort}`,
35+
status: response.statusCode,
36+
headers: Object.entries(response.headers).map(([k, v]) => ({ name: k, value: v })),
37+
body: response.body,
38+
},
39+
meta: {
40+
environment: process.env.NODE_ENV,
41+
incoming: true,
42+
source: request.raw.socket.remoteAddress,
43+
sourcePort: request.raw.socket.remotePort,
44+
// TODO : Add destination
45+
destination: "server.hostname",
46+
destinationPort: "server.port",
47+
}
48+
}
49+
)
50+
51+
METLO_DETAILS.pool.runTask({ host: METLO_DETAILS.host, key: METLO_DETAILS.key, data })
52+
}
53+
54+
ritm(['fastify'], function (exports, name, basedir) {
55+
56+
const originalFastify = exports
57+
function modifiedFastify() {
58+
let fastifyInst = originalFastify.apply(this, arguments)
59+
fastifyInst.addHook("onSend", async (request, reply, payload) => {
60+
compileInformation(request, reply)
61+
return payload
62+
})
63+
return fastifyInst
64+
}
65+
exports = modifiedFastify
66+
67+
return exports
68+
})
69+
}
70+
}
71+
module.exports = { init: initialize }

ingestors/node/src/modules/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const { init: ExpressModule } = require("./express");
22
const { init: KoaModule } = require("./koa");
3+
const { init: FastifyModule } = require("./fastify");
34
const { getDependencies } = require("../utils")
45

56
function setup({ host, key, pool }) {
@@ -14,6 +15,11 @@ function setup({ host, key, pool }) {
1415
} catch (err) {
1516
// pass
1617
}
18+
try {
19+
if (dependencies.includes("fastify")) FastifyModule({ key, host, pool })
20+
} catch (err) {
21+
// pass
22+
}
1723
}
1824

1925
module.exports = setup

0 commit comments

Comments
 (0)