aboutsummaryrefslogtreecommitdiffhomepage
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/initializers/checker-before-init.ts1
-rw-r--r--server/initializers/config.ts4
-rw-r--r--server/lib/opentelemetry/metrics.ts4
-rw-r--r--server/tests/api/check-params/users-emails.ts3
-rw-r--r--server/tests/api/server/open-telemetry.ts27
-rw-r--r--server/tests/shared/mock-servers/mock-email.ts15
6 files changed, 42 insertions, 12 deletions
diff --git a/server/initializers/checker-before-init.ts b/server/initializers/checker-before-init.ts
index 74fed251c..1351749a6 100644
--- a/server/initializers/checker-before-init.ts
+++ b/server/initializers/checker-before-init.ts
@@ -23,6 +23,7 @@ function checkMissedConfig () {
23 'log.log_ping_requests', 'log.log_tracker_unknown_infohash', 'log.prettify_sql', 'log.accept_client_log', 23 'log.log_ping_requests', 'log.log_tracker_unknown_infohash', 'log.prettify_sql', 'log.accept_client_log',
24 'open_telemetry.metrics.enabled', 'open_telemetry.metrics.prometheus_exporter.hostname', 24 'open_telemetry.metrics.enabled', 'open_telemetry.metrics.prometheus_exporter.hostname',
25 'open_telemetry.metrics.prometheus_exporter.port', 'open_telemetry.tracing.enabled', 'open_telemetry.tracing.jaeger_exporter.endpoint', 25 'open_telemetry.metrics.prometheus_exporter.port', 'open_telemetry.tracing.enabled', 'open_telemetry.tracing.jaeger_exporter.endpoint',
26 'open_telemetry.metrics.http_request_duration.enabled',
26 'user.video_quota', 'user.video_quota_daily', 27 'user.video_quota', 'user.video_quota_daily',
27 'video_channels.max_per_user', 28 'video_channels.max_per_user',
28 'csp.enabled', 'csp.report_only', 'csp.report_uri', 29 'csp.enabled', 'csp.report_only', 'csp.report_uri',
diff --git a/server/initializers/config.ts b/server/initializers/config.ts
index 7ad258f7a..eb9d0079c 100644
--- a/server/initializers/config.ts
+++ b/server/initializers/config.ts
@@ -195,6 +195,10 @@ const CONFIG = {
195 METRICS: { 195 METRICS: {
196 ENABLED: config.get<boolean>('open_telemetry.metrics.enabled'), 196 ENABLED: config.get<boolean>('open_telemetry.metrics.enabled'),
197 197
198 HTTP_REQUEST_DURATION: {
199 ENABLED: config.get<boolean>('open_telemetry.metrics.http_request_duration.enabled')
200 },
201
198 PROMETHEUS_EXPORTER: { 202 PROMETHEUS_EXPORTER: {
199 HOSTNAME: config.get<string>('open_telemetry.metrics.prometheus_exporter.hostname'), 203 HOSTNAME: config.get<string>('open_telemetry.metrics.prometheus_exporter.hostname'),
200 PORT: config.get<number>('open_telemetry.metrics.prometheus_exporter.port') 204 PORT: config.get<number>('open_telemetry.metrics.prometheus_exporter.port')
diff --git a/server/lib/opentelemetry/metrics.ts b/server/lib/opentelemetry/metrics.ts
index 9cc067e4a..bffe00840 100644
--- a/server/lib/opentelemetry/metrics.ts
+++ b/server/lib/opentelemetry/metrics.ts
@@ -62,7 +62,9 @@ class OpenTelemetryMetrics {
62 62
63 this.meter = metrics.getMeter('default') 63 this.meter = metrics.getMeter('default')
64 64
65 this.buildRequestObserver() 65 if (CONFIG.OPEN_TELEMETRY.METRICS.HTTP_REQUEST_DURATION.ENABLED === true) {
66 this.buildRequestObserver()
67 }
66 68
67 this.playbackMetrics = new PlaybackMetrics(this.meter) 69 this.playbackMetrics = new PlaybackMetrics(this.meter)
68 this.playbackMetrics.buildCounters() 70 this.playbackMetrics.buildCounters()
diff --git a/server/tests/api/check-params/users-emails.ts b/server/tests/api/check-params/users-emails.ts
index 8cfb1d15f..6ebcc8ffe 100644
--- a/server/tests/api/check-params/users-emails.ts
+++ b/server/tests/api/check-params/users-emails.ts
@@ -1,5 +1,4 @@
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ 1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2import { MockSmtpServer } from '@server/tests/shared'
3import { HttpStatusCode, UserRole } from '@shared/models' 2import { HttpStatusCode, UserRole } from '@shared/models'
4import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' 3import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
5 4
@@ -112,8 +111,6 @@ describe('Test users API validators', function () {
112 }) 111 })
113 112
114 after(async function () { 113 after(async function () {
115 MockSmtpServer.Instance.kill()
116
117 await cleanupTests([ server ]) 114 await cleanupTests([ server ])
118 }) 115 })
119}) 116})
diff --git a/server/tests/api/server/open-telemetry.ts b/server/tests/api/server/open-telemetry.ts
index db76a3d7f..49f3b520b 100644
--- a/server/tests/api/server/open-telemetry.ts
+++ b/server/tests/api/server/open-telemetry.ts
@@ -29,6 +29,8 @@ describe('Open Telemetry', function () {
29 }) 29 })
30 30
31 it('Should enable open telemetry metrics', async function () { 31 it('Should enable open telemetry metrics', async function () {
32 this.timeout(120000)
33
32 server = await createSingleServer(1, { 34 server = await createSingleServer(1, {
33 open_telemetry: { 35 open_telemetry: {
34 metrics: { 36 metrics: {
@@ -37,8 +39,12 @@ describe('Open Telemetry', function () {
37 } 39 }
38 }) 40 })
39 41
42 // Simulate a HTTP request
43 await server.videos.list()
44
40 const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 }) 45 const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 })
41 expect(res.text).to.contain('peertube_job_queue_total{') 46 expect(res.text).to.contain('peertube_job_queue_total{')
47 expect(res.text).to.contain('http_request_duration_ms_bucket{')
42 }) 48 })
43 49
44 it('Should have playback metrics', async function () { 50 it('Should have playback metrics', async function () {
@@ -64,6 +70,27 @@ describe('Open Telemetry', function () {
64 expect(res.text).to.contain('peertube_playback_http_downloaded_bytes_total{') 70 expect(res.text).to.contain('peertube_playback_http_downloaded_bytes_total{')
65 }) 71 })
66 72
73 it('Should disable http request duration metrics', async function () {
74 await server.kill()
75
76 server = await createSingleServer(1, {
77 open_telemetry: {
78 metrics: {
79 enabled: true,
80 http_request_duration: {
81 enabled: false
82 }
83 }
84 }
85 })
86
87 // Simulate a HTTP request
88 await server.videos.list()
89
90 const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 })
91 expect(res.text).to.not.contain('http_request_duration_ms_bucket{')
92 })
93
67 after(async function () { 94 after(async function () {
68 await server.kill() 95 await server.kill()
69 }) 96 })
diff --git a/server/tests/shared/mock-servers/mock-email.ts b/server/tests/shared/mock-servers/mock-email.ts
index c518679c9..5f37f6ae0 100644
--- a/server/tests/shared/mock-servers/mock-email.ts
+++ b/server/tests/shared/mock-servers/mock-email.ts
@@ -1,4 +1,3 @@
1import { ChildProcess } from 'child_process'
2import MailDev from '@peertube/maildev' 1import MailDev from '@peertube/maildev'
3import { parallelTests, randomInt } from '@shared/core-utils' 2import { parallelTests, randomInt } from '@shared/core-utils'
4 3
@@ -6,7 +5,7 @@ class MockSmtpServer {
6 5
7 private static instance: MockSmtpServer 6 private static instance: MockSmtpServer
8 private started = false 7 private started = false
9 private emailChildProcess: ChildProcess 8 private maildev: any
10 private emails: object[] 9 private emails: object[]
11 10
12 private constructor () { } 11 private constructor () { }
@@ -20,18 +19,18 @@ class MockSmtpServer {
20 return res(undefined) 19 return res(undefined)
21 } 20 }
22 21
23 const maildev = new MailDev({ 22 this.maildev = new MailDev({
24 ip: '127.0.0.1', 23 ip: '127.0.0.1',
25 smtp: port, 24 smtp: port,
26 disableWeb: true, 25 disableWeb: true,
27 silent: true 26 silent: true
28 }) 27 })
29 28
30 maildev.on('new', email => { 29 this.maildev.on('new', email => {
31 this.emails.push(email) 30 this.emails.push(email)
32 }) 31 })
33 32
34 maildev.listen(err => { 33 this.maildev.listen(err => {
35 if (err) return rej(err) 34 if (err) return rej(err)
36 35
37 this.started = true 36 this.started = true
@@ -42,11 +41,11 @@ class MockSmtpServer {
42 } 41 }
43 42
44 kill () { 43 kill () {
45 if (!this.emailChildProcess) return 44 if (!this.maildev) return
46 45
47 process.kill(this.emailChildProcess.pid) 46 this.maildev.close()
48 47
49 this.emailChildProcess = null 48 this.maildev = null
50 MockSmtpServer.instance = null 49 MockSmtpServer.instance = null
51 } 50 }
52 51