﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tag ControlManager - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/controlmanager/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/controlmanager/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Thu, 19 Apr 2018 07:56:05 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://developer.myconstellation.io/wp-content/uploads/2016/02/256x256-e1457476015859.png</url>
	<title>Tag ControlManager - Constellation</title>
	<link>https://developer.myconstellation.io/tag/controlmanager/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Accéder au hub de contrôle avec le ControlManager</title>
		<link>https://developer.myconstellation.io/client-api/net-package-api/controlmanager/</link>
					<comments>https://developer.myconstellation.io/client-api/net-package-api/controlmanager/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Mon, 21 Mar 2016 10:24:49 +0000</pubDate>
				<category><![CDATA[.NET API]]></category>
		<category><![CDATA[ControlHub]]></category>
		<category><![CDATA[ControlManager]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=1491</guid>

					<description><![CDATA[<p>Le hub de contrôle permet d’accéder à différentes fonctions de pilotage de votre Constellation. Voyons en détail comment contrôler votre Constellation depuis un package C#/.NET. Accéder au hub de contrôle Tout d’abord il faut déclarer que votre package souhaite un accès</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/net-package-api/controlmanager/">Accéder au hub de contrôle avec le ControlManager</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le <a href="/concepts/les-differents-hubs-et-interfaces-rest-du-serveur-constellation/">hub de contrôle</a> permet d’accéder à différentes fonctions de pilotage de votre Constellation.</p>
<p>Voyons en détail comment contrôler votre Constellation depuis un package C#/.NET.</p>
<h3>Accéder au hub de contrôle</h3>
<p>Tout d’abord il faut déclarer que votre package souhaite un accès au hub de contrôle. Pour cela vous devez ajouter l’attribut “EnableControlHub” à <em>true</em> dans le <a href="/concepts/package-manifest/">manifeste </a>de votre package (fichier <em>PackageInfo.xml</em>).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-151.png"><img class="colorbox-1491"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-128.png" alt="image" width="424" height="258" border="0" /></a></p>
<p>Ensuite, il faut que votre package se connecte à votre Constellation avec une “Access Key” qui possède l’autorisation d’accès au hub de contrôle.</p>
<p>Il faut ajouter l’attribut “enableControlHub” à true sur un de vos credentials et affecter ce credential à votre package :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-152.png"><img class="colorbox-1491"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-129.png" alt="image" width="424" height="233" border="0" /></a></p>
<p>Ainsi votre package pourra accéder au hub de contrôle de contrôle. Vous devriez d’ailleurs toujours tester la propriété “<em>HasControlManager</em>” pour gérer les erreurs où l’accès au hub de contrôle n&rsquo;est possible.</p>
<p></p><pre class="crayon-plain-tag">if (PackageHost.HasControlManager)
{
    PackageHost.WriteInfo("ControlHub OK");
}
else
{
    PackageHost.WriteError("ControlHub access denied !");
}</pre><p></p>
<h3>Suivre les sentinelles et leurs statuts</h3>
<p>Il y a deux manières d’obtenir la liste des sentinelles enregistrées dans votre Constellation :</p>
<ul>
<li><u>RequestSentinelsList</u> : vous retourne la liste des sentinelles en une seule fois par l’événement “<em>SentinelsListUpdated</em>”</li>
<li><u>RequestSentinelUpdates</u> : vous retourne l’état de chaque sentinelle dans l’événement “<em>SentinelUpdated</em>” (cet événement est levé pour chaque sentinelle)</li>
</ul>
<p>En principe pour récupérer la liste des sentinelles de votre Constellation, vous utiliserez toujours la première méthode.</p>
<p>Par exemple :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.SentinelsListUpdated += (s, e) =&gt;
{
    PackageHost.WriteInfo("Il y a {0} sentinelle(s)", e.Sentinels.Count);
    foreach (SentinelInfo sentinel in e.Sentinels)
    {
        PackageHost.WriteInfo("Sentinelle '{0}' (Plateforme: {1}) =&gt; IsConnected = {2}",
            sentinel.Description.SentinelName,
            sentinel.Description.Platform,
            sentinel.IsConnected);
    }
};
PackageHost.ControlManager.RequestSentinelsList();</pre><p></p>
<p>Vous pouvez également vous abonner en temps réel aux mises à jour des sentinelles de votre Constellation.</p>
<p>Pour cela il faut activer la réception des mises à jour :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.ReceiveSentinelUpdates = true;</pre><p></p>
<p>Puis attacher un handler sur l’événement “SentinelUpdated” qui se produit à chaque mise à jour d’une sentinelle :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.SentinelUpdated += (s, e) =&gt;
{
    PackageHost.WriteInfo("Sentinelle '{0}' (Plateforme: {1}) =&gt; IsConnected = {2}",
        e.Sentinel.Description.SentinelName,
        e.Sentinel.Description.Platform,
        e.Sentinel.IsConnected);
};</pre><p></p>
<h3>Superviser les packages</h3>
<h4>Récupérer les packages d’une sentinelle</h4>
<p>Pour récupérer la liste des packages qui sont déployés sur une sentinelle vous devez attacher un handler sur l’événement “<em>PackagesListUpdated</em>” et appeler la méthode “<em>RequestPackagesList</em>” en spécifiant le nom de la sentinelle.</p>
<p>Pour exemple :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.PackagesListUpdated += (s, e) =&gt;
{
    PackageHost.WriteInfo("Il y a {0} package(s) sur la sentinelle {1}", e.Packages.Count, e.SentinelName);
};
PackageHost.ControlManager.RequestPackagesList("MA-SENTINELLE");</pre><p></p>
<p>Chaque “PackageInfo” contient différentes informations sur l’instance du package (description du package, état du package, état de la connexion, version du package, etc…) :</p>
<p></p><pre class="crayon-plain-tag">foreach (PackageInfo package in e.Packages)
{
    PackageHost.WriteInfo("Package '{0}' - Etat = {1}", package.Package.Name, package.State);
}</pre><p></p>
<h4>Suivre l’état des packages</h4>
<p>Vous pouvez aussi vous abonnez aux mises à jour des états des packages :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.ReceivePackageState = true;</pre><p></p>
<p>Vous pourrez ensuite être notifier de tout changement d’état de vos packages dans votre Constellation :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.PackageStateUpdated += (s, e) =&gt;
{
    PackageHost.WriteInfo("Le package '{0}' est maintenant dans l'état {1}", e.PackageName, e.State);
};</pre><p></p>
<h4>Suivre la consommation des packages</h4>
<p>Vous pouvez aussi récupérer la consommation des ressources (CPU et RAM) de vos packages :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.ReceivePackageUsage = true;</pre><p></p>
<p>Par exemple, on pourrait écrire un warning si un package consomme plus de 50% du CPU :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.PackageUsageUpdated += (s, e) =&gt;
{
    if (e.CPU &gt; 50) // Package consommant plus de 50% du CPU à un instant T
    {
        PackageHost.WriteWarn("Le package {0} consomme maintenant plus de 50% !!! CPU={1}% RAM={2}ko",
            e.PackageName, e.CPU, e.RAM / 1024);
    }
};</pre><p></p>
<h4>Contrôler les packages</h4>
<p>Vous pouvez démarrer un package sur une sentinelle avec la méthode “<em>StartPackage</em>” :</p>
<p></p><pre class="crayon-plain-tag">// Démrrage du package "MonPremierPackage" sur la sentinelle "MON-PC"
PackageHost.ControlManager.StartPackage("MON-PC", "MonPremierPackage");</pre><p></p>
<p>Ou encore l’arrêter avec la méthode “<em>StopPackage</em>” :</p>
<p></p><pre class="crayon-plain-tag">// Arret du package "MonPremierPackage" sur la sentinelle "MON-PC"
PackageHost.ControlManager.StopPackage("MON-PC", "MonPremierPackage");</pre><p></p>
<p>Pour redémarrer (<em>Stop</em> puis <em>Start</em>) un package sur une sentinelle donnée, utilisez la méthode “<em>RestartPackage</em>” :</p>
<p></p><pre class="crayon-plain-tag">// Redémarrage du package "MonPremierPackage" sur la sentinelle "MON-PC"
PackageHost.ControlManager.RestartPackage("MON-PC", "MonPremierPackage");</pre><p></p>
<p>Enfin pour mettre à jour un package, utilisez la méthode “<em>ReloadPackage</em>”.</p>
<p>Un “reload” stoppe le package, ordonne à la sentinelle de re-télécharger le package sur le serveur, le déploie en local avant de le démarrer.</p>
<p></p><pre class="crayon-plain-tag">// Mise à jour du package "MonPremierPackage" sur la sentinelle "MON-PC"
PackageHost.ControlManager.ReloadPackage("MON-PC", "MonPremierPackage");</pre><p></p>
<h3>Accéder aux logs en temps réel</h3>
<p>Pour récupérer les logs produits par vos sentinelles et packages dans votre Constellation, activez la propriété suivante :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.ReceivePackageLog = true;</pre><p></p>
<p>Il suffit ensuite d’attacher handler sur l’événement “<em>LogEntryReceived</em> “.</p>
<p>Vous recevrez en paramètre un objet “<em>LogEntry</em>” qui contient toutes les informations sur un log (le message, la date, le couple Sentinelle/Package à l’origine du log et la sévérité du message).</p>
<p>Par exemple :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.LogEntryReceived += (s, e) =&gt;
{
    if (e.LogEntry.PackageName != PackageHost.PackageInstanceName) // Ne pas prendre les logs de ce package pour éviter la boucle ;)
    {
        // On log des logs, juste pour l'exemple ;)
        PackageHost.WriteInfo("Je reçois un log daté du {0} du package {1} sur la sentinelle {2} de type {3}." +
            "Message = {4}",
            e.LogEntry.Date.ToString(),
            e.LogEntry.SentinelName,
            e.LogEntry.PackageName,
            e.LogEntry.Level,
            e.LogEntry.Message);
    }
};</pre><p></p>
<p>Notez qu’ici on logue dans Constellation (“WriteInfo”) les logs des autres packages (d’où le &lt;if&gt;). Ca n’a pas de sens, c’est juste pour l’exemple !</p>
<h3>Récupérer la description des packages</h3>
<p>Comme vous le savez, tous les <a href="/client-api/net-package-api/messagecallbacks/#Decrire_ses_MessageCallbacks">MessageCallbacks ainsi que les types personnalisés</a> utilisés en entrée ou en sortie sont décrits dans un <a href="/concepts/messaging-message-scope-messagecallback-saga/">PackageDescriptor</a> tout comme les <a href="/client-api/net-package-api/stateobjects/#Decrire_les_types_de_StateObjects">types personnalisés des StateObjects</a>.</p>
<p>En vous connectant au hub de contrôle vous pouvez récupérer le <em>PackageDescriptor</em> de chaque package. Par exemple :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.PackageDescriptorUpdated += (s, e) =&gt;
{
    PackageHost.WriteInfo("Pour le package {0}, il y a {1} MessageCallback(s) associés à " +
                         "{2} type(s) ainsi que {3} type(s) de StateObject",
        e.PackageName,
        e.Descriptor.MessageCallbacks.Count,
        e.Descriptor.MessageCallbackTypes.Count,
        e.Descriptor.StateObjectTypes.Count);
};
PackageHost.ControlManager.RequestPackageDescriptor("MonPremierPackage");</pre><p></p>
<h3>Purger les StateObjects</h3>
<p>Pour supprimer tous les StateObjects d’un package déployé une sentinelle :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.PurgeStateObjects("MON-PC", "MonPremierPackage");</pre><p></p>
<p>Vous pouvez aussi spécifier le nom du StateObject, pour supprimer un StateObject en particulier (identifié par son nom) :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.PurgeStateObjects("MON-PC", "MonPremierPackage", "Demo");</pre><p></p>
<p>Ou encore, tous les StateObjects d’un type particulier d’une instance de package :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.PurgeStateObjects("MON-PC", "MonPremierPackage", type:"TypeDemo");</pre><p></p>
<h3>Recharger la configuration</h3>
<p>Vous pouvez recharger et déployer la configuration Constellation en invoquant la méthode :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.ReloadServerConfiguration();</pre><p></p>
<p>Vous pouvez également passer un booléen pour indiquer si il faut déployer la configuration (c’est à dire pousser la configuration sur chaque sentinelle et package). Par défaut, la valeur est à “true” (la configuration est déployée).</p>
<p>Autrement :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.ReloadServerConfiguration(false);</pre><p></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/net-package-api/controlmanager/">Accéder au hub de contrôle avec le ControlManager</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/client-api/net-package-api/controlmanager/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Mise en cache de page à l’aide de Disk: Enhanced 

Served from: developer.myconstellation.io @ 2026-01-23 02:50:07 by W3 Total Cache
-->