Edit me

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