Utilisez les appels de fonction et méthodes de conseiller suivants dans vos conseillers personnalisés.
Sachez que les conseillers personnalisés doivent posséder toutes les routines requises. Ils doivent contenir les méthodes de classe de base suivantes :
- Routine de constructeur. Le constructeur appelle le constructeur de la classe de base.
- Méthode ADV_AdvisorInitialize. Cette méthode permet d'effectuer des étapes
supplémentaires une fois l'initialisation de la classe de base terminée.
- Routine getLoad. La classe de base du conseiller se charge de l'ouverture de la
connexion ; la fonction getLoad ne doit qu'émettre les demandes d'envoi et de réception
appropriées pour terminer le cycle de conseil.
Constructeur (fourni par la base du conseiller)
public <advisor_name> {
String sName;
String sVersion;
int iDefaultPort;
int iInterval;
String sDefaultLogFileName;
boolean replace
)
- sName
- Nom du conseiller personnalisé
- sVersion
- Version du conseiller personnalisé
- iDefaultPort
- Numéro de port permettant de contacter le serveur si aucun numéro de port n'est spécifié dans l'appel.
- iInterval
- Intervalle d'interrogation des serveurs par le conseiller.
- sDefaultLogFileName
- Ce paramètre est requis, mais il n'est pas utilisé. La seule valeur acceptable est une chaîne vide : ""
- replace
- Indique si ce conseiller fonctionne en mode remplacement. Les valeurs possibles sont les suivantes :
- true – Remplace la charge calculée par le code de base du conseiller par la valeur indiquée par le conseiller personnalisé.
- false – Ajoute la valeur de la charge indiquée par le conseiller personnalisé à la valeur de la charge calculée par le code de base du conseiller.
Méthode ADV_AdvisorInitialize()
void ADV_AdvisorInitialize()
Cette méthode permet d'effectuer toute initialisation qui peut être requise pour le conseiller personnalisé. Elle est appelée après le démarrage du module de base du conseiller.
Dans la plupart des cas, et notamment dans les conseillers standard, cette méthode n'est pas utilisée et son
code ne comprend qu'une instruction de retour. Cette méthode peut être utilisée pour appeler la méthode suppressBaseOpeningSocket(), qui n'est valide que dans cette méthode.
Dans la plupart des cas, et notamment dans les conseillers standard, cette méthode n'est pas utilisée et son
code ne comprend qu'une instruction de retour. Cette méthode peut être utilisée pour
appeler la méthode suppressBaseOpeningSocket, qui n'est valide que dans la méthode ADV_AdvisorInitialize.
Méthode ADVLOG()
La
fonction ADVLOG permet à un conseiller personnalisé de créer un message de texte dans le
fichier journal de la base du conseiller. Le format est le suivant :
void ADVLOG (int logLevel, String message)
Cette commande possède les paramètres suivants :
- logLevel
- Niveau de statut auquel le message est consigné dans le fichier journal. Le fichier
journal du conseiller est organisé en phases ; les messages les plus urgents reçoivent le
niveau de statut 0 et les moins urgents, des numéros plus élevés. Le type de message le
plus prolixe reçoit le niveau de statut 5. Ces niveaux permettent de contrôler les types
de message que l'utilisateur reçoit en temps réel (La commande dscontrol permet de
définir la prolixité). Les erreurs catastrophiques doivent toujours être consignées au niveau 0.
- message
- Message à consigner dans le fichier journal. La valeur de ce paramètre est une chaîne Java standard.
Fonction getAdvisorName
La fonction getAdvisorName renvoie une chaîne Java avec le suffixe du nom de votre conseiller personnalisé. Par exemple, pour le conseiller ADV_cdload.java, cette fonction renvoie la valeur cdload.
Cette fonction n'accepte pas de paramètres.
Evitez les incidents : Cette valeur ne peut pas être modifiée
lors d'une instanciation d'un conseiller.
gotcha
caller.getCurrentServerId()
La fonction getCurrentServerId
renvoie une chaîne Java qui correspond à une représentation unique du serveur en cours.
Généralement, cette valeur est modifiée chaque fois que vous appelez votre conseiller
personnalisé car le code de base du conseiller interroge tous les serveurs, les uns à la
suite des autres.
Cette fonction n'accepte pas de paramètres.
caller.getCurrentClusterId()
L'appel de fonction getCurrentClusterId renvoie une chaîne Java qui correspond à une
représentation unique du cluster en cours. Généralement, cette valeur est modifiée chaque
fois que vous appelez votre conseiller personnalisé car la base du conseiller interroge
tous les clusters, les uns à la suite des autres.
Cette fonction n'accepte pas de paramètres.
caller.getSocket()
L'appel de
fonction getSocket renvoie une socket Java qui représente la socket ouverte avec le serveur en cours pour les communications.
Cette fonction n'accepte pas de paramètres.
caller.getLatestLoad()
La fonction
getLatestLoad permet à un conseiller personnalisé d'obtenir la dernière valeur de charge
d'un objet de serveur donné. Les valeurs de charge sont conservées dans des tables internes par le code de base du conseiller et le démon du gestionnaire.
Cet appel de fonction est utile si vous souhaitez que le comportement d'un protocole ou d'un port dépende de celui d'un autre.
Par exemple, vous pouvez utiliser cet appel de fonction dans un conseiller personnalisé
qui a désactivé un serveur d'applications particulier si le serveur Telnet sur cette même machine a été désactivé.
La syntaxe est la suivante :
int caller.getLatestLoad (String IDcluster, int port, String IDserveur)
Ensembles, les trois arguments définissent un objet de serveur.
Cette commande possède les paramètres suivants :
- IDcluster
- Identificateur de cluster de l'objet de serveur pour lequel la valeur de charge actuelle doit être obtenue. Cet argument doit correspondre à une chaîne Java.
- port
- Numéro de port de l'objet de serveur pour lequel la valeur de charge actuelle doit être obtenue.
- IDserveur
- Identificateur de serveur de l'objet de serveur pour lequel la valeur de charge actuelle doit être obtenue. Cet argument doit correspondre à une chaîne Java. La valeur renvoyée est un entier.
- Une valeur de retour positive représente la valeur de charge réelle affectée à l'objet interrogé.
- La valeur -1 indique que le serveur interrogé est arrêté.
- La valeur -2 indique que le statut du serveur interrogé est inconnu.
caller.receive()
La fonction de réception extrait les informations
de la connexion socket. La syntaxe est la suivante :
caller.receive(StringBuffer *réponse)
Cette commande possède les paramètres suivants :
- réponse
- Il s'agit d'une mémoire tampon de chaîne dans laquelle les données extraites sont placées. De plus, cette fonction renvoie un entier dont la signification est la suivante :
- 0 indique que les données ont été envoyées correctement.
- Un nombre négatif indique une erreur.
caller.send()
La
fonction d'envoi utilise la connexion socket établie pour envoyer un paquet de données au
serveur, à l'aide du port spécifié. La syntaxe est la suivante :
caller.send(String commande)
Cette commande possède les paramètres suivants :
- commande
- Il s'agit d'une chaîne contenant les données à envoyer au serveur. Cette fonction renvoie un entier dont la signification est la suivante :
- 0 indique que les données ont été envoyées correctement.
- Un nombre négatif indique une erreur.
getLoad()
int getLoad( int iConnectTime; ADV_Thread *demandeur )
Cette fonction possède les paramètres suivants :
- iConnectTime
- Durée de la connexion, en millisecondes.
Cette mesure de charge est effectuée par le code de base du conseiller et transmise au
code du conseiller personnalisé, qui peut l'utiliser ou l'ignorer lorsqu'il renvoie la
valeur de la charge. Si la connexion échoue, cette valeur est -1.
- demandeur
- Instance de la classe de base du conseiller où les méthodes de base du conseiller
sont fournies. Appels de fonction disponibles aux conseillers personnalisés : les
méthodes ou les fonctions décrites dans les sections suivantes peuvent être appelées à
partir de conseillers personnalisés. Ces méthodes ne sont pas prises en charge par le code de base du conseiller.
Certains de ces appels de fonction peuvent être effectués directement (par exemple,
function_name()), tandis que d'autres requièrent le demandeur de préfixe. Le demandeur
représente l'instance de conseiller de base qui prend en charge le conseiller
personnalisé exécuté.
getAdviseOnPort()
La fonction getAdviseOnPort renvoie le numéro de port sur lequel le conseiller personnalisé appelant est exécuté.
La valeur de retour correspond à un entier Java (int) et la fonction n'accepte pas de paramètres.
Remarque : Cette valeur ne peut pas être modifiée
lors d'une instanciation d'un conseiller.
getAdvisorName()
La fonction
getAdvisorName renvoie une chaîne Java avec le suffixe du nom de votre conseiller
personnalisé. Par exemple, pour le conseiller ADV_cdload.java, cette fonction renvoie la valeur cdload. Cette fonction n'accepte pas de paramètres.
Notez que cette valeur ne peut pas être modifiée lors d'une instanciation d'un conseiller.
getInterval()
La fonction
getInterval renvoie l'intervalle du conseiller, à savoir, le nombre de secondes entre les
cycles du conseiller. Cette valeur est égale à la valeur par défaut définie dans le
constructeur du conseiller personnalisé, sauf si elle a été modifiée lors de la phase
d'exécution à l'aide de la commande dscontrol.
La valeur renvoyée est un entier Java (int).
Cette fonction n'accepte pas de paramètres.
suppressBaseOpeningSocket()
L'appel de fonction suppressBaseOpeningSocket permet à un conseiller personnalisé
d'indiquer si le code du conseiller de base ouvre une socket TCP au serveur de la part du
conseiller personnalisé. Si votre conseiller n'utilise pas de communication directe au
serveur pour déterminer son statut, il n'est peut-être pas nécessaire d'ouvrir cette socket.
Cet appel de fonction ne peut être émis qu'une seule fois et doit l'être à partir de la routine de la méthode ADV_AdvisorInitialize().
Cette fonction n'accepte pas de paramètres.