From bc8090411ddaa8d742ce4de3c83f9dba7bc18e2a Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 7 Jul 2021 11:07:12 +0200 Subject: [PATCH] Introduce stats command --- server/tests/api/redundancy/redundancy.ts | 15 +----- server/tests/api/server/stats.ts | 63 +++++++++------------- shared/extra-utils/index.ts | 4 -- shared/extra-utils/server/index.ts | 3 ++ shared/extra-utils/server/servers.ts | 3 ++ shared/extra-utils/server/stats-command.ts | 25 +++++++++ shared/extra-utils/server/stats.ts | 23 -------- 7 files changed, 58 insertions(+), 78 deletions(-) create mode 100644 shared/extra-utils/server/stats-command.ts delete mode 100644 shared/extra-utils/server/stats.ts diff --git a/server/tests/api/redundancy/redundancy.ts b/server/tests/api/redundancy/redundancy.ts index 5b970473c..e4ea99de6 100644 --- a/server/tests/api/redundancy/redundancy.ts +++ b/server/tests/api/redundancy/redundancy.ts @@ -5,7 +5,6 @@ import * as chai from 'chai' import { readdir } from 'fs-extra' import * as magnetUtil from 'magnet-uri' import { join } from 'path' -import { removeVideoRedundancy } from '@server/lib/redundancy' import { HttpStatusCode } from '@shared/core-utils' import { checkSegmentHash, @@ -30,15 +29,7 @@ import { waitJobs, waitUntilLog } from '@shared/extra-utils' -import { getStats } from '@shared/extra-utils/server/stats' -import { - ServerStats, - VideoDetails, - VideoPrivacy, - VideoRedundancy, - VideoRedundancyStrategy, - VideoRedundancyStrategyWithManual -} from '@shared/models' +import { VideoDetails, VideoPrivacy, VideoRedundancyStrategy, VideoRedundancyStrategyWithManual } from '@shared/models' const expect = chai.expect @@ -241,9 +232,7 @@ async function checkStatsGlobal (strategy: VideoRedundancyStrategyWithManual) { statsLength = 2 } - const res = await getStats(servers[0].url) - const data: ServerStats = res.body - + const data = await servers[0].statsCommand.get() expect(data.videosRedundancy).to.have.lengthOf(statsLength) const stat = data.videosRedundancy[0] diff --git a/server/tests/api/server/stats.ts b/server/tests/api/server/stats.ts index f609ea725..36114a297 100644 --- a/server/tests/api/server/stats.ts +++ b/server/tests/api/server/stats.ts @@ -19,8 +19,7 @@ import { wait, waitJobs } from '@shared/extra-utils' -import { getStats } from '@shared/extra-utils/server/stats' -import { ActivityType, ServerStats, VideoPlaylistPrivacy } from '@shared/models' +import { ActivityType, VideoPlaylistPrivacy } from '@shared/models' const expect = chai.expect @@ -58,8 +57,7 @@ describe('Test stats (excluding redundancy)', function () { }) it('Should have the correct stats on instance 1', async function () { - const res = await getStats(servers[0].url) - const data: ServerStats = res.body + const data = await servers[0].statsCommand.get() expect(data.totalLocalVideoComments).to.equal(1) expect(data.totalLocalVideos).to.equal(1) @@ -74,8 +72,7 @@ describe('Test stats (excluding redundancy)', function () { }) it('Should have the correct stats on instance 2', async function () { - const res = await getStats(servers[1].url) - const data: ServerStats = res.body + const data = await servers[1].statsCommand.get() expect(data.totalLocalVideoComments).to.equal(0) expect(data.totalLocalVideos).to.equal(0) @@ -90,8 +87,7 @@ describe('Test stats (excluding redundancy)', function () { }) it('Should have the correct stats on instance 3', async function () { - const res = await getStats(servers[2].url) - const data: ServerStats = res.body + const data = await servers[2].statsCommand.get() expect(data.totalLocalVideoComments).to.equal(0) expect(data.totalLocalVideos).to.equal(0) @@ -110,8 +106,7 @@ describe('Test stats (excluding redundancy)', function () { await servers[2].followsCommand.unfollow({ target: servers[0] }) await waitJobs(servers) - const res = await getStats(servers[2].url) - const data: ServerStats = res.body + const data = await servers[2].statsCommand.get() expect(data.totalVideos).to.equal(0) }) @@ -120,8 +115,8 @@ describe('Test stats (excluding redundancy)', function () { const server = servers[0] { - const res = await getStats(server.url) - const data: ServerStats = res.body + const data = await server.statsCommand.get() + expect(data.totalDailyActiveUsers).to.equal(1) expect(data.totalWeeklyActiveUsers).to.equal(1) expect(data.totalMonthlyActiveUsers).to.equal(1) @@ -130,8 +125,8 @@ describe('Test stats (excluding redundancy)', function () { { await userLogin(server, user) - const res = await getStats(server.url) - const data: ServerStats = res.body + const data = await server.statsCommand.get() + expect(data.totalDailyActiveUsers).to.equal(2) expect(data.totalWeeklyActiveUsers).to.equal(2) expect(data.totalMonthlyActiveUsers).to.equal(2) @@ -142,8 +137,8 @@ describe('Test stats (excluding redundancy)', function () { const server = servers[0] { - const res = await getStats(server.url) - const data: ServerStats = res.body + const data = await server.statsCommand.get() + expect(data.totalLocalDailyActiveVideoChannels).to.equal(1) expect(data.totalLocalWeeklyActiveVideoChannels).to.equal(1) expect(data.totalLocalMonthlyActiveVideoChannels).to.equal(1) @@ -157,8 +152,8 @@ describe('Test stats (excluding redundancy)', function () { const resChannel = await addVideoChannel(server.url, server.accessToken, channelAttributes) channelId = resChannel.body.videoChannel.id - const res = await getStats(server.url) - const data: ServerStats = res.body + const data = await server.statsCommand.get() + expect(data.totalLocalDailyActiveVideoChannels).to.equal(1) expect(data.totalLocalWeeklyActiveVideoChannels).to.equal(1) expect(data.totalLocalMonthlyActiveVideoChannels).to.equal(1) @@ -167,8 +162,8 @@ describe('Test stats (excluding redundancy)', function () { { await uploadVideo(server.url, server.accessToken, { fixture: 'video_short.webm', channelId }) - const res = await getStats(server.url) - const data: ServerStats = res.body + const data = await server.statsCommand.get() + expect(data.totalLocalDailyActiveVideoChannels).to.equal(2) expect(data.totalLocalWeeklyActiveVideoChannels).to.equal(2) expect(data.totalLocalMonthlyActiveVideoChannels).to.equal(2) @@ -179,9 +174,8 @@ describe('Test stats (excluding redundancy)', function () { const server = servers[0] { - const resStats = await getStats(server.url) - const dataStats: ServerStats = resStats.body - expect(dataStats.totalLocalPlaylists).to.equal(0) + const data = await server.statsCommand.get() + expect(data.totalLocalPlaylists).to.equal(0) } { @@ -195,9 +189,8 @@ describe('Test stats (excluding redundancy)', function () { } }) - const resStats = await getStats(server.url) - const dataStats: ServerStats = resStats.body - expect(dataStats.totalLocalPlaylists).to.equal(1) + const data = await server.statsCommand.get() + expect(data.totalLocalPlaylists).to.equal(1) } }) @@ -231,14 +224,12 @@ describe('Test stats (excluding redundancy)', function () { await waitJobs(servers) { - const res = await getStats(servers[1].url) - const data: ServerStats = res.body + const data = await servers[1].statsCommand.get() expect(data.totalLocalVideoFilesSize).to.equal(0) } { - const res = await getStats(servers[0].url) - const data: ServerStats = res.body + const data = await servers[0].statsCommand.get() expect(data.totalLocalVideoFilesSize).to.be.greaterThan(500000) expect(data.totalLocalVideoFilesSize).to.be.lessThan(600000) } @@ -253,8 +244,7 @@ describe('Test stats (excluding redundancy)', function () { } }) - const res1 = await getStats(servers[1].url) - const first = res1.body as ServerStats + const first = await servers[1].statsCommand.get() for (let i = 0; i < 10; i++) { await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'video' }) @@ -264,10 +254,9 @@ describe('Test stats (excluding redundancy)', function () { await wait(6000) - const res2 = await getStats(servers[1].url) - const second: ServerStats = res2.body - + const second = await servers[1].statsCommand.get() expect(second.totalActivityPubMessagesProcessed).to.be.greaterThan(first.totalActivityPubMessagesProcessed) + const apTypes: ActivityType[] = [ 'Create', 'Update', 'Delete', 'Follow', 'Accept', 'Announce', 'Undo', 'Like', 'Reject', 'View', 'Dislike', 'Flag' ] @@ -287,9 +276,7 @@ describe('Test stats (excluding redundancy)', function () { await wait(6000) - const res3 = await getStats(servers[1].url) - const third: ServerStats = res3.body - + const third = await servers[1].statsCommand.get() expect(third.totalActivityPubMessagesWaiting).to.equal(0) expect(third.activityPubMessagesProcessedPerSecond).to.be.lessThan(second.activityPubMessagesProcessedPerSecond) }) diff --git a/shared/extra-utils/index.ts b/shared/extra-utils/index.ts index cf6418249..f69d7241e 100644 --- a/shared/extra-utils/index.ts +++ b/shared/extra-utils/index.ts @@ -13,10 +13,6 @@ export * from './server' export * from './requests/check-api-params' export * from './requests/requests' -export * from './server/clients' -export * from './server/config' -export * from './server/servers' - export * from './users/accounts' export * from './users/blocklist' export * from './users/login' diff --git a/shared/extra-utils/server/index.ts b/shared/extra-utils/server/index.ts index 3ee70f0cf..d37f46321 100644 --- a/shared/extra-utils/server/index.ts +++ b/shared/extra-utils/server/index.ts @@ -1,3 +1,4 @@ +export * from './config' export * from './contact-form-command' export * from './debug-command' export * from './follows-command' @@ -7,3 +8,5 @@ export * from './jobs-command' export * from './plugins-command' export * from './plugins' export * from './redundancy-command' +export * from './servers' +export * from './stats-command' diff --git a/shared/extra-utils/server/servers.ts b/shared/extra-utils/server/servers.ts index eaf39ecea..4603cf62e 100644 --- a/shared/extra-utils/server/servers.ts +++ b/shared/extra-utils/server/servers.ts @@ -22,6 +22,7 @@ import { FollowsCommand } from './follows-command' import { JobsCommand } from './jobs-command' import { PluginsCommand } from './plugins-command' import { RedundancyCommand } from './redundancy-command' +import { StatsCommand } from './stats-command' interface ServerInfo { app: ChildProcess @@ -89,6 +90,7 @@ interface ServerInfo { jobsCommand?: JobsCommand pluginsCommand?: PluginsCommand redundancyCommand?: RedundancyCommand + statsCommand?: StatsCommand } function parallelTests () { @@ -308,6 +310,7 @@ async function runServer (server: ServerInfo, configOverrideArg?: any, args = [] server.jobsCommand = new JobsCommand(server) server.pluginsCommand = new PluginsCommand(server) server.redundancyCommand = new RedundancyCommand(server) + server.statsCommand = new StatsCommand(server) res(server) }) diff --git a/shared/extra-utils/server/stats-command.ts b/shared/extra-utils/server/stats-command.ts new file mode 100644 index 000000000..b51d9ceef --- /dev/null +++ b/shared/extra-utils/server/stats-command.ts @@ -0,0 +1,25 @@ +import { ServerStats } from '@shared/models' +import { HttpStatusCode } from '../../core-utils/miscs/http-error-codes' +import { AbstractCommand, OverrideCommandOptions } from '../shared' + +export class StatsCommand extends AbstractCommand { + + get (options: OverrideCommandOptions & { + useCache?: boolean // default false + } = {}) { + const { useCache = false } = options + const path = '/api/v1/server/stats' + + const query = { + t: useCache ? undefined : new Date().getTime() + } + + return this.getRequestBody({ + ...options, + + path, + query, + defaultExpectedStatus: HttpStatusCode.OK_200 + }) + } +} diff --git a/shared/extra-utils/server/stats.ts b/shared/extra-utils/server/stats.ts deleted file mode 100644 index b9dae24e2..000000000 --- a/shared/extra-utils/server/stats.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { makeGetRequest } from '../requests/requests' -import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes' - -function getStats (url: string, useCache = false) { - const path = '/api/v1/server/stats' - - const query = { - t: useCache ? undefined : new Date().getTime() - } - - return makeGetRequest({ - url, - path, - query, - statusCodeExpected: HttpStatusCode.OK_200 - }) -} - -// --------------------------------------------------------------------------- - -export { - getStats -}