# Anakeen Platform en ligne de commande

L'exécution de programmes permettant de gérer les Smart Elements et le paramétrage en général peut être fait en ligne de commande. Le point d'entrée de la ligne de commande dans Anakeen Platform est le script ank.php.

# ank.php

Ce script permet de :

  • lancer des scripts,
  • effectuer des requêtes HTTP,
  • effectuer des actions systèmes.

Son aide est disponible au moyen de l'option --help:

Usage:
	--script=<script file>
		--list			List all available scripts
		--login			Execute as special account (admin is default)
	--route=<route id>
		--list			List all recorded routes
		--method=<HTTP Method>	[GET|POST|PUT|DELETE] (default GET)
		--arg-<x>=<value>	Route argument <x> value
		--content=<data file>	For POST/PUT methods
		--query=<optional args>	Like "a=1&b=2"
	--system
		--start			Reset Cache and Enable Http access
		--stop			Disable Http access
		--verbose		Verbose mode
		--unstop		Enable Http access
		--reloadConfig	Reload route configuration
		--upgradeVersion	Reset WVERSION
		--localeGen		Generate locale catalog
		--style			Reset Css generation
		--clearFile		Delete file cache
	--help				This usage

Note

Le script ank.php doit être exécuté, en ligne de commande, sous le même compte utilisateur que celui du serveur Apache ( afin que les fichiers produits soient accessibles par Anakeen Platform en mode Web) et ne doit en aucun cas être lancé sous le compte utilisateur root.

# Utilisateur effectuant l'opération

Par défaut, les opérations sont lancées sous l'identité Anakeen Platform de l'utilisateur Master Default (administrateur principal - compte admin). Il est possible de changer cette identité au moyen de l'option --userid, qui prend comme paramètre le login d'un utilisateur Anakeen Platform, ou son identifiant système Anakeen Platform.

# Passage d'arguments

# Arguments simples

Il est possible de passer des arguments nommés en rajoutant des options avec la notation --argumentName=argumentValue. Le nom de l'argument correspond au nom de l'option. Ainsi, --foo=bar assignera la valeur bar à l'argument foo.

Attention

Les arguments ne sont pas typés: ils sont systématiquement envoyés au format texte. Aussi, lors de l'utilisation du paramètre --foo=true, le script appelé recevra la valeur "true" (string) et non pas le booléen true.

# Arguments multivalués

Si la valeur de l'argument comporte des espaces, des guillemets doubles ", ou les guillemets simples ' peuvent être utilisés. ./ank.php --script=recordDevData --person=20 --client=10

Le passage d'arguments multivalués se fait au moyen de la notation --argumentName=argumentValue répété autant de fois que nécessaire. Ainsi, --persons[]=2 --persons[]=4 assignera la valeur array("2","4") à l'argument persons.
Pour la récupération des arguments, se référer à la documentation de la classe APIUsage.

# Arguments booléens

Enfin, il est possible de passer des arguments booléens avec la notation --argumentName (sans valeur). Ainsi, --foo assignera la valeur true à l'argument foo.

# Gestion des erreurs ank

Lorsqu'un shell non interactif sort en erreur, un mail contenant le détail de l'erreur peut être envoyé.
Ce mail est envoyé uniquement si le paramètre CORE_WSH_MAILTO est non vide.

# Exécuter des scripts avec ank

Exemple d'appel:

./ank.php --script=cleanContext

Cela appellera le script /API/cleanContext.php.
La liste des scripts disponibles est obtenu au moyen de la commande list:

./ank.php --script --list

Script List :
	- cleanContext
	- cleanOldStructures
	- configureShowcase
	- destroyStructure
	- fdl_trigger
	- generateDocumentClass
	- importAccounts
	- importConfiguration
	- importDocuments
	- manageContextCrontab
	- migrateAdminPlugins
	- migrationUpdateAccountUI
	- ods2csv
	- processExecute
	- recordDevData
	- refreshDocuments
	- refreshjsversion
	- refreshUserAccount
	- registerConfigDir
	- setParameter
	- setSessionHandler
	- updateclass
	- vault_init

Afin de connaître l'usage d'un script, il est possible d'utiliser l'option --help:

./ank.php --script=cleanContext --help

Clean base
Usage:
   Options:
	--login=<user login name to execute function>, default is 'admin'
	--help (Show usage)
	--full (clean also obsolete permission, log, folder contains)

# Retour d'erreur

Le script retourne un exit status indiquant si une erreur s'est produite. Lorsqu'une erreur se produit, son message est retourné sur la sortie standard (stdout), et non sur la sortie d'erreur (stderr).

Codes retournés:

  • 0: pas d'erreur,
  • 1: déclenchement d'une exception

Exemple:

  • Script inexistant
./ank.php --script=pasTrouve
[ANK] 850> Anakeen got an uncaught exception 'Anakeen\Script\Exception' with message 'API file "/var/www/html/platform/API/pasTrouve.php" not found' in file /var/www/html/platform/vendor/Anakeen/Script/ShellManager.php at line 99:

850> Command line arguments: '--script=pasTrouve'
850> error_log:
850> #0 /var/www/html/platform/ank.php(56): Anakeen\Script\ShellManager::runScript('pasTrouve')
850> #1 {main}
[ANK] 850> End Of Exception.
  • Utilisateur inconnu
./ank.php --script=refreshDocuments --famid=389 --login=testFaux
[ANK] 864> Anakeen got an uncaught exception 'Anakeen\Exception' with message 'Unknow user testFaux' in file /var/www/html/platform/vendor/Anakeen/Script/ShellManager.php at line 157:

864> Command line arguments: '--script=refreshDocuments' '--famid=389' '--login=testFaux'
864> error_log:
864> #0 /var/www/html/platform/vendor/Anakeen/Script/ShellManager.php(101): Anakeen\Script\ShellManager::initContext()
864> #1 /var/www/html/platform/ank.php(56): Anakeen\Script\ShellManager::runScript('refreshDocument...')
864> #2 {main}
[ANK] 864> End Of Exception.

# Écrire un script CLI

Les scripts exécutables avec ank doivent être des fichiers PHP présents dans le sous-répertoire ./API du contexte d'installation. Ces fichiers doivent porter l'extension php (le basename du fichier détermine le nom du script).

# Effectuer des requêtes HTTP

Exemple d'appel: ./ank.php --route=maRoute --method=GET

Cela appellera le script /API/RouteCommand.php. La liste des routes est disponible au moyen de la commande list: ./ank.php --route --list

Exemple de résultat:

  • récupération des informations du vault : ./ank.php --route=AdminCenter::AdminVaults:AllVaultInfo --method=GET
{
  "success": true,
  "data": [
    {
      "fsid": "10",
      "path": "/var/www/html/vaults/10",
      "metrics": {
        "totalSize": 21474836480,
        "usedSize": 16347668960,
        "totalCount": 64742,
        "repartition": {
          "usefulSize": 12373519839,
          "orphanSize": 3286571969,
          "trashSize": 687577152,
          "usefulCount": 47633,
          "orphanCount": 11563,
          "trashCount": 5546
        }
      },
      "humanMetrics": {
        "totalSize": "20 Go",
        "usedSize": "15 Go",
        "count": 64742,
        "repartition": { "usefulSize": "11 Go", "orphanSize": "3.06 GB", "trashSize": "655 Mo" }
      },
      "computedMetrics": { "usedSize": 16347668960 },
      "disk": { "totalSize": 226160975872, "usedSize": 188502396928 },
      "freespace": "4.78 GB"
    }
  ],
  "messages": []
}

# Retour d'erreur

L'exécution d'une requête erronée sur une route de Anakeen Platform en mode CLI, retourne une exception sur la sortie standard (stdout).

Exemple:

  • Route inexistante
./ank.php --route=pasTrouve --method=GET
[ANK] 918> Anakeen got an uncaught exception 'Anakeen\Router\Exception' with message 'Route "pasTrouve" not exists' in file /var/www/html/platform/vendor/Anakeen/Script/RouteCommand.php at line 36:

918> Command line arguments: '--route=pasTrouve' '--method=GET'
918> error_log:
918> #0 /var/www/html/platform/ank.php(80): Anakeen\Script\RouteCommand->requestRoute('pasTrouve', Array)
918> #1 {main}
[ANK] 918> End Of Exception.

# Effectuer une commande système

Exemple d'appel: ./ank.php --system --start

Cela appellera le script ./API/system.php

Différentes commandes peuvent être lancées ici:

--system
    --start			Reset Cache and Enable Http access
    --stop			Disable Http access
    --verbose		Verbose mode
    --unstop		Enable Http access
    --reloadConfig	Reload route configuration
    --upgradeVersion	Reset WVERSION
    --localeGen		Generate locale catalog
    --style			Reset Css generation
    --clearFile		Delete file cache

Exemple: ./ank.php --system --localeGen permet de générer le catalogue de langue.