From 734335c74407e20f03501563e3a928afdbc325f9 Mon Sep 17 00:00:00 2001 From: Emily Date: Sun, 9 Jun 2024 22:59:38 +0200 Subject: [PATCH] add deprecated endpoints (v1) --- producer/src/deprecated.ts | 48 ++++++++++++++++++++++++++++++++++++++ producer/src/index.ts | 17 +++----------- producer/src/utils.ts | 16 +++++++++++++ 3 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 producer/src/deprecated.ts create mode 100644 producer/src/utils.ts diff --git a/producer/src/deprecated.ts b/producer/src/deprecated.ts new file mode 100644 index 0000000..60821b3 --- /dev/null +++ b/producer/src/deprecated.ts @@ -0,0 +1,48 @@ +import { Router, json } from "express"; +import { createSessionHash, getIPFromRequest } from "./utils"; +import { requireEnv } from "../../shared/utilts/requireEnv"; +import { RedisStreamService } from "@services/RedisStreamService"; + +const router = Router(); + +const allowAnyType = () => true; +const jsonOptions = { limit: '5mb', type: allowAnyType } + +const streamName = requireEnv('STREAM_NAME'); + +router.post('/keep_alive', 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, + instant: req.body.instant + '' + }); + return res.sendStatus(200); + } catch (ex: any) { + return res.status(500).json({ error: ex.message }); + } +}); + + + +router.post('/metrics/push', json(jsonOptions), async (req, res) => { + try { + const ip = getIPFromRequest(req); + const sessionHash = createSessionHash(req.body.website, ip, req.body.userAgent); + + const { type } = req.body; + + if (type === 0) { + await RedisStreamService.addToStream(streamName, { ...req.body, _type: 'visit', sessionHash, ip }); + } else { + 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 }); + } +}); + +export default router; \ No newline at end of file diff --git a/producer/src/index.ts b/producer/src/index.ts index f1cb8f9..fd28da2 100644 --- a/producer/src/index.ts +++ b/producer/src/index.ts @@ -1,9 +1,9 @@ import { requireEnv } from "../../shared/utilts/requireEnv"; import { RedisStreamService } from "@services/RedisStreamService"; -import crypto from 'crypto'; import express from 'express'; import cors from 'cors'; +import { createSessionHash, getIPFromRequest } from "./utils"; const app = express(); app.use(cors()); @@ -13,19 +13,8 @@ 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; -} +import DeprecatedRouter from "./deprecated"; +app.use('/v1', DeprecatedRouter); app.post('/event', express.json(jsonOptions), async (req, res) => { try { diff --git a/producer/src/utils.ts b/producer/src/utils.ts new file mode 100644 index 0000000..3f96b7c --- /dev/null +++ b/producer/src/utils.ts @@ -0,0 +1,16 @@ + +import crypto from 'crypto'; +import type { Request } from "express"; + +export function getIPFromRequest(req: 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; +}