2013-08-21 24 views
8

Próbuję utworzyć wtyczkę opartą na interfejsie ServiceStack IPlugin, która może mierzyć czas, jaki upłynął od operacji i opublikować go w panelu kontrolnym. Sam kod byłby bardzo prosty i próbowałem to zrobić w oparciu o pewne koncepcje na Request Logger.Uzyskiwanie dostępu do obiektu IRequestContext na wtyczce do ServiceStack

Ten program rejestrujący używa StopWatch, który jest dodawany w domyślnej klasie ServiceRunner, ale robi to tylko wtedy, gdy skonfigurowano rejestrowanie żądań.

Mam już niestandardowy ServiceRunner i inicjalizowany jest tam stopWatch, ale użycie tego podejścia nie jest optymalne, ponieważ wtyczka nie jest samodzielna.

Moim największym problemem jest to, że najwyraźniej nie mogę uzyskać dostępu do IRequestContext. Czy istnieje sposób, w jaki wtyczka może uzyskać dostęp do tego kontekstu lub w inny sposób zmierzyć czas uruchamiania żądań wewnątrz prostej wtyczki, a nie w zależności od ServiceRunner?

Dzięki!

+0

można zaktualizować pytanie ze swoimi IMPL Iplugin? –

Odpowiedz

1

Przechowywać godzinę rozpoczęcia na żądanie w RequestFilter, a następnie w ResponseFilter obliczyć czas przy użyciu bieżącego czasu minus czas rozpoczęcia?

Można to zrobić za pomocą wtyczki.

Oto niektóre pseudo kod ...

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; 
    } 
); 
Powiązane problemy