Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.nitorcreations.willow.autoscaler.metrics;
  
 
 import java.net.URI;
 import java.util.List;
 import java.util.Map;
 
 public class MetricPoller {
 
   private Logger logger = Logger.getLogger(this.getClass().getCanonicalName());
 
   @Inject
   Gson gson;
   @Inject
   @Inject
 
 
   public void initialize(List<AutoScalingGroupConfiggroupsURI uri) {
      = new HashMap<>();
     for (AutoScalingGroupConfig group : groups) {
       Map<StringGroupMetricListenergroupListeners = .get(group);
       if (groupListeners == null) {
         groupListeners = new HashMap<>();
         .put(groupgroupListeners);
       }
       for (AutoScalingPolicy policy : group.getScalingPolicies()) {
         String metricName = policy.getMetricName();
         if (!groupListeners.containsKey(metricName)) {
           GroupMetricListener listener = new GroupMetricListener(groupmetricNameuri);
           groupListeners.put(metricNamelistener);
           Future<?> future = .submit(listener);
           if (!future.isDone()) {
             .fine("Started metrics listener for " + listener.metricName);
           }
         }
       }
     }
   }
 
   public class GroupMetricListener implements Runnable {
 
     private Logger logger = Logger.getLogger(this.getClass().getCanonicalName());
 
     private AutoScalingGroupConfig group;
     private String metricName;
     private URI uri;
     private WebSocketClient client;
     private AtomicBoolean running = new AtomicBoolean(true);
     private CountDownLatch connectLatch = new CountDownLatch(1);
 
     private GroupMetricListener(AutoScalingGroupConfig groupString metricNameURI uri) {
       this. = group;
       this. = metricName;
       this. = uri;
       createClient();
     }
 
     public synchronized WebSocketClient getClient() {
       if (this. == null) {
         this. = new WebSocketClient();
       }
       return this.;
     }
 
     public synchronized void setClient(WebSocketClient client) {
       this. = client;
     }
 
     public synchronized WebSocketClient createClient() {
       this. = new WebSocketClient();
       return this.;
     }
 
     public void connect() throws Exception {
       .info("Connecting metric listener for group " + .getName() + ", metric " + );
      WebSocketClient client = createClient();
      client.start();
      client.setAsyncWriteTimeout(5000);
      client.setConnectTimeout(2000);
      client.setStopTimeout(5000);
      ClientUpgradeRequest request = new ClientUpgradeRequest();
      request.setHeader(
          "Authorization",
          SSHAgentAuthorizationUtil.getSshAgentAuthorization(System.getProperty("user.name""willow")));
      Future<Sessionfuture = client.connect(thisrequest);
      .info(String.format("Connecting to : %s"));
      try {
        future.get();
        .info(String.format("Connected to : %s"));
      } catch (Exception e) {
        .log(."Failed to connect metric poller with uri " + e);
        if (client.isRunning()) {
          client.stop();
          client.destroy();
        }
        throw e;
      }
    }
    public void messageReceived(Session sessionString message) {
      try {
        if (message == null || message.isEmpty()) {
          return;
        }
        List<TimePoint<Double>> values = .fromJson(messagenew TypeToken<List<TimePoint<Double>>>(){}.getType());
        if (values == null || values.isEmpty()) {
          return;
        }
        TimePoint<DoublemetricValue = values.get(values.size() - 1);
        .addMetricValue(.getName(), metricValue);
      } catch (Throwable e) {
        .log(."fail in receiving metric data"e);
      }
    }
    public void handleClose(Session closedSessionint statusCodeString reason) {
      .log(."Metric listener websocket closed with status " + statusCode + ". Reason: " + reason);
      closeClient();
      .countDown();
    }
    public void handleError(Session errorSessionThrowable throwable) {
      .log(."Metric listener websocket error"throwable);
      closeClient();
      .countDown();
    }
    public void startPolling(Session session) {
      .info("Sending poll request for " + this. + " in group " + .getName());
      long now = System.currentTimeMillis();
      MetricConfig metricConfig = new MetricConfig();
      metricConfig.setMetricKey(this.);
      metricConfig.setStart(now - 20000);
      metricConfig.setStop(now - 10000);
      metricConfig.setStep(10000);
      //metricConfig.setMinSteps(1);
      metricConfig.setTags("group_" + .getName());
      .info(.toJson(metricConfig));
      try {
        session.getRemote().sendString(.toJson(metricConfig));
      } catch (IOException e) {
        .log(."Failed to send metric polling request"e);
        closeClient();
        .countDown();
      }
    }
    @Override
    public void run() {
      while (.get() && !Thread.currentThread().isInterrupted()) {
        WebSocketClient client = getClient();
        if (!client.isRunning() && !client.isStarting() || client.isFailed()) {
          try {
            connect();
             = new CountDownLatch(1);
          } catch (Exception e) {
            .log(."Error setting up web socket connection"e);
          }
        }
        try {
          .await();
        } catch (InterruptedException e) {
        }
      }
    }
    public void stop() {
      .set(false);
      .countDown();
    }
    private void closeClient() {
      try {
        WebSocketClient client = getClient();
        if (client.isRunning()) {
          client.stop();
          client.destroy();
        }
      } catch (Exception e) {
        .log(."error stopping websocket client"e);
      }
    }
  }
New to GrepCode? Check out our FAQ X