Qu’est ce que c’est?
Une ressource partagée est une ressource Voozanoo4 commune qui est mise à disposition de tous (suivant le système de droits). L’objectif est de centraliser tous les éléments redondants pour plusieurs plans d’analyse (script R de recodage, image, autres…).
Toutes les ressources “partagées” sont automatiquement mises à disposition dans le répertoire d’exécution R suivant ces règles:
- Si la ressource est du type R / shapefile, ou si le contenu du script appelle la ressource par un source(“ma_ressource”).
- Si le nom de la ressource n’est pas un nom déjà utilisé par un script.
Celles-ci ne sont téléchargées sur le serveur d’exécution qu’une seule fois (initialisation) et ne ralentissent donc pas le temps d’exécution du plan d’analyse.
API
Index
Renvoie la liste des fichiers partagés avec l’utilisateur
Method: GET
Adresse: https://stats.voozanoo.net/modulestats/ws/shared-files/index
Paramètres
Nom | Type | Défaut | Description |
---|---|---|---|
type | string | array | array(“r”, “shapefiles”) | |
format | “xml”, “json” | “json” | Format de la réponse. |
Exemple de réponse
{
"resource": [
{
"id": "123",
"name": "Un script R partagé"
}, {
"id": '456',
"name": "Un shapefile"
}]
}
POST/id/
Réceptionne les fichiers envoyés.
Method: POST
Adresse: https://stats.voozanoo.net/modulestats/ws/shared-files
Paramètres
Nom | Type | Défaut | Description |
---|---|---|---|
type | “binary”, “r”, “shapefile” | “binary” | |
name | string | Nom de la ressource | |
data | string | Donnée à stocker sous un format zip. | |
data_hash | string | Hash des données passées via le paramètre data. Permet de vérifier s’il n’y a pas eu d’altération des données pendant le transfert. | |
transfert_mode | “chunk”, “complete” | “complete” | Paramètre optionnel, envoi des fichiers par “morceaux” ou en une seule fois. |
last_chunk | boolean | Transfert de fichier par chunk: indique s’il s’agit du dernier chunk. | |
id_chunk | string | Transfert de fichier par chunk: chemin vers le fichier sur le module de stats. Fourni par le module de stats après l’envoi du premier chunk. | |
format | “xml”, “json” | “json” | Format de la réponse. |
Exemple de fonction PHP de transfert de fichier par chunk:
protected function _transferFile( Zend_Rest_Client $oClient, $sFileFullPath )
{
$oSplitter = new Core_Library_File_Splitter( array(
'FileFullPath' => $sFileFullPath,
'Base64Handling' => true
) );
$iChunkIndex = 1;
$sFileNameOnStatMod = null;
while ( $iChunkIndex <= $oSplitter->GetTotalChunks() ) {
if ( $iChunkIndex == $oSplitter->GetTotalChunks() ) {
$oClient->last_chunk( true );
}
if ( $sFileNameOnStatMod != null ) {
$oClient->id_chunk( $sFileNameOnStatMod );
}
$oClient->data( $oSplitter->GetChunk( $iChunkIndex ) );
$oClient->data_hash( $oSplitter->GetChunkHash() );
$oClient->transfert_mode( 'chunk' );
$oResult = $oClient->post();
if ( false === $oResult->isSuccess() ) {
throw new Core_Library_Exception_WebServiceError( sprintf(
'An error occured while calling webservice : %s ', $oResult->message
));
}
$sFileNameOnStatMod = $oResult->response->id_chunk;
if ( isset( $oResult->response->token ) ) {
$sToken = (string) $oResult->response->token;
}
$iChunkIndex++;
}
return $sToken;
}
Retour
Nom | Type | Description |
---|---|---|
status | string | Contient success si aucune erreur |
message | string | Message d’erreur si status est différent de success |
Shapefiles
Un RDS est généré lors de l’envoi d’un shapefile. Celui-ci est caractérisé par 3 éléments: un NDS, un LAYER et un LEVEL.
Voici comment le fichier ZIP doit être construit avant l’envoi au webservice: Attention, le nom a une importance et contient les informations que l’on recherche. Un séparateur est utilisé, c’est le tiret “-“.
Nom du zip: [NDS]-[LAYER]-[LEVEL].zip
Le contenu du zip commence par un dossier qui porte le nom du DSN. Dans ce dossier se trouvent les fichiers du shapefile (.shp/.dbf/.prj/.shx). Ceux-ci sont nommés avec le nom du LAYER.
Exemple:
FRA-AUVERNE-0.zip
----------------------------------
FRA /
|- AUVERNE.shp
|- AUVERNE.dbf
|- AUVERNE.prj
|- AUVERNE.shx
Si le nom du zip n'est pas complet, les valeurs par défauts seront:
LAYER = DSN
LEVEL = 0
exemple: FRA.zip sera traduit en FRA-FRA-0.zip
$sName = 'FRA-FRA-1.zip';
$sSrc = Core_Library_Options::get( 'voozanoo.resources.path' ) . DIRECTORY_SEPARATOR . $sName;
$aDatas = array(
'transfert_mode' => 'complete',
'name' => $sName,
'data' => base64_encode( file_get_contents( $sSrc ) ),
'data_hash' => hash_file( 'md5', $sSrc ),
'type' => 'shapefile'
);