docs: public static void main(String[] args)
        throws ExecutionException, InterruptedException, IOException {
      if (args.length < 3) {
        System.out.println(
            "Usage: java MetricsQuery <host:port> <component_name> <metrics_name>");
      }
  
      // construct metric cache stat url
      String url = "http://" + args[0] + MetricsCacheManagerHttpServer.PATH_STATS;
      System.out.println("endpoint: " + url + "; component: " + args[1]);
  
      // construct query payload
      byte[] requestData = TopologyMaster.MetricRequest.newBuilder()
          .setComponentName(args[1])
          .setMinutely(true)
          .setInterval(-1)
          .addAllMetric(Arrays.asList(Arrays.copyOfRange(args, 2, args.length)))
          .build().toByteArray();
  
      // http communication
      HttpURLConnection con = NetworkUtils.getHttpConnection(url);
      NetworkUtils.sendHttpPostRequest(con, "X", requestData);
      byte[] responseData = NetworkUtils.readHttpResponse(con);
  
      // parse response data
      TopologyMaster.MetricResponse response = TopologyMaster.MetricResponse.parseFrom(responseData);
  
      System.out.println(response.toString());
    }