Glimpse: cómo crear plugins, paso a paso

GlimpseYa estuvimos viendo la herramienta Glimpse, un interesantísimo complemento que nos puede ayudar bastante a depurar nuestras aplicaciones, ofreciéndonos una visión muy completa de lo que ocurre en el servidor desde que recibe una petición hasta que la responde.

Pero además de ser una utilidad imprescindible, una de sus características más interesantes es que puede ser extendido con suma facilidad. En este post vamos a ver cómo crear un plugin sencillo que nos permita mostrar en Glimpse información que nos interese sobre nuestra aplicación.

Y como tiene que ser, lo vamos a ver desarrollando un ejemplo paso a paso.

0. Objetivo

Para no distraernos de la intención de este post, que es ver cómo se crean plugins para Glimpse, vamos a desarrollar una extensión muy sencilla, un visor que nos permita observar información sobre el usuario actualmente conectado.

El plugin, al que llamaremos “Authentication” se instalará en el panel de Glimpse y mostrará información como la siguiente:

  • Nombre de la aplicación
  • Nombre del usuario conectado
  • Email
  • Último login
  • Roles del usuario en el sistema

Plugin Authentication para Glimpse
Para obtener esta información de forma rápida utilizaremos los sistemas integrados de membresía y funciones (membership y roles) de ASP.NET. Obviamente, podéis utilizar los mismos conceptos que vamos a ver para implementar visualizadores más específicos de vuestra aplicación, como objetos de sesión, caché, e incluso información obtenida desde bases de datos 🙂

1. Instalación de Glimpse

Quiero imaginar que todos estáis ya utilizando Nuget a tope (¿verdad?), por lo que no me detendré a explicar cómo instalar esta indispensable herramienta, y comenzaremos directamente instalando Glimpse.

Como ya describí en el otro post, la instalación de Glimpse es trivial utilizando la consola de Nuget:

Each package is licensed to you by its owner. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages. 
Some packages may include dependencies which are governed by additional licenses. Follow the package source (feed) URL to determine any dependencies. Package Manager Console Host Version 1.3.20419.9005 Type 'get-help NuGet' to see all available NuGet commands. PM> install-package glimpse [...] Successfully installed 'log4net 1.2.10'. Successfully installed 'NLog 1.0.0.505'. Successfully installed 'Castle.Core 1.2.0'. Successfully installed 'Castle.DynamicProxy 2.2.0'. Successfully installed 'Glimpse 0.80'. Successfully added 'log4net 1.2.10' to DemoGlimpse. Successfully added 'NLog 1.0.0.505' to DemoGlimpse. Successfully added 'Castle.Core 1.2.0' to DemoGlimpse. Successfully added 'Castle.DynamicProxy 2.2.0' to DemoGlimpse. Successfully added 'Glimpse 0.80' to DemoGlimpse. PM>

2. Añadir una referencia al proyecto

Para poder desarrollar nuestro plugin para Glimpse necesitamos añadir al proyecto una referencia al ensamblado System.ComponentModel.Composition. Esto es así en la versión actual (v0.80 beta), no sé si más adelante se suprimirá esta molestia que, en cualquier caso, es bastante leve.

3. Implementar el plugin

Vamos a pasar directamente a crear el plugin, que veréis que es bastante simple. En primer lugar, añadimos al proyecto una clase que implemente el interfaz IGlimpsePlugin, e implementamos los siguientes miembros definidos en el mismo:

  • void SetupInit(HttpApplication application), que contiene código de inicialización que será invocado al cargarse el plugin (una vez por petición), si así se configura expresamente. Por defecto este método ni siquiera será llamado.
  • string name {get; }, que debe retornar el nombre de la pestaña que aparecerá integrada en el interfaz de Glimpse.
  • public object GetData(HttpApplication application), que retornará un objeto cualquiera con la información que debe ser mostrada por Glimpse en nuestra pestaña. Este objeto será serializado como JSON, y el valor de sus propiedades, tenga la estructura que tenga, mostrada en el panel de la herramienta.

Por último, debemos indicar a Glimpse que la clase que hemos creado es un plugin, para lo que la decoramos con el atributo GlimpsePlugin.

La implementación completa del plugin sería la mostrada a continuación.

using System;
using System.Collections.Generic;
using System.Web;
using System.Linq;
using Glimpse.Net.Extensibility;
using System.Web.Security;
 
namespace Prueba.Utils
{
    [GlimpsePlugin()]
    public class AuthenticationPlugin: IGlimpsePlugin
    {
        public object GetData(HttpApplication application)
        {
            if (!application.Context.User.Identity.IsAuthenticated)
                return new { Usuario = "No autenticado" };
 
            MembershipUser usr = Membership.GetUser();
            string[] roles = Roles.GetRolesForUser(usr.UserName);
 
            return new
            {
                ApplicationName = Membership.ApplicationName,
                Username = usr.UserName,
                Email = usr.Email,
                LastLoginDate = usr.LastLoginDate,
                Roles =  roles.Any()? roles: new[] { "Ninguno" }
            };
        }
 
        public string Name
        {
            get { return "Authentication"; }
        }
 
        public void SetupInit(HttpApplication application)
        {
        }
    }
}

Observad que el método principal GetData(), puede retornar cualquier tipo de objeto (incluidos los de tipo anónimo, como es el caso). Además, fijaos que el tipo de retorno es distinto cuando estamos autenticados y cuando no lo estamos; Glimpse simplemente mostrará en el panel correspondiente el objeto que le suministremos, sea del tipo que sea, recorriendo sus propiedades y visualizándolas de la forma apropiada.

4. ¡Lo tenemos!

Voilá, ya tenemos nuestro plugin para Glimpse funcionando y ofreciéndonos la información que necesitamos:

Con usuario no autenticado

Con usuario autenticado

Obviamente el ejemplo es muy simple, pero seguro que sois capaces de imaginar escenarios en los que os puede resultar de gran utilidad: ver el contenido de objetos específicos de vuestra aplicación, mostrar trazas personalizadas, consumo de recursos, observar peticiones Ajax, y un larguísimo etcétera.

Siguiendo el ejemplo anterior e implementando a vuestra conveniencia el método de obtención de datos lo tendréis listo sin apenas esfuerzo.

Publicado en: Variable not found.

2 comentarios sobre “Glimpse: cómo crear plugins, paso a paso”

  1. José, a mi me encanta Glimpse, gracias por hacer el esfuerzo de escribir de el, seguro que a mucha gente que no lo conocía les está sirviendo de mucho.

    Unai

  2. Hola, Unai!

    Gracias por tus comentarios. La verdad es que es una herramienta muy potente y su extensibilidad puede dar mucho juego en el futuro.

    Un saludo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *