예제 #1
0
  @SuppressWarnings("unchecked")
  public void poll() {
    try {
      String url = getRuleURL();
      if (url == null) {
        return;
      }

      FullResponseHolder response =
          httpClient.go(new Request(HttpMethod.GET, new URL(url)), responseHandler).get();

      if (response.getStatus().equals(HttpResponseStatus.FOUND)) {
        url = response.getResponse().headers().get("Location");
        log.info("Redirecting rule request to [%s]", url);
        response = httpClient.go(new Request(HttpMethod.GET, new URL(url)), responseHandler).get();
      }

      ConcurrentHashMap<String, List<Rule>> newRules =
          new ConcurrentHashMap<>(
              (Map<String, List<Rule>>)
                  jsonMapper.readValue(
                      response.getContent(), new TypeReference<Map<String, List<Rule>>>() {}));

      log.info("Got [%,d] rules", newRules.keySet().size());

      rules.set(newRules);
    } catch (Exception e) {
      log.error(e, "Exception while polling for rules");
    }
  }
예제 #2
0
 @Override
 public <T> QueryRunner<T> getQueryRunner(DruidServer server) {
   synchronized (lock) {
     QueryableDruidServer queryableDruidServer = clients.get(server.getName());
     if (queryableDruidServer == null) {
       log.error("WTF?! No QueryableDruidServer found for %s", server.getName());
       return null;
     }
     return queryableDruidServer.getClient();
   }
 }
예제 #3
0
  private String getRuleURL() throws URISyntaxException {
    Server server = selector.pick();

    if (server == null) {
      log.error("No instances found for [%s]!", config.get().getCoordinatorServiceName());
      return null;
    }

    return new URI(
            server.getScheme(),
            null,
            server.getAddress(),
            server.getPort(),
            config.get().getRulesEndpoint(),
            null,
            null)
        .toString();
  }