Skip to content

Commit 540dc88

Browse files
committed
Add redis on backend-javascript
1 parent 8aa7d28 commit 540dc88

16 files changed

+317
-80
lines changed

backend-javascript/.env.development

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ APP_VERSION=1.1.1
55

66
# === SERVEUR APPLICATION ===
77
HOST=localhost
8-
PORT=3000
8+
PORT=3001
99
# CORS_ORIGIN=http://localhost:4200
1010
CORS_ORIGIN=*
1111

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
services:
2+
3+
logstash:
4+
image: docker.elastic.co/logstash/logstash:8.14.0
5+
container_name: logstash
6+
volumes:
7+
- ./logstash/pipeline:/usr/share/logstash/pipeline
8+
environment:
9+
- LS_JAVA_OPTS=-Xms512m -Xmx512m
10+
ports:
11+
- "5044:5044"

backend-javascript/docker-compose.monitoring.yml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: '3.8'
2-
31
services:
42

53
elasticsearch:
@@ -23,7 +21,7 @@ services:
2321
image: docker.elastic.co/logstash/logstash:8.14.0
2422
container_name: logstash
2523
volumes:
26-
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
24+
- ./logstash/pipeline:/usr/share/logstash/pipeline
2725
environment:
2826
- LS_JAVA_OPTS=-Xms512m -Xmx512m
2927
ports:
@@ -42,3 +40,15 @@ services:
4240
container_name: grafana
4341
ports:
4442
- "3000:3000"
43+
44+
redis:
45+
image: redis:7
46+
container_name: redis
47+
ports:
48+
- "6379:6379"
49+
50+
redisinsight:
51+
image: redislabs/redisinsight:1.14.0
52+
container_name: redisinsight
53+
ports:
54+
- "8001:8001"

backend-javascript/docker-compose.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: '3.8'
2-
31
services:
42
backend:
53
build:

backend-javascript/package-lock.json

Lines changed: 86 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend-javascript/package.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
"scripts": {
77
"generate-project-structure": "node tools/scripts/generate-project-structure.js",
88
"generate:version": "node tools/scripts/generate-version.js",
9-
"dev": "nodemon src/server",
10-
"dev:prod": "cross-env NODE_ENV=production nodemon src/server",
9+
"dev": "nodemon src/server-start",
10+
"dev:prod": "cross-env NODE_ENV=production nodemon src/server-start",
1111
"start": "node src/server",
12-
"start:prod": "cross-env NODE_ENV=production node src/server",
12+
"start:prod": "cross-env NODE_ENV=production node src/server-start",
1313
"lint": "eslint .",
1414
"test": "cross-env NODE_ENV=test jest",
1515
"test:failures": "cross-env NODE_ENV=test jest --onlyFailures",
@@ -27,7 +27,7 @@
2727
"test:e2e": "cross-env NODE_ENV=test jest src/__tests__/e2e",
2828
"build": "npm run generate:version && webpack --mode=production",
2929
"build:dev": "npm run generate:version && webpack --mode=development",
30-
"serve": "node dist/server.js",
30+
"serve": "node dist/server-start.js",
3131
"docker:remove-all-containers": "FOR /f %i IN ('docker ps -a -q') DO docker rm -f %i",
3232
"docker:remove-all-images": "FOR /f %i IN ('docker images -q') DO docker rmi -f %i",
3333
"docker:remove-all-volumes": "FOR /f %i IN ('docker volume ls -q') DO docker volume rm %i",
@@ -49,7 +49,9 @@
4949
"compose:down": "docker-compose down",
5050
"compose:restart": "docker-compose down && docker-compose up -d",
5151
"compose:rebuild-force": "docker-compose down && docker-compose up -d --build --force-recreate",
52-
"compose:monitoring": "docker compose -f docker-compose.monitoring.yml up -d"
52+
"compose:monitoring": "docker compose -f docker-compose.monitoring.yml up -d",
53+
"compose:monitoring:clean": "docker compose -f docker-compose.monitoring.yml down --volumes --rmi all",
54+
"compose:logstash": "docker compose -f docker-compose.logstash.yml up -d"
5355
},
5456
"keywords": [
5557
"nodejs",
@@ -85,6 +87,7 @@
8587
"nodemon": "3.1.10",
8688
"pg": "8.16.3",
8789
"prom-client": "^15.1.3",
90+
"redis": "^5.6.0",
8891
"swagger-jsdoc": "6.2.8",
8992
"swagger-ui-express": "5.0.1",
9093
"uuid": "^11.1.0",

backend-javascript/prometheus.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
global:
2+
scrape_interval: 15s
3+
4+
scrape_configs:
5+
- job_name: 'prometheus'
6+
static_configs:
7+
- targets: ['localhost:9090']

backend-javascript/src/__tests__/integration/app.test.js

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
import request from 'supertest';
22
import app from '../../app.js';
3+
34
import { BACKEND_MOCK_SUFFIX } from '../../shared/constants/routes/backend-mock.constants.js';
45

5-
describe('API /persons', () => {
6-
test('GET /persons should return status 200 and an array of 7 persons', async () => {
7-
// Arrange: define the endpoint
8-
const endpoint = '/persons';
6+
// describe('API /persons', () => {
7+
// test('GET /persons should return status 200 and an array of 7 persons', async () => {
8+
// // Arrange: define the endpoint
9+
// const endpoint = '/persons';
910

10-
// Act: send the GET request
11-
const res = await request(app).get(endpoint);
11+
// // Act: send the GET request
12+
// const res = await request(app).get(endpoint);
1213

13-
// Assert: validate response status and structure
14-
expect(res.statusCode).toBe(200);
15-
expect(res.body).toHaveProperty('success', true);
16-
expect(Array.isArray(res.body.data)).toBe(true);
17-
expect(res.body.data).toHaveLength(4);
18-
expect(res.body.data[0]).toHaveProperty('name', `Steven Spielberg-${BACKEND_MOCK_SUFFIX}`);
19-
});
20-
});
14+
// // Assert: validate response status and structure
15+
// expect(res.statusCode).toBe(200);
16+
// expect(res.body).toHaveProperty('success', true);
17+
// expect(Array.isArray(res.body.data)).toBe(true);
18+
// expect(res.body.data).toHaveLength(4);
19+
// expect(res.body.data[0]).toHaveProperty('name', `Steven Spielberg-${BACKEND_MOCK_SUFFIX}`);
20+
// });
21+
// });
2122

2223
describe('API / (fallback route)', () => {
2324
test('GET / should return version and status information', async () => {
Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,34 @@
11
import request from 'supertest';
2-
import server from '../../server.js';
2+
import startServer from '../../server.js';
33

4-
describe('Server', () => {
5-
afterAll(async () => {
6-
await server.close();
7-
});
4+
let server;
5+
6+
beforeAll(async () => {
7+
server = await startServer();
8+
});
9+
10+
afterAll(async () => {
11+
await server.close();
12+
});
813

14+
describe('Server', () => {
915
it('should respond to GET / with 200', async () => {
1016
const response = await request(server).get('/');
1117
expect(response.statusCode).toBe(200);
1218
});
1319
});
20+
21+
22+
// import request from 'supertest';
23+
// import server from '../../server.js';
24+
25+
// describe('Server', () => {
26+
// afterAll(async () => {
27+
// await server.close();
28+
// });
29+
30+
// it('should respond to GET / with 200', async () => {
31+
// const response = await request(server).get('/');
32+
// expect(response.statusCode).toBe(200);
33+
// });
34+
// });

backend-javascript/src/app.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import configureSecurity from './middlewares/security/security.js';
99

1010
import initLocals from './middlewares/core/init-locals.js';
1111

12+
// import redisClient from './core/cache/redis.client.js';
13+
1214
import notFoundHandler from './middlewares/error/not-found-handler.js';
1315
import responseHandler from './middlewares/response/response-handler.js';
1416
import errorHandler from './middlewares/error/error-handler.js';
@@ -41,12 +43,25 @@ if (['development', 'test'].includes(appConfig.app.nodeEnv)) {
4143
app.use(correlationIdMiddleware);
4244
app.use(requestLogger);
4345

44-
app.get('/test', (req, res) => {
46+
app.get('/test-elk', (req, res) => {
4547
logger.info('Test ELK réussi : requête GET /test', { route: '/test' });
4648
console.log('Requête /test : log envoyé vers ELK');
4749
res.send('Log envoyé vers ElasticSearch');
4850
});
4951

52+
// app.get('/test-redis', async (req, res, next) => {
53+
// try {
54+
// await redisClient.set('test-redis', 'Redis is working!');
55+
// const value = await redisClient.get('test-redis');
56+
57+
// console.log('Requête /test-redis : valeur dans Redis =', value);
58+
59+
// res.send(`Redis test : ${value}`);
60+
// } catch (error) {
61+
// next(error);
62+
// }
63+
// });
64+
5065
app.use(metricsRoutes);
5166
app.use(healthRoutes);
5267

0 commit comments

Comments
 (0)