From b7e05c236f783194aa70ad6b9026fafb8e686aa3 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 19 Nov 2015 16:59:06 +0100 Subject: [PATCH 01/58] Initial commit. --- packages/xo-server-backup-reports/.babelrc | 11 ++++ .../xo-server-backup-reports/.editorconfig | 65 +++++++++++++++++++ packages/xo-server-backup-reports/.gitignore | 9 +++ packages/xo-server-backup-reports/.mocha.js | 5 ++ packages/xo-server-backup-reports/.mocha.opts | 1 + packages/xo-server-backup-reports/.npmignore | 10 +++ packages/xo-server-backup-reports/.travis.yml | 10 +++ packages/xo-server-backup-reports/README.md | 52 +++++++++++++++ .../xo-server-backup-reports/package.json | 59 +++++++++++++++++ .../xo-server-backup-reports/src/index.js | 0 .../src/index.spec.js | 13 ++++ 11 files changed, 235 insertions(+) create mode 100644 packages/xo-server-backup-reports/.babelrc create mode 100644 packages/xo-server-backup-reports/.editorconfig create mode 100644 packages/xo-server-backup-reports/.gitignore create mode 100644 packages/xo-server-backup-reports/.mocha.js create mode 100644 packages/xo-server-backup-reports/.mocha.opts create mode 100644 packages/xo-server-backup-reports/.npmignore create mode 100644 packages/xo-server-backup-reports/.travis.yml create mode 100644 packages/xo-server-backup-reports/README.md create mode 100644 packages/xo-server-backup-reports/package.json create mode 100644 packages/xo-server-backup-reports/src/index.js create mode 100644 packages/xo-server-backup-reports/src/index.spec.js diff --git a/packages/xo-server-backup-reports/.babelrc b/packages/xo-server-backup-reports/.babelrc new file mode 100644 index 000000000..b8d41d8a4 --- /dev/null +++ b/packages/xo-server-backup-reports/.babelrc @@ -0,0 +1,11 @@ +{ + "comments": false, + "compact": true, + "plugins": [ + "transform-runtime" + ], + "presets": [ + "stage-0", + "es2015" + ] +} diff --git a/packages/xo-server-backup-reports/.editorconfig b/packages/xo-server-backup-reports/.editorconfig new file mode 100644 index 000000000..da21ef4c5 --- /dev/null +++ b/packages/xo-server-backup-reports/.editorconfig @@ -0,0 +1,65 @@ +# http://EditorConfig.org +# +# Julien Fontanet's configuration +# https://gist.github.com/julien-f/8096213 + +# Top-most EditorConfig file. +root = true + +# Common config. +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespaces = true + +# CoffeeScript +# +# https://github.com/polarmobile/coffeescript-style-guide/blob/master/README.md +[*.{,lit}coffee] +indent_size = 2 +indent_style = space + +# Markdown +[*.{md,mdwn,mdown,markdown}] +indent_size = 4 +indent_style = space + +# Package.json +# +# This indentation style is the one used by npm. +[/package.json] +indent_size = 2 +indent_style = space + +# Jade +[*.jade] +indent_size = 2 +indent_style = space + +# JavaScript +# +# Two spaces seems to be the standard most common style, at least in +# Node.js (http://nodeguide.com/style.html#tabs-vs-spaces). +[*.js] +indent_size = 2 +indent_style = space + +# Less +[*.less] +indent_size = 2 +indent_style = space + +# Sass +# +# Style used for http://libsass.com +[*.s[ac]ss] +indent_size = 2 +indent_style = space + +# YAML +# +# Only spaces are allowed. +[*.yaml] +indent_size = 2 +indent_style = space diff --git a/packages/xo-server-backup-reports/.gitignore b/packages/xo-server-backup-reports/.gitignore new file mode 100644 index 000000000..6959be1cf --- /dev/null +++ b/packages/xo-server-backup-reports/.gitignore @@ -0,0 +1,9 @@ +/.nyc_output/ +/bower_components/ +/dist/ + +npm-debug.log +npm-debug.log.* + +!node_modules/* +node_modules/*/ diff --git a/packages/xo-server-backup-reports/.mocha.js b/packages/xo-server-backup-reports/.mocha.js new file mode 100644 index 000000000..e6d84e403 --- /dev/null +++ b/packages/xo-server-backup-reports/.mocha.js @@ -0,0 +1,5 @@ +Error.stackTraceLimit = 100 + +try { require('trace') } catch (_) {} +try { require('clarify') } catch (_) {} +try { require('source-map-support/register') } catch (_) {} diff --git a/packages/xo-server-backup-reports/.mocha.opts b/packages/xo-server-backup-reports/.mocha.opts new file mode 100644 index 000000000..6cfd94898 --- /dev/null +++ b/packages/xo-server-backup-reports/.mocha.opts @@ -0,0 +1 @@ +--require ./.mocha.js diff --git a/packages/xo-server-backup-reports/.npmignore b/packages/xo-server-backup-reports/.npmignore new file mode 100644 index 000000000..c31ee82cb --- /dev/null +++ b/packages/xo-server-backup-reports/.npmignore @@ -0,0 +1,10 @@ +/examples/ +example.js +example.js.map +*.example.js +*.example.js.map + +/test/ +/tests/ +*.spec.js +*.spec.js.map diff --git a/packages/xo-server-backup-reports/.travis.yml b/packages/xo-server-backup-reports/.travis.yml new file mode 100644 index 000000000..502095fce --- /dev/null +++ b/packages/xo-server-backup-reports/.travis.yml @@ -0,0 +1,10 @@ +language: node_js +node_js: + - 'stable' + - '4' + - '0.12' + - '0.10' + +# Use containers. +# http://docs.travis-ci.com/user/workers/container-based-infrastructure/ +sudo: false diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md new file mode 100644 index 000000000..d811985b1 --- /dev/null +++ b/packages/xo-server-backup-reports/README.md @@ -0,0 +1,52 @@ +# ${pkg.name} [![Build Status](https://travis-ci.org/${pkg.shortGitHubPath}.png?branch=master)](https://travis-ci.org/${pkg.shortGitHubPath}) + +> ${pkg.description} + +## Install + +Installation of the [npm package](https://npmjs.org/package/${pkg.name}): + +``` +> npm install --save ${pkg.name} +``` + +## Usage + +**TODO** + +## Development + +### Installing dependencies + +``` +> npm install +``` + +### Compilation + +The sources files are watched and automatically recompiled on changes. + +``` +> npm run dev +``` + +### Tests + +``` +> npm run test-dev +``` + +## Contributions + +Contributions are *very* welcomed, either on the documentation or on +the code. + +You may: + +- report any [issue](${pkg.bugs}) + you've encountered; +- fork and create a pull request. + +## License + +${pkg.license} © [${pkg.author.name}](${pkg.author.url}) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json new file mode 100644 index 000000000..d1f04eaa3 --- /dev/null +++ b/packages/xo-server-backup-reports/package.json @@ -0,0 +1,59 @@ +{ + "private": true, + "name": "", + "version": "0.0.0", + "license": "ISC", + "description": "", + "keywords": [], + "homepage": "", + "bugs": "", + "repository": { + "type": "git", + "url": "" + }, + "author": { + "name": "Julien Fontanet", + "email": "julien.fontanet@isonoe.net" + }, + "preferGlobal": false, + "main": "dist/", + "bin": {}, + "files": [ + "dist/" + ], + "dependencies": { + "babel-runtime": "^6.2.0" + }, + "devDependencies": { + "babel-cli": "^6.2.0", + "babel-core": "^6.2.0", + "babel-eslint": "^4.1.5", + "babel-plugin-transform-runtime": "^6.1.18", + "babel-preset-es2015": "^6.1.18", + "babel-preset-stage-0": "^6.1.18", + "clarify": "^1.0.5", + "dependency-check": "^2.5.1", + "mocha": "^2.3.4", + "must": "^0.13.1", + "nyc": "^3.2.2", + "source-map-support": "^0.3.3", + "standard": "^5.4.1", + "trace": "^2.0.1" + }, + "scripts": { + "build": "babel --source-maps --out-dir=dist/ src/", + "dev": "babel --watch --source-maps --out-dir=dist/ src/", + "dev-test": "mocha --opts .mocha.opts --watch --reporter=min \"dist/**/*.spec.js\"", + "lint": "standard", + "depcheck": "dependency-check ./package.json", + "posttest": "npm run lint && npm run depcheck", + "prepublish": "npm run build", + "test": "nyc mocha --opts .mocha.opts \"dist/**/*.spec.js\"" + }, + "standard": { + "ignore": [ + "dist/**" + ], + "parser": "babel-eslint" + } +} diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/packages/xo-server-backup-reports/src/index.spec.js b/packages/xo-server-backup-reports/src/index.spec.js new file mode 100644 index 000000000..6e9c776d2 --- /dev/null +++ b/packages/xo-server-backup-reports/src/index.spec.js @@ -0,0 +1,13 @@ +/* eslint-env mocha */ + +import expect from 'must' + +// =================================================================== + +import myLib from './' + +// =================================================================== + +describe('myLib', () => { + // TODO +}) From 12c4680501e471420e284e616e313def64cf85b9 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 19 Nov 2015 17:22:55 +0100 Subject: [PATCH 02/58] Initial commit --- .../xo-server-backup-reports/package.json | 3 +- .../xo-server-backup-reports/src/index.js | 67 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index d1f04eaa3..bc8627267 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -22,7 +22,8 @@ "dist/" ], "dependencies": { - "babel-runtime": "^6.2.0" + "babel-runtime": "^6.2.0", + "lodash.foreach": "^3.0.3" }, "devDependencies": { "babel-cli": "^6.2.0", diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index e69de29bb..9176f6f41 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -0,0 +1,67 @@ +import forEach from 'lodash.foreach' + +class BackupReportsXoPlugin { + constructor (xo) { + this._xo = xo + } + + configure (conf) { + this._conf = conf + } + + load () { + this._xo.on('job:terminated', status => { + let nSuccess = 0 + let nCalls = 0 + + // Backup status for each vm + forEach(status.calls, call => { + let vmStatus + + if (call.error) { + vmStatus = 'Fail' + } else { + nSuccess++ + vmStatus = 'Success' + } + + nCalls++ + + const vm = this._xo.getObject(call.params.id) + + console.log( + `VM Name: ${vm.name_label} + UUID: ${call.params.id} + Status: ${vmStatus} + Start time: ${call.start} + End time: ${call.end} + Duration: ${call.end - call.start} + ` + ) + }) + + const globalStatus = nSuccess === nCalls + ? 'Success' + : 'Fail' + + // Global status + console.log( + `Global status: ${globalStatus} + Start time: ${status.start} + End time: ${status.end} + Duration: ${status.end - status.start} + Successful backed up VM number: ${nSuccess} + Failed backed up VM: ${nCalls - nSuccess} + ` + ) + }) + } + + unload () { + + } +} + +// =================================================================== + +export default ({xo}) => new BackupReportsXoPlugin(xo) From 99caa5dddcbb6375668e260783378e37a3cb06d4 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Fri, 20 Nov 2015 10:13:12 +0100 Subject: [PATCH 03/58] Load/unload implem. --- .../xo-server-backup-reports/package.json | 2 +- .../xo-server-backup-reports/src/index.js | 94 ++++++++++--------- 2 files changed, 49 insertions(+), 47 deletions(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index bc8627267..19aeda430 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "private": true, - "name": "", + "name": "xo-server-backup-reports", "version": "0.0.0", "license": "ISC", "description": "", diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 9176f6f41..6864e5b2a 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -1,5 +1,51 @@ import forEach from 'lodash.foreach' +function listener (status) { + let nSuccess = 0 + let nCalls = 0 + + // Backup status for each vm + forEach(status.calls, call => { + let vmStatus + + if (call.error) { + vmStatus = 'Fail' + } else { + nSuccess++ + vmStatus = 'Success' + } + + nCalls++ + + const vm = this._xo.getObject(call.params.id) + + console.log( + `VM Name: ${vm.name_label} + UUID: ${call.params.id} + Status: ${vmStatus} + Start time: ${call.start} + End time: ${call.end} + Duration: ${call.end - call.start} + ` + ) + }) + + const globalStatus = nSuccess === nCalls + ? 'Success' + : 'Fail' + + // Global status + console.log( + `Global status: ${globalStatus} + Start time: ${status.start} + End time: ${status.end} + Duration: ${status.end - status.start} + Successful backed up VM number: ${nSuccess} + Failed backed up VM: ${nCalls - nSuccess} + ` + ) +} + class BackupReportsXoPlugin { constructor (xo) { this._xo = xo @@ -10,55 +56,11 @@ class BackupReportsXoPlugin { } load () { - this._xo.on('job:terminated', status => { - let nSuccess = 0 - let nCalls = 0 - - // Backup status for each vm - forEach(status.calls, call => { - let vmStatus - - if (call.error) { - vmStatus = 'Fail' - } else { - nSuccess++ - vmStatus = 'Success' - } - - nCalls++ - - const vm = this._xo.getObject(call.params.id) - - console.log( - `VM Name: ${vm.name_label} - UUID: ${call.params.id} - Status: ${vmStatus} - Start time: ${call.start} - End time: ${call.end} - Duration: ${call.end - call.start} - ` - ) - }) - - const globalStatus = nSuccess === nCalls - ? 'Success' - : 'Fail' - - // Global status - console.log( - `Global status: ${globalStatus} - Start time: ${status.start} - End time: ${status.end} - Duration: ${status.end - status.start} - Successful backed up VM number: ${nSuccess} - Failed backed up VM: ${nCalls - nSuccess} - ` - ) - }) + this._xo.on('job:terminated', listener) } unload () { - + this._xo.removeListener(listener) } } From 4a2911557db970e2026cd13b9ae7fae05ea15787 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Fri, 20 Nov 2015 10:31:29 +0100 Subject: [PATCH 04/58] Fix remove listener --- packages/xo-server-backup-reports/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 6864e5b2a..735777815 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -60,7 +60,7 @@ class BackupReportsXoPlugin { } unload () { - this._xo.removeListener(listener) + this._xo.removeListener('job:terminated', listener) } } From fb06905c8699e2fc8464408298dea9e8ae2c8ae1 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Fri, 20 Nov 2015 11:07:47 +0100 Subject: [PATCH 05/58] Fix NoSuchObject exception --- packages/xo-server-backup-reports/src/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 735777815..12fb346c5 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -17,10 +17,17 @@ function listener (status) { nCalls++ - const vm = this._xo.getObject(call.params.id) + let vmName + + try { + const vm = this._xo.getObject(call.params.id) + vmName = vm.name_label + } catch (e) { + vmName = 'NoSuchObject, no vm found' + } console.log( - `VM Name: ${vm.name_label} + `VM Name: ${vmName} UUID: ${call.params.id} Status: ${vmStatus} Start time: ${call.start} From 58aa2b6a4942ba9d376ed428e50d7b6178f95101 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Fri, 20 Nov 2015 11:30:01 +0100 Subject: [PATCH 06/58] Check backup calls --- packages/xo-server-backup-reports/src/index.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 12fb346c5..dda17a7dc 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -4,8 +4,12 @@ function listener (status) { let nSuccess = 0 let nCalls = 0 - // Backup status for each vm forEach(status.calls, call => { + // Ignore call if it's not a Backup or a Snapshot. + if (call.method !== 'vm.rollingBackup' && call.method !== 'vm.rollingSnapshot') { + return + } + let vmStatus if (call.error) { @@ -23,7 +27,7 @@ function listener (status) { const vm = this._xo.getObject(call.params.id) vmName = vm.name_label } catch (e) { - vmName = 'NoSuchObject, no vm found' + vmName = 'NoSuchObject, no vm name found' } console.log( @@ -37,11 +41,16 @@ function listener (status) { ) }) + // No backup calls. + if (nCalls === 0) { + return + } + const globalStatus = nSuccess === nCalls ? 'Success' : 'Fail' - // Global status + // Global status. console.log( `Global status: ${globalStatus} Start time: ${status.start} From 348c30b61e35de0fdbf82ecb6f4475bf63628ed1 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 25 Nov 2015 15:00:41 +0100 Subject: [PATCH 07/58] Use Babel 5. --- packages/xo-server-backup-reports/.babelrc | 12 ++++++------ packages/xo-server-backup-reports/package.json | 8 ++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/xo-server-backup-reports/.babelrc b/packages/xo-server-backup-reports/.babelrc index b8d41d8a4..bc055f47f 100644 --- a/packages/xo-server-backup-reports/.babelrc +++ b/packages/xo-server-backup-reports/.babelrc @@ -1,11 +1,11 @@ { "comments": false, "compact": true, - "plugins": [ - "transform-runtime" - ], - "presets": [ - "stage-0", - "es2015" + "optional": [ + "es7.asyncFunctions", + "es7.decorators", + "es7.exportExtensions", + "es7.functionBind", + "runtime" ] } diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 19aeda430..9d6056e14 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -22,16 +22,12 @@ "dist/" ], "dependencies": { - "babel-runtime": "^6.2.0", + "babel-runtime": "^5.8.34", "lodash.foreach": "^3.0.3" }, "devDependencies": { - "babel-cli": "^6.2.0", - "babel-core": "^6.2.0", + "babel": "^5.8.34", "babel-eslint": "^4.1.5", - "babel-plugin-transform-runtime": "^6.1.18", - "babel-preset-es2015": "^6.1.18", - "babel-preset-stage-0": "^6.1.18", "clarify": "^1.0.5", "dependency-check": "^2.5.1", "mocha": "^2.3.4", From 7e04f26f7807b1dda4db5b378c5deaa360b1fdc8 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 25 Nov 2015 16:09:53 +0100 Subject: [PATCH 08/58] Send email to one address --- .../xo-server-backup-reports/package.json | 3 +- .../xo-server-backup-reports/src/index.js | 151 ++++++++++-------- 2 files changed, 89 insertions(+), 65 deletions(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 9d6056e14..f4a864395 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -23,7 +23,8 @@ ], "dependencies": { "babel-runtime": "^5.8.34", - "lodash.foreach": "^3.0.3" + "lodash.foreach": "^3.0.3", + "moment": "^2.10.6" }, "devDependencies": { "babel": "^5.8.34", diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index dda17a7dc..d2b62308c 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -1,70 +1,10 @@ import forEach from 'lodash.foreach' - -function listener (status) { - let nSuccess = 0 - let nCalls = 0 - - forEach(status.calls, call => { - // Ignore call if it's not a Backup or a Snapshot. - if (call.method !== 'vm.rollingBackup' && call.method !== 'vm.rollingSnapshot') { - return - } - - let vmStatus - - if (call.error) { - vmStatus = 'Fail' - } else { - nSuccess++ - vmStatus = 'Success' - } - - nCalls++ - - let vmName - - try { - const vm = this._xo.getObject(call.params.id) - vmName = vm.name_label - } catch (e) { - vmName = 'NoSuchObject, no vm name found' - } - - console.log( - `VM Name: ${vmName} - UUID: ${call.params.id} - Status: ${vmStatus} - Start time: ${call.start} - End time: ${call.end} - Duration: ${call.end - call.start} - ` - ) - }) - - // No backup calls. - if (nCalls === 0) { - return - } - - const globalStatus = nSuccess === nCalls - ? 'Success' - : 'Fail' - - // Global status. - console.log( - `Global status: ${globalStatus} - Start time: ${status.start} - End time: ${status.end} - Duration: ${status.end - status.start} - Successful backed up VM number: ${nSuccess} - Failed backed up VM: ${nCalls - nSuccess} - ` - ) -} +import moment from 'moment' class BackupReportsXoPlugin { constructor (xo) { this._xo = xo + this._report = ::this._wrapper } configure (conf) { @@ -72,11 +12,94 @@ class BackupReportsXoPlugin { } load () { - this._xo.on('job:terminated', listener) + this._xo.on('job:terminated', this._report) } unload () { - this._xo.removeListener('job:terminated', listener) + this._xo.removeListener('job:terminated', this._report) + } + + async _wrapper (status) { + try { + await this._listener(status) + } catch (e) { + console.error('backup report error: ' + e) + } + } + + async _listener (status) { + let nSuccess = 0 + let nCalls = 0 + + const text = [] + + forEach(status.calls, call => { + // Ignore call if it's not a Backup or a Snapshot. + if (call.method !== 'vm.rollingBackup' && call.method !== 'vm.rollingSnapshot') { + return + } + + let vmStatus + + if (call.error) { + vmStatus = 'Fail' + } else { + nSuccess++ + vmStatus = 'Success' + } + + nCalls++ + + let vmName + + try { + const vm = this._xo.getObject(call.params.id) + vmName = vm.name_label + } catch (e) { + vmName = 'Vm name not found' + } + + const start = moment(call.start) + const end = moment(call.end) + const duration = moment.duration(end - start).humanize() + + text.push([`### VM : ${vmName}`, + `UUID: ${call.params.id}`, + `Status: ${vmStatus}`, + `Start time: ${start.toString()}`, + `End time: ${end.toString()}`, + `Duration: ${duration}` + ].join('\n - ')) + }) + + // No backup calls. + if (nCalls === 0) { + return + } + + const globalStatus = nSuccess === nCalls + ? 'Success' + : 'Fail' + + const start = moment(status.start) + const end = moment(status.end) + const duration = moment.duration(end - start).humanize() + + // Global status. + text.unshift([`## Global status: ${globalStatus}`, + `Start time: ${start.toString()}`, + `End time: ${end.toString()}`, + `Duration: ${duration}`, + `Successful backed up VM number: ${nSuccess}`, + `Failed backed up VM: ${nCalls - nSuccess}` + ].join('\n - ')) + + // TODO : Handle errors when `sendEmail` isn't present. (Plugin dependencies) + this._xo.sendEmail({ + to: 'ronan.abhamon@gmail.com', // FIXME + subject: 'Backup Reports (XenOrchestra)', + markdown: text.join('\n') + }).catch(e => console.error('Unable to send email: ', e)) } } From 8cfc6f0b1dd61a672b88ade9b16fa4d14e66fc2a Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 25 Nov 2015 16:36:08 +0100 Subject: [PATCH 09/58] Add schema + Plugin use now an array of receivers --- .../xo-server-backup-reports/src/index.js | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index d2b62308c..c8842808f 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -1,14 +1,29 @@ import forEach from 'lodash.foreach' import moment from 'moment' +export const configurationSchema = { + type: 'object', + properties: { + to: { + type: 'array', + items: { + type: 'string' + }, + minItems: 1 + } + } +} + +// =================================================================== + class BackupReportsXoPlugin { constructor (xo) { this._xo = xo this._report = ::this._wrapper } - configure (conf) { - this._conf = conf + configure ({to}) { + this._receivers = to } load () { @@ -96,7 +111,7 @@ class BackupReportsXoPlugin { // TODO : Handle errors when `sendEmail` isn't present. (Plugin dependencies) this._xo.sendEmail({ - to: 'ronan.abhamon@gmail.com', // FIXME + to: this._receivers, subject: 'Backup Reports (XenOrchestra)', markdown: text.join('\n') }).catch(e => console.error('Unable to send email: ', e)) From 561b8f4eed80f13e8d76d48ff781a539249fa2b3 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 25 Nov 2015 17:13:29 +0100 Subject: [PATCH 10/58] Coding style fixes --- .../xo-server-backup-reports/src/index.js | 49 +++++++++---------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index c8842808f..b88433daa 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -3,6 +3,7 @@ import moment from 'moment' export const configurationSchema = { type: 'object', + description: 'a array of emails (receivers)', properties: { to: { type: 'array', @@ -65,26 +66,24 @@ class BackupReportsXoPlugin { nCalls++ - let vmName + let vm try { - const vm = this._xo.getObject(call.params.id) - vmName = vm.name_label - } catch (e) { - vmName = 'Vm name not found' - } + vm = this._xo.getObject(call.params.id) + } catch (e) {} const start = moment(call.start) const end = moment(call.end) const duration = moment.duration(end - start).humanize() - text.push([`### VM : ${vmName}`, - `UUID: ${call.params.id}`, - `Status: ${vmStatus}`, - `Start time: ${start.toString()}`, - `End time: ${end.toString()}`, - `Duration: ${duration}` - ].join('\n - ')) + text.push([ + `### VM : ${vm ? vm.name_label : 'undefined'}`, + ` - UUID: ${vm ? vm.uuid : 'undefined'}`, + ` - Status: ${vmStatus}`, + ` - Start time: ${String(start)}`, + ` - End time: ${String(end)}`, + ` - Duration: ${duration}` + ].join('\n')) }) // No backup calls. @@ -92,29 +91,27 @@ class BackupReportsXoPlugin { return } - const globalStatus = nSuccess === nCalls - ? 'Success' - : 'Fail' - + const globalStatus = nSuccess === nCalls ? 'Success' : 'Fail' const start = moment(status.start) const end = moment(status.end) const duration = moment.duration(end - start).humanize() // Global status. - text.unshift([`## Global status: ${globalStatus}`, - `Start time: ${start.toString()}`, - `End time: ${end.toString()}`, - `Duration: ${duration}`, - `Successful backed up VM number: ${nSuccess}`, - `Failed backed up VM: ${nCalls - nSuccess}` - ].join('\n - ')) + text.unshift([ + `## Global status: ${globalStatus}`, + ` - Start time: ${String(start)}`, + ` - End time: ${String(end)}`, + ` - Duration: ${duration}`, + ` - Successful backed up VM number: ${nSuccess}`, + ` - Failed backed up VM: ${nCalls - nSuccess}` + ].join('\n')) // TODO : Handle errors when `sendEmail` isn't present. (Plugin dependencies) - this._xo.sendEmail({ + await this._xo.sendEmail({ to: this._receivers, subject: 'Backup Reports (XenOrchestra)', markdown: text.join('\n') - }).catch(e => console.error('Unable to send email: ', e)) + }) } } From f3fb0797bf5394073afd8256f4c326e01afa3e75 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 25 Nov 2015 17:14:58 +0100 Subject: [PATCH 11/58] Schema description fix --- packages/xo-server-backup-reports/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index b88433daa..e105dce76 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -3,7 +3,7 @@ import moment from 'moment' export const configurationSchema = { type: 'object', - description: 'a array of emails (receivers)', + description: 'an array of emails (receivers)', properties: { to: { type: 'array', From 06a111495b1083c3b0d34bccaed8ea7c7dff22a3 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 25 Nov 2015 17:23:52 +0100 Subject: [PATCH 12/58] Update package.json with plugin infos --- .../xo-server-backup-reports/package.json | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index f4a864395..abeacdc73 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,15 +1,20 @@ { - "private": true, "name": "xo-server-backup-reports", "version": "0.0.0", - "license": "ISC", - "description": "", - "keywords": [], - "homepage": "", - "bugs": "", + "license": "AGPL-3.0", + "description": "Backup reports plugin for XO-Server", + "keywords": [ + "xo-server", + "backup", + "reports", + "email", + "mail" + ], + "homepage": "https://github.com/vatesfr/xo-server-backup-reports", + "bugs": "https://github.com/vatesfr/xo-server-backup-reports/issues", "repository": { "type": "git", - "url": "" + "url": "https://github.com/vatesfr/xo-server-backup-reports" }, "author": { "name": "Julien Fontanet", From d48fa235b10dbf7ff7ad203a47e9c705c7f35386 Mon Sep 17 00:00:00 2001 From: ABHAMON Ronan Date: Wed, 25 Nov 2015 17:41:17 +0100 Subject: [PATCH 13/58] Update README --- packages/xo-server-backup-reports/README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md index d811985b1..289f7d4a9 100644 --- a/packages/xo-server-backup-reports/README.md +++ b/packages/xo-server-backup-reports/README.md @@ -1,13 +1,15 @@ -# ${pkg.name} [![Build Status](https://travis-ci.org/${pkg.shortGitHubPath}.png?branch=master)](https://travis-ci.org/${pkg.shortGitHubPath}) +# xo-server-backup-reports [![Build Status](https://api.travis-ci.org/vatesfr/xo-server-backup-reports.png?branch=master)](https://travis-ci.org/vatesfr/xo-server-backup-reports) -> ${pkg.description} +> Backup reports plugin for XO-Server + +This plugin allows to receive email notifications when backups jobs are done. ## Install Installation of the [npm package](https://npmjs.org/package/${pkg.name}): ``` -> npm install --save ${pkg.name} +> npm install --global xo-server-backup-reports ``` ## Usage @@ -43,10 +45,10 @@ the code. You may: -- report any [issue](${pkg.bugs}) +- report any [issue](https://github.com/vatesfr/xo-server-backup-reports/issues) you've encountered; - fork and create a pull request. ## License -${pkg.license} © [${pkg.author.name}](${pkg.author.url}) +AGPL3 © [Vates SAS](http://vates.fr) From 56db5dc34184877b005f86444bd240c71bbc827a Mon Sep 17 00:00:00 2001 From: ABHAMON Ronan Date: Thu, 26 Nov 2015 10:39:48 +0100 Subject: [PATCH 14/58] Update README --- packages/xo-server-backup-reports/README.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md index 289f7d4a9..ec6904d33 100644 --- a/packages/xo-server-backup-reports/README.md +++ b/packages/xo-server-backup-reports/README.md @@ -2,11 +2,11 @@ > Backup reports plugin for XO-Server -This plugin allows to receive email notifications when backups jobs are done. +This plugin allows to receive email notifications when backup's jobs are done. ## Install -Installation of the [npm package](https://npmjs.org/package/${pkg.name}): +Installation of the [npm package](https://npmjs.org/package/xo-server-backup-reports): ``` > npm install --global xo-server-backup-reports @@ -14,7 +14,22 @@ Installation of the [npm package](https://npmjs.org/package/${pkg.name}): ## Usage -**TODO** +### Prerequisite + +You must have the [xo-server-transport-email](https://github.com/vatesfr/xo-server-transport-email) plugin enabled to use xo-server-backup-reports. + +### Add the plugin to XO-Server config + +```yaml +plugins: + + xo-server-backup-reports: + + # Receivers of notifications + to: + # Define your receivers here using brackets like this: + # [email1, email2, ...] +``` ## Development From 37fd2e11032fb33c98d6be8ba3f7ce24e425c1a7 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 26 Nov 2015 10:57:16 +0100 Subject: [PATCH 15/58] 0.0.1 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index abeacdc73..4069fafb2 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.0.0", + "version": "0.0.1", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 98eb285e14bd74f71ece8d1567a4937366301406 Mon Sep 17 00:00:00 2001 From: ABHAMON Ronan Date: Thu, 26 Nov 2015 11:11:16 +0100 Subject: [PATCH 16/58] Update README.md --- packages/xo-server-backup-reports/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md index ec6904d33..9a7c0431e 100644 --- a/packages/xo-server-backup-reports/README.md +++ b/packages/xo-server-backup-reports/README.md @@ -2,8 +2,8 @@ > Backup reports plugin for XO-Server -This plugin allows to receive email notifications when backup's jobs are done. - +XO-Server plugin which sends email reports when backup jobs are done. + ## Install Installation of the [npm package](https://npmjs.org/package/xo-server-backup-reports): From 823879e9f9c55e5362b9ff43e96f9debe428b810 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 26 Nov 2015 11:12:08 +0100 Subject: [PATCH 17/58] 0.0.2 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 4069fafb2..77d951e0f 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.0.1", + "version": "0.0.2", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 2fa081a4bac6e6d30bf0ed555d3c194b3e957566 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 26 Nov 2015 15:47:25 +0100 Subject: [PATCH 18/58] Plugin supports now Disaster recovery jobs --- packages/xo-server-backup-reports/src/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index e105dce76..4ba9ffac2 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -50,8 +50,10 @@ class BackupReportsXoPlugin { const text = [] forEach(status.calls, call => { - // Ignore call if it's not a Backup or a Snapshot. - if (call.method !== 'vm.rollingBackup' && call.method !== 'vm.rollingSnapshot') { + // Ignore call if it's not a Backup a Snapshot or a Disaster Recovery. + if (call.method !== 'vm.rollingBackup' && + call.method !== 'vm.rollingSnapshot' && + call.method !== 'vm.rollingDrCopy') { return } From 61ef313b1cdac5276dab6a952b99fc480434e4d0 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Fri, 27 Nov 2015 14:45:04 +0100 Subject: [PATCH 19/58] 0.1.0 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 77d951e0f..183ad20b4 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.0.2", + "version": "0.1.0", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 099db6792a5bf22bf96340db15170a28972c8b85 Mon Sep 17 00:00:00 2001 From: Olivier Lambert Date: Mon, 30 Nov 2015 18:58:56 +0100 Subject: [PATCH 20/58] Update the documentatioh --- packages/xo-server-backup-reports/README.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md index 9a7c0431e..cdeb8d644 100644 --- a/packages/xo-server-backup-reports/README.md +++ b/packages/xo-server-backup-reports/README.md @@ -6,10 +6,10 @@ XO-Server plugin which sends email reports when backup jobs are done. ## Install -Installation of the [npm package](https://npmjs.org/package/xo-server-backup-reports): +Go inside your `xo-server` folder and install it: ``` -> npm install --global xo-server-backup-reports +> npm install xo-server-backup-reports ``` ## Usage @@ -24,11 +24,6 @@ You must have the [xo-server-transport-email](https://github.com/vatesfr/xo-serv plugins: xo-server-backup-reports: - - # Receivers of notifications - to: - # Define your receivers here using brackets like this: - # [email1, email2, ...] ``` ## Development From c059a416f7db221d2f0f0acc5345e9a11698f2b3 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Tue, 1 Dec 2015 15:54:42 +0100 Subject: [PATCH 21/58] 0.1.1 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 183ad20b4..4e804d6ce 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.1.0", + "version": "0.1.1", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From f3b46515c580d5d0ebfacda6559fbd91c3212da0 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 2 Dec 2015 15:40:40 +0100 Subject: [PATCH 22/58] Update for Xmpp support --- .../xo-server-backup-reports/src/index.js | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 4ba9ffac2..de35009d8 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -3,9 +3,16 @@ import moment from 'moment' export const configurationSchema = { type: 'object', - description: 'an array of emails (receivers)', + properties: { - to: { + toMails: { + type: 'array', + items: { + type: 'string' + }, + minItems: 1 + }, + toXmpp: { type: 'array', items: { type: 'string' @@ -23,8 +30,9 @@ class BackupReportsXoPlugin { this._report = ::this._wrapper } - configure ({to}) { - this._receivers = to + configure ({ toMails, toXmpp }) { + this._mailsReceivers = toMails + this._xmppReceivers = toXmpp } load () { @@ -108,12 +116,24 @@ class BackupReportsXoPlugin { ` - Failed backed up VM: ${nCalls - nSuccess}` ].join('\n')) + const markdown = text.join('\n') + // TODO : Handle errors when `sendEmail` isn't present. (Plugin dependencies) - await this._xo.sendEmail({ - to: this._receivers, - subject: 'Backup Reports (XenOrchestra)', - markdown: text.join('\n') - }) + + if (this._xo.sendEmail) { + await this._xo.sendEmail({ + to: this._mailsReceivers, + subject: 'Backup Reports (XenOrchestra)', + markdown + }) + } + + if (this._xo.sendToXmppClient) { + this._xo.sendToXmppClient({ + to: this._xmppReceivers, + message: markdown + }) + } } } From 28bf7ee90bcc2158d7689a692ef4d2a3d5f445a6 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 2 Dec 2015 15:47:33 +0100 Subject: [PATCH 23/58] Update schema with titles/descriptions on mails/xmpp attributes. --- packages/xo-server-backup-reports/src/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index de35009d8..89cec6e20 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -7,6 +7,9 @@ export const configurationSchema = { properties: { toMails: { type: 'array', + title: 'mails', + description: 'an array of recipients (mails)', + items: { type: 'string' }, @@ -14,6 +17,9 @@ export const configurationSchema = { }, toXmpp: { type: 'array', + title: 'xmpp address', + description: 'an array of recipients (xmpp)', + items: { type: 'string' }, From de6ef49043c137551ebb975a5dbcea1ca1caeb2f Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 3 Dec 2015 15:43:35 +0100 Subject: [PATCH 24/58] 0.2.0 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 4e804d6ce..dde44373d 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.1.1", + "version": "0.2.0", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 791183553e7ff9a1ea3a9137d264a6f3acec3843 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 3 Dec 2015 15:53:19 +0100 Subject: [PATCH 25/58] Update README --- packages/xo-server-backup-reports/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md index cdeb8d644..4bbf66ccf 100644 --- a/packages/xo-server-backup-reports/README.md +++ b/packages/xo-server-backup-reports/README.md @@ -2,8 +2,8 @@ > Backup reports plugin for XO-Server -XO-Server plugin which sends email reports when backup jobs are done. - +XO-Server plugin which sends email reports and Xmpp messages when backup jobs are done. + ## Install Go inside your `xo-server` folder and install it: @@ -16,7 +16,7 @@ Go inside your `xo-server` folder and install it: ### Prerequisite -You must have the [xo-server-transport-email](https://github.com/vatesfr/xo-server-transport-email) plugin enabled to use xo-server-backup-reports. +You must have the [xo-server-transport-email](https://github.com/vatesfr/xo-server-transport-email) plugin enabled to use xo-server-backup-reports or/and the [xo-server-transport-xmpp](https://github.com/vatesfr/xo-server-transport-xmpp) plugin. ### Add the plugin to XO-Server config From 03a33646d671707b405d4f8cd1b06f2fe48bb760 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 3 Dec 2015 15:54:24 +0100 Subject: [PATCH 26/58] 0.2.1 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index dde44373d..29aadddb5 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.2.0", + "version": "0.2.1", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 98b27d647e74b65be39bef2568564b9d138f23ff Mon Sep 17 00:00:00 2001 From: Danp2 Date: Tue, 9 Feb 2016 21:10:00 -0600 Subject: [PATCH 27/58] Add logic for processing delta copy backup types --- packages/xo-server-backup-reports/src/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 89cec6e20..67231c6ca 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -67,7 +67,8 @@ class BackupReportsXoPlugin { // Ignore call if it's not a Backup a Snapshot or a Disaster Recovery. if (call.method !== 'vm.rollingBackup' && call.method !== 'vm.rollingSnapshot' && - call.method !== 'vm.rollingDrCopy') { + call.method !== 'vm.rollingDrCopy' && + call.method !== 'vm.deltaCopy') { return } From f2e86efc4dff9bfe2cc7d7a1039dea9cd3d19565 Mon Sep 17 00:00:00 2001 From: Danp2 Date: Tue, 9 Feb 2016 21:22:17 -0600 Subject: [PATCH 28/58] Update index.js --- packages/xo-server-backup-reports/src/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 67231c6ca..4c8f39432 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -68,7 +68,8 @@ class BackupReportsXoPlugin { if (call.method !== 'vm.rollingBackup' && call.method !== 'vm.rollingSnapshot' && call.method !== 'vm.rollingDrCopy' && - call.method !== 'vm.deltaCopy') { + call.method !== 'vm.deltaCopy' && + call.method !== 'vm.rollingDeltaBackup') { return } From 20919a8a390740ffa6ee7ed46ae546d7d33da6cd Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 10 Feb 2016 10:31:30 +0100 Subject: [PATCH 29/58] Absence of tests should not prevent CI linting. --- packages/xo-server-backup-reports/src/index.spec.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.spec.js b/packages/xo-server-backup-reports/src/index.spec.js index 6e9c776d2..2319bd7d5 100644 --- a/packages/xo-server-backup-reports/src/index.spec.js +++ b/packages/xo-server-backup-reports/src/index.spec.js @@ -8,6 +8,10 @@ import myLib from './' // =================================================================== -describe('myLib', () => { - // TODO +describe.skip('myLib', () => { + it('does something', () => { + // TODO: some real tests. + + expect(myLib).to.exists() + }) }) From 4a95f5cd9db9e3936c5ba855ae23e3366f47e90a Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 10 Feb 2016 10:48:02 +0100 Subject: [PATCH 30/58] Coding style. --- packages/xo-server-backup-reports/src/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 4c8f39432..3692a0626 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -65,11 +65,11 @@ class BackupReportsXoPlugin { forEach(status.calls, call => { // Ignore call if it's not a Backup a Snapshot or a Disaster Recovery. - if (call.method !== 'vm.rollingBackup' && - call.method !== 'vm.rollingSnapshot' && - call.method !== 'vm.rollingDrCopy' && - call.method !== 'vm.deltaCopy' && + if (call.method !== 'vm.deltaCopy' && call.method !== 'vm.rollingDeltaBackup') { + call.method !== 'vm.rollingDrCopy' && + call.method !== 'vm.rollingSnapshot' && + call.method !== 'vm.rollingBackup') return } From adb71ad1740bb1047f441bcad27e7da6c1db417f Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 10 Feb 2016 11:06:47 +0100 Subject: [PATCH 31/58] FIx my previous commit -_-". --- packages/xo-server-backup-reports/src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 3692a0626..a4357734f 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -66,10 +66,10 @@ class BackupReportsXoPlugin { forEach(status.calls, call => { // Ignore call if it's not a Backup a Snapshot or a Disaster Recovery. if (call.method !== 'vm.deltaCopy' && - call.method !== 'vm.rollingDeltaBackup') { + call.method !== 'vm.rollingDeltaBackup' && call.method !== 'vm.rollingDrCopy' && call.method !== 'vm.rollingSnapshot' && - call.method !== 'vm.rollingBackup') + call.method !== 'vm.rollingBackup') { return } From 05c325d6868879e15fd77e16bf456aeb821e5358 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Fri, 12 Feb 2016 09:09:37 +0100 Subject: [PATCH 32/58] Fetch the correct VM even when the param is `vm` and not `id` (fix #3). --- packages/xo-server-backup-reports/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index a4357734f..e60c2bf5e 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -87,7 +87,7 @@ class BackupReportsXoPlugin { let vm try { - vm = this._xo.getObject(call.params.id) + vm = this._xo.getObject(call.params.id || call.params.vm) } catch (e) {} const start = moment(call.start) From 77f85579e3f5a778631a588242580253944200a8 Mon Sep 17 00:00:00 2001 From: Danp2 Date: Tue, 16 Feb 2016 06:09:44 -0600 Subject: [PATCH 33/58] Implement conditional reporting. --- packages/xo-server-backup-reports/src/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index e60c2bf5e..4bd4aa29e 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -60,6 +60,7 @@ class BackupReportsXoPlugin { async _listener (status) { let nSuccess = 0 let nCalls = 0 + let reportWhen const text = [] @@ -73,6 +74,12 @@ class BackupReportsXoPlugin { return } + reportWhen = call.params._reportWhen + + if (reportWhen === 'never') { + return + } + let vmStatus if (call.error) { @@ -114,6 +121,10 @@ class BackupReportsXoPlugin { const end = moment(status.end) const duration = moment.duration(end - start).humanize() + if (reportWhen === 'fail' && globalStatus === 'Success') { + return + } + // Global status. text.unshift([ `## Global status: ${globalStatus}`, From cd4221e4f27009c06ae3ac950ff9fb6da314d315 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 22 Feb 2016 15:42:39 +0100 Subject: [PATCH 34/58] 0.3.0 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 29aadddb5..6c0bd918e 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.2.1", + "version": "0.3.0", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 4095d6dcf6f30e7c719349ddd77cb410b82a22f4 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 22 Feb 2016 15:45:51 +0100 Subject: [PATCH 35/58] 0.3.1 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 6c0bd918e..f347f81ab 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.3.0", + "version": "0.3.1", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 5e3831a1a4265c32458aef7638f5065e65cf8df0 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 17 Mar 2016 12:11:49 +0100 Subject: [PATCH 36/58] Added tag in report e-mail --- packages/xo-server-backup-reports/src/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 4bd4aa29e..99644f73c 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -120,6 +120,7 @@ class BackupReportsXoPlugin { const start = moment(status.start) const end = moment(status.end) const duration = moment.duration(end - start).humanize() + const tag = status.calls[status.start].params.tag if (reportWhen === 'fail' && globalStatus === 'Success') { return @@ -127,7 +128,7 @@ class BackupReportsXoPlugin { // Global status. text.unshift([ - `## Global status: ${globalStatus}`, + `## Global status for "${tag}": ${globalStatus}`, ` - Start time: ${String(start)}`, ` - End time: ${String(end)}`, ` - Duration: ${duration}`, @@ -142,7 +143,7 @@ class BackupReportsXoPlugin { if (this._xo.sendEmail) { await this._xo.sendEmail({ to: this._mailsReceivers, - subject: 'Backup Reports (XenOrchestra)', + subject: `Backup Reports for "${tag}" (XenOrchestra)`, markdown }) } From e760e868c1c6fd79399b44bbe4a0008b557c6b52 Mon Sep 17 00:00:00 2001 From: Olivier Lambert Date: Thu, 17 Mar 2016 13:47:45 +0100 Subject: [PATCH 37/58] 0.3.2 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index f347f81ab..e73175519 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.3.1", + "version": "0.3.2", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 052c9743695b80b9bd8b3b4b52cc40c97d07ceef Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 17 Mar 2016 14:15:19 +0100 Subject: [PATCH 38/58] Fixed get tag --- packages/xo-server-backup-reports/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 99644f73c..56adb2d94 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -120,7 +120,7 @@ class BackupReportsXoPlugin { const start = moment(status.start) const end = moment(status.end) const duration = moment.duration(end - start).humanize() - const tag = status.calls[status.start].params.tag + const tag = status.calls[Object.keys(status.calls)[0]].params.tag if (reportWhen === 'fail' && globalStatus === 'Success') { return From f08ab729bdde7e8e3b5e64d46886e53e411b9856 Mon Sep 17 00:00:00 2001 From: Olivier Lambert Date: Thu, 17 Mar 2016 14:18:18 +0100 Subject: [PATCH 39/58] 0.3.3 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index e73175519..b93cd735b 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.3.2", + "version": "0.3.3", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 2f89e3658a063b5d3f7bc9e3e2cdc51a3f32a133 Mon Sep 17 00:00:00 2001 From: Pierre Date: Wed, 23 Mar 2016 10:11:01 +0100 Subject: [PATCH 40/58] Backup type in report e-mail (See vatesfr/xo-web#822) --- packages/xo-server-backup-reports/src/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 56adb2d94..486fafc7d 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -120,6 +120,9 @@ class BackupReportsXoPlugin { const start = moment(status.start) const end = moment(status.end) const duration = moment.duration(end - start).humanize() + let method = status.calls[Object.keys(status.calls)[0]].method + method = method.slice(method.indexOf('.') + 1) + .replace(/([A-Z])/g, ' $1').replace(/^./, letter => letter.toUpperCase()) // humanize const tag = status.calls[Object.keys(status.calls)[0]].params.tag if (reportWhen === 'fail' && globalStatus === 'Success') { @@ -128,7 +131,7 @@ class BackupReportsXoPlugin { // Global status. text.unshift([ - `## Global status for "${tag}": ${globalStatus}`, + `## Global status for "${tag}" (${method}): ${globalStatus}`, ` - Start time: ${String(start)}`, ` - End time: ${String(end)}`, ` - Duration: ${duration}`, From ab1f08f687b2700fc52f08242e3bbb5ad4c47255 Mon Sep 17 00:00:00 2001 From: Olivier Lambert Date: Wed, 23 Mar 2016 10:35:41 +0100 Subject: [PATCH 41/58] 0.3.4 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index b93cd735b..ac89e657c 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.3.3", + "version": "0.3.4", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From ab3a5948847c41e13c9fa7b49d92e9d6d194567f Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 29 Jun 2016 11:31:29 +0200 Subject: [PATCH 42/58] chore(package): update all dependencies --- packages/xo-server-backup-reports/.babelrc | 11 ----- packages/xo-server-backup-reports/.gitignore | 5 +- packages/xo-server-backup-reports/.mocha.js | 5 -- packages/xo-server-backup-reports/.mocha.opts | 1 - packages/xo-server-backup-reports/.travis.yml | 1 - packages/xo-server-backup-reports/README.md | 17 ++----- .../xo-server-backup-reports/package.json | 46 +++++++++++-------- .../xo-server-backup-reports/src/index.js | 40 ++++++++-------- 8 files changed, 51 insertions(+), 75 deletions(-) delete mode 100644 packages/xo-server-backup-reports/.babelrc delete mode 100644 packages/xo-server-backup-reports/.mocha.js delete mode 100644 packages/xo-server-backup-reports/.mocha.opts diff --git a/packages/xo-server-backup-reports/.babelrc b/packages/xo-server-backup-reports/.babelrc deleted file mode 100644 index bc055f47f..000000000 --- a/packages/xo-server-backup-reports/.babelrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "comments": false, - "compact": true, - "optional": [ - "es7.asyncFunctions", - "es7.decorators", - "es7.exportExtensions", - "es7.functionBind", - "runtime" - ] -} diff --git a/packages/xo-server-backup-reports/.gitignore b/packages/xo-server-backup-reports/.gitignore index 6959be1cf..55062b172 100644 --- a/packages/xo-server-backup-reports/.gitignore +++ b/packages/xo-server-backup-reports/.gitignore @@ -1,9 +1,6 @@ /.nyc_output/ -/bower_components/ /dist/ +/node_modules/ npm-debug.log npm-debug.log.* - -!node_modules/* -node_modules/*/ diff --git a/packages/xo-server-backup-reports/.mocha.js b/packages/xo-server-backup-reports/.mocha.js deleted file mode 100644 index e6d84e403..000000000 --- a/packages/xo-server-backup-reports/.mocha.js +++ /dev/null @@ -1,5 +0,0 @@ -Error.stackTraceLimit = 100 - -try { require('trace') } catch (_) {} -try { require('clarify') } catch (_) {} -try { require('source-map-support/register') } catch (_) {} diff --git a/packages/xo-server-backup-reports/.mocha.opts b/packages/xo-server-backup-reports/.mocha.opts deleted file mode 100644 index 6cfd94898..000000000 --- a/packages/xo-server-backup-reports/.mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---require ./.mocha.js diff --git a/packages/xo-server-backup-reports/.travis.yml b/packages/xo-server-backup-reports/.travis.yml index 502095fce..a9b136ea6 100644 --- a/packages/xo-server-backup-reports/.travis.yml +++ b/packages/xo-server-backup-reports/.travis.yml @@ -3,7 +3,6 @@ node_js: - 'stable' - '4' - '0.12' - - '0.10' # Use containers. # http://docs.travis-ci.com/user/workers/container-based-infrastructure/ diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md index 4bbf66ccf..4a5bc3586 100644 --- a/packages/xo-server-backup-reports/README.md +++ b/packages/xo-server-backup-reports/README.md @@ -6,25 +6,16 @@ XO-Server plugin which sends email reports and Xmpp messages when backup jobs ar ## Install -Go inside your `xo-server` folder and install it: +Installation of the [npm package](https://npmjs.org/package/xo-server-backup-reports): ``` -> npm install xo-server-backup-reports +> npm install --global xo-server-backup-reports ``` ## Usage -### Prerequisite - -You must have the [xo-server-transport-email](https://github.com/vatesfr/xo-server-transport-email) plugin enabled to use xo-server-backup-reports or/and the [xo-server-transport-xmpp](https://github.com/vatesfr/xo-server-transport-xmpp) plugin. - -### Add the plugin to XO-Server config - -```yaml -plugins: - - xo-server-backup-reports: -``` +Like all other xo-server plugins, it can be configured directly via +the web iterface, see [the plugin documentation](https://xen-orchestra.com/docs/plugins.html). ## Development diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index ac89e657c..e4ac336d5 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -26,37 +26,45 @@ "files": [ "dist/" ], + "engines": { + "node": ">=0.12" + }, "dependencies": { - "babel-runtime": "^5.8.34", - "lodash.foreach": "^3.0.3", - "moment": "^2.10.6" + "lodash": "^4.13.1", + "moment": "^2.13.0" }, "devDependencies": { - "babel": "^5.8.34", - "babel-eslint": "^4.1.5", - "clarify": "^1.0.5", + "babel-cli": "^6.10.1", + "babel-eslint": "^6.1.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-0": "^6.5.0", "dependency-check": "^2.5.1", - "mocha": "^2.3.4", - "must": "^0.13.1", - "nyc": "^3.2.2", - "source-map-support": "^0.3.3", - "standard": "^5.4.1", - "trace": "^2.0.1" + "ghooks": "^1.2.4", + "standard": "^7.1.2" }, "scripts": { - "build": "babel --source-maps --out-dir=dist/ src/", - "dev": "babel --watch --source-maps --out-dir=dist/ src/", - "dev-test": "mocha --opts .mocha.opts --watch --reporter=min \"dist/**/*.spec.js\"", - "lint": "standard", + "build": "NODE_ENV=production babel --source-maps --out-dir=dist/ src/", "depcheck": "dependency-check ./package.json", + "dev": "babel --watch --source-maps --out-dir=dist/ src/", + "lint": "standard", "posttest": "npm run lint && npm run depcheck", - "prepublish": "npm run build", - "test": "nyc mocha --opts .mocha.opts \"dist/**/*.spec.js\"" + "prepublish": "npm run build" + }, + "babel": { + "presets": [ + "stage-0", + "es2015" + ] }, "standard": { "ignore": [ - "dist/**" + "dist" ], "parser": "babel-eslint" + }, + "config": { + "ghooks": { + "commit-msg": "npm test" + } } } diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 486fafc7d..db7ad19be 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -1,4 +1,4 @@ -import forEach from 'lodash.foreach' +import forEach from 'lodash/forEach' import moment from 'moment' export const configurationSchema = { @@ -30,6 +30,10 @@ export const configurationSchema = { // =================================================================== +const logError = e => { + console.error('backup report error:', e) +} + class BackupReportsXoPlugin { constructor (xo) { this._xo = xo @@ -49,15 +53,11 @@ class BackupReportsXoPlugin { this._xo.removeListener('job:terminated', this._report) } - async _wrapper (status) { - try { - await this._listener(status) - } catch (e) { - console.error('backup report error: ' + e) - } + _wrapper (status) { + return new Promise(resolve => resolve(this._listener(status))).catch(logError) } - async _listener (status) { + _listener (status) { let nSuccess = 0 let nCalls = 0 let reportWhen @@ -116,7 +116,7 @@ class BackupReportsXoPlugin { return } - const globalStatus = nSuccess === nCalls ? 'Success' : 'Fail' + const globalSuccess = nSuccess === nCalls const start = moment(status.start) const end = moment(status.end) const duration = moment.duration(end - start).humanize() @@ -125,13 +125,13 @@ class BackupReportsXoPlugin { .replace(/([A-Z])/g, ' $1').replace(/^./, letter => letter.toUpperCase()) // humanize const tag = status.calls[Object.keys(status.calls)[0]].params.tag - if (reportWhen === 'fail' && globalStatus === 'Success') { + if (globalSuccess && reportWhen === 'fail') { return } // Global status. text.unshift([ - `## Global status for "${tag}" (${method}): ${globalStatus}`, + `## Global status for "${tag}" (${method}): ${globalSuccess ? 'Success' : 'Fail'}`, ` - Start time: ${String(start)}`, ` - End time: ${String(end)}`, ` - Duration: ${duration}`, @@ -143,23 +143,21 @@ class BackupReportsXoPlugin { // TODO : Handle errors when `sendEmail` isn't present. (Plugin dependencies) - if (this._xo.sendEmail) { - await this._xo.sendEmail({ + const xo = this._xo + return Promise.all([ + xo.sendEmail && xo.sendEmail({ to: this._mailsReceivers, - subject: `Backup Reports for "${tag}" (XenOrchestra)`, + subject: `Backup Reports for "${tag}" (Xen Orchestra)`, markdown - }) - } - - if (this._xo.sendToXmppClient) { - this._xo.sendToXmppClient({ + }), + xo.sendToXmppClient && xo.sendToXmppClient({ to: this._xmppReceivers, message: markdown }) - } + ]) } } // =================================================================== -export default ({xo}) => new BackupReportsXoPlugin(xo) +export default ({ xo }) => new BackupReportsXoPlugin(xo) From b2331084d147b340ef97a3acdb2a70d94714b15a Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 29 Jun 2016 11:40:58 +0200 Subject: [PATCH 43/58] 0.4.0 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index e4ac336d5..e95996e01 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.3.4", + "version": "0.4.0", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 6f4509c260284b9f469b72fb91a1e634a76aa21d Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 30 Jun 2016 10:12:07 +0200 Subject: [PATCH 44/58] fix: report only on failures with xo-web 5 --- packages/xo-server-backup-reports/src/index.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index db7ad19be..3940e4688 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -117,6 +117,13 @@ class BackupReportsXoPlugin { } const globalSuccess = nSuccess === nCalls + if (globalSuccess && ( + reportWhen === 'fail' || // xo-web < 5 + reportWhen === 'failure' // xo-web >= 5 + )) { + return + } + const start = moment(status.start) const end = moment(status.end) const duration = moment.duration(end - start).humanize() @@ -125,10 +132,6 @@ class BackupReportsXoPlugin { .replace(/([A-Z])/g, ' $1').replace(/^./, letter => letter.toUpperCase()) // humanize const tag = status.calls[Object.keys(status.calls)[0]].params.tag - if (globalSuccess && reportWhen === 'fail') { - return - } - // Global status. text.unshift([ `## Global status for "${tag}" (${method}): ${globalSuccess ? 'Success' : 'Fail'}`, From be503f1341ba3c6ddf1b232a377ca590d279fcf7 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 30 Jun 2016 10:12:30 +0200 Subject: [PATCH 45/58] 0.4.1 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index e95996e01..9117b2bd6 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.4.0", + "version": "0.4.1", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 4fb6bef04caf367ef5d0c2b9355c18adfbaa4517 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 5 Sep 2016 10:38:17 +0200 Subject: [PATCH 46/58] feat: express global status in mail subject New format is: `[Xen Orchestra][Success | Failure] Backup report for $tag` Fixes vatesfr/xo-web#1463 --- packages/xo-server-backup-reports/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 3940e4688..48796f2d2 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -150,7 +150,7 @@ class BackupReportsXoPlugin { return Promise.all([ xo.sendEmail && xo.sendEmail({ to: this._mailsReceivers, - subject: `Backup Reports for "${tag}" (Xen Orchestra)`, + subject: `[Xen Orchestra][${globalSuccess ? 'Success' : 'Failure'}] Backup report for ${tag}`, markdown }), xo.sendToXmppClient && xo.sendToXmppClient({ From 54ef65ced9a29841673f89309a901f50bf4695b2 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 5 Sep 2016 10:39:49 +0200 Subject: [PATCH 47/58] feat: display error message Fixes vatesfr/xo-web#1462 --- packages/xo-server-backup-reports/src/index.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 48796f2d2..a0d13b901 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -80,16 +80,10 @@ class BackupReportsXoPlugin { return } - let vmStatus - - if (call.error) { - vmStatus = 'Fail' - } else { - nSuccess++ - vmStatus = 'Success' - } - nCalls++ + if (!call.error) { + nSuccess++ + } let vm @@ -104,7 +98,9 @@ class BackupReportsXoPlugin { text.push([ `### VM : ${vm ? vm.name_label : 'undefined'}`, ` - UUID: ${vm ? vm.uuid : 'undefined'}`, - ` - Status: ${vmStatus}`, + call.error + ? ` - Status: Failure\n - Error: ${call.error.message}` + : ' - Status: Success', ` - Start time: ${String(start)}`, ` - End time: ${String(end)}`, ` - Duration: ${duration}` From 96635a98f5f778a9b4c53ed7510b05ae901dfb04 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Fri, 9 Sep 2016 15:50:38 +0200 Subject: [PATCH 48/58] 0.5.0 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 9117b2bd6..91ae4095d 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.4.1", + "version": "0.5.0", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 3c9ef8d19989857ec453c9757fb580fe419911ac Mon Sep 17 00:00:00 2001 From: Greenkeeper Date: Sun, 25 Sep 2016 15:54:44 +0200 Subject: [PATCH 49/58] chore(package): update dependencies (#10) https://greenkeeper.io/ --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 91ae4095d..1c6dfc124 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -40,7 +40,7 @@ "babel-preset-stage-0": "^6.5.0", "dependency-check": "^2.5.1", "ghooks": "^1.2.4", - "standard": "^7.1.2" + "standard": "^8.1.0" }, "scripts": { "build": "NODE_ENV=production babel --source-maps --out-dir=dist/ src/", From 10fddc51bbf1d68c76f5d2a31facd3f1ac2eddf2 Mon Sep 17 00:00:00 2001 From: Greenkeeper Date: Tue, 27 Sep 2016 23:40:44 +0200 Subject: [PATCH 50/58] chore(package): update babel-eslint to version 7.0.0 (#11) https://greenkeeper.io/ --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 1c6dfc124..c28aa1738 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -35,7 +35,7 @@ }, "devDependencies": { "babel-cli": "^6.10.1", - "babel-eslint": "^6.1.0", + "babel-eslint": "^7.0.0", "babel-preset-es2015": "^6.9.0", "babel-preset-stage-0": "^6.5.0", "dependency-check": "^2.5.1", From c9e2f94daf40538c1c28ad240eb889256004c3e7 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 20 Oct 2016 15:19:10 +0200 Subject: [PATCH 51/58] fix(markdown): insert a blank line after lists --- packages/xo-server-backup-reports/src/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index a0d13b901..effa450d3 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -135,7 +135,8 @@ class BackupReportsXoPlugin { ` - End time: ${String(end)}`, ` - Duration: ${duration}`, ` - Successful backed up VM number: ${nSuccess}`, - ` - Failed backed up VM: ${nCalls - nSuccess}` + ` - Failed backed up VM: ${nCalls - nSuccess}`, + '' ].join('\n')) const markdown = text.join('\n') From b87ad2df54bee98521193cb01865d1737c901e72 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 20 Oct 2016 16:18:00 +0200 Subject: [PATCH 52/58] 0.5.1 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index c28aa1738..fe0885d8c 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.5.0", + "version": "0.5.1", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 13e4568d3b1f6ee7a8dfeb10dff57e6edbf4d5c9 Mon Sep 17 00:00:00 2001 From: Olivier Lambert Date: Wed, 23 Nov 2016 10:02:01 +0100 Subject: [PATCH 53/58] feat(Slack): support Slack transport (#14) --- packages/xo-server-backup-reports/src/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index effa450d3..29af1468b 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -153,6 +153,9 @@ class BackupReportsXoPlugin { xo.sendToXmppClient && xo.sendToXmppClient({ to: this._xmppReceivers, message: markdown + }), + xo.sendSlackMessage && xo.sendSlackMessage({ + message: markdown }) ]) } From 2b2a72252b6ed7e8fa5e69b8650996a9f26c35af Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 23 Nov 2016 10:12:48 +0100 Subject: [PATCH 54/58] chore(package): update all dependencies --- packages/xo-server-backup-reports/.gitignore | 3 +- packages/xo-server-backup-reports/.travis.yml | 6 +-- packages/xo-server-backup-reports/README.md | 19 +++---- .../xo-server-backup-reports/package.json | 51 +++++++++++++------ .../xo-server-backup-reports/src/index.js | 2 +- .../src/index.spec.js | 17 ------- 6 files changed, 50 insertions(+), 48 deletions(-) delete mode 100644 packages/xo-server-backup-reports/src/index.spec.js diff --git a/packages/xo-server-backup-reports/.gitignore b/packages/xo-server-backup-reports/.gitignore index 55062b172..827e4e420 100644 --- a/packages/xo-server-backup-reports/.gitignore +++ b/packages/xo-server-backup-reports/.gitignore @@ -1,6 +1,7 @@ -/.nyc_output/ /dist/ /node_modules/ npm-debug.log npm-debug.log.* +pnpm-debug.log +pnpm-debug.log.* diff --git a/packages/xo-server-backup-reports/.travis.yml b/packages/xo-server-backup-reports/.travis.yml index a9b136ea6..1a582c426 100644 --- a/packages/xo-server-backup-reports/.travis.yml +++ b/packages/xo-server-backup-reports/.travis.yml @@ -1,8 +1,8 @@ language: node_js node_js: - - 'stable' - - '4' - - '0.12' + - stable + - 6 + - 4 # Use containers. # http://docs.travis-ci.com/user/workers/container-based-infrastructure/ diff --git a/packages/xo-server-backup-reports/README.md b/packages/xo-server-backup-reports/README.md index 4a5bc3586..abc21a615 100644 --- a/packages/xo-server-backup-reports/README.md +++ b/packages/xo-server-backup-reports/README.md @@ -19,24 +19,21 @@ the web iterface, see [the plugin documentation](https://xen-orchestra.com/docs/ ## Development -### Installing dependencies - ``` +# Install dependencies > npm install -``` -### Compilation +# Run the tests +> npm test -The sources files are watched and automatically recompiled on changes. - -``` +# Continuously compile > npm run dev -``` -### Tests +# Continuously run the tests +> npm run dev-test -``` -> npm run test-dev +# Build for production (automatically called by npm install) +> npm run build ``` ## Contributions diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index fe0885d8c..46e1b6100 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -4,11 +4,16 @@ "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ - "xo-server", "backup", - "reports", "email", - "mail" + "mail", + "orchestra", + "plugin", + "report", + "reports", + "xen", + "xen-orchestra", + "xo-server" ], "homepage": "https://github.com/vatesfr/xo-server-backup-reports", "bugs": "https://github.com/vatesfr/xo-server-backup-reports/issues", @@ -27,33 +32,49 @@ "dist/" ], "engines": { - "node": ">=0.12" + "node": ">=4" }, "dependencies": { "lodash": "^4.13.1", "moment": "^2.13.0" }, "devDependencies": { - "babel-cli": "^6.10.1", - "babel-eslint": "^7.0.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-stage-0": "^6.5.0", - "dependency-check": "^2.5.1", - "ghooks": "^1.2.4", - "standard": "^8.1.0" + "babel-cli": "^6.18.0", + "babel-eslint": "^7.1.1", + "babel-plugin-lodash": "^3.2.10", + "babel-preset-env": "^0.0.8", + "babel-preset-stage-0": "^6.16.0", + "cross-env": "^3.1.3", + "dependency-check": "^2.6.0", + "ghooks": "^1.3.2", + "rimraf": "^2.5.4", + "standard": "^8.5.0" }, "scripts": { - "build": "NODE_ENV=production babel --source-maps --out-dir=dist/ src/", + "build": "cross-env NODE_ENV=production babel --source-maps --out-dir=dist/ src/", + "clean": "rimraf dist/", "depcheck": "dependency-check ./package.json", - "dev": "babel --watch --source-maps --out-dir=dist/ src/", + "dev": "cross-env NODE_ENV=development babel --watch --source-maps --out-dir=dist/ src/", "lint": "standard", "posttest": "npm run lint && npm run depcheck", + "prebuild": "npm run clean", + "predev": "npm run clean", "prepublish": "npm run build" }, "babel": { + "plugins": [ + "lodash" + ], "presets": [ - "stage-0", - "es2015" + [ + "env", + { + "targets": { + "node": 4 + } + } + ], + "stage-0" ] }, "standard": { diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index 29af1468b..e6166032e 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -1,5 +1,5 @@ -import forEach from 'lodash/forEach' import moment from 'moment' +import { forEach } from 'lodash' export const configurationSchema = { type: 'object', diff --git a/packages/xo-server-backup-reports/src/index.spec.js b/packages/xo-server-backup-reports/src/index.spec.js deleted file mode 100644 index 2319bd7d5..000000000 --- a/packages/xo-server-backup-reports/src/index.spec.js +++ /dev/null @@ -1,17 +0,0 @@ -/* eslint-env mocha */ - -import expect from 'must' - -// =================================================================== - -import myLib from './' - -// =================================================================== - -describe.skip('myLib', () => { - it('does something', () => { - // TODO: some real tests. - - expect(myLib).to.exists() - }) -}) From 889eae276e330c7b7516ca7355b6df6760117c01 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 23 Nov 2016 10:17:38 +0100 Subject: [PATCH 55/58] 0.6.0 --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 46e1b6100..13063c092 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -1,6 +1,6 @@ { "name": "xo-server-backup-reports", - "version": "0.5.1", + "version": "0.6.0", "license": "AGPL-3.0", "description": "Backup reports plugin for XO-Server", "keywords": [ From 235c789c5e0cbac7e6e172c5e57b8b08a70d17eb Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 24 Nov 2016 22:04:18 +0100 Subject: [PATCH 56/58] chore(package): update babel-preset-env to version 0.0.9 (#15) https://greenkeeper.io/ --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 13063c092..04c79d905 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -42,7 +42,7 @@ "babel-cli": "^6.18.0", "babel-eslint": "^7.1.1", "babel-plugin-lodash": "^3.2.10", - "babel-preset-env": "^0.0.8", + "babel-preset-env": "^0.0.9", "babel-preset-stage-0": "^6.16.0", "cross-env": "^3.1.3", "dependency-check": "^2.6.0", From d585b473604d75fec3e60ae65140a4a17c3c5eb5 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 9 Dec 2016 22:55:06 +0100 Subject: [PATCH 57/58] chore(package): update babel-preset-env to version 1.0.0 (#16) https://greenkeeper.io/ --- packages/xo-server-backup-reports/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xo-server-backup-reports/package.json b/packages/xo-server-backup-reports/package.json index 04c79d905..975fa9052 100644 --- a/packages/xo-server-backup-reports/package.json +++ b/packages/xo-server-backup-reports/package.json @@ -42,7 +42,7 @@ "babel-cli": "^6.18.0", "babel-eslint": "^7.1.1", "babel-plugin-lodash": "^3.2.10", - "babel-preset-env": "^0.0.9", + "babel-preset-env": "^1.0.0", "babel-preset-stage-0": "^6.16.0", "cross-env": "^3.1.3", "dependency-check": "^2.6.0", From c708fd65d793ea9ebf4758f43e2e408756d19994 Mon Sep 17 00:00:00 2001 From: badrAZ Date: Wed, 14 Dec 2016 17:24:55 +0100 Subject: [PATCH 58/58] feat: integration with xo-server-transport-nagios (#17) --- packages/xo-server-backup-reports/src/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/xo-server-backup-reports/src/index.js b/packages/xo-server-backup-reports/src/index.js index e6166032e..5ee8474ff 100644 --- a/packages/xo-server-backup-reports/src/index.js +++ b/packages/xo-server-backup-reports/src/index.js @@ -63,6 +63,7 @@ class BackupReportsXoPlugin { let reportWhen const text = [] + const nagiosText = [] forEach(status.calls, call => { // Ignore call if it's not a Backup a Snapshot or a Disaster Recovery. @@ -105,6 +106,12 @@ class BackupReportsXoPlugin { ` - End time: ${String(end)}`, ` - Duration: ${duration}` ].join('\n')) + + if (call.error) { + nagiosText.push( + `[ ${vm ? vm.name_label : 'undefined'} : ${call.error.message} ]` + ) + } }) // No backup calls. @@ -140,6 +147,7 @@ class BackupReportsXoPlugin { ].join('\n')) const markdown = text.join('\n') + const markdownNagios = nagiosText.join(' ') // TODO : Handle errors when `sendEmail` isn't present. (Plugin dependencies) @@ -156,6 +164,10 @@ class BackupReportsXoPlugin { }), xo.sendSlackMessage && xo.sendSlackMessage({ message: markdown + }), + xo.sendPassiveCheck && xo.sendPassiveCheck({ + status: globalSuccess ? 0 : 2, + message: globalSuccess ? `[Xen Orchestra] [Success] Backup report for ${tag}` : `[Xen Orchestra] [Failure] Backup report for ${tag} - VMs : ${markdownNagios}` }) ]) }