in packages/opentelemetry-cloud-monitoring-exporter/src/monitoring.ts [133:184]
private async _exportAsync(
resourceMetrics: ResourceMetrics
): Promise<ExportResult> {
if (this._projectId instanceof Promise) {
this._projectId = await this._projectId;
}
if (!this._projectId) {
const error = new Error('expecting a non-blank ProjectID');
diag.error(error.message);
return {code: ExportResultCode.FAILED, error};
}
diag.debug('Google Cloud Monitoring export');
const resource = mapOtelResourceToMonitoredResource(
resourceMetrics.resource
);
const timeSeries: TimeSeries[] = [];
for (const scopeMetric of resourceMetrics.scopeMetrics) {
for (const metric of scopeMetric.metrics) {
const isRegistered =
this._disableCreateMetricDescriptors ||
(await this._registerMetricDescriptor(metric));
if (isRegistered) {
timeSeries.push(
...createTimeSeries(metric, resource, this._metricPrefix)
);
}
}
}
let failure: {sendFailed: false} | {sendFailed: true; error: Error} = {
sendFailed: false,
};
for (const batchedTimeSeries of partitionList(
timeSeries,
MAX_BATCH_EXPORT_SIZE
)) {
try {
await this._sendTimeSeries(batchedTimeSeries);
} catch (e) {
const err = asError(e);
err.message = `Send TimeSeries failed: ${err.message}`;
failure = {sendFailed: true, error: err};
diag.error(err.message);
}
}
if (failure.sendFailed) {
return {code: ExportResultCode.FAILED, error: failure.error};
}
return {code: ExportResultCode.SUCCESS};
}