add new service + fix docs links

This commit is contained in:
Emily
2024-06-09 19:00:44 +02:00
parent 2720222048
commit 127be91506
25 changed files with 2241 additions and 160 deletions

69
producer/src/index.ts Normal file
View File

@@ -0,0 +1,69 @@
import { requireEnv } from "../../shared/utilts/requireEnv";
import { RedisStreamService } from "@services/RedisStreamService";
import crypto from 'crypto';
import express from 'express';
import cors from 'cors';
const app = express();
app.use(cors());
const allowAnyType = () => true;
const jsonOptions = { limit: '5mb', type: allowAnyType }
const streamName = requireEnv('STREAM_NAME');
function getIPFromRequest(req: express.Request) {
const ip = req.header('X-Real-IP') || req.header('X-Forwarded-For') || '0.0.0.0';
return ip;
}
export function createSessionHash(website: string, ip: string, userAgent: string) {
const dailySalt = new Date().toLocaleDateString('it-IT');
const sessionClean = dailySalt + website + ip + userAgent;
const sessionHash = crypto.createHash('md5').update(sessionClean).digest("hex");
return sessionHash;
}
app.post('/event', express.json(jsonOptions), async (req, res) => {
try {
const ip = getIPFromRequest(req);
const sessionHash = createSessionHash(req.body.website, ip, req.body.userAgent);
await RedisStreamService.addToStream(streamName, { ...req.body, _type: 'event', sessionHash, ip });
return res.sendStatus(200);
} catch (ex: any) {
return res.status(500).json({ error: ex.message });
}
});
app.post('/visit', express.json(jsonOptions), async (req, res) => {
try {
const ip = getIPFromRequest(req);
const sessionHash = createSessionHash(req.body.website, ip, req.body.userAgent);
await RedisStreamService.addToStream(streamName, { ...req.body, _type: 'visit', sessionHash, ip });
return res.sendStatus(200);
} catch (ex: any) {
return res.status(500).json({ error: ex.message });
}
});
app.post('/keep_alive', express.json(jsonOptions), async (req, res) => {
try {
const ip = getIPFromRequest(req);
const sessionHash = createSessionHash(req.body.website, ip, req.body.userAgent);
await RedisStreamService.addToStream(streamName, { ...req.body, _type: 'keep_alive', sessionHash, ip });
return res.sendStatus(200);
} catch (ex: any) {
return res.status(500).json({ error: ex.message });
}
});
async function main() {
await RedisStreamService.connect();
app.listen(requireEnv("PORT"), () => console.log(`Listening on port ${requireEnv("PORT")}`));
}
main();