Super helpful, thanks!

We're using it to track incident.priority but also wanted to stop tracking at incident.state == 'Resolved' vs 'Closed'. This works perfectly.

Here's the script typed out to make it easier for the next person:

//incident.state = Resolved is 6
if (current.state == 6) {
    answer = false;
    mi.endDuration();
    closeMetricDuration(mi.current);
}

function closeMetricDuration(current) {
    var gr = new GlideRecord('metric_instance');
    gr.addQuery('id', current.sys_id);
    gr.addQuery('calculation_complete', false);
    gr.addQuery('definition.type', 'field_value_duration');
    gr.addQuery('definition.name', 'Incident Priority Duration');
    gr.query();
    while (gr.next()) {
        var definition = new GlideRecord('metric_definition');
        definition.get(gr.definition);
        var mi = new MetricInstance(definition, current);
        mi.endDuration();
    }
}