Utilisation de Erddap

Chargement des jeux de données

Introduction / Préambule

Erddap fournit un programme en ligne de commande « GenerateDatasetsXml.sh » dans le répertoire /opt/tomcat/webapps/erddap/WEB-INF qui va :

  • analyser les jeux de données qu'on lui fournit et
  • générer le code XML qui va décrire un grand nombre de formats de jeux de données.

Le code XML produit par la commande devra être placé dans le fichier ~/tomcat/content/erddap/datasets.xml GenerateDatasetsXml pose une série de questions pour essayer de reconnaitre comment est organisé le jeu de données.

GenerateDatasetsXml fait une sorte de "data mining", il va fouiller la source de données et, avec les réponses fournies va essayer de reconnaitre et extraire les données et metadonnées qu'il trouve dans les fichiers (noms de variables, metadata, et les données brutes elles mêmes. etc). Si les réponses sont correctes par rapport au jeu de données, les informations seront chargées et accessibles dans Erddap... sinon il faudra investiguer les erreurs possibles dans les fichiers de logs

Le code XML produit n'est pas exempt d'erreurs ou de fautes, si le jeu de donnée n'est pas chargé par erddap et n'apparait pas dans l'interface web, c'est qu'il ya eu un probleme lors de l'analyse des fichiers, il faudra alors :

  • regarder les traces dans les logs
  • modifier les réponses
  • relancer la commande
  • ou bien retoucher le code à la main avec un éditeur

TP1: griddap netcdf : chlorophylle ibi-roos

c'est parti.... Pour commencer, ne pas oublier de passer sous l’identité « tomcat » pour :

  • charger les bonnes variables d'environnement, et de
  • mettre le chemin vers l’interpréteur java dans le PATH, et
  • se rendre dans le répertoire /opt/tomcat/webapps/erddap/WEB-INF, pour lancer le script * ./GenerateDatasetsXml.sh*
    $ su – tomcat
    $ source ./setenv.sh
    $ export PATH=$JAVA_HOME/bin/:$PATH
    $ cd /opt/tomcat/webapps/erddap/WEB-INF
    $  ./GenerateDatasetsXml.sh
    

Nous allons commencer par rentrer un premier jeu de données Ifremer qui représente des données surfaciques de chlorophylle à l'échelle de la planète. Ce sont des fichiers au format NetCDF.

Ces fichiers de données sont disponibles sur le NAS de la formation et sur la clé USB que nous vous avons fournie dans le répertoire erddap/datasets sous la forme d'une archive data-chl-ibi-roos.tar

Vous copierez donc ces données vers votre VM via le répertoire /mnt/share partagé entre votre machine physique et la VM pour les mettre ensuite dans le répertoire /home/tomcat/data/ibi-roos

    $ mkdir /home/tomcat/data/ibiroos
    $ cd /home/tomcat/data/ibiroos
    $ tar xvf /mnt/share/data-chl-ibi-roos.tar

Après "détarrage", vous devez avoir 7 fichiers NetCDF dans votre répertoire/home/tomcat/data/ibiroos

20170321-EUR-L4-CHL-ATL-v01-fv01-OI.nc
20170322-EUR-L4-CHL-ATL-v01-fv01-OI.nc
20170327-EUR-L4-CHL-ATL-v01-fv01-OI.nc
20170325-EUR-L4-CHL-ATL-v01-fv01-OI.nc
20170326-EUR-L4-CHL-ATL-v01-fv01-OI.nc
20170323-EUR-L4-CHL-ATL-v01-fv01-OI.nc
20170324-EUR-L4-CHL-ATL-v01-fv01-OI.nc

Nous allons maintenant insérer ces données dans le système ERDDAP. Lançons le script GenerateDatasetsXml.sh (sous l'identité tomcat)

$ cd /opt/tomcat/webapps/erddap/WEB-INF
$ ./GenerateDatasetsXml.sh

Ce fichier représente des concentrations surfaciques de chlorophylle, c'est une grille au format NetCDF, nous allons donc choisir le format EDDGridFromNcFiles

  • La 1ère question "fondamentale" du script à laquelle il faut répondre, est de lui indiquer le type du jeu de données à traiter (format grid ou tabulaire)

Répondons aux différentes questions du script :

Question Reponse Commentaire 3
Format EDDGridFromNcFiles Grille en NetCDF
Starting Directory /home/tomcat/data/ibiroos le répertoire source
File Name regex ".*\.nc" par défaut pour prendre les .nc files
First File Name "" s'il y a des fichiers différents dans le répertoire , dans notre cas réponse par \<retour charriot>
  • Le script étant terminé, il faut récupérer le code XML que le script a affiché à l'écran : de la ligne <dataset> jusqu'à </datasatet>
  • NB: On peut aussi récupérer ce code XML de sortie dans le fichier /opt/tomcat/content/erddap/logs/GenerateDatasetsXml.out

  • Ouvrez une nouvelle fenêtre et éditer le fichier /opt/tomcat/content/erddap/datasets.xml qui contient les datasets

    $ cd /opt/tomcat/content/erddap
    $ vi datasets.xml
    
  • En bas du fichier avant la derniere ligne et la balise de fermeture , coller le code XML qui a été précédemment généré par la commande GenerateDatasetsXml.sh

Nous vous conseillons d'insérer des commentaires clairs autour de votre "paste" pour vous y retrouver plus facilement...

  • Récupérer l'Identifiant du jeu de données ibiroos sur la 1ere ligne datasetID=ibiroos_a36a_ab16_6b5

    $ grep ibiroos datasets.xml
    
    <dataset type="EDDGridFromNcFiles" datasetID="ibiroos_a36a_ab16_6b5f" active="true">
    
  • enregistrez le fichier et sortez de l'éditeur...

Rechargement du jeu de données

Après avoir inséré le code XML dans le fichier datasets.xml, Il faut maintenant faire prendre en compte cette modification à ERDDAP. Pour cela :

  • soit on relance le serveur (ce qui peut être long car cela va recharger tous les jeux de données présents)...
  • soit on dit à Erddap de ne recharger que le jeu de données qui a subi des modifications : pour cela on créé un fichier portant le nom de l'identifiant du dataset qu'on a créé , dans le répertoire ~tomcat/content/erddap/flag/
    $ touch ~tomcat/content/erddap/flag/ibiroos_a36a_ab16_6b5f
    

La prise en compte est alors immédiate par le serveur ERDDAP.

  • A partir de dorénavant, jusqu'à désormais : Lors de chaque modification du fichier datasets.xml, on procédera de la sorte pour faire prendre en compte les modifications d'un jeu de données à Erddap

Vérification dans Erddap

Après rechargement du jeu de données; s'il n'y a pas eu d'erreur, vous devriez voir le nouveau jeu de données apparaitre dans erddap avec toutes les metadonnées, et les acces aux données brutes et au graphe.

http://localhost:8080/erddap/griddap/
http://localhost:8080/erddap/griddap/ibiroos_a36a_ab16_6b5f.graph

Petit tour dans le fichier XML... dans le cas d'un fichier NetCDF très propre et conforme aux normes, on obtient un excellent résultat. Mais il faut parfois retoucher le code XML que le script à pu fabriquer à partir du fichier qui lui a servi de modèle.

Téléchargement des fichiers bruts du dataset

On peut proposer le téléchargement des fichiers bruts dans l’interface web avec la balise <accessibleViaFiles> dans le code XML du dataset,

Il faut passer cette balise à "true" dans le code XML du jeu de données, suivi d'un "touch" pour le faire prendre en compte immédiatement par le serveur erddap, et éviter d'attendre 10000 secondes la relecture...

  • Editer le fichier datasets.xml, et modifiez le paramètre accessibleViaFiles

    <dataset type="EDDGridFromNcFiles" datasetID="ibiroos_a36a_ab16_6b5f" active="true">
    <reloadEveryNMinutes>10080</reloadEveryNMinutes>
    <updateEveryNMillis>10000</updateEveryNMillis>
    <fileDir>/home/tomcat/data/ibiroos/</fileDir>
    <fileNameRegex>.*\.nc</fileNameRegex>
    <recursive>true</recursive>
    ... cut ....
    <accessibleViaFiles>true </accessibleViaFiles>
    
  • provoquer le rechargement du dataset

    $ touch ~tomcat/content/erddap/flag/ibiroos_a36a_ab16_6b5f
    
  • vous devriez voir les fichiers bruts accessibles sur le site

    http://localhost:8080/erddap/files/ibiroos_a36a_ab16_6b5f/
    

Check the logs in case of problems

Si Erddap n'a pa chargé le jeu de données, c'est qu'il y a un problème !... il faudra essayer de comprendre les erreurs et corriger le fichier XML à la main en vérifiant les messages dans les fichiers de logs

NB: Ca n'est pas toujours simple de repérer les erreurs, les logs sont fouillis et verbeux chercher le datasetID ou le mot clé "error" pour trouver une erreur concernant un dataset

  • /opt/tomcat/content/erddap/logs/GenerateDatasetsXml.log
  • /opt/tomcat/content/erddap/logs/log.txt

TP2 : tabledap : fichiers ASCII avec profils CTD

Nous allons maintenant rentrer un second jeu de données qui représente des profils verticaux de différentes variables (température, salinité, ...) provenant d'une sonde CTD à l'entrée de la baie de Marseille.

Cette fois ci, les données sont dans des fichiers Ascii, avec des variables en colonnes et des mesures en ligne : Le type de données approprié dans ERDDAP est donc le type EDDTableFromAsciiFiles

Ces fichiers de données sont toujours disponibles sur la clé USB que nous vous avons fournie dans le répertoire "erddap/data" sous la forme d'une archive data-solemio.tar

Nous allons les transférer de la clé USB vers votre VM via le répertoire /mnt/share partagé entre votre machine physique et la VM pour les mettre ensuite dans le répertoire /home/tomcat/data/solemio

    $ mkdir /home/tomcat/data/solemio
    $ cd /home/tomcat/data/solemio
    $ tar xvf /mnt/share/datasets/data-solemio.tar
  • Vous devez avoir maintenant 7 fichiers NetCDF dans votre répertoire/home/tomcat/data/solemio

    tomcat@sist-erddap:/home/tomcat/data/solemio$ ls
    2015_Donnees_SOLEMIO_Avr2015.csv
    2015_Donnees_SOLEMIO_Jun2015.csv
    2015_Donnees_SOLEMIO_Fev2015.csv
    2015_Donnees_SOLEMIO_Mai2015.csv
    2015_Donnees_SOLEMIO_Jan2015.csv
    2015_Donnees_SOLEMIO_Mar2015.csv
    2015_Donnees_SOLEMIO_Jul2015.csv
    
  • Nous allons maintenant insérer ces nouvelles données dans le système ERDDAP. Lançons le script GenerateDatasetsXml.sh

    $ cd /opt/tomcat/webapps/erddap/WEB-INF
    $ ./GenerateDatasetsXml.sh
    

Répondons maintenant aux différentes questions du script :

Question Reponse Commentaire 3
Which EDDType ? EDDTableFromAsciiFiles Ascii en Colonne
Starting Directory /home/tomcat/data/solemio le répertoire source
File Name regex ".*\.csv" pour prendre les .csv files
Full file name of one file default "" Pour le cas ou on aurait des fichiers de noms différents
Charset ISO-8859-1 or UTF-8 default "" retour=default=ISO-8859-1
Colums names row 1 la premiere ligne sert d'entete
First Data row 2 les données commencent à la deuxième ligne
Colum Separator tabulation séparateur des colonnes ; tabulation au clavier
questions suivantes ...  default "" taper "entree" pour le reste des questions
les 4 dernieres questions fournissent les métadonnées
infoUrl ? http://erddap.mio.osupytheas.fr/  mettez l'URL de votre serveur
Institution ? M.I.O service d'observation UMS3470 votre Institut
Summary ? profils CTD station solemio lat 43.238 Lon 5.28 résumé de ce dataset
Title ? profils CTD station solemio lat 43.238 Lon 5.28 un titre
  • Le script étant terminé, il a à nouveau affiché à l'écran tout le code XML... Il faut copier la sortie XML de la commande de la ligne <dataset> jusqu'à </datasatet> On peut aussi récupérer ce code XML de sortie dans le fichier ~tomcat/content/erddap/logs/GenerateDatasetsXml.out

  • Ouvrez une nouvelle fenêtre et éditer le fichier /opt/tomcat/content/erddap/datasets.xml qui contient les datasets

    $ cd /opt/tomcat/content/erddap
    $ vi datasets.xml
    
  • Coller à nouveau le code XML qui a été généré par le script (sorite d'écran ou bien depuis le fichier GenerateDatasetsXml.out . Nous vous rappellons d'insérer des commentaires clairs autour de votre "paste" pour vous y retrouver plus facilement...

  • Récupérer l'Identifiant du jeu de données solemio sur la 1ere ligne datasetID=solemio_c63e_3ab7_aebf

    <dataset type="EDDTableFromAsciiFiles" datasetID="solemio_c63e_3ab7_aebf" active="true">
    
  • enregistrez le fichier et sortez de l'éditeur...

  • Rechargez le jeu de données : Il faut maintenant faire prendre en compte cette modification à ERDDAP en créant encore une fois un fichier portant le nom de l'identifiant du dataset qu'on a créé , dans le répertoire ~tomcat/content/erddap/flag/
    $ touch ~tomcat/content/erddap/flag/solemio_c63e_3ab7_aebf
    

La prise en compte est à nouveau immédiate par le serveur ERDDAP

Vérification dans Erddap

Vous devez avoir un dataset supplémentaire dans votre serveur Erddap, dont l'URL comporte l'identifiant du jeu de données

Automatisation des réponses de GenerateDatasetsXml.sh

Lorsqu'on fait plusieurs tentatives avec le script GenerateDatasetsXml.sh, en corrigeant des erreurs, Il est fastidieux de :

  • répondre chaque fois aux mêmes questions posées par le script, puis
  • récupérer/copier le code XML et
  • l'insérer/coller dans le fichier datasets.xml
  • et, recommencer...

Pour éviter de répondre à chaque question du script, une à une, le script GenerateDatasetsXml.sh :

  • permet de mettre les réponses en arguments sur la ligne de commande : c'est pas tres pratique mais c'est mieux que rien!
  • comporte une option "-i" suivie du PATH complet vers le nom du fichier datasets.xml.
    • Cette option permet d'insérer automatiquement le code XML directement dans le fichier datasets.xml à l'endroit où se situe un certain "tag"

L'insertion du code XML va se faire dans le fichier à un certain endroit repéré par 2 balises (tag) ci dessous. Avec l'option -i GenerateDatasetsXml cherche ces 2 lignes ci dessous particulières dans le fichier datasets.xml

     <!-- Begin GenerateDatasetsXml #tagName someDatetime -->
      le code sera placé ici
     <!-- End GenerateDatasetsXml #tagName someDatetime -->

Exemple pour le jeu de données "solemio"

Nous allons insérer un tag "solemio" dans le fichier datasets.xml.

  • Editer le fichier datasets.xml
  • vers la fin du fichier, insérer les 2 lignes suivantes, avec le tag #solemio

     <!-- Begin GenerateDatasetsXml #Osolemio 10/2017 -->
          ....
     <!-- End GenerateDatasetsXml #Osolemio 10/2017 -->
    
  • Exemple sur le dataset solemio des mesures CTD :

    ./GenerateDatasetsXml.sh -verbose -i/opt/tomcat/content/erddap/datasets.xml#Osolemio EDDTableFromAsciiFiles /home/tomcat/data/solemio '.*' nothing   ISO-8859-1 1 2 default default default default default default default  default http://www.mio.univ-amu.fr "MIO UMR7294 CNRS"  "Profil CTD station solemio " "Profil CTD station lat 43.238 Lon 5.286"
    
  • Attention à la syntaxe...

    • pas d'espace après l'argument -i
    • il faut scrupuleusement donner les arguments dans l'ordre.. oui on se trompe facilement
    • mettre nothing comme réponse pour une chaine vide ""
    • mettre default comme réponse pour donner la valeur par défaut

      processing -i/opt/tomcat/content/erddap/datasets.xml#Osolemio datasetsXmlName=/opt/tomcat/content/erddap/datasets.xml tagName=Osolemio

found beginLine: <!-- Begin GenerateDatasetsXml #Osolemio found endLine: <!-- End GenerateDatasetsXml #Osolemio -i/opt/tomcat/content/erddap/datasets.xml#Osolemio finished >successfully! *** closed logFile=/opt/tomcat/content/erddap/logs/>GenerateDatasetsXml.log at 2017-10-26T17:16:41+02:00

  • Vérifiez dans le fichier datasets.xml si vous voulez pour voir si le code a bien été intégré
  • vérifiez en rechargeant le jeu de données par la méthode habituelle
    $ touch ~tomcat/content/erddap/flag/solemio_c63e_3ab7_aebf
    

Inscrire les unités des variables

Erddap possede un attribut spécial "units" pour inscrire les unités des variables dans le fichier datasets.xml ...

Il ne faut pas se priver de rajouter les unités pour chacune des données affichées :

Rajoutez des unités pour certaines variables dans le code XML du ficheir datasets.xml

    <att name="long_name">T090 C: Temperature [ITS-90, Deg C]</att>
    <att name="units">Deg. Celsius</att>
  • n'obliez pas de recharger le jeu de données par la méthode habituelle

    $ touch ~tomcat/content/erddap/flag/solemio_c63e_3ab7_aebf
    
  • Vérifiez en faisant une requête sur les données avec le "data access form"

unites

Afficher des subsets avec la balise Subset

Erddap permet d'afficher des "subsets" qui sont des sous ensembles de données. Il se base pour cela sur une ou quelques variables qui présentent une gamme de variation faible, (comme des index ou des des clés primaires) et qui permettent de filtrer les autres données sur les valeurs de ces variables.

Par exemple dans le jeu de données "solemio" la variable "time" est un bon candidant pour être une clé de sélection pour afficher des sous ensembles de données, puisqu'elle n'a que 7 valeurs.

Erddap fait un choix assez subjectif, et pas tout le temps opportun des variables servant de clés pour avoir des "subsets"... dans le cas où le choix n'est pas bon, il est possible de modifier ces variables dans le code XML au niveau de l'attribut "subsetVariables" comme ci-dessous

    <att name="subsetVariables">time,
    PAR_Irradiance_Biospherical_Licor,
    Beam_Transmission_WET_Labs_C_Star</att>

Les 2 variables PAR_Irradiance_Biospherical_Licor, et Beam_Transmission_WET_Labs_C_Star ne sont pas des bons candidates pour établir des subsets...

  • modifiez les par exemple par des Latitudes et Longitudes

    <att name="subsetVariables">time,
    latitude, longitude</att>
    
  • vérifiez en rechargeant le jeu de données par la méthode habituelle

    $ touch ~tomcat/content/erddap/flag/solemio_c63e_3ab7_aebf
    

TP3 : Simple diffusion de fichiers de données

Erddap propose un type de données particulier EDDTableFromFileNames qui permet de fournir les fichiers de données au téléchargement et d'afficher les metadonnées ... mais sans fournir les données brutes à l'intérieur des fichiers, comme précédemment.

L'interet de ce type est qu'il permet de traverser tous les répertoires et sous répertoires, de filtrer et de mettre à disposition tous les fichiers de différents formats qu'il trouve.

On va par exemple mettre à disposition plusieurs fichiers texte .csv et des fichiers .xls et une image .png d'un jeu de données

Récupérer le jeu de données "erddap/datasets/julio" sur votre clé USB ou sur le NAS, et copiez ce répertoire dans votre VM via le répertoire /mnt/share partagé entre votre machine physique et la VM. Copiez le répertoire "julio" le répertoire /home/tomcat/data/julio

  • Comme à l'accoutumée, lançons le script GenerateDatasetsXml.sh
    $ cd /opt/tomcat/webapps/erddap/WEB-INF
    $ ./GenerateDatasetsXml.sh | tee out.xml
    

Répondons maintenant aux différentes questions du script :

Question Reponse Commentaire 3
Which EDDType ? EDDTableFromFileNames -
Starting directory /home/tomcat/data/julio -
File name regex (e.g., ".*.nc") .* pour filtrer tous les type de fichiers
Recursive (true false) true
ReloadEveryNMinutes default -
infoUrl http://localhost:8080/erddap texte libre
institution Ifremer et UMR 7294 CNRS texte libre
summary fichiers de de chlorophylle ibi-roos et de temperature ctd solemio  texte libre
title texte libre texte libre
  • Comme à l'accoutumée maintenant, récupérez le code XML produit par la commande GenerateDatasetsXml.sh et placez le à la fin du fichiers /opt/tomcat/content/erddap/datasets.xml

  • Après insertion du code XML, il faut faire prendre en compte cette modification à ERDDAP. Comme on l'a vu précédemment en créant un fichier portant le nom de l'identifiant du dataset, dans le répertoire ~tomcat/content/erddap/flag/

    $ touch /opt/tomcat/content/erddap/flag/julio_9070_870a_58ca
    
  • Vérification dans le serveur Erddap : Vous devez avoir un dataset supplémentaire dans votre serveur Erddap, dont l'URL comporte l'identifiant du jeu de données

    http://localhost:8080/erddap/files/
    http://localhost:8080/erddap/files/julio_9070_870a_58ca/
    

Maaagiquuue....

Introduction : Choix du type EDD pour les fichiers NetCDF

Allons un peu plus loin, il est parfois difficile de bien trouver le type de Erddap a fournir pour analyser un fichier NetCDF.

Il faut commencer par bien lire la documentation :-) , mais les grandes lignes sont que :

Il faut savoir si le fichier NetCDF suit les recommandations de la convention CF

tels que définies par les "discrete sampling geometries" (DSG) des conventions CF (climate forecast) :

Selon les conventions CF DSG, les données sous la forme d'une suite discrète de points, doivent être définies avec l'attribut featureType selon les type suivants :

FeatureType Description
points isolés (simples points sans coordonnées ni relations avec d'autres points)
 série temporelle : série de point avec coordonnée fixe pris à des temps croissants
trajectoire :  série de point le long d'un tracé géographique, pris à des temps croissants
 profil (profil vertical, profil horizontal) : série de mesures ordonnées le long d'une ligne verticale à un point fixe et temps fixe
profil de série temporelle : series of profile features at the same horizontal position with monotonically increasing times
profil de trajectoire : a series of profile features located at points ordered along a trajectory

TP4 : fichier Netcdf avec Profil vertical

  • Récupérez les 2 fichiers de profil de vent du SIRTA dans le répertoire datasets/sirta sur votre clé USB ou sur le NAS, et copiez le dans la VM via votre répertoire partagé /mnt/share... et placez les
      dans le répertoire /home/tomcat/data/sirta

Ces fichier sont des séries temporelles selon la nomenclature CF qu'on a vu précédemment. On le voit dans le header des fichiers de données :

    $ ncdump -h /home/tomcat/data/sirta/profilvent_1a_Lmat10mLz1PventR5sN5n_v01_20170301_000005_1440.nc

    :featureType = "timeSeries" ;

Erddap indique que pour les fichiers utilisant les conventions multidimensionnelles CF DSG il faut utiliser le type EDDTableFromMultidimNcFiles

On va donc utiliser le type="EDDTableFromMultidimNcFiles"

  • Comme à l'accoutumée, lançons le script GenerateDatasetsXml.sh

    $ cd /opt/tomcat/webapps/erddap/WEB-INF
    $ ./GenerateDatasetsXml.sh | tee out.xml
    
  • Répondons maintenant aux différentes questions du script :

Question Reponse Commentaire 3
Which EDDType ? EDDTableFromMultidimNcFiles -
Starting directory /home/tomcat/data/sirta -
File name regex (e.g., ".*\.nc") .*\.nc pour filtrer les fichiers .nc
Full file name of one file retour si on veut un fichier particulier
DimensionsCSV default -
ReloadEveryNMinutes default -
. .. questions suivantes ... repondre par defaut -
infoUrl http://localhost:8080/erddap texte libre
institution IPSL SIRTA texte libre
summary profils de vent a differentes hauteurs texte libre
title serie temporelle de vent du SIRTA texte libre
  • Comme à l'accoutumée, récupérez le code XML produit par la commande GenerateDatasetsXml.sh et placez le à la fin du fichier /opt/tomcat/content/erddap/datasets.xml

  • Après insertion du code XML, il faut faire prendre en compte cette modification à ERDDAP. Comme on l'a vu précédemment en créant un fichier portant le nom de l'identifiant du dataset, dans le répertoire ~tomcat/content/erddap/flag/

    $ touch /opt/tomcat/content/erddap/flag/sirta_0a02_7b55_3c35
    
  • Vérification dans le serveur Erddap : Vous devriez avoir un dataset supplémentaire dans votre serveur Erddap, dont l'URL comporte l'identifiant du jeu de données...

    http://localhost:8080/erddap/
    

MAIS horreur .... le jeu de données n'a pas été chargé par Erddap !!!

Il y a donc eu une erreur... il faut donc essayer de comprendre ce qui s'est passé en localisant l'erreur dans le fichier de logs (en cherchant error ou l'id du dataset)

    datasets.xml error on line #2067
    While trying to load datasetID=sirta_0a02_7b55_3c35 (after 608 ms) 
    java.lang.RuntimeException: datasets.xml error on or before line #3120: 
    cdm_timeseries_variables #0=??? isn't one of the data variable destinationNames.
    at gov.noaa.pfel.erddap.dataset.EDD.fromXml(EDD.java:417)
    at gov.noaa.pfel.erddap.LoadDatasets.run(LoadDatasets.java:336)
    Caused by: com.cohort.util.SimpleException: cdm_timeseries_variables #0=??? 
    isn't one of the data variable destinationNames.

Il semble y avoir une sorte d'erreur qui incrimine cdm_timeseries_variables

On va donc aller voir le code XML produit dans le fichier datasets.xml, on se rend compte que l'attribut cdm_timeseries_variables n'a pas été renseigné correctement par erddap

   <addAttributes>
    <att name="cdm_data_type">TimeSeries</att>
    <att name="cdm_timeseries_variables">??? </att>

La documentation de erddap

indique que l'attribut cdm_timeseries_variables est obligatoire et qu'il doit contenir le nom de la variable qui a cf_role=timeseries_id

    TimeSeries - for data from a set of stations with fixed longitude,latitude(,altitude).

    The dataset MUST include the globalAttribute cdm_timeseries_variables, where the value is a comma-separated list of the variables which have the information about each station. Thus, for a given station, the values of these variables will be constant.
    One of the variables MUST have the variable attribute cf_role=timeseries_id to identify the variable that uniquely identifies the stations.

Dans le header du fichier de vente du sirta, profilvent_1a_Lmat10mLz1PventR5sN5n_v01_20170302_000005_1440.nc c'est la variable station_name qui possede le "cf_role"

            char station_name(strlen) ;
            station_name:long_name = "station name" ;
            station_name:cf_role = "timeseries_id" ;
  • dans le fichier datasets.xml, il faut donc modifier cet attribut de la maniere suivante
    <addAttributes>
    <att name="cdm_data_type">TimeSeries</att>
    <att name="cdm_timeseries_variables">station_name, longitude, latitude</att>
    

Apres modification, rechargeons le jeu de données

    $ touch /opt/tomcat/content/erddap/flag/sirta_0a02_7b55_3c35

et... Vérifions.... le dataset maintenant a bien été chargé par erddap

    http://localhost:8080/erddap/tabledap/sirta_0a02_7b55_3c35.graph

    http://localhost:8080/erddap/tabledap/sirta_0a02_7b55_3c35.graph?time,ws_040,time_bounds&.draw=markers&.marker=3%7C5&.color=0x0000FF&.colorBar=%7C%7C%7C%7C%7C&.bgColor=0xffccccff&time%3E=2017-03-01T00:00:00Z&time%3C2017-03-03T00:00:00Z&.timeRange=2,day(s)

Abonnement à des jeux de données

On peut demander a Erddap de surveiller les modifications sur des jeux de donnees et de nous informer par mail lorsque un jeu de donnees a ete modifié

Les abonnements (subscriptions) a des jeux de données se fait ici

On peut aussi s'abonner via un flux RSS, mais erddap gere cela différemment et apporte quelques améliorations. Les différences sont eplxiquées là :

Annexes

Quelques recommandations pour le type EDDTableFromAsciiFiles

Le type "EDDTableFromAsciiFiles" peut provoquer pas mal d'erreurs, si les fichiers ne sont pas bien conformes à ce qu'attend erddap. Voici quelques recommandations pour le contenu des fichiers ascii :

  • Attention à ne pas avoir des colonnes portant un même nom !!
  • Mettre les Dates au format ISO 2015-01-10T12:00:00Z
  • Mettre les valeurs réelles avec un format anglais d.ddd et pas avec la virgule "," d,ddd
  • bien choisir la précision utile des valeurs réelles,

    • exemple ca ne sert a rien d'avoir 2 latitudes différentes 4.4933 4.4938 à la 3eme décimale, car erddap va les afficher différentes
  • Bien choisir son caracteres de séparation : colonnes séparées par virgule, ou tabulation pour les export en CSV

  • Mettre les profondeurs en valeur négatives de -1 à -56 par exemple, si on veut tracer un profil vertical
  • Attention des caractères spéciaux dans les labels des colonnes peuvent poser probleme : enlever tout caractère spécial comme ( ) [ ] / % ^ : micron

  • Ne pas mettre les unités g/l dans les noms de colonnes... erddap a un attribut spécial pour placer les unités donc exemple Oxygene et pas Oxygen_SBE_43_ml_l (Oxygen, SBE 43 [ml L])

  • tous les fichiers d'un dataset doivent être strictement identiques... mêmes noms et ordre de colonnes, même format

  • pour les valeurs manquantes enlever NaN et mettre une valeur numérique -999.0 par exemple qui permettra a erddap de les repérer

Exemple d'erreurs dans les logs

Exemple d'un jeu de données qui ne s'est pas chargé dans Erddap Il faut consulter le fichier ~/tomcat/content/erddap/logs/log.txt

Les erreurs ne sont pas facile à localiser, il faut fouiller !!

On voit ci dessous que erddap signale un erreur sur un caractère invalide sur la variable FlC_Fluorescence_Aug_l:

at gov.noaa.pfel.erddap.LoadDatasets.run(LoadDatasets.java:336) Caused by: java.lang.RuntimeException: ERROR in Test.ensureSomthingUnicode(): datasets.xml/EDD.ensureValid error for datasetID=solemio_c63e_3ab7_aebf: for dataVariable #6=FlC_Fluorescence_Aug_l:

datasets.xml/EDV.ensureValid error for variable destinationName=FlC_Fluorescence_Aug_l: sourceName has an invalid Unicode character (#130) at position=20 [#] in "FlC: Fluorescence [[195][130][194][181]g_l][end]" at com.cohort.util.Test.error(Test.java:41)

la solution a été de réécrire le libellé de cet attribut dans le fichier de données