await metricScope()

in src/backend/inventory/canary.lambda.ts [189:223]


    await metricScope((metrics) => async (language: DocumentationLanguage, data: PerLanguageData) => {
      console.log( '');
      console.log('##################################################');
      console.log(`### Start of data for ${language}`);

      metrics.setDimensions({ [LANGUAGE_DIMENSION]: language.toString() });

      for (const forStatus of [
        PerLanguageStatus.SUPPORTED,
        PerLanguageStatus.UNSUPPORTED,
        PerLanguageStatus.MISSING,
        PerLanguageStatus.CORRUPT_ASSEMBLY,
      ]) {
        for (const [key, statuses] of Object.entries(data)) {
          let filtered = Array.from(statuses.entries()).filter(([, status]) => forStatus === status);
          let metricName = METRIC_NAME_BY_STATUS_AND_GRAIN[forStatus as PerLanguageStatus][key as keyof PerLanguageData];

          if ((forStatus === PerLanguageStatus.MISSING && metricName === MetricName.PER_LANGUAGE_MISSING_VERSIONS)
           || (forStatus === PerLanguageStatus.CORRUPT_ASSEMBLY && metricName === MetricName.PER_LANGUAGE_CORRUPT_ASSEMBLY_VERSIONS)) {
            // generate reports for missing/corrupt only for package versions granularity
            const reportKey = forStatus === PerLanguageStatus.MISSING ?
              constants.missingDocumentationReport(language) :
              constants.corruptAssemblyReport(language);
            createReport(reportKey, filtered.map(([name]) => name).sort());
          }

          console.log(`${forStatus} ${key} for ${language}: ${filtered.length} entries`);
          metrics.putMetric(metricName, filtered.length, Unit.Count);
        }
      }

      console.log(`### End of data for ${language}`);
      console.log('##################################################');
      console.log('');
    })(...entry);