public static Optional<ParsedMetricName> parseMetricName(String metricName) {
    if (metricName.isEmpty()) {
      return Optional.empty();
    }

    List<String> metricNameSplit =
        Splitter.on(METRIC_NAME_DELIMITER).limit(2).splitToList(metricName);

    if (metricNameSplit.size() == 0 || metricNameSplit.get(0).isEmpty()) {
      return Optional.empty();
    }

    if (metricNameSplit.size() == 1) {
      return Optional.of(ParsedMetricName.create(metricNameSplit.get(0)));
    }

    Splitter.MapSplitter splitter =
        Splitter.on(LABEL_DELIMITER).omitEmptyStrings().withKeyValueSeparator(METRIC_KV_DELIMITER);
    try {
      Map<String, String> labels = splitter.split(metricNameSplit.get(1));
      return Optional.of(ParsedMetricName.create(metricNameSplit.get(0), labels));
    } catch (IllegalArgumentException e) {
      return Optional.of(ParsedMetricName.create(metricNameSplit.get(0)));
    }
  }
@Test
  public void testParseMetricName_noLabels() {
    String baseMetricName = "baseMetricName";
    LabeledMetricNameUtils.MetricNameBuilder builder =
        LabeledMetricNameUtils.MetricNameBuilder.baseNameBuilder(baseMetricName);
    String metricName = builder.build("namespace").getName();
    Optional<LabeledMetricNameUtils.ParsedMetricName> parsedName =
        LabeledMetricNameUtils.parseMetricName(metricName);

    LabeledMetricNameUtils.ParsedMetricName expectedParsedName =
        LabeledMetricNameUtils.ParsedMetricName.create(baseMetricName);

    assertThat(parsedName.isPresent(), equalTo(true));
    assertThat(parsedName.get(), equalTo(expectedParsedName));
    assertThat(parsedName.get().getBaseName(), equalTo(baseMetricName));
  }