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}`
);
}
}
}
}