我有一个 API,它有很多操作,比如 getX、getY、getZ 等,还有很多写操作,比如 writeX、writeY 和 writeZ 等。 由于这是一个休息服务,每个控制器方法都映射有特定的操作名称。
@Controller(url) //just an example
getX(param1, param2){
}
我有与 dynamodb 表交互的数据访问层。我计划将读取和写入容量指标添加到我的 DAO 层,以便我知道哪个 API 成本高。 一个 API 可以一次访问多个 dynamodb 表。 鉴于此,如果我想知道哪个 API 调用了 dynamodb,我将不得不从控制器--> 管理器--> DAO 方法传入操作名称。 这将需要大量的代码重构。
是否有更好更有效的方法来获取 DAO 层内最顶层的调用者名称,而无需传递方法名称。
答案 0 :(得分:0)
很难操作,但这可以解决问题
import times
proc timeit*[T] (the_func: proc, passed_args: varargs[T]): float =
let t = cpuTime()
var the_results = the_func(passed_args) # This is where I need to unpack arguments
cpuTime() - t
proc test_func(x: int, y: int): int =
x + y
echo timeit(test_func, 15, 5)
基本上指数越高,方法调用的时间就越短。尽管看起来很诱人,但控制器不会是第一个被调用的方法,并非总是如此。您可以做的是使用方法 StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
并可能获取包含“Controller”字和类名的数组的最后一项。