8

我正在尝试创建一个基于 ServiceStack IPlugin接口的插件,该插件可以测量操作经过的时间并将其发布到仪表板。代码本身会很简单,我尝试根据Request Logger上的一些概念来做。

此记录器使用添加到默认 ServiceRunner 类中的StopWatch,但它仅在配置了请求记录器时才执行此操作。

我已经有一个自定义的 ServiceRunner 并且 StopWatch 正在那里初始化,但是使用这种方法并不是最佳的,因为插件不是独立的。

我现在最大的问题是我显然无法访问 IRequestContext。插件是否可以访问此上下文或任何其他方式来测量在简单插件中运行请求的时间,而不依赖于 ServiceRunner?

谢谢!

4

1 回答 1

1

将请求的开始时间存储在 RequestFilter 中,然后在 ResponseFilter 中使用当前时间减去开始时间来计算时间?

这也可以在插件中完成。

这是一些伪代码...

appHost.RequestFilters.Add( ( req, res, obj ) =>
    {
        if(!req.Items.ContainsKey( "begin-time" ) )
            req.Items.Add( "begin-time", DateTime.Now );
        else
            req.Items[ "begin-time" ] = DateTime.Now;
    }
);

appHost.ResponseFilters.Add( ( req, res, i ) =>
    {
        var beginTime = (DateTime)req.Items[ "begin-time" ];

        var elapsed = DateTime.Now - beginTime;
    }
);
于 2013-12-13T21:55:19.630 回答