88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
const api = require('../api.js');
|
|
const uri = require('../util/uri.js');
|
|
const events = require('../events.js');
|
|
const misc = require('../util/misc.js');
|
|
const Tag = require('./tag.js');
|
|
|
|
class Metric extends events.EventTarget {
|
|
constructor() {
|
|
super();
|
|
this._orig = {};
|
|
|
|
this._updateFromResponse({});
|
|
}
|
|
|
|
get version() { return this._version; }
|
|
get min() { return this._min; }
|
|
get max() { return this._max; }
|
|
get tag() { return this._tag; }
|
|
|
|
set min(value) { this._min = value; }
|
|
set max(value) { this._max = value; }
|
|
|
|
static fromResponse(response) {
|
|
const ret = new Metric();
|
|
ret._updateFromResponse(response);
|
|
return ret;
|
|
}
|
|
|
|
static get(name) {
|
|
//TODO get metric. Or only via tag?
|
|
return api.get(uri.formatApiLink('metric', name))
|
|
.then(response => {
|
|
return Promise.resolve(Metric.fromResponse(response));
|
|
});
|
|
}
|
|
|
|
save() {
|
|
const detail = {version: this._version};
|
|
|
|
if (this._min !== this._orig._min) {
|
|
detail.min = this._min;
|
|
}
|
|
if (this._max !== this._orig._max) {
|
|
detail.max = this._max;
|
|
}
|
|
|
|
return api.post(uri.formatApiLink('metrics'), detail)
|
|
.then(response => {
|
|
this._updateFromResponse(response);
|
|
this.dispatchEvent(new CustomEvent('change', {
|
|
detail: {
|
|
metric: this,
|
|
},
|
|
}));
|
|
return Promise.resolve();
|
|
});
|
|
}
|
|
|
|
delete() {
|
|
return api.delete(
|
|
uri.formatApiLink('metric', this._orig),
|
|
{version: this._version})
|
|
.then(response => {
|
|
this.dispatchEvent(new CustomEvent('delete', {
|
|
detail: {
|
|
metric: this,
|
|
},
|
|
}));
|
|
return Promise.resolve();
|
|
});
|
|
}
|
|
|
|
_updateFromResponse(response) {
|
|
const map = {
|
|
_version: response.version,
|
|
_min: response.min,
|
|
_max: response.max,
|
|
_tag: Tag.fromResponse(response.tag || {}),
|
|
};
|
|
|
|
Object.assign(this, map);
|
|
Object.assign(this._orig, map);
|
|
}
|
|
}
|
|
|
|
module.exports = Metric;
|