viewers-observers-builder.ts 846 B

123456789101112131415161718192021222324
  1. import { Meter } from '@opentelemetry/api'
  2. import { VideoScope, ViewerScope } from '@server/lib/views/shared/index.js'
  3. import { VideoViewsManager } from '@server/lib/views/video-views-manager.js'
  4. export class ViewersObserversBuilder {
  5. constructor (private readonly meter: Meter) {
  6. }
  7. buildObservers () {
  8. this.meter.createObservableGauge('peertube_viewers_total', {
  9. description: 'Total viewers on the instance'
  10. }).addCallback(observableResult => {
  11. for (const viewerScope of [ 'local', 'remote' ] as ViewerScope[]) {
  12. for (const videoScope of [ 'local', 'remote' ] as VideoScope[]) {
  13. const result = VideoViewsManager.Instance.getTotalViewers({ viewerScope, videoScope })
  14. observableResult.observe(result, { viewerOrigin: viewerScope, videoOrigin: videoScope })
  15. }
  16. }
  17. })
  18. }
  19. }