Revert "Renaming Files having BluePrint to have Blueprint"
[ccsdk/cds.git] / ms / blueprintsprocessor / modules / commons / grpc-lib / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / grpc / interceptor / GrpcServerLoggingInterceptor.kt
1 /*
2  * Copyright © 2018-2019 AT&T Intellectual Property.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.ccsdk.cds.blueprintsprocessor.grpc.interceptor
18
19 import io.grpc.ForwardingServerCall
20 import io.grpc.ForwardingServerCallListener
21 import io.grpc.Metadata
22 import io.grpc.ServerCall
23 import io.grpc.ServerCallHandler
24 import io.grpc.ServerInterceptor
25 import org.onap.ccsdk.cds.blueprintsprocessor.grpc.service.GrpcLoggerService
26 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
27 import org.onap.ccsdk.cds.controllerblueprints.core.logger
28 import org.onap.ccsdk.cds.controllerblueprints.management.api.BluePrintDownloadInput
29 import org.onap.ccsdk.cds.controllerblueprints.management.api.BluePrintRemoveInput
30 import org.onap.ccsdk.cds.controllerblueprints.management.api.BluePrintUploadInput
31 import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput
32 import org.slf4j.MDC
33
34 class GrpcServerLoggingInterceptor : ServerInterceptor {
35
36     val log = logger(GrpcServerLoggingInterceptor::class)
37     val loggingService = GrpcLoggerService()
38
39     override fun <ReqT : Any, RespT : Any> interceptCall(
40         call: ServerCall<ReqT, RespT>,
41         requestHeaders: Metadata,
42         next: ServerCallHandler<ReqT, RespT>
43     ):
44         ServerCall.Listener<ReqT> {
45
46             val forwardingServerCall = object : ForwardingServerCall.SimpleForwardingServerCall<ReqT, RespT>(call) {
47                 override fun sendHeaders(responseHeaders: Metadata) {
48                     loggingService.grpResponding(requestHeaders, responseHeaders)
49                     super.sendHeaders(responseHeaders)
50                 }
51             }
52
53             return object :
54                 ForwardingServerCallListener.SimpleForwardingServerCallListener<ReqT>(
55                     next.startCall(forwardingServerCall, requestHeaders)
56                 ) {
57
58                 override fun onMessage(message: ReqT) {
59                     /** Get the requestId, SubRequestId and Originator Id and set in MDS context
60                      *  If you are using other GRPC services, Implement own Logging Interceptors to get tracing.
61                      * */
62                     when (message) {
63                         is ExecutionServiceInput -> {
64                             val commonHeader = message.commonHeader
65                                 ?: throw BluePrintProcessorException("missing common header in request")
66                             loggingService.grpcRequesting(call, commonHeader, next)
67                         }
68                         is BluePrintUploadInput -> {
69                             val commonHeader = message.commonHeader
70                                 ?: throw BluePrintProcessorException("missing common header in request")
71                             loggingService.grpcRequesting(call, commonHeader, next)
72                         }
73                         is BluePrintDownloadInput -> {
74                             val commonHeader = message.commonHeader
75                                 ?: throw BluePrintProcessorException("missing common header in request")
76                             loggingService.grpcRequesting(call, commonHeader, next)
77                         }
78                         is BluePrintRemoveInput -> {
79                             val commonHeader = message.commonHeader
80                                 ?: throw BluePrintProcessorException("missing common header in request")
81                             loggingService.grpcRequesting(call, commonHeader, next)
82                         }
83                         else -> {
84                             loggingService.grpcRequesting(call, requestHeaders, next)
85                         }
86                     }
87                     super.onMessage(message)
88                 }
89
90                 override fun onComplete() {
91                     MDC.clear()
92                     super.onComplete()
93                 }
94
95                 override fun onCancel() {
96                     MDC.clear()
97                     super.onCancel()
98                 }
99             }
100         }
101 }