base logging interceptor for apache http client 46/96846/2
authorEylon Malin <eylon.malin@intl.att.com>
Thu, 10 Oct 2019 08:50:06 +0000 (11:50 +0300)
committerEylon Malin <eylon.malin@intl.att.com>
Thu, 10 Oct 2019 10:24:12 +0000 (13:24 +0300)
Issue-ID: VID-253

org.onap.logging.filter.spring.SpringClientFilter used
as reference implementation

Change-Id: I015bc784ab5ee2b4ee6474bdbb7a346011734a3a
Signed-off-by: Eylon Malin <eylon.malin@intl.att.com>
vid-app-common/src/main/java/org/onap/vid/logging/ApacheClientMetricInterceptor.java [new file with mode: 0644]
vid-app-common/src/main/java/org/onap/vid/logging/Headers.kt
vid-app-common/src/test/java/org/onap/vid/logging/ApacheClientMetricInterceptorTest.java [new file with mode: 0644]

diff --git a/vid-app-common/src/main/java/org/onap/vid/logging/ApacheClientMetricInterceptor.java b/vid-app-common/src/main/java/org/onap/vid/logging/ApacheClientMetricInterceptor.java
new file mode 100644 (file)
index 0000000..f5b0950
--- /dev/null
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 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=========================================================
+ */
+
+package org.onap.vid.logging;
+
+import java.net.URI;
+import org.apache.http.HttpMessage;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.onap.logging.filter.base.AbstractMetricLogFilter;
+
+
+public abstract class ApacheClientMetricInterceptor extends AbstractMetricLogFilter<HttpRequest, HttpResponse, HttpMessage> {
+
+    @Override
+    protected void addHeader(HttpMessage httpMessage, String headerName, String headerValue) {
+        httpMessage.addHeader(headerName, headerValue);
+    }
+
+    @Override
+    protected String getTargetServiceName(HttpRequest httpRequest) {
+        return httpRequest.getRequestLine().getUri();
+    }
+
+    @Override
+    protected String getServiceName(HttpRequest httpRequest) {
+        return URI.create(httpRequest.getRequestLine().getUri()).getPath();
+    }
+
+    @Override
+    protected int getHttpStatusCode(HttpResponse httpResponse) {
+        return httpResponse.getStatusLine().getStatusCode();
+    }
+
+    @Override
+    protected String getResponseCode(HttpResponse httpResponse) {
+        return httpResponse.getStatusLine().getReasonPhrase();
+    }
+
+    @Override
+    protected String getTargetEntity(HttpRequest httpRequest) {
+        //fallback to default value that provided by AbstractMetricLogFilter
+        return null;
+    }
+}
index e9f83ef..18d6653 100644 (file)
@@ -1,3 +1,23 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 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=========================================================
+ */
+
 @file:JvmName("Headers")
 
 package org.onap.vid.logging
diff --git a/vid-app-common/src/test/java/org/onap/vid/logging/ApacheClientMetricInterceptorTest.java b/vid-app-common/src/test/java/org/onap/vid/logging/ApacheClientMetricInterceptorTest.java
new file mode 100644 (file)
index 0000000..29f17b2
--- /dev/null
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 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=========================================================
+ */
+
+package org.onap.vid.logging;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.ProtocolVersion;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.message.BasicHttpResponse;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class ApacheClientMetricInterceptorTest {
+
+    private ApacheClientMetricInterceptor interceptor;
+    private final String path = "https://gerrit.onap.org/r/projects/vid/branches?n=16&S=0&m=master";
+    private HttpGet request;
+    private HttpResponse response;
+
+    @BeforeMethod
+    public void before() {
+        interceptor = new ApacheClientMetricInterceptor() {};
+        request = new HttpGet(path);
+        response = new BasicHttpResponse(new ProtocolVersion("a",1,2), 200, "ok");
+    }
+
+    @Test
+    public void testAddHeader() {
+        interceptor.addHeader(request, "key", "value");
+        assertEquals(request.getFirstHeader("key").getValue(), "value");
+    }
+
+    @Test
+    public void testGetTargetServiceName() {
+        assertEquals(interceptor.getTargetServiceName(request), path);
+    }
+
+    @Test
+    public void testGetServiceName() {
+        assertEquals(interceptor.getTargetServiceName(request), path);
+    }
+
+    @Test
+    public void testGetHttpStatusCode() {
+        assertEquals(interceptor.getHttpStatusCode(response), 200);
+    }
+
+    @Test
+    public void testGetResponseCode() {
+        assertEquals(interceptor.getResponseCode(response), "ok");
+    }
+
+    @Test
+    public void testGetTargetEntity() {
+        assertNull(interceptor.getTargetEntity(request));
+    }
+}