2013-08-21 19 views
8

Tôi đang cố tạo plugin dựa trên giao diện ServiceStack IPlugin có thể đo thời gian trôi qua trên các thao tác và xuất bản nó lên trang tổng quan. Bản thân mã sẽ khá đơn giản và tôi đã cố gắng làm điều đó dựa trên một số khái niệm về số Request Logger.Truy cập IRequestContext trên một plugin trên ServiceStack

Trình ghi nhật ký này sử dụng một StopWatch được thêm vào bên trong lớp ServiceRunner mặc định, nhưng nó chỉ thực hiện khi Trình ghi nhật ký yêu cầu được định cấu hình.

Tôi đã có ServiceRunner tùy chỉnh và Đồng hồ bấm giờ đang được khởi tạo ở đó nhưng việc sử dụng phương pháp này không tối ưu vì plugin không tự chứa.

Vấn đề lớn nhất của tôi bây giờ là tôi dường như không thể truy cập IRequestContext. Có cách nào một plugin có thể truy cập ngữ cảnh này hay bất kỳ cách nào khác để đo thời gian chạy các yêu cầu bên trong một plugin đơn giản, không phụ thuộc vào một ServiceRunner?

Cảm ơn!

+0

bạn có thể cập nhật các câu hỏi với impl Iplugin của bạn? –

Trả lời

1

Lưu trữ thời gian bắt đầu theo yêu cầu trong RequestFilter và sau đó trong ResponseFilter tính toán thời gian bằng cách sử dụng thời gian hiện tại trừ đi thời gian bắt đầu?

Điều này cũng có thể được thực hiện trong plugin.

Dưới đây là một số mã giả ...

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; 
    } 
); 
Các vấn đề liên quan