|
@@ -1,8 +1,9 @@
|
|
|
package com.usthe.collector.dispatch;
|
|
package com.usthe.collector.dispatch;
|
|
|
|
|
|
|
|
import com.usthe.collector.dispatch.export.KafkaDataExporter;
|
|
import com.usthe.collector.dispatch.export.KafkaDataExporter;
|
|
|
|
|
+import com.usthe.collector.dispatch.timer.Timeout;
|
|
|
import com.usthe.collector.dispatch.timer.TimerDispatch;
|
|
import com.usthe.collector.dispatch.timer.TimerDispatch;
|
|
|
-import com.usthe.collector.dispatch.timer.WheelTimerJob;
|
|
|
|
|
|
|
+import com.usthe.collector.dispatch.timer.WheelTimerTask;
|
|
|
import com.usthe.common.entity.job.Job;
|
|
import com.usthe.common.entity.job.Job;
|
|
|
import com.usthe.common.entity.job.Metrics;
|
|
import com.usthe.common.entity.job.Metrics;
|
|
|
import com.usthe.common.entity.message.CollectRep;
|
|
import com.usthe.common.entity.message.CollectRep;
|
|
@@ -11,7 +12,6 @@ import lombok.Data;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
-import java.util.EventListener;
|
|
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
@@ -100,13 +100,14 @@ public class CommonDispatcher implements MetricsTaskDispatch, CollectDataDispatc
|
|
|
MetricsTime metricsTime = entry.getValue();
|
|
MetricsTime metricsTime = entry.getValue();
|
|
|
if (metricsTime.getStartTime() < deadline) {
|
|
if (metricsTime.getStartTime() < deadline) {
|
|
|
// 指标组采集超时
|
|
// 指标组采集超时
|
|
|
|
|
+ WheelTimerTask timerJob = (WheelTimerTask) metricsTime.getTimeout().task();
|
|
|
CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder()
|
|
CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder()
|
|
|
- .setId(metricsTime.getTimerJob().getJob().getMonitorId())
|
|
|
|
|
- .setApp(metricsTime.getTimerJob().getJob().getApp())
|
|
|
|
|
|
|
+ .setId(timerJob.getJob().getMonitorId())
|
|
|
|
|
+ .setApp(timerJob.getJob().getApp())
|
|
|
.setMetrics(metricsTime.getMetrics().getName())
|
|
.setMetrics(metricsTime.getMetrics().getName())
|
|
|
.setTime(System.currentTimeMillis())
|
|
.setTime(System.currentTimeMillis())
|
|
|
.setCode(CollectRep.Code.TIMEOUT).setMsg("collect timeout").build();
|
|
.setCode(CollectRep.Code.TIMEOUT).setMsg("collect timeout").build();
|
|
|
- dispatchCollectData(metricsTime.getTimerJob(), metricsTime.getMetrics(), metricsData);
|
|
|
|
|
|
|
+ dispatchCollectData(metricsTime.timeout, metricsTime.getMetrics(), metricsData);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
Thread.sleep(20000);
|
|
Thread.sleep(20000);
|
|
@@ -118,22 +119,24 @@ public class CommonDispatcher implements MetricsTaskDispatch, CollectDataDispatc
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public void dispatchMetricsTask(WheelTimerJob timerJob) {
|
|
|
|
|
|
|
+ public void dispatchMetricsTask(Timeout timeout) {
|
|
|
// 将单个应用的采集任务根据其下的指标组拆分为对应的指标组采集任务 AbstractCollect
|
|
// 将单个应用的采集任务根据其下的指标组拆分为对应的指标组采集任务 AbstractCollect
|
|
|
// 将每个指标组放入线程池进行调度
|
|
// 将每个指标组放入线程池进行调度
|
|
|
- Job job = timerJob.getJob();
|
|
|
|
|
|
|
+ WheelTimerTask timerTask = (WheelTimerTask) timeout.task();
|
|
|
|
|
+ Job job = timerTask.getJob();
|
|
|
job.constructPriorMetrics();
|
|
job.constructPriorMetrics();
|
|
|
Set<Metrics> metricsSet = job.getNextCollectMetrics(null, true);
|
|
Set<Metrics> metricsSet = job.getNextCollectMetrics(null, true);
|
|
|
metricsSet.forEach(metrics -> {
|
|
metricsSet.forEach(metrics -> {
|
|
|
- MetricsCollect metricsCollect = new MetricsCollect(metrics, timerJob, this);
|
|
|
|
|
|
|
+ MetricsCollect metricsCollect = new MetricsCollect(metrics, timeout, this);
|
|
|
jobRequestQueue.addJob(metricsCollect);
|
|
jobRequestQueue.addJob(metricsCollect);
|
|
|
metricsTimeoutMonitorMap.put(job.getId() + metrics.getName(),
|
|
metricsTimeoutMonitorMap.put(job.getId() + metrics.getName(),
|
|
|
- new MetricsTime(System.currentTimeMillis(), metrics, timerJob));
|
|
|
|
|
|
|
+ new MetricsTime(System.currentTimeMillis(), metrics, timeout));
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public void dispatchCollectData(WheelTimerJob timerJob, Metrics metrics, CollectRep.MetricsData metricsData) {
|
|
|
|
|
|
|
+ public void dispatchCollectData(Timeout timeout, Metrics metrics, CollectRep.MetricsData metricsData) {
|
|
|
|
|
+ WheelTimerTask timerJob = (WheelTimerTask) timeout.task();
|
|
|
Job job = timerJob.getJob();
|
|
Job job = timerJob.getJob();
|
|
|
Set<Metrics> metricsSet = job.getNextCollectMetrics(metrics, false);
|
|
Set<Metrics> metricsSet = job.getNextCollectMetrics(metrics, false);
|
|
|
if (job.isCyclic()) {
|
|
if (job.isCyclic()) {
|
|
@@ -143,7 +146,10 @@ public class CommonDispatcher implements MetricsTaskDispatch, CollectDataDispatc
|
|
|
// 此Job所有指标组采集执行完成
|
|
// 此Job所有指标组采集执行完成
|
|
|
// 周期性任务再次将任务push到时间轮
|
|
// 周期性任务再次将任务push到时间轮
|
|
|
// 先判断此次任务执行时间与任务采集间隔时间
|
|
// 先判断此次任务执行时间与任务采集间隔时间
|
|
|
- long spendTime = System.currentTimeMillis() - job.getTimestamp();
|
|
|
|
|
|
|
+ if (timeout.isCancelled()) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ long spendTime = System.currentTimeMillis() - job.getDispatchTime();
|
|
|
long interval = job.getInterval() - spendTime / 1000;
|
|
long interval = job.getInterval() - spendTime / 1000;
|
|
|
interval = interval <= 0 ? 0 : interval;
|
|
interval = interval <= 0 ? 0 : interval;
|
|
|
// 重置构造执行指标组视图
|
|
// 重置构造执行指标组视图
|
|
@@ -152,10 +158,10 @@ public class CommonDispatcher implements MetricsTaskDispatch, CollectDataDispatc
|
|
|
} else if (!metricsSet.isEmpty()) {
|
|
} else if (!metricsSet.isEmpty()) {
|
|
|
// 当前级别指标组执行完成,开始执行下一级别的指标组
|
|
// 当前级别指标组执行完成,开始执行下一级别的指标组
|
|
|
metricsSet.forEach(metricItem -> {
|
|
metricsSet.forEach(metricItem -> {
|
|
|
- MetricsCollect metricsCollect = new MetricsCollect(metricItem, timerJob, this);
|
|
|
|
|
|
|
+ MetricsCollect metricsCollect = new MetricsCollect(metricItem, timeout, this);
|
|
|
jobRequestQueue.addJob(metricsCollect);
|
|
jobRequestQueue.addJob(metricsCollect);
|
|
|
metricsTimeoutMonitorMap.put(job.getId() + metrics.getName(),
|
|
metricsTimeoutMonitorMap.put(job.getId() + metrics.getName(),
|
|
|
- new MetricsTime(System.currentTimeMillis(), metrics, timerJob));
|
|
|
|
|
|
|
+ new MetricsTime(System.currentTimeMillis(), metrics, timeout));
|
|
|
});
|
|
});
|
|
|
} else {
|
|
} else {
|
|
|
// 当前执行级别的指标组列表未全执行完成,
|
|
// 当前执行级别的指标组列表未全执行完成,
|
|
@@ -168,14 +174,14 @@ public class CommonDispatcher implements MetricsTaskDispatch, CollectDataDispatc
|
|
|
if (metricsSet == null) {
|
|
if (metricsSet == null) {
|
|
|
// 此Job所有指标组采集执行完成
|
|
// 此Job所有指标组采集执行完成
|
|
|
// 将所有指标组数据组合一起通知结果监听器
|
|
// 将所有指标组数据组合一起通知结果监听器
|
|
|
- timerDispatch.responseSyncJobData(job.getId(), job.getMetricsDataTemps());
|
|
|
|
|
|
|
+ timerDispatch.responseSyncJobData(job.getId(), job.getResponseDataTemp());
|
|
|
} else if (!metricsSet.isEmpty()) {
|
|
} else if (!metricsSet.isEmpty()) {
|
|
|
// 当前级别指标组执行完成,开始执行下一级别的指标组
|
|
// 当前级别指标组执行完成,开始执行下一级别的指标组
|
|
|
metricsSet.forEach(metricItem -> {
|
|
metricsSet.forEach(metricItem -> {
|
|
|
- MetricsCollect metricsCollect = new MetricsCollect(metricItem, timerJob, this);
|
|
|
|
|
|
|
+ MetricsCollect metricsCollect = new MetricsCollect(metricItem, timeout, this);
|
|
|
jobRequestQueue.addJob(metricsCollect);
|
|
jobRequestQueue.addJob(metricsCollect);
|
|
|
metricsTimeoutMonitorMap.put(job.getId() + metrics.getName(),
|
|
metricsTimeoutMonitorMap.put(job.getId() + metrics.getName(),
|
|
|
- new MetricsTime(System.currentTimeMillis(), metrics, timerJob));
|
|
|
|
|
|
|
+ new MetricsTime(System.currentTimeMillis(), metrics, timeout));
|
|
|
});
|
|
});
|
|
|
} else {
|
|
} else {
|
|
|
// 当前执行级别的指标组列表未全执行完成,
|
|
// 当前执行级别的指标组列表未全执行完成,
|
|
@@ -189,6 +195,6 @@ public class CommonDispatcher implements MetricsTaskDispatch, CollectDataDispatc
|
|
|
private static class MetricsTime {
|
|
private static class MetricsTime {
|
|
|
private long startTime;
|
|
private long startTime;
|
|
|
private Metrics metrics;
|
|
private Metrics metrics;
|
|
|
- private WheelTimerJob timerJob;
|
|
|
|
|
|
|
+ private Timeout timeout;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|