mneethiraj commented on a change in pull request #39: ATLAS-3071:Add 
Functionalities to Collect Notification Metrics
URL: https://github.com/apache/atlas/pull/39#discussion_r272449826
 
 

 ##########
 File path: 
intg/src/main/java/org/apache/atlas/model/metrics/AtlasMetricsCounter.java
 ##########
 @@ -0,0 +1,255 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.atlas.model.metrics;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static 
com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Atlas statistics
+ */
+@JsonAutoDetect(getterVisibility = PUBLIC_ONLY, setterVisibility = 
PUBLIC_ONLY, fieldVisibility = NONE)
+@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class AtlasMetricsCounter {
+    private static final Logger LOG = 
LoggerFactory.getLogger(AtlasMetricsCounter.class);
+
+    public static final String STAT_SERVER_START_TS                = 
"serverStartTimeStamp";
+    public static final String STAT_SERVER_ACTIVE_TS               = 
"serverActiveTimeStamp";
+    public static final String STAT_SERVER_UP_SINCE                = 
"serverUpTime";
+    public static final String STAT_START_OFFSET                   = 
"KafkaTopic:ATLAS_HOOK:startOffset";
+    public static final String STAT_CURRENT_OFFSET                 = 
"KafkaTopic:ATLAS_HOOK:currentOffset";
+    public static final String STAT_SOLR_STATUS                    = 
"solrConnectionStatus";
+    public static final String STAT_HBASE_STATUS                   = 
"HBaseConnectionStatus";
+    public static final String STAT_LAST_MESSAGE_PROCESSED_TIME_TS = 
"lastMessageProcessedTimeStamp";
+    public static final String STAT_AVG_MESSAGE_PROCESSING_TIME    = 
"avgMessageProcessingTime";
+
+    private static final long HOUR               = 1000 * 60 * 60;
+    private static final long DAY                = 1000 * 60 * 60 * 24;
+    private static final long TWO_HOURS          = 1000 * 60 * 60 * 2;
+    private static final long TWO_DAYS           = 1000 * 60 * 60 * 24 * 2;
+    private static final int  METRIC_WINDOW_SIZE = 48;
+
+    private final SimpleDateFormat metricWindowFormat = new 
SimpleDateFormat("d MMM, yyyy : HH");
+    private final SimpleDateFormat simpleDateFormat   = new 
SimpleDateFormat("d MMM, yyyy : hh:mm aaa z");
+
+    private List<Map<MetricsCounterType, Integer>> metricWindow;
+    private Map<String, Object> data = new HashMap<>();
+    private String[] timestamp;
+
+    private int totalSinceLastStart = 0;
+
+    public enum MetricsCounterType {
+        NOTIFICATION_PROCESSED,
+        NOTIFICATION_FAILED,
+        ENTITY_CREATED,
+        ENTITY_UPDATED,
+        ENTITY_DELETE,
+        TOTAL_MSG_COUNT
+    }
+
+    public enum MetricsTimeType {
+        THIS_HOUR,
+        PAST_HOUR,
+        TODAY,
+        YESTERDAY,
+        TOTAL_MSG_COUNT
+    }
+
+    public AtlasMetricsCounter() {
+        initTotalCount();
+        initMetricWindow();
+    }
+
+    public void setData(Map<String, Object> data) {
+        this.data = data;
+    }
+
+    public Map<String, Object> getData() {
+        return data;
+    }
+
+    @Override
+    public String toString() {
+        return "AtlasMetricsCounter{" + "data=" + data + '}';
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(data);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        AtlasMetricsCounter other = (AtlasMetricsCounter) o;
+
+        return Objects.equals(this.data, other.data);
+    }
+
+    public void updateMetricWindow(MetricsCounterType counterType, long 
timestamp) {
 
 Review comment:
   Classes in 'model' package should not have much business logic; these 
classes are meant to be used only for data exchanged in wire (via REST API). 
Please move methods other than get/set to appropriate utility class, outside 
'model' package.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to