Benoît Laut
Instrumenter et analyser son application avec DotFuscator 4.0
Qui n’a jamais rêvé de savoir qui utilise et comment est utilisée son application ? DotFuscator 4.0 permet d’instrumenter son application afin d’en analyser l’utilisation. Je vous propose dans cet article de découvrir comment utiliser ces outils.
Par Benoît Laut publié le 11/05/2010 à 15:56, lu 2948 fois, 5 pages
 2 | Instrumenter son application
Pour commencer à instrumenter son application nous avons besoin d’ajouter une référence vers l’assembly PreEmtive.Attributes.dll située dans le répertoire \Program Files\Microsoft Visual Studio 10.0\PreEmptive Solutions\DotFuscator Community Edition.
Une fois l’assembly référencée, il faut aller ajouter 2 attributs dans le fichier assemblyInfo.cs :

[assembly: PreEmptive.Attributes.Business("A62E8C4A-B611-43EE-A66E-78C9EB1BE243", "BenTest")]

[assembly: PreEmptive.Attributes.Application("AEDB30B0-6A2B-4C42-9B65-F0D5BDC9A708", "BenTest", "1.0")]

Les paramètres de l’attribut Business représentent l’identifiant et le nom de la société éditrice de l’application. Pour utiliser la version gratuite il suffit de les renseigner de manière arbitraire. Utilisez par exemple l’outil guidgen.exe pour obtenir un nouveau GUID. C’est cet identifiant qui vous permettra de vous identifier sur le portail de PreEmptive. Si vous avez plusieurs applications à instrumenter, il vous suffit d’utiliser dans chaque application le même identifiant et le même de nom de société.
Les paramètres de l’attribut Application permettent au Runtime Intelligence Service d’identifier votre application. Si vous avez plusieurs assembly à instrumenter dans votre application, utilisez les mêmes valeurs pour les 2 attributs.
La première mesure possible avec l’édition gratuite de DotFuscator est le nombre de démarrage de l’application. Pour cela nous allons ajouter 2 attributs sur le point d’entrée de notre application :

[Setup(CustomEndpoint =

    "message.runtimeintelligence.com/PreEmptive.Web.Services.Messaging/MessagingServiceV2.asmx")]

[Teardown()]

static void Main()

 

L’attribut Setup permet au Runtime Intelligence Service d’identifier le point d’entrée de votre application et de savoir sur quel web service les données doivent être envoyées. Après compilation, DotFuscator injectera le code d’initialisation du Runtime Service au début de la méthode Main. Ce code d’initialisation doit être positionné avant tout envoi de message vers le portail. Dans notre cas l’adresse du web service représente le web service du portail gratuit. Dans la version payante c’est une autre adresse. Il est également possible de donner une valeur Custom et de développer son propre web service. Pour cela PreEmptive a publié un starter kit pour développer son propre EndPoint.
L’attribut TearDown doit se placer à la fin de l’exécution de l’application, après que tous les messages aient été envoyés. DotFuscator injectera du code à la fin de la méthode Main.
Ces 2 attributs vont permettre de tracer le nombre de fois que l’application a été démarrée, mais également d’identifier les crashs de l’application. En effet si une exception n’est pas interceptée, le code injecté par l’attribut TearDown l’identifiera comme un crash de l’application.
Nous allons maintenant demander au Runtime Intelligence Service de collecter les informations d’utilisation des différentes fonctionnalités de notre application en positionnant l’attribut Feature sur nos méthodes :

[Feature("Feature 1", EventType = FeatureEventTypes.Tick)]

private void button1_Click(object sender, EventArgs e)

{

 

}

 

[Feature("Feature 2", EventType = FeatureEventTypes.Tick)]

private void button2_Click(object sender, EventArgs e)

{

 

}

 

[Feature("Feature 3", EventType = FeatureEventTypes.Start)]

[Feature("Feature 3", EventType = FeatureEventTypes.Stop)]

private void button3_Click(object sender, EventArgs e)

{

    using (var frm = new Form2())

    {

        frm.ShowDialog(this);

    }

}

 

Dans le code ci-dessus, nous indiquons au Runtime Intelligence Service que les fonctionnalités 1 et 2 envoient un événement instantané (FeatureEventTypes.Tick). Cet événement va permettre de mesurer le nombre de fois que ces fonctionnalités ont été utilisées.
Pour la fonctionnalité 3, nous avons ajouté 2 attributs Feature. Le premier a la propriété EventType initialisée à FeaturesEventTypes.Start et le second à FeaturesEventTypes.Stop. Une mesure sera ainsi envoyée au début de la méthode et une autre mesure à la fin. Grâce à ces deux attributs nous obtiendrons pour cette même fonctionnalité 3 indicateurs, à savoir :
  • Le nombre de fois qu’elle est utilisée,
  • le temps qu’elle a mis à s’exécuter,
  • le nombre de crashs. De la même manière que le TearDown, si une exception n’est pas interceptée, le Runtime Intelligence Service l’identifiera comme un crash de la fonctionnalité.
 
» Démarrer une discussion