You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by ha...@apache.org on 2016/12/08 14:44:41 UTC
incubator-eagle git commit: [EAGLE-832] Support to define granularity
for MetricDefinition to avoid metric duplicate
Repository: incubator-eagle
Updated Branches:
refs/heads/master cfd4d38fd -> 02abe02c3
[EAGLE-832] Support to define granularity for MetricDefinition to avoid metric duplicate
Support to define granularity for MetricDefinition to avoid metric duplicate
Author: Hao Chen <ha...@apache.org>
Closes #724 from haoch/SupportGranularity.
Project: http://git-wip-us.apache.org/repos/asf/incubator-eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-eagle/commit/02abe02c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-eagle/tree/02abe02c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-eagle/diff/02abe02c
Branch: refs/heads/master
Commit: 02abe02c37cd4351ea456ccf42fe24fb9544682d
Parents: cfd4d38
Author: Hao Chen <ha...@apache.org>
Authored: Thu Dec 8 22:44:29 2016 +0800
Committer: Hao Chen <ha...@apache.org>
Committed: Thu Dec 8 22:44:29 2016 +0800
----------------------------------------------------------------------
.../environment/builder/MetricDefinition.java | 21 ++++++++++++++++++++
.../app/messaging/MetricStreamPersist.java | 3 ++-
.../eagle/metric/HadoopMetricMonitorApp.java | 3 +++
3 files changed, 26 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/02abe02c/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/builder/MetricDefinition.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/builder/MetricDefinition.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/builder/MetricDefinition.java
index 62a81b0..d45ad2b 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/builder/MetricDefinition.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/builder/MetricDefinition.java
@@ -19,6 +19,7 @@ package org.apache.eagle.app.environment.builder;
import java.io.Serializable;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.List;
import java.util.Map;
@@ -40,6 +41,11 @@ public class MetricDefinition implements Serializable {
private List<String> dimensionFields;
/**
+ * Metric granularity.
+ */
+ private int granularity = Calendar.MINUTE;
+
+ /**
* Metric value field name.
*/
private String valueField = "value";
@@ -76,6 +82,13 @@ public class MetricDefinition implements Serializable {
this.timestampSelector = timestampSelector;
}
+ public int getGranularity() {
+ return granularity;
+ }
+
+ public void setGranularity(int granularity) {
+ this.granularity = granularity;
+ }
@FunctionalInterface
public interface NameSelector extends Serializable {
@@ -93,6 +106,14 @@ public class MetricDefinition implements Serializable {
return metricDefinition;
}
+ /**
+ * @see java.util.Calendar
+ */
+ public MetricDefinition granularity(int granularity) {
+ this.setGranularity(granularity);
+ return this;
+ }
+
public static MetricDefinition namedByField(String nameField) {
MetricDefinition metricDefinition = new MetricDefinition();
metricDefinition.setNameSelector(new FieldNameSelector(nameField));
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/02abe02c/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/messaging/MetricStreamPersist.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/messaging/MetricStreamPersist.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/messaging/MetricStreamPersist.java
index 32b168b..2a1d8a8 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/messaging/MetricStreamPersist.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/messaging/MetricStreamPersist.java
@@ -26,6 +26,7 @@ import com.google.common.base.Preconditions;
import com.typesafe.config.Config;
import org.apache.eagle.app.environment.builder.MetricDefinition;
import org.apache.eagle.app.utils.StreamConvertHelper;
+import org.apache.eagle.common.DateTimeUtil;
import org.apache.eagle.log.entity.GenericMetricEntity;
import org.apache.eagle.log.entity.GenericServiceAPIResponseEntity;
import org.apache.eagle.service.client.IEagleServiceClient;
@@ -143,7 +144,7 @@ public class MetricStreamPersist extends BaseRichBolt {
GenericMetricEntity entity = new GenericMetricEntity();
entity.setPrefix(metricName);
- entity.setTimestamp(timestamp);
+ entity.setTimestamp(DateTimeUtil.roundDown(metricDefinition.getGranularity(), timestamp));
entity.setTags(tags);
entity.setValue(values);
return entity;
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/02abe02c/eagle-hadoop-metric/src/main/java/org/apache/eagle/metric/HadoopMetricMonitorApp.java
----------------------------------------------------------------------
diff --git a/eagle-hadoop-metric/src/main/java/org/apache/eagle/metric/HadoopMetricMonitorApp.java b/eagle-hadoop-metric/src/main/java/org/apache/eagle/metric/HadoopMetricMonitorApp.java
index 7f5e21b..323e5fe 100644
--- a/eagle-hadoop-metric/src/main/java/org/apache/eagle/metric/HadoopMetricMonitorApp.java
+++ b/eagle-hadoop-metric/src/main/java/org/apache/eagle/metric/HadoopMetricMonitorApp.java
@@ -23,6 +23,8 @@ import org.apache.eagle.app.environment.builder.CEPFunction;
import org.apache.eagle.app.environment.impl.StormEnvironment;
import org.apache.eagle.app.environment.builder.MetricDefinition;
+import java.util.Calendar;
+
public class HadoopMetricMonitorApp extends StormApplication {
@Override
public StormTopology execute(Config config, StormEnvironment environment) {
@@ -32,6 +34,7 @@ public class HadoopMetricMonitorApp extends StormApplication {
.namedByField("metric")
.eventTimeByField("timestamp")
.dimensionFields("host","component","site")
+ .granularity(Calendar.MINUTE)
.valueField("value"))
.toTopology();
}