summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/dmaap/mr/apiServer/metrics/cambria/DMaaPMetricsSender.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/dmaap/mr/apiServer/metrics/cambria/DMaaPMetricsSender.java')
-rw-r--r--src/main/java/org/onap/dmaap/mr/apiServer/metrics/cambria/DMaaPMetricsSender.java194
1 files changed, 194 insertions, 0 deletions
diff --git a/src/main/java/org/onap/dmaap/mr/apiServer/metrics/cambria/DMaaPMetricsSender.java b/src/main/java/org/onap/dmaap/mr/apiServer/metrics/cambria/DMaaPMetricsSender.java
new file mode 100644
index 0000000..7b19da1
--- /dev/null
+++ b/src/main/java/org/onap/dmaap/mr/apiServer/metrics/cambria/DMaaPMetricsSender.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * org.onap.dmaap
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ * http://www.apache.org/licenses/LICENSE-2.0
+*
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
+ *******************************************************************************/
+package org.onap.dmaap.mr.apiServer.metrics.cambria;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.att.nsa.apiServer.metrics.cambria.MetricsSender;
+import com.att.nsa.metrics.CdmMetricsRegistry;
+import com.att.nsa.metrics.impl.CdmConstant;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.onap.dmaap.dmf.mr.constants.CambriaConstants;
+import org.onap.dmaap.dmf.mr.metrics.publisher.CambriaPublisher;
+import org.onap.dmaap.dmf.mr.metrics.publisher.DMaaPCambriaClientFactory;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * MetricsSender will send the given metrics registry content as an event on the
+ * Cambria event broker to the given topic.
+ *
+ * @author peter
+ *
+ */
+public class DMaaPMetricsSender implements Runnable {
+ public static final String kSetting_CambriaEnabled = "metrics.send.cambria.enabled";
+ public static final String kSetting_CambriaBaseUrl = "metrics.send.cambria.baseUrl";
+ public static final String kSetting_CambriaTopic = "metrics.send.cambria.topic";
+ public static final String kSetting_CambriaSendFreqSecs = "metrics.send.cambria.sendEverySeconds";
+
+ /**
+ * Schedule a periodic send of the given metrics registry using the given
+ * settings container for the Cambria location, topic, and send frequency.
+ * <br/>
+ * <br/>
+ * If the enabled flag is false, this method returns null.
+ *
+ * @param scheduler
+ * @param metrics
+ * @param settings
+ * @param defaultTopic
+ * @return a handle to the scheduled task
+ */
+ public static ScheduledFuture<?> sendPeriodically(ScheduledExecutorService scheduler, CdmMetricsRegistry metrics,
+ String defaultTopic) {
+ log.info("Inside : DMaaPMetricsSender : sendPeriodically");
+ String cambriaSetting= com.att.ajsc.filemonitor.AJSCPropertiesMap.getProperty(CambriaConstants.msgRtr_prop,kSetting_CambriaEnabled);
+ boolean setEnable=true;
+ if (cambriaSetting!=null && cambriaSetting.equals("false") )
+ setEnable= false;
+
+ if (setEnable) {
+ String Setting_CambriaBaseUrl=com.att.ajsc.filemonitor.AJSCPropertiesMap.getProperty(CambriaConstants.msgRtr_prop,kSetting_CambriaEnabled);
+
+ Setting_CambriaBaseUrl=Setting_CambriaBaseUrl==null?"localhost":Setting_CambriaBaseUrl;
+
+ String Setting_CambriaTopic=com.att.ajsc.filemonitor.AJSCPropertiesMap.getProperty(CambriaConstants.msgRtr_prop,kSetting_CambriaTopic);
+ if(Setting_CambriaTopic==null) Setting_CambriaTopic = "msgrtr.apinode.metrics.dmaap";
+
+
+
+ String Setting_CambriaSendFreqSecs=com.att.ajsc.filemonitor.AJSCPropertiesMap.getProperty(CambriaConstants.msgRtr_prop,kSetting_CambriaSendFreqSecs);
+
+ int _CambriaSendFreqSecs =30;
+ if(Setting_CambriaSendFreqSecs!=null){
+ _CambriaSendFreqSecs = Integer.parseInt(Setting_CambriaSendFreqSecs);
+ }
+
+
+ return sendPeriodically(scheduler, metrics,
+ Setting_CambriaBaseUrl,Setting_CambriaTopic,_CambriaSendFreqSecs
+ );
+ /*return DMaaPMetricsSender.sendPeriodically(scheduler, metrics,
+ settings.getString(kSetting_CambriaBaseUrl, "localhost"),
+ settings.getString(kSetting_CambriaTopic, defaultTopic),
+ settings.getInt(kSetting_CambriaSendFreqSecs, 30));*/
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Schedule a periodic send of the metrics registry to the given Cambria
+ * broker and topic.
+ *
+ * @param scheduler
+ * @param metrics
+ * the registry to send
+ * @param cambriaBaseUrl
+ * the base URL for Cambria
+ * @param topic
+ * the topic to publish on
+ * @param everySeconds
+ * how frequently to publish
+ * @return a handle to the scheduled task
+ */
+ public static ScheduledFuture<?> sendPeriodically(ScheduledExecutorService scheduler, CdmMetricsRegistry metrics,
+ String cambriaBaseUrl, String topic, int everySeconds) {
+ return scheduler.scheduleAtFixedRate(new org.onap.dmaap.mr.apiServer.metrics.cambria.DMaaPMetricsSender(metrics, cambriaBaseUrl, topic), everySeconds,
+ everySeconds, TimeUnit.SECONDS);
+ }
+
+ /**
+ * Create a metrics sender.
+ *
+ * @param metrics
+ * @param cambriaBaseUrl
+ * @param topic
+ */
+ public DMaaPMetricsSender(CdmMetricsRegistry metrics, String cambriaBaseUrl, String topic) {
+ try {
+ fMetrics = metrics;
+ fHostname = InetAddress.getLocalHost().getHostName();
+
+ // setup a "simple" publisher that will send metrics immediately
+ fCambria = DMaaPCambriaClientFactory.createSimplePublisher(cambriaBaseUrl, topic);
+ } catch (UnknownHostException e) {
+ log.warn("Unable to get localhost address in MetricsSender constructor.", e);
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Send on demand.
+ */
+ public void send() {
+ try {
+ final JSONObject o = fMetrics.toJson();
+ o.put("hostname", fHostname);
+ o.put("now", System.currentTimeMillis());
+ o.put("metricsSendTime", addTimeStamp());
+ o.put("transactionEnabled", false);
+ fCambria.send(fHostname, o.toString());
+ } catch (JSONException e) {
+ log.warn("Error posting metrics to Cambria: " + e.getMessage());
+ } catch (IOException e) {
+ log.warn("Error posting metrics to Cambria: " + e.getMessage());
+ }
+ }
+
+ /**
+ * Run() calls send(). It's meant for use in a background-scheduled task.
+ */
+ @Override
+ public void run() {
+ send();
+ }
+
+ private final CdmMetricsRegistry fMetrics;
+ private final CambriaPublisher fCambria;
+ private final String fHostname;
+
+
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(MetricsSender.class);
+ /**
+ * method creates and returnd CdmConstant object using current timestamp
+ *
+ * @return
+ */
+ public CdmConstant addTimeStamp() {
+ // Add the timestamp with every metrics send
+ final long metricsSendTime = System.currentTimeMillis();
+ final Date d = new Date(metricsSendTime);
+ final String text = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz").format(d);
+ return new CdmConstant(metricsSendTime / 1000, "Metrics Send Time (epoch); " + text);
+ }
+}