solution: access logging for Describe method
This commit is contained in:
@@ -42,6 +42,7 @@ class AccessHandler(
|
||||
"SubscribeTxStatus" -> processSubscribeTxStatus(call, headers, next)
|
||||
"GetBalance" -> processSubscribeBalance(call, headers, next, false)
|
||||
"NativeCall" -> processNativeCall(call, headers, next)
|
||||
"Describe" -> processDescribe(call, headers, next)
|
||||
else -> {
|
||||
log.trace("unsupported method `{}`", method)
|
||||
next.startCall(call, headers)
|
||||
@@ -117,6 +118,25 @@ class AccessHandler(
|
||||
} as ServerCall.Listener<ReqT>
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
private fun <ReqT : Any, RespT : Any> processDescribe(
|
||||
call: ServerCall<ReqT, RespT>,
|
||||
headers: Metadata,
|
||||
next: ServerCallHandler<ReqT, RespT>
|
||||
): ServerCall.Listener<ReqT> {
|
||||
val builder = EventsBuilder.Describe()
|
||||
.start(headers, call.attributes)
|
||||
|
||||
val callWrapper: ServerCall<ReqT, RespT> = OnDescribeResponse(
|
||||
call as ServerCall<BlockchainOuterClass.DescribeRequest, BlockchainOuterClass.DescribeResponse>,
|
||||
builder,
|
||||
accessLogWriter
|
||||
) as ServerCall<ReqT, RespT>
|
||||
return OnDescribeRequest(
|
||||
next.startCall(callWrapper, headers) as ServerCall.Listener<BlockchainOuterClass.DescribeRequest>,
|
||||
builder) as ServerCall.Listener<ReqT>
|
||||
}
|
||||
|
||||
class OnSubscribeHead(
|
||||
val next: ServerCall.Listener<Common.Chain>,
|
||||
val builder: EventsBuilder.SubscribeHead
|
||||
@@ -193,6 +213,20 @@ class AccessHandler(
|
||||
}
|
||||
}
|
||||
|
||||
class OnDescribeRequest(
|
||||
val next: ServerCall.Listener<BlockchainOuterClass.DescribeRequest>,
|
||||
val builder: EventsBuilder.Describe
|
||||
) : ForwardingServerCallListener<BlockchainOuterClass.DescribeRequest>() {
|
||||
|
||||
override fun onMessage(message: BlockchainOuterClass.DescribeRequest) {
|
||||
super.onMessage(message)
|
||||
}
|
||||
|
||||
override fun delegate(): ServerCall.Listener<BlockchainOuterClass.DescribeRequest> {
|
||||
return next
|
||||
}
|
||||
}
|
||||
|
||||
abstract class BaseCallResponse<ReqT : Any, RespT : Any>(
|
||||
val next: ServerCall<ReqT, RespT>
|
||||
) : ForwardingServerCall<ReqT, RespT>() {
|
||||
@@ -258,4 +292,17 @@ class AccessHandler(
|
||||
super.sendMessage(message)
|
||||
}
|
||||
}
|
||||
|
||||
class OnDescribeResponse(
|
||||
next: ServerCall<BlockchainOuterClass.DescribeRequest, BlockchainOuterClass.DescribeResponse>,
|
||||
val builder: EventsBuilder.Describe,
|
||||
val accessLogWriter: AccessLogWriter
|
||||
) : BaseCallResponse<BlockchainOuterClass.DescribeRequest, BlockchainOuterClass.DescribeResponse>(next) {
|
||||
|
||||
override fun sendMessage(message: BlockchainOuterClass.DescribeResponse) {
|
||||
val event = builder.onReply()
|
||||
accessLogWriter.submit(event)
|
||||
super.sendMessage(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,14 +28,15 @@ class Events {
|
||||
}
|
||||
|
||||
abstract class Base(
|
||||
val id: UUID
|
||||
val id: UUID,
|
||||
val method: String
|
||||
) {
|
||||
val ts = Instant.now()
|
||||
}
|
||||
|
||||
abstract class ChainBase(
|
||||
val blockchain: Chain, val method: String, id: UUID
|
||||
) : Base(id)
|
||||
val blockchain: Chain, method: String, id: UUID
|
||||
) : Base(id, method)
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
class SubscribeHead(
|
||||
@@ -95,6 +96,12 @@ class Events {
|
||||
val nativeCall: NativeCallItemDetails
|
||||
) : ChainBase(blockchain, "NativeCall", id)
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
class Describe(
|
||||
id: UUID,
|
||||
val request: StreamRequestDetails
|
||||
) : Base(id, "Describe")
|
||||
|
||||
data class StreamRequestDetails(
|
||||
val id: UUID,
|
||||
val start: Instant,
|
||||
|
||||
@@ -227,4 +227,19 @@ class EventsBuilder {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Describe : Base<Describe>() {
|
||||
|
||||
override fun getT(): Describe {
|
||||
return this
|
||||
}
|
||||
|
||||
fun onReply(): Events.Describe {
|
||||
return Events.Describe(
|
||||
id = UUID.randomUUID(),
|
||||
request = requestDetails
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user