docs: public static void init(final String serviceName, final String env, final String hostInfo) {
          if (!DimensionsUtils.isValidName(serviceName)) {
              throw new IllegalArgumentException("Invalid service name");
          }
          if (MetricsManager.instance == null) {
              synchronized (MetricsManager.class) {
                  if (MetricsManager.instance == null) {
                      MetricsManager.instance = new MetricsManager(serviceName, env, hostInfo);
                      String envDimension = EMPTY_STRING;
                      if (env.trim().length() > 0) {
                          envDimension = ",env=" + env.trim();
                      }
                      MetricsManager.rootMetricsLogger = MetricsManager.instance.metricsLoggers
                              .computeIfAbsent("service=" + serviceName + envDimension, MetricsLogger::new);
                      MetricsManager.poolManager = new PoolingHttpClientConnectionManager(Integer.MAX_VALUE, TimeUnit.DAYS); //no more than 2 concurrent connections per given route
                      MetricsManager.httpClient = HttpClients.custom()
                              .setConnectionManager(poolManager)
                              .setKeepAliveStrategy((response, context) -> 60000)
                              .setRetryHandler(new DefaultHttpRequestRetryHandler()) // 3 times retry by default
                              .build();
                      if (!manualFlush) {
                          try {
                              executorService = Executors.newScheduledThreadPool(1);
                              executorService.scheduleAtFixedRate(() -> {
                                  try {
                                      flushAll(System.currentTimeMillis() / 1000);
                                  } catch (Throwable e) {
                                      // Don't stop the thread
                                      LOG.error(e);
                                  }
                              }, flushStartDelayInSeconds, flushInSeconds, SECONDS);
                          } catch (Throwable e) {
                              LOG.error("Cannot submit metrics", e);
                          }
                      }
                  }
              }
          }
      }