private updateMetricValues()

in src/statscollector/StatsCollector.ts [255:301]


  private updateMetricValues(rawMetricReport: RawMetricReport, isStream: boolean): void {
    const metricReport = isStream
      ? this.clientMetricReport.streamMetricReports[Number(rawMetricReport.ssrc)]
      : this.clientMetricReport.globalMetricReport;

    let metricMap: {
      [id: string]: {
        transform?: (metricName?: string, ssrc?: number) => number;
        type?: SdkMetric.Type;
        source?: string;
      };
    };
    if (isStream) {
      const mediaType = (metricReport as StreamMetricReport).mediaType;
      const direction = (metricReport as StreamMetricReport).direction;
      metricMap = this.clientMetricReport.getMetricMap(mediaType, direction);
      if (mediaType === MediaType.VIDEO && direction === Direction.DOWNSTREAM) {
        this.addRenderResolutionToVideoDownstreamMetrics(
          metricReport as StreamMetricReport,
          rawMetricReport.ssrc
        );
      }
    } else {
      metricMap = this.clientMetricReport.getMetricMap();
    }

    for (const rawMetric in rawMetricReport) {
      if (rawMetric in metricMap) {
        if (typeof rawMetricReport[rawMetric] === 'number') {
          metricReport.previousMetrics[rawMetric] = metricReport.currentMetrics[rawMetric];
          metricReport.currentMetrics[rawMetric] = rawMetricReport[rawMetric];
        } else if (typeof rawMetricReport[rawMetric] === 'string') {
          metricReport.currentStringMetrics[rawMetric] = rawMetricReport[rawMetric];
        } else if (typeof rawMetricReport[rawMetric] === 'object') {
          metricReport.previousObjectMetrics[rawMetric] =
            metricReport.currentObjectMetrics[rawMetric] === undefined
              ? rawMetricReport[rawMetric]
              : metricReport.currentObjectMetrics[rawMetric];
          metricReport.currentObjectMetrics[rawMetric] = rawMetricReport[rawMetric];
        } else {
          this.logger.error(
            `Unknown metric value type ${typeof rawMetricReport[rawMetric]} for metric ${rawMetric}`
          );
        }
      }
    }
  }