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) };
}

....