From ce6b3765a2d31b9b90b7a1435e7180b91cba57b3 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 28 Jul 2022 10:56:05 +0200 Subject: [PATCH] Add more tracing --- package.json | 1 + server/lib/opentelemetry/tracing.ts | 4 +++- server/models/video/formatter/video-format-utils.ts | 9 +++++++++ server/models/video/video.ts | 5 +++++ yarn.lock | 11 ++++++++++- 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 16c9c4c0f..db433bfc2 100644 --- a/package.json +++ b/package.json @@ -149,6 +149,7 @@ "multer": "^1.4.5-lts.1", "node-media-server": "^2.1.4", "nodemailer": "^6.0.0", + "opentelemetry-instrumentation-sequelize": "^0.29.0", "parse-torrent": "^9.1.0", "password-generator": "^2.0.2", "pg": "^8.2.1", diff --git a/server/lib/opentelemetry/tracing.ts b/server/lib/opentelemetry/tracing.ts index 23764e9e4..252a3b664 100644 --- a/server/lib/opentelemetry/tracing.ts +++ b/server/lib/opentelemetry/tracing.ts @@ -1,3 +1,4 @@ +import { SequelizeInstrumentation } from 'opentelemetry-instrumentation-sequelize' import { diag, DiagLogLevel, trace } from '@opentelemetry/api' import { JaegerExporter } from '@opentelemetry/exporter-jaeger' import { registerInstrumentations } from '@opentelemetry/instrumentation' @@ -60,7 +61,8 @@ function registerOpentelemetryTracing () { return [ cmdName, ...cmdArgs ].join(' ') } }), - new FsInstrumentation() + new FsInstrumentation(), + new SequelizeInstrumentation() ] }) diff --git a/server/models/video/formatter/video-format-utils.ts b/server/models/video/formatter/video-format-utils.ts index 6222107d7..fd02f8c64 100644 --- a/server/models/video/formatter/video-format-utils.ts +++ b/server/models/video/formatter/video-format-utils.ts @@ -1,5 +1,6 @@ import { generateMagnetUri } from '@server/helpers/webtorrent' import { getActivityStreamDuration } from '@server/lib/activitypub/activity' +import { tracer } from '@server/lib/opentelemetry/tracing' import { getLocalVideoFileMetadataUrl } from '@server/lib/video-urls' import { VideoViewsManager } from '@server/lib/views/video-views-manager' import { uuidToShort } from '@shared/extra-utils' @@ -71,6 +72,8 @@ function guessAdditionalAttributesFromQuery (query: VideosCommonQueryAfterSaniti } function videoModelToFormattedJSON (video: MVideoFormattable, options: VideoFormattingJSONOptions = {}): Video { + const span = tracer.startSpan('peertube.VideoModel.toFormattedJSON') + const userHistory = isArray(video.UserVideoHistories) ? video.UserVideoHistories[0] : undefined const videoObject: Video = { @@ -168,10 +171,14 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options: VideoForm videoObject.files = videoFilesModelToFormattedJSON(video, video.VideoFiles) } + span.end() + return videoObject } function videoModelToFormattedDetailsJSON (video: MVideoFormattableDetails): VideoDetails { + const span = tracer.startSpan('peertube.VideoModel.toFormattedDetailsJSON') + const videoJSON = video.toFormattedJSON({ additionalAttributes: { scheduledUpdate: true, @@ -199,6 +206,8 @@ function videoModelToFormattedDetailsJSON (video: MVideoFormattableDetails): Vid trackerUrls: video.getTrackerUrls() } + span.end() + return Object.assign(videoJSON, detailsJSON) } diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 924f12a5e..7e9bb4db4 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -27,6 +27,7 @@ import { import { getPrivaciesForFederation, isPrivacyForFederation, isStateForFederation } from '@server/helpers/video' import { LiveManager } from '@server/lib/live/live-manager' import { removeHLSFileObjectStorage, removeHLSObjectStorage, removeWebTorrentObjectStorage } from '@server/lib/object-storage' +import { tracer } from '@server/lib/opentelemetry/tracing' import { getHLSDirectory, getHLSRedundancyDirectory } from '@server/lib/paths' import { VideoPathManager } from '@server/lib/video-path-manager' import { getServerActor } from '@server/models/application/application' @@ -1535,6 +1536,8 @@ export class VideoModel extends Model>> { options: BuildVideosListQueryOptions, countVideos = true ): Promise> { + const span = tracer.startSpan('peertube.VideoModel.getAvailableForApi') + function getCount () { if (countVideos !== true) return Promise.resolve(undefined) @@ -1554,6 +1557,8 @@ export class VideoModel extends Model>> { const [ count, rows ] = await Promise.all([ getCount(), getModels() ]) + span.end() + return { data: rows, total: count diff --git a/yarn.lock b/yarn.lock index 1d19a8a84..05fd3370a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1732,7 +1732,7 @@ semver "^7.3.2" shimmer "^1.2.1" -"@opentelemetry/instrumentation@^0.29.2": +"@opentelemetry/instrumentation@^0.29.0", "@opentelemetry/instrumentation@^0.29.2": version "0.29.2" resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.29.2.tgz#70e6d4e1a84508f5e9d8c7c426adcd7b0dba6c95" integrity sha512-LXx5V0ONNATQFCE8C5uqnxWSm4rcXLssdLHdXjtGdxRmURqj/JO8jYefqXCD0LzsqEQ6yxOx2GZ0dgXvhBVdTw== @@ -7027,6 +7027,15 @@ open@7: is-docker "^2.0.0" is-wsl "^2.1.1" +opentelemetry-instrumentation-sequelize@^0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/opentelemetry-instrumentation-sequelize/-/opentelemetry-instrumentation-sequelize-0.29.0.tgz#d8355b7c845473b3d66978b80620dba6f686e257" + integrity sha512-nBhWMhpOtFxR0+W9WwTC+g49UMPqDMusbceGycDJOaq9l7B/IGo8a15UHKm4N4uU/Cr1NTrvyJ0cFXUtSh7i3g== + dependencies: + "@opentelemetry/core" "^1.0.0" + "@opentelemetry/instrumentation" "^0.29.0" + "@opentelemetry/semantic-conventions" "^1.0.0" + opentracing@^0.14.4: version "0.14.7" resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.7.tgz#25d472bd0296dc0b64d7b94cbc995219031428f5"