async function deleteRemainingMetrics()

in src/metric-client.ts [123:172]


async function deleteRemainingMetrics(
  input: Input,
  metrics: Metric[]
): Promise<void> {
  const accessToken = await getToken()

  const url = `${getBaseUri(input)}/experiment-metrics?api-version=${apiVersion}&top=100`
  const headers = {
    Authorization: `Bearer ${accessToken}`,
    'Content-Type': 'application/merge-patch+json',
    Accept: '*/*'
  }

  const response = await axios.get(url, { headers })
  if (response.status >= 400) {
    const failMessage = `Failed to get metrics: ${response.statusText}. Status: ${response.status}. Message: ${JSON.stringify(response.data)}`
    core.error(failMessage)
    throw new ApiError(failMessage)
  }

  core.info(`Found ${response.data.value.length} metrics`)

  const metricIdsToKeep = metrics.map(metric => metric.id)
  const metricIdsToDelete: string[] = response.data.value
    .map((v: Metric) => v.id)
    .filter((item: string) => !metricIdsToKeep.includes(item))

  core.info(
    `Found ${metricIdsToDelete.length} metrics that needs to be deleted`
  )

  const deleteResults = await Promise.all(
    metricIdsToDelete.map((metricId: string) =>
      deleteMetric(input, metricId, accessToken).then(response => ({
        response,
        metricId
      }))
    )
  )

  const results = deleteResults.map(({ response, metricId }) => {
    return handleDeleteResult(response, metricId)
  })

  if (results.some(r => r == false)) {
    throw new ValidationError('Metric deletion failed')
  }

  core.info('Additional metrics are deleted successfully')
}