docs: protected void loadConfig() throws IOException {
      if (config_location != null && !config_location.isEmpty()) {
        loadConfig(config_location);
        return;
      }
  
      final ArrayList<String> file_locations = new ArrayList<String>();
  
      // search locally first
      file_locations.add("opentsdb.conf");
  
      // add default locations based on OS
      if (System.getProperty("os.name").toUpperCase().contains("WINDOWS")) {
        file_locations.add("C:\\Program Files\\opentsdb\\opentsdb.conf");
        file_locations.add("C:\\Program Files (x86)\\opentsdb\\opentsdb.conf");
      } else {
        file_locations.add("/etc/opentsdb.conf");
        file_locations.add("/etc/opentsdb/opentsdb.conf");
        file_locations.add("/opt/opentsdb/opentsdb.conf");
      }
  
      for (String file : file_locations) {
        try {
          FileInputStream file_stream = new FileInputStream(file);
          Properties props = new Properties();
          props.load(file_stream);
  
          // load the hash map
          loadHashMap(props);
        } catch (Exception e) {
          // don't do anything, the file may be missing and that's fine
          LOG.debug("Unable to find or load " + file, e);
          continue;
        }
  
        // no exceptions thrown, so save the valid path and exit
        LOG.info("Successfully loaded configuration file: " + file);
        config_location = file;
        return;
      }
  
      LOG.info("No configuration found, will use defaults");
    }