.NET life

HUGON Jérôme
Microsoft Certified Technology Specialist Microsoft Certified Application Developer Microsoft Certified Professional

Utilisation du Developer Dashboard

SharePoint 2010

Catégorie SharePoint 2010  | Date de publication : 21/03/2011

SharePoint 2010 compte de nombreuses nouveautés, parmis elles, le Developer Dashboard. Il s'agit d'un tableau de bord destiné à l'analyse de l'exécution et des performances de la page en cours. Les informations fournies vont du temps d'exécution des requêtes et évènements aux informations plus générales comme l'utilisateur connecté ou l'état de la page.

 

Par défaut cette fonctionnalité n'est pas activée. Vous avez le choix entre quatre méthodes pour l'activer: une commande STSADM, un script PowerShell, du code .NET ou la feature Developer Dashboard configuration.

Il existe trois niveaux d'activation:

  • Off: Désactivé, c'est la valeur par défaut.
  • On: Activé, La fonctionnalité est disponible sur toutes les pages
  • OnDemand: Une icône est affichée sur les pages pour activer ou non la fonctionnalité.

L'état OnDemand est, à mon sens, le plus pratique puisqu'en cours de développement, vous pourrez ne l'activer que sur les pages en cours de développement.

 

Cette opération nécessite que vous soyez administrateur de la ferme SharePoint.

 

STSADM

L'outil en ligne de commande, STSADM, est l'une des méthodes permettant de modifier l'état d'activation du Developer Dashboard. Malgré son remplacement par PowerShell, il est toujours actif et fonctionnel à partir du dossier C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN.

Le principe est de modifier la propriété developer-dashboard en lui affectant le niveau souhaité:

Activation:

stsadm -o setproperty -pn developer-dashboard -pv On

Désactivation:

stsadm -o setproperty -pn developer-dashboard -pv Off

A la demande:

stsadm -o setproperty -pn developer-dashboard -pv OnDemand

PowerShell

Depuis la version 2010, SharePoint est administrable à partir de PowerShell, un puissant outil supportant la manipulation des APIs .NET.

Cet outil a pour but de devenir la référence pour l'administration, coté serveur, des produits Microsoft.

Un raccourci, nommé SharePoint 2010 Management Shell, est présent depuis le menu Start du serveur:

SharePoint 2010 - Shell

Voici le code à exécuter pour modifier le niveau d'affichage du Dashboard:

$srv = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$setting =$srv.DeveloperDashboardSettings
$setting.DisplayLevel = [Microsoft.SharePoint.Administration.SPDeveloperDashboardLevel]::OnDemand
$setting.Update()

Vous pouvez changer OnDemand par les valeurs On ou Off au choix.

 

Code .NET

La dernière technique de mise à jour consiste à créer une portion de code .NET. Vous pouvez créer une page ou une feature afin d'exécuter le code suivant:

using Microsoft.SharePoint.Administration;

SPDeveloperDashboardSettings dashboardSettings = SPWebService.ContentService.DeveloperDashboardSettings; dashboardSettings.DisplayLevel = SPDeveloperDashboardLevel.OnDemand; dashboardSettings.Update();

Vous devrez ajouter une référence à la librairie Microsoft.SharePoint.dll situé dans le dossier C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI au sein de votre projet.

 

La feature Developer Dashboard configuration

Cette feature est disponible sur le site de Wictor Wilén. Après l'avoir téléchargé, installé et activé , vous pourrez gérer les paramètres du dashboard ainsi que son activation depuis le menu General Application Settings de l'administration centrale:

SharePoint 2010 - Development Settings

SharePoint 2010 - Development Settings - Details

 

Propriétés supplémentaires

La classe SPDeveloperDashboardSettings comporte des propriétés permettant d'affiner la configuration.

 

MaximumCriticalEventsToTrack

Cette propiété représente le nombre maximum d'évènements crtiques et d'assertions qui seront enregistrés lors d'une requête. Si il y a plus d'évènements critiques que le maximum spécifié, ceux ci seront ignorés. Cette propriété peut être affectée avec la valeur 0 pour désactiver le traçage des assertions.

L'exemple suivant reprend le précédent de la section Code .NET et modifie la propriété MaximumCriticalEventsToTrack afin d'afficher un maximum de 15 évènements critiques dans le dashboard:

dashboardSettings.MaximumCriticalEventsToTrack = 15;

 

MaximumSQLQueriesToTrack

Cette propriété représente le nombre maximum de requêtes SQL qui seront enregistrées lors de l'exécution. Les requêtes dépassant le nombre maximum ne seront pas enregistrées.

L'exemple suivant reprend le précédent de la section Code .NET et modifie la propriété MaximumSQLQueriesToTrack afin d'afficher un maximum de 10 requêtes SQL dans le dashboard:

dashboardSettings.MaximumSQLQueriesToTrack = 10;

 

RequiredPermissions

Pour afficher les informations du dashboard, la permission requise par défaut est AddAndCustomizePages. Vous pouvez modifier cette propriété en affectant une nouvelle valeur à la propriété RequiredPermissions à l'aide d'un objet de type SPBasePermissions.

L'exemple suivant reprend le précédent de la section Code .NET et modifie la propriété RequiredPermissions afin que le dashboard ne soit visible que par ceux qui ont la permission ManageWeb: 

dashboard.RequiredPermissions = SPBasePermissions.ManageWeb;

 

 TraceEnabled

Cette propriété booléenne spécifie si un lien vers la trace complète doit être affiché en bas de page que le dashboard soit lancé ou non.

L'exemple suivant reprend le précédent de la section Code .NET et modifie la propriété TraceEnabled afin d'afficher ce lien:

dashboardSettings.TraceEnabled= true;

 

Le Developer Dashboard visuellement

Si le Developer Dashboard est désactivé, il n'y a, bien entendu, aucune modification visuelle. Lorsqu'il est activé, le bloc suivant apparaît en bas de page:

SharePoint 2010 - Developer Dashboard 1

Le cadre de ce bloc est vert si la page s'est exécutée de manière normale, jaune pour présenter un avertissement et rouge en cas d'erreur ou évènement critique.

Dans le cas où le dashboard est configuré pour apparaître à la demande, une icône est ajoutée à droite du nom de l'utilisateur en cours et le fait de cliquer dessus affiche le dashboard:

SharePoint 2010 - Developer Dashboard 2

En cliquant sur les liens sous les sections Database Queries et SPRequest Allocations, vous pouvez accéder au détails des requêtes:

SharePoint 2010 - Developer Dashboard 3

 

Optimisation du code grâce au Developer Dashboard

Pour illustrer l'utilisation du dashboard et comment optimiser votre code, nous créons les deux pages suivantes dans le dossier C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\ADMIN: testDeveloperDashboard1.aspx et testDeveloperDashboard2.aspx.

 

testDeveloperDashboard1.aspx

Cette page comporte une méthode pour afficher la liste des enregistrement de la liste Announcements en prenant tous les éléments:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" DynamicMasterPageFile="~masterurl/default.master" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Test Developer Dashboard 1
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
Test Developer Dashboard 1
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
result.Text = GetRecords();
}

    public string GetRecords()
    {
        StringBuilder sb = new StringBuilder();
        SPListItemCollection its = SPContext.Current.Web.Lists["Announcements"].Items;
        foreach (SPListItem it in its)
        {
            sb.AppendFormat("{0}<br />", it["Title"]);
        }
        return sb.ToString();
    }
</script>

<asp:Label id="result" runat="server" />
</asp:Content>

 

Le résultat d'exécution de cette page pour le dashboard est le suivant:

SharePoint 2010 - Developer Dashboard 4

Remarquez le temps d'exécution de 509.55 ms

 

testDeveloperDashboard2.aspx

Cette page comporte une méthode pour afficher la liste des enregistrement de la liste Announcements en faisant une requête CAML afin de ne récupérer que les colonnes souhaitées:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" DynamicMasterPageFile="~masterurl/default.master" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Test Developer Dashboard 2
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
Test Developer Dashboard 2
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
result.Text = GetRecords();
}

    public string GetRecords()
    {
        StringBuilder sb = new StringBuilder();
        SPQuery query = new SPQuery();
        query.ViewFields = "<FieldRef Name=\"Title\" />";
        SPListItemCollection its = SPContext.Current.Web.Lists["Announcements"].GetItems(query);
        foreach (SPListItem it in its)
        {
            sb.AppendFormat("{0}<br />", it["Title"]);
        }
        return sb.ToString();
    }
</script>

<asp:Label id="result" runat="server" />
</asp:Content>

Le résultat d'exécution de cette page pour le dashboard est le suivant:

SharePoint 2010 - Developer Dashboard 5

Remarquez cette fois ci le temps d'exécution de 349.10 ms

 

Vous pouvez ainsi faire des comparaisons entre différentes portion de code pour l'optimiser. Bien entendu, il faut faire une moyenne du temps d'exécution sur plusieurs appels de la page pour avoir une valeur plus proche de la réalité.

 

Ajouter des évènement au Developer Dashboard

Pour illustrer ce point, nous allons créer une nouvelle page de test testDeveloperDashboard3.aspx dont le but sera d'ajouter l'un de vos propre évènement au dashboard:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" DynamicMasterPageFile="~masterurl/default.master" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.Utilities" %>

<
asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Test Developer Dashboard 3
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server">
Test Developer Dashboard 3
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
using (SPMonitoredScope s = new SPMonitoredScope("GetRecords", 3000, null))
{
result.Text = GetRecords();
}
}

public string GetRecords()
    {
StringBuilder sb = new StringBuilder();
SPQuery query = new SPQuery();
        query.ViewFields = "<FieldRef Name=\"Title\" />";
SPListItemCollection its = SPContext.Current.Web.Lists["Announcements"].GetItems(query);
foreach (SPListItem it in its)
        {
            sb.AppendFormat("{0}<br />", it["Title"]);
        }
return sb.ToString();
    }
</script>

<asp:Label id="result"runat="server"/>
</asp:Content>

Vous remarquez que pour ajouter un évènement, il faut créer un nouvel objet de type SPMonitoredScope,  dont le constructeur prend en paramètre, le nom de l'évènement, le temps maximum d'exécution et un tableau d'objets de type ISPScopedPerformanceMonitor.  Ensuite vous devez exécuter le code dans la clause using. Vous devez également importer l'espace de nom Microsoft.SharePoint.Utilities.

Le résultat d'exécution de cette page pour le dashboard est le suivant:

SharePoint 2010 - Developer Dashboard 6

 

Lever des exceptions dans le Developer Dashboard

Vous pouvez également utiliser le dashboard pour afficher les erreurs d'exécution de la page. Pour illustrer ceci, créez une page testDeveloperDashboard4.aspx comme suit:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" DynamicMasterPageFile="~masterurl/default.master" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.Utilities" %>

<
asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Test Developer Dashboard 4
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server">
Test Developer Dashboard 4
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
using (SPMonitoredScope s = new SPMonitoredScope("GetRecords", 3000, null))
{
result.Text = GetRecords();
SPCriticalTraceCounter.AddDataToScope(812, "My critical event !", 1, "Just to try.");
}
}

public string GetRecords()
    {
StringBuilder sb = new StringBuilder();
SPQuery query = new SPQuery();
        query.ViewFields = "<FieldRef Name=\"Title\" />";
SPListItemCollection its = SPContext.Current.Web.Lists["Announcements"].GetItems(query);
foreach (SPListItem it in its)
        {
            sb.AppendFormat("{0}<br />", it["Title"]);
        }
return sb.ToString();
    }
</script>

<asp:Label id="result"runat="server"/>
</asp:Content>

La méthode AddDataToScope permet d'ajouter une exception dans le dashboard. Les paramètres, dans l'ordre, sont les suivants: Un identifiant de type uint, la catégorie, le niveau de trace de type int et le message.

Les niveaux de trace sont les suivants:

  • 1 = Critical
  • 4 = Exception
  • 6 = Assert
  • 8 = Warning
  • 10 = Unexpected
  • 15 = Monitorable

Le résultat d'exécution de cette page pour le dashboard est le suivant:

SharePoint 2010 - Developer Dashboard 7

Vous pouvez remarquez l'ajout dans la section Asserts and Critical Events de notre exception. De plus le cadre du dashboard est rouge car la page contient une exception.

En cliquant sur le lien, vous obtenez plus de détails sur l'erreur:

SharePoint 2010 - Developer Dashboard 8

 

Le projet Developer Dashboard Visualizer

Le projet SharePoint 2010 Developer Dashboard Visualizer est disponible sur le site CodePlex. Il permet de générer un graphique à partir des informations du dashboard.

Le projet est disponible sous forme de feature. Après l'avoir téléchargé, installé et activé via le menu Site Collection features, vous obtenez des graphiques comme ceci:

SharePoint 2010 - Developer Dashboard 9