Nonsense Placement Mandatory

    influx-backup

    1.0.1 • Public • Published

    influx-backup

    NPM version Downloads

    PRs Welcome MIT Licence

    NPM

    Description

    NodeJS module for InfluxDB backup/restore. This module allows to backup an InfluxDB database by creating a zip file with all backup files generated with the influxd shell command.

    REQUIREMENTS

    • influxd bin must be installed in your system. Check it by running which influxd command
    • Works only with InfluxDB > v1.5

    Uses InfluxDB portable backups introduced in InfluxDb v1.5, check docs for more info.

    Install

    Run the following command in the root directory of your project

    npm install influx-backup --save
    

    Usage

    Check here and the example in examples folder

    Here are some lines from examples/app.js

    const TEST_DB = "testDB";
     
    const manager = new BackupManager({db: TEST_DB});
     
    // Restore DB api
    app.post('/restore', (req, res) => {
     
      var restore_path = "";
     
      // create a temp directory to use for the backup
      manager.createDir()
      .then((dir) => {
     
        restore_path = dir;
     
        // Use multer to get the file from the req
        // and store it in the temp dir created
        var Storage = multer.diskStorage({
            destination: restore_path,
            filename: function(req, file, callback) {
                callback(null, file.originalname);
            }
        });
     
        // "restore" is the name attr of input file in html
        var upload = multer({storage: Storage}).single("restore");
     
        return multerPromise(upload, req, res)
      })
      .then((file) => {
          //now the file is stored correctly, I can start the restore command
        if(file){
            return manager.restore(restore_path, file.originalname)
        }else{
            throw Error("No file provided");
        }
    }) //the backup has been restored in a backup database, load the backup in the main database
      .then(() => manager.loadBackup())
      .then(() => res.json({success:true, message: "Backup restored successfully"}))
      .catch(err => {
          console.log(err);
          res.json({success:false, message: err.message})
      });
    });
     
    // Backup DB api
    app.get('/backup', (req, res) => {
     
      manager.backup()
      .then((file) => {
         //zip file is ready, send it to the client
        var stream = fs.createReadStream(file);
     
        res.setHeader('Content-disposition', 'attachment; filename=' + file.split('/').pop());
     
        stream.once("close", function () {
          stream.destroy(); // makesure stream closed, not close if download aborted.
          //IMPORTANT: remove backup files and zip
          manager.deleteDir(path.dirname(file));
        });
     
        stream.pipe(res);
      })
      .catch(err => {
        res.json({success: false, message: err});
      });
     
    });
     
    // Check testDB exists, if not create one and start app listening on port 8000
    influx.getDatabaseNames()
    .then(names => {
      if (!names.includes(TEST_DB)) {
        return influx.createDatabase(TEST_DB)
      }
    })
    .then(() => manager.init())
    .then(() => {
      app.listen(8000, function () {
        console.log('Listening on port 8000')
      })
    })
    .catch(err => {
      console.error(`Error creating Influx database!`)
    })
     

    Install

    npm i influx-backup

    DownloadsWeekly Downloads

    4

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    32.6 kB

    Total Files

    6

    Last publish

    Collaborators

    • roberts_lando