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!`)
})
 

Package Sidebar

Install

npm i influx-backup

Weekly Downloads

1

Version

1.0.1

License

MIT

Unpacked Size

32.6 kB

Total Files

6

Last publish

Collaborators

  • roberts_lando