Beispiel #1
0
 void addValue(double value) throws IOException {
   try {
     // request RRD database reference from the pool
     final RrdDb rrdDb = rrdPool.requestRrdDb(rrdFileName);
     synchronized (rrdDb) {
       try {
         // create sample with the current timestamp
         final Sample sample = rrdDb.createSample();
         // test pour éviter l'erreur suivante au redéploiement par exemple:
         // org.jrobin.core.RrdException:
         // Bad sample timestamp x. Last update time was x, at least one second step is required
         if (sample.getTime() > rrdDb.getLastUpdateTime()) {
           // set value for load datasource
           sample.setValue(getDataSourceName(), value);
           // update database
           sample.update();
         }
       } finally {
         // release RRD database reference
         rrdPool.release(rrdDb);
       }
     }
   } catch (final FileNotFoundException e) {
     if (e.getMessage() != null && e.getMessage().endsWith("[non existent]")) {
       // cf issue 255
       LOG.debug(
           "A JRobin file was deleted and created again: " + new File(rrdFileName).getPath());
       resetFile();
       addValue(value);
     }
   } catch (final RrdException e) {
     if (e.getMessage() != null && e.getMessage().startsWith("Invalid file header")) {
       // le fichier RRD a été corrompu, par exemple en tuant le process java au milieu
       // d'un write, donc on efface le fichier corrompu et on le recrée pour corriger
       // le problème
       LOG.debug(
           "A JRobin file was found corrupted and was reset: " + new File(rrdFileName).getPath());
       resetFile();
       addValue(value);
     }
     throw createIOException(e);
   }
 }