Package com.dianping.cat.agent.monitor.executors

Source Code of com.dianping.cat.agent.monitor.executors.TaskExecutors

package com.dianping.cat.agent.monitor.executors;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.ContainerHolder;
import org.unidal.lookup.annotation.Inject;

import com.dianping.cat.Cat;
import com.dianping.cat.agent.monitor.DataEntity;
import com.dianping.cat.agent.monitor.DataSender;
import com.dianping.cat.agent.monitor.executors.jvm.JVMMemoryExecutor;
import com.dianping.cat.agent.monitor.executors.jvm.JVMStateExecutor;
import com.dianping.cat.agent.monitor.executors.system.SystemPerformanceExecutor;
import com.dianping.cat.agent.monitor.executors.system.SystemStateExecutor;
import com.dianping.cat.message.Transaction;

public class TaskExecutors extends ContainerHolder implements Task, Initializable {

  @Inject
  private DataSender m_sender;

  @Inject
  private EnvConfig m_config;

  private Collection<Executor> m_executors = new ArrayList<Executor>();

  private static final long DURATION = 5 * 1000;

  @Override
  public String getName() {
    return "executors-task";
  }

  @Override
  public void initialize() throws InitializationException {
    String agent = System.getProperty("agent", "executors");

    if ("executors".equalsIgnoreCase(agent)) {
      Map<String, Executor> map = lookupMap(Executor.class);
      String monitors = m_config.getMonitors();

      if (monitors.toLowerCase().contains("system")) {
        m_executors.add(map.get(SystemPerformanceExecutor.ID));
        m_executors.add(map.get(SystemStateExecutor.ID));
      }

      if (monitors.toLowerCase().contains("tomcat")) {
        m_executors.add(map.get(JVMMemoryExecutor.ID));
        m_executors.add(map.get(JVMStateExecutor.ID));
      }
      Threads.forGroup("cat").start(this);
    }
  }

  @Override
  public void run() {
    boolean active = true;

    while (active) {
      Transaction t = Cat.newTransaction("Agent", "Executors");

      try {
        long current = System.currentTimeMillis();

        for (Executor executor : m_executors) {
          Transaction t2 = Cat.newTransaction("Executor", executor.getId());
          try {
            List<DataEntity> entities = executor.execute();

            m_sender.put(entities);
            t2.setStatus(Transaction.SUCCESS);
          } catch (Exception e) {
            t2.setStatus(e);
            Cat.logError(e);
          } finally {
            t2.complete();
          }
        }
        t.setStatus(Transaction.SUCCESS);

        long duration = System.currentTimeMillis() - current;

        try {
          if (duration < DURATION) {
            Thread.sleep(DURATION - duration);
          }
        } catch (InterruptedException e) {
          active = false;
        }

      } catch (Exception e) {
        Cat.logError(e);
      } finally {
        t.complete();
      }
    }
  }

  @Override
  public void shutdown() {

  }

}
TOP

Related Classes of com.dianping.cat.agent.monitor.executors.TaskExecutors

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.