Costruire un provider di HealthMonitoring con ASP.NET 2.0

di Marco Leoncini, in ASP.NET 2.0, web.config, HealthMonitoring,

ASP.NET 2.0 dispone di un sistema semplice ed integrato per monitorare la salute delle nostre applicazioni, fornendoci dettagliate informazioni a run-time.

Durante L'esecuzione dell'applicazione, il runtime ASP.NET e i controlli generano alcuni eventi che prendono il nome di WebEvent. Ad esempio, utilizzando il sistema di Membership, verranno generati Web Event distinti, dipendenti dall'esito del login. Gli eventi vengono elaborati da classi chiamate Provider, responsabili di recuperare e memorizzazione le informazioni trasportate dal Web Event.
Estendendo questo sistema, è possibile tenere traccia di ogni aspetto della nostra applicazione, ad esempio potremo monitorare operazioni "sensibili", come il cambio della password da parte di un utente.

Creiamo una classe che erediti da WebAuditEvent e la compiliamo nell'assembly MyWebEvent.dll:

public class ChangePasswordEvent : WebAuditEvent
{
  public ChangePasswordEvent(string msg, object eventSource, int eventCode): base(msg, eventSource, eventCode)
  {
  }
  public override void FormatCustomEventDetails(WebEventFormatter formatter)
  {
    base.FormatCustomEventDetails(formatter);
    formatter.IndentationLevel += 1;
    formatter.AppendLine("cambio password");
    formatter.IndentationLevel -= 1;
  }
}

Il costruttore accetta tre parametri: una stinga da utilizzare per associare un messaggio all'evento, l'oggetto che genera l'evento e un intero associato al codice dell'evento.
Eseguiamo l'ovverride del metodo FormatCustomEventDetails, per inserire, se necessario, informazioni aggiuntive inerenti l'evento.
Quindi inizializziamo un'istanza di ChangePasswordEvent nell'handler per l'evento generato, al cambio della password, scatenato dal nuovo WebControl ChangedPassword:

protected void MyChangePassword_ChangedPassword(object sender, EventArgs e)
{
  ChangePasswordEvent cp = new ChangePasswordEvent("cambio password", this, WebEventCodes.WebExtendedBase + 1);
  cp.Raise();
}

Adesso abbiamo l'evento e chi lo genera, l'ultimo passo da compiere è la configurazione dell'applicazione per associare l'evento ad un provider. Per fare questo, aggiungiamo la sezione al web.config:

<healthMonitoring enabled="true" >
  <providers>
    <clear/>
    <add name="MySqlProvider" type="System.Web.Management.SqlWebEventProvider"
      connectionStringName="MyConnection"
      maxEventDetailsLength="10000"
      buffer="true"
      bufferMode="MyBufferModes"/>
  </providers>
  <rules>
    <clear/>
    <add name="ChangePassword Event"
      eventName="ChangePassword"
      provider="MySqlProvider"
      minInterval="00:00:30"/>
  </rules>
  <eventMappings>
    <clear/>
    <add name="ChangePassword" type="MyWebEvent.ChangePasswordEvent,MyWebEvent"/>
  </eventMappings>
  <bufferModes>
    <clear/>
    <add name="MyBufferModes"
      maxBufferSize="10"
      maxFlushSize="5"
      urgentFlushThreshold="3"
      regularFlushInterval="00:05:00"
      urgentFlushInterval="00:01:00"
      maxBufferThreads="1"/>
  </bufferModes>
</healthMonitoring>

Nella sezione vengono definiti uno o più provider, i quali elaborano gli eventi definiti in e associati tramite la sezione .
Con definiamo una collezione di buffer che un provider può utilizzare, infatti alcuni provider come MailWebEventProvider e SqlWebEventProvider, per non incidere in maniera significativa sulle prestazioni, manterranno gli eventi in memoria e solo in un secondo momento invieranno la mail o salveranno i dati nel database.
Per utilizzare SqlWebEventProvider è necessario configurare SQL Server, operazione che può essere comodamente eseguita tramite il tool aspnet_regsql.exe o sfruttando la classe SqlServices.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi