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_r272452216
 
 

 ##########
 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) {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("updateMetricWindow with type : ({}) at ({}) 
=========>", counterType.name(), convertTime(timestamp));
+        }
+
+        int curIndex = (int) (timestamp / HOUR % METRIC_WINDOW_SIZE);
+        String timestampToDate = metricWindowFormat.format(timestamp);
 
 Review comment:
   If possible, it will be good to avoid call to DateFormat.format() for every 
metrics registration.

----------------------------------------------------------------
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:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to