solution: access logging for Describe method
This commit is contained in:
@@ -42,6 +42,7 @@ class AccessHandler(
|
|||||||
"SubscribeTxStatus" -> processSubscribeTxStatus(call, headers, next)
|
"SubscribeTxStatus" -> processSubscribeTxStatus(call, headers, next)
|
||||||
"GetBalance" -> processSubscribeBalance(call, headers, next, false)
|
"GetBalance" -> processSubscribeBalance(call, headers, next, false)
|
||||||
"NativeCall" -> processNativeCall(call, headers, next)
|
"NativeCall" -> processNativeCall(call, headers, next)
|
||||||
|
"Describe" -> processDescribe(call, headers, next)
|
||||||
else -> {
|
else -> {
|
||||||
log.trace("unsupported method `{}`", method)
|
log.trace("unsupported method `{}`", method)
|
||||||
next.startCall(call, headers)
|
next.startCall(call, headers)
|
||||||
@@ -117,6 +118,25 @@ class AccessHandler(
|
|||||||
} as ServerCall.Listener<ReqT>
|
} 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(
|
class OnSubscribeHead(
|
||||||
val next: ServerCall.Listener<Common.Chain>,
|
val next: ServerCall.Listener<Common.Chain>,
|
||||||
val builder: EventsBuilder.SubscribeHead
|
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>(
|
abstract class BaseCallResponse<ReqT : Any, RespT : Any>(
|
||||||
val next: ServerCall<ReqT, RespT>
|
val next: ServerCall<ReqT, RespT>
|
||||||
) : ForwardingServerCall<ReqT, RespT>() {
|
) : ForwardingServerCall<ReqT, RespT>() {
|
||||||
@@ -258,4 +292,17 @@ class AccessHandler(
|
|||||||
super.sendMessage(message)
|
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(
|
abstract class Base(
|
||||||
val id: UUID
|
val id: UUID,
|
||||||
|
val method: String
|
||||||
) {
|
) {
|
||||||
val ts = Instant.now()
|
val ts = Instant.now()
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class ChainBase(
|
abstract class ChainBase(
|
||||||
val blockchain: Chain, val method: String, id: UUID
|
val blockchain: Chain, method: String, id: UUID
|
||||||
) : Base(id)
|
) : Base(id, method)
|
||||||
|
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
class SubscribeHead(
|
class SubscribeHead(
|
||||||
@@ -95,6 +96,12 @@ class Events {
|
|||||||
val nativeCall: NativeCallItemDetails
|
val nativeCall: NativeCallItemDetails
|
||||||
) : ChainBase(blockchain, "NativeCall", id)
|
) : ChainBase(blockchain, "NativeCall", id)
|
||||||
|
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
class Describe(
|
||||||
|
id: UUID,
|
||||||
|
val request: StreamRequestDetails
|
||||||
|
) : Base(id, "Describe")
|
||||||
|
|
||||||
data class StreamRequestDetails(
|
data class StreamRequestDetails(
|
||||||
val id: UUID,
|
val id: UUID,
|
||||||
val start: Instant,
|
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