Refactor metrics interfaces to allow for custom metrics implementations