generators/validators/http-generator.ts (49 lines of code) (raw):
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import { IBatchGenerator, ILogData } from "../../core/ext-types.js"
import express from "express";
/*
* HTTP Generator
* This generator is meant to act as a loop back
* server to recieve all http metrics from fluent bit
*/
interface IGeneratorConfig {
port: number,
verifyHeaders: {[headerKey: string]: string}
}
const defaultConfig: IGeneratorConfig = {
port: 2685,
verifyHeaders: {},
};
const httpGenerator: IBatchGenerator = {
name: "http",
defaultConfig: defaultConfig,
createConfiguredGenerator: function (config: IGeneratorConfig) {
const app = express();
const requests: Array<express.Request> = [];
app.use(express.text({type: "application/msgpack"})) // for parsing messagepack
app.use(express.json()) // for parsing messagepack
app.use((req, res, next) => {
/* log request and send success message */
requests.push(req);
res.sendStatus(200);
})
const server = app.listen(config.port, () => {
console.log(`HTTP generator listening on port: ${config.port}`);
})
return {
generatorTemplate: this,
makeInstance: (() => (async function*() {
let logIndex = 0;
for (let i = 0; i < requests.length; ++i) {
/* this would be a good place to run filters */
yield requests[i].body as Array<ILogData>;
}
})()),
validateInstances: async () => {
let isValid = true;
Object.entries(config.verifyHeaders).forEach(([header, regexPattern]) => {
isValid &&= requests.every((request) => {
const regex = new RegExp(regexPattern);
return regex.test(request.header(header));
})
})
return {
isValidationSuccess: isValid,
}
}
}
}
};
export default httpGenerator;