Socket
Book a DemoInstallSign in
Socket

influx-backup

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

influx-backup

Influxdb backup/restore helper

latest
Source
npmnpm
Version
1.0.1
Version published
Maintainers
1
Created
Source

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

Keywords

influxdb

FAQs

Package last updated on 05 Mar 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts