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')
}