Settings \ Console \ Workspace \ Configuration
Fonction Group By de la console
protected void configureCebox(ConsoleEntityConfiguration configuration)
{ configuration.extendBy.label="Setting";
configuration.extendBy.text="\$hyperbox.name Setting";
configuration.extendBy.items[0].name="localization";
configuration.extendBy.items[0].label="Localization";
configuration.extendBy.items[0].attributes[0].name="region";
configuration.extendBy.items[0].attributes[0].label="Region";
configuration.extendBy.items[0].attributes[0].type=configuration.variable(String.class);
configuration.extendBy.items[0].attributes[1].name="ville";
configuration.extendBy.items[0].attributes[1].label="Ville";
configuration.extendBy.items[0].attributes[1].type=configuration.variable(String.class);
configuration.extendBy.items[0].attributes[2].name="room";
configuration.extendBy.items[0].attributes[2].label="Room";
configuration.extendBy.items[0].attributes[2].type=configuration.variable(String.class);
configuration.groupBy.items[0].name="optimizer";
configuration.groupBy.items[0].label="Optimizer";
configuration.groupBy.items[0].valueExpression={ cebox -> cebox.optimizer };
configuration.groupBy.items[0].labelExpression={ optimizer -> optimizer==null?"Unknown Optimizer":optimizer.name };
configuration.groupBy.items[1].name="region";
configuration.groupBy.items[1].label="Region";
configuration.groupBy.items[1].valueExpression= { cebox -> cebox.localization.region };
configuration.groupBy.items[1].labelExpression= { region -> region==null?"Unknown Region":region};
configuration.groupBy.items[2].name="ville";
configuration.groupBy.items[2].label="Ville";
configuration.groupBy.items[2].valueExpression= { cebox -> cebox.localization.ville };
configuration.groupBy.items[2].labelExpression= { ville -> ville==null?"Ville non definie ":ville};
configuration.groupBy.items[3].name="room";
configuration.groupBy.items[3].label="Room";
configuration.groupBy.items[3].valueExpression= { cebox -> cebox.localization.room };
configuration.groupBy.items[3].labelExpression= { room -> room==null?"Unknown Room":room};
configuration.groupBy.items[4].name="client";
configuration.groupBy.items[4].label="Client";
configuration.groupBy.items[4].valueExpression= { cebox -> cebox.clientName };
configuration.groupBy.items[4].labelExpression= { client -> client==null?"Unknown Client":client};
configuration.groupBy.combinations[0].name="optimizer"
configuration.groupBy.combinations[0].name="Optimizer"
configuration.groupBy.combinations[0].items=[0];
configuration.groupBy.combinations[1].name="localization"
configuration.groupBy.combinations[1].label="Localization"
configuration.groupBy.combinations[1].items=[1,2,3];
configuration.groupBy.combinations[2].name="client"
configuration.groupBy.combinations[2].label="Client"
configuration.groupBy.combinations[2].items=[4,0];
configuration.groupBy.selection=0;
}
Fonction Sort By de la console
Sort By cebox
Pour les cebox, 2 sortBy sont définis par défaut en dur dans la console : by name & by ip
Sort By Masters
Pour les masters, 1 sortBy est défini par défaut en dur dans la console : by name
Sort By Versions
Pour les versions, 2 sortBy sont définis par défaut en dur dans la console : by name & by timestamp
Ils peuvent être redéfinis, ainsi que d'autres, respectivement dans les méthodes :
protected void configureCebox(ConsoleEntityConfiguration configuration)
{
}
protected void configureMaster(Object configuration)
{
}
protected void configureMasterVersion(Object configuration)
{
4 valeurs à définir pour un tri N
configuration.sortBy.items[N].name=... //Une chaîne de caractères, pour utilisation interne.
configuration.sortBy.items[N].label=... //Une chaîne de caractères, le libellé du tri qui sera affiché dans la console.
configuration.sortBy.items[N].comparator=... //Une expression de comparaison qui permet d'ordonner les éléments entre eux.
configuration.sortBy.items[N].labelExpression=... //Une expression qui permet de définir le libellé d'affichage de l'élément.
Exemple, pour redéfinir à l'identique le sortBy IP des cebox :
/*...*/
protected void configureCebox(ConsoleEntityConfiguration configuration)
{
/*...*/
configuration.sortBy.items[1].name="ip";
configuration.sortBy.items[1].label="IP";
configuration.sortBy.items[1].comparator={c1,c2-> c1.ip.compareTo(c2.ip)}; //On compare 2 cebox, c1 et c2, en comparant leur ip respective c1.ip et c2.ip en utilisant la méthode de comparaison java compareTo.
configuration.sortBy.items[1].labelExpression={cebox -> cebox.ip==null?cebox.name:cebox.ip+"/"+cebox.name}; //Le libellé d'une cebox est soit cebox.name si l'ip n'est pas connue soit la concaténation cebox.ip+"/"+cebox.name si l'ip est connue.
/*...*/
}
/*...*/
Exemple, pour redéfinir à l'identique le sortBy Timestamp des versions :
void configureMasterVersion(Object configuration)
{
//On laisse le tri 0 par 'Name' tel que défini en dur dans la console.
//Rédéfinition du tri 1 par 'Timestamp'
configuration.sortBy.items[1].name="timestamp";
configuration.sortBy.items[1].label="Timestamp";
configuration.sortBy.items[1].comparator={v1,v2-> v1.timestamp.compareTo(v2.timestamp)}; //On compare 2 versions, v1 et v2, en comparant leur timestamp respectif v1.timestamp et v2.timestamp en utilisant la méthode de comparaison java compareTo.
configuration.sortBy.items[1].labelExpression={version -> version.timestamp+" : "+version.name}; //Le libellé d'une version la concaténation version.timestamp+" : "+version.name
/*On peut ajouter ici des tris supplémentaires
configuration.sortBy.items[2].name=...
configuration.sortBy.items[2].label=...
configuration.sortBy.items[2].comparator=...
configuration.sortBy.items[2].labelExpression=...
...
*/
configuration.sortBy.selection=1; //Pour sélectionner le tri 1 par défaut.
}
Définition d'alerte dans votre console
Dans votre fichier de configuration console (ver > 144 ), vous pouvez définir des alertes, afin que la console vous informe d’éventuels problèmes.
Exemple : alerte concernant l'espace disque du WSO
protected void configureCebox(ConsoleEntityConfiguration configuration)
{
configuration.alertBy.items[0].name="diskUsage";
configuration.alertBy.items[0].label="Disk Usage";
configuration.alertBy.items[0].schedulingExpression="0 * * * *";
configuration.alertBy.items[0].testExpression={cebox->cebox.machineType.isOptimizer() && cebox.status.isOnline() && cebox.disk.freeSize<10_000_000_000};
configuration.alertBy.items[0].levelExpression={cebox->cebox.disk.freeSize<5_000_000_000?"SEVERE":"WARNING"};
configuration.alertBy.items[0].messageExpression={cebox->UnitFormatters.gigaByte.formatObject(cebox.disk.freeSize)+" free space on "+toCeboxString(cebox)+"."};
}
Exemple : Alerte concernant la différence de version entre ceBox et WSO
protected void configureCebox(ConsoleEntityConfiguration configuration)
{
configuration.alertBy.items[1].name="ceboxRelease";
configuration.alertBy.items[1].label="ceBox Release";
configuration.alertBy.items[1].schedulingExpression="0 * * * *";
configuration.alertBy.items[1].testExpression={cebox->!isValidRelease(cebox)};
configuration.alertBy.items[1].levelExpression={cebox->"WARNING"};
configuration.alertBy.items[1].messageExpression={cebox->"ceBox "+toCeboxString(cebox)+" Release is "+cebox.operatingSystemRelease+".\nWSO "+toCeboxString(cebox.optimizer)+" Release is "+cebox.optimizer.operatingSystemRelease+"."};
}
=> Le système d'alerte est suffisamment ouvert pour construire différents type d'alerte, si vous n'y arrivez pas, envoyer un email
Avec la version 2.0.4 à venir, on detecte si une VM est dans un etat :
-
'standard' ( = lancé sur la cebox , comme actuellement ) ( un - devant le nom de la vm dans la console )
-
'avancé' = l'agent qemu est ok et la vm windows a son nom correct ( cas aftral par exemple ) ( un + )
On peut donc créer une alerte pour detecter des VMs qui ne sont pas réellement operationelles :
private boolean isVMStateNotOk(Object cebox)
{ Object virtualmachine=cebox.virtualMachine;
return virtualmachine!=null && virtualmachine.name.startsWith("-");
}
private String toVMStateNotOk(Object cebox)
{ return toCeboxString(cebox)+" Virtual Machine State is not Ok";
}
configuration.alertBy.items[2].name="vmStateNotOk";
configuration.alertBy.items[2].label="guest hostname ";
configuration.alertBy.items[2].schedulingExpression="* * * * *";
configuration.alertBy.items[2].testExpression={cebox->isVMStateNotOk(cebox)};
configuration.alertBy.items[2].levelExpression={cebox->"WARNING"};
configuration.alertBy.items[2].messageExpression={cebox->toVMStateNotOk(cebox)};
Création de Tag Personnalisable
Il vous est possible de faire la création de Tag personnalisable
protected void configureMasterVersion(Object configuration)
{
if (com.neoapi.util.Development.isEnabled())
{
configuration.specifyBy.tags[0].name="tag0";
configuration.specifyBy.tags[0].label="Tag0";
configuration.specifyBy.tags[1].name="tag1";
configuration.specifyBy.tags[1].label="Tag1";
}
}
Définition de règle de nommage automatique automatique
Le cas a déja traité en mars 2017 pour le client cca_ma.
Il est possible par macro/code de surdefinir le nommage automatique des routings
compte cloud client : ConsoleConfigurationHandler.java
exemple
...
class ConsoleRootConfigurationHandler extends ConsoleDefaultConfigurationHandler
{ //MR3-S2CBX-098 -> MR3--098
private String cca_ma_resolveVirtualMachineName(Object route)
{ String _prefix=
route.virtualMachinePrefix==null || route.virtualMachinePrefix.trim().isEmpty()
? ""
: route.virtualMachinePrefix;
String[] _tokens=route.cebox.name.split("\-");
if (_tokens.length==3)
return _tokens[0]+"-"+_prefix+"-"+_tokens[2];
else
return _prefix;
// throw new RuntimeException(route.cebox.name+" is not a valid cebox name.\nXXX-YYY-ZZZ expected.");
}
private boolean cca_ma_configuration=false;//
if (cca_ma_configuration)
{ configuration.specifyBy.routing.virtualMachinePrefixDefault = "WBX";
configuration.specifyBy.routing.virtualMachineNameExpression = { route-> cca_ma_resolveVirtualMachineName(route) };
}
....
Updated almost 3 years ago