import { expect } from 'chai'
import { expectLogContain, expectLogDoesNotContain, MockHTTP } from '@server/tests/shared'
-import { HttpStatusCode, VideoPrivacy } from '@shared/models'
+import { HttpStatusCode, VideoPrivacy, VideoResolution } from '@shared/models'
import { cleanupTests, createSingleServer, makeRawRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
describe('Open Telemetry', function () {
let server: PeerTubeServer
describe('Metrics', function () {
- const metricsUrl = 'http://localhost:9091/metrics'
+ const metricsUrl = 'http://127.0.0.1:9092/metrics'
it('Should not enable open telemetry metrics', async function () {
+ this.timeout(60000)
+
server = await createSingleServer(1)
let hasError = false
try {
- await makeRawRequest(metricsUrl, HttpStatusCode.NOT_FOUND_404)
+ await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.NOT_FOUND_404 })
} catch (err) {
hasError = err.message.includes('ECONNREFUSED')
}
})
it('Should enable open telemetry metrics', async function () {
- server = await createSingleServer(1, {
+ this.timeout(120000)
+
+ await server.run({
open_telemetry: {
metrics: {
enabled: true
}
})
- const res = await makeRawRequest(metricsUrl, HttpStatusCode.OK_200)
- expect(res.text).to.contain('peertube_job_queue_total')
+ // Simulate a HTTP request
+ await server.videos.list()
+
+ const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 })
+ expect(res.text).to.contain('peertube_job_queue_total{')
+ expect(res.text).to.contain('http_request_duration_ms_bucket{')
+ })
+
+ it('Should have playback metrics', async function () {
+ await setAccessTokensToServers([ server ])
+
+ const video = await server.videos.quickUpload({ name: 'video' })
+
+ await server.metrics.addPlaybackMetric({
+ metrics: {
+ playerMode: 'p2p-media-loader',
+ resolution: VideoResolution.H_1080P,
+ fps: 30,
+ resolutionChanges: 1,
+ errors: 2,
+ downloadedBytesP2P: 0,
+ downloadedBytesHTTP: 0,
+ uploadedBytesP2P: 5,
+ videoId: video.uuid
+ }
+ })
+
+ const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 })
+ expect(res.text).to.contain('peertube_playback_http_downloaded_bytes_total{')
+ })
+
+ it('Should disable http request duration metrics', async function () {
+ await server.kill()
+ await server.run({
+ open_telemetry: {
+ metrics: {
+ enabled: true,
+ http_request_duration: {
+ enabled: false
+ }
+ }
+ }
+ })
+
+ // Simulate a HTTP request
+ await server.videos.list()
+
+ const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 })
+ expect(res.text).to.not.contain('http_request_duration_ms_bucket{')
+ })
+
+ after(async function () {
await server.kill()
})
})
})
it('Should enable open telemetry metrics', async function () {
- server = await createSingleServer(1, {
+ await server.run({
open_telemetry: {
tracing: {
enabled: true,
jaeger_exporter: {
- endpoint: 'http://localhost:' + mockPort
+ endpoint: 'http://127.0.0.1:' + mockPort
}
}
}