summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/dmaap/mr
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/dmaap/mr')
-rw-r--r--src/main/java/org/onap/dmaap/mr/apiServer/metrics/cambria/DMaaPMetricsSender.java194
-rw-r--r--src/main/java/org/onap/dmaap/mr/filter/ContentLengthFilter.java127
-rw-r--r--src/main/java/org/onap/dmaap/mr/filter/DefaultLength.java37
3 files changed, 358 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);
+ }
+}
diff --git a/src/main/java/org/onap/dmaap/mr/filter/ContentLengthFilter.java b/src/main/java/org/onap/dmaap/mr/filter/ContentLengthFilter.java
new file mode 100644
index 0000000..914efb9
--- /dev/null
+++ b/src/main/java/org/onap/dmaap/mr/filter/ContentLengthFilter.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * ============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.filter;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.apache.http.HttpStatus;
+import org.json.JSONObject;
+import org.onap.dmaap.dmf.mr.CambriaApiException;
+import org.onap.dmaap.dmf.mr.exception.DMaaPErrorMessages;
+import org.onap.dmaap.dmf.mr.exception.DMaaPResponseCode;
+import org.onap.dmaap.dmf.mr.exception.ErrorResponse;
+import org.onap.dmaap.mr.filter.DefaultLength;
+import org.springframework.context.ApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * Servlet Filter implementation class ContentLengthFilter
+ */
+public class ContentLengthFilter implements Filter {
+
+ private DefaultLength defaultLength;
+
+ private FilterConfig filterConfig = null;
+ DMaaPErrorMessages errorMessages = null;
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(org.onap.dmaap.mr.filter.ContentLengthFilter.class);
+ /**
+ * Default constructor.
+ */
+
+ public ContentLengthFilter() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @see Filter#destroy()
+ */
+ public void destroy() {
+ // TODO Auto-generated method stub
+ }
+
+ /**
+ * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
+ */
+ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
+ ServletException {
+ log.info("inside servlet do filter content length checking before pub/sub");
+ HttpServletRequest request = (HttpServletRequest) req;
+ JSONObject jsonObj = null;
+ int requestLength = 0;
+ try {
+ // retrieving content length from message header
+
+ if (null != request.getHeader("Content-Length")) {
+ requestLength = Integer.parseInt(request.getHeader("Content-Length"));
+ }
+ // retrieving encoding from message header
+ String transferEncoding = request.getHeader("Transfer-Encoding");
+ // checking for no encoding, chunked and requestLength greater then
+ // default length
+ if (null != transferEncoding && !(transferEncoding.contains("chunked"))
+ && (requestLength > Integer.parseInt(defaultLength.getDefaultLength()))) {
+ jsonObj = new JSONObject().append("defaultlength", defaultLength)
+ .append("requestlength", requestLength);
+ log.error("message length is greater than default");
+ throw new CambriaApiException(jsonObj);
+ } else if (null == transferEncoding && (requestLength > Integer.parseInt(defaultLength.getDefaultLength()))) {
+ jsonObj = new JSONObject().append("defaultlength", defaultLength.getDefaultLength()).append(
+ "requestlength", requestLength);
+ log.error("Request message is not chunked or request length is greater than default length");
+ throw new CambriaApiException(jsonObj);
+ } else {
+ chain.doFilter(req, res);
+ }
+ } catch (CambriaApiException | NumberFormatException e) {
+ log.error("message size is greater then default", e);
+ if (jsonObj != null) {
+ ErrorResponse errRes = new ErrorResponse(HttpStatus.SC_EXPECTATION_FAILED,
+ DMaaPResponseCode.MSG_SIZE_EXCEEDS_MSG_LIMIT.getResponseCode(),
+ errorMessages.getMsgSizeExceeds()
+ + jsonObj.toString());
+ log.info(errRes.toString());
+ }
+ }
+
+ }
+
+ /**
+ * @see Filter#init(FilterConfig)
+ */
+ public void init(FilterConfig fConfig) throws ServletException {
+ this.filterConfig = fConfig;
+ log.info("Filter Content Length Initialize");
+ ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(fConfig
+ .getServletContext());
+ DefaultLength defLength = (DefaultLength) ctx.getBean("defLength");
+ DMaaPErrorMessages errMessages = (DMaaPErrorMessages) ctx.getBean("DMaaPErrorMessages");
+ this.errorMessages = errMessages;
+ this.defaultLength = defLength;
+
+ }
+
+}
diff --git a/src/main/java/org/onap/dmaap/mr/filter/DefaultLength.java b/src/main/java/org/onap/dmaap/mr/filter/DefaultLength.java
new file mode 100644
index 0000000..3425823
--- /dev/null
+++ b/src/main/java/org/onap/dmaap/mr/filter/DefaultLength.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============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.filter;
+
+
+public class DefaultLength {
+
+ String defLength;
+
+ public String getDefaultLength() {
+ return defLength;
+ }
+
+ public void setDefaultLength(String defaultLength) {
+ this.defLength = defaultLength;
+ }
+
+}