NodeLevelMetrics getDataNodeBasedMetrics(DataNodeId dataNodeId) {
    // If datanode is not yet in the map, create a new NodeLevelMetrics and add it into map. This may happen when
    // dynamically adding new nodes into cluster.
    return dataNodeToMetrics.computeIfAbsent(dataNodeId, k -> new NodeLevelMetrics(metricRegistry,
        dataNodeId.getDatacenterName() + "." + dataNodeId.getHostname() + "." + dataNodeId.getPort()));
  }
Get {@link NodeLevelMetrics} for a given {@link DataNodeId}. The construction of {@code dataNodeToMetrics}
and any {@link DataNodeId} as a key passed to this method are all based on the {@link ClusterMap}, and the
key should always exist. If the {@link DataNodeId} as the key does not exist, this will be a programming
error.
@param dataNodeId The {@link DataNodeId} to be indexed.
@return The {@link NodeLevelMetrics}.
ambry-router/src/main/java/com/github/ambry/router/NonBlockingRouterMetrics.java