2013-08-21 6 views
8

Sto provando a creare un plug-in basato sull'interfaccia ServiceStack IPlugin che può misurare il tempo trascorso sulle operazioni e pubblicarlo su un dashboard. Il codice stesso sarebbe abbastanza semplice e ho provato a farlo basandomi su alcuni concetti sullo Request Logger.Accesso a IRequestContext su un plug-in su ServiceStack

Questo registratore utilizza uno StopWatch che viene aggiunto all'interno della classe ServiceRunner predefinita, ma lo fa solo quando è configurato il Logger di richieste.

Ho già un ServiceRunner personalizzato e lo StopWatch è in fase di inizializzazione, ma l'utilizzo di questo approccio non è ottimale poiché il plug-in non è autonomo.

Il mio problema più grande ora è che apparentemente non posso accedere a IRequestContext. C'è un modo in cui un plugin può accedere a questo contesto o in qualsiasi altro modo per misurare il tempo di esecuzione delle richieste all'interno di un semplice plugin, non dipende da un ServiceRunner?

Grazie!

+0

è possibile aggiornare la questione con i tuoi impl IPlugin? –

risposta

1

Memorizzare l'ora di inizio sulla richiesta in un RequestFilter e quindi in un ResponseFilter calcolare l'ora utilizzando l'ora corrente meno l'ora di inizio?

Questo può essere fatto anche in un plugin.

Ecco alcuni pseudo codice ...

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; 
    } 
);