Initial commit
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
const _ = require('underscore');
|
||||
const $ = require('jquery');
|
||||
const Backbone = require('backbone');
|
||||
const checkAndBuildOpts = require('builder/helpers/required-opts');
|
||||
|
||||
const REQUIRED_OPTS = [
|
||||
'configModel'
|
||||
];
|
||||
|
||||
/**
|
||||
* Synced table model
|
||||
*/
|
||||
|
||||
module.exports = Backbone.Model.extend({
|
||||
_X: 1.2, // Multiply current interval for this number
|
||||
_INTERVAL: 1500, // Interval time between poll checkings
|
||||
_STATES: ['created', 'failure', 'success', 'syncing', 'queued'],
|
||||
|
||||
defaults: {
|
||||
name: '',
|
||||
url: '',
|
||||
state: '',
|
||||
run_at: 0,
|
||||
ran_at: 0,
|
||||
retried_times: 0,
|
||||
interval: 0,
|
||||
error_code: 0,
|
||||
error_message: '',
|
||||
service_name: '',
|
||||
service_item_id: '',
|
||||
content_guessing: true,
|
||||
type_guessing: true
|
||||
},
|
||||
|
||||
url: function (method) {
|
||||
var version = this._configModel.urlVersion('synchronization', method);
|
||||
|
||||
var base = '/api/' + version + '/synchronizations/';
|
||||
if (this.isNew()) {
|
||||
return base;
|
||||
}
|
||||
return base + this.id;
|
||||
},
|
||||
|
||||
initialize: function (opts) {
|
||||
checkAndBuildOpts(opts, REQUIRED_OPTS, this);
|
||||
this.bind('destroy', function () {
|
||||
this.unset('id');
|
||||
});
|
||||
},
|
||||
|
||||
toJSON: function () {
|
||||
var c = _.clone(this.attributes);
|
||||
|
||||
var d = {
|
||||
url: c.url,
|
||||
interval: c.interval,
|
||||
content_guessing: c.content_guessing,
|
||||
type_guessing: c.type_guessing,
|
||||
create_vis: c.create_vis
|
||||
};
|
||||
|
||||
if (c.type === 'remote') {
|
||||
_.extend(d, {
|
||||
remote_visualization_id: c.remote_visualization_id,
|
||||
create_vis: false,
|
||||
value: c.value
|
||||
});
|
||||
}
|
||||
|
||||
if (c.id !== undefined) {
|
||||
d.id = c.id;
|
||||
}
|
||||
|
||||
// Comes from a service?
|
||||
if (c.service_name) {
|
||||
d.service_name = c.service_name;
|
||||
d.service_item_id = c.service_item_id;
|
||||
}
|
||||
|
||||
return d;
|
||||
},
|
||||
|
||||
syncNow: function (callback) {
|
||||
$.ajax({
|
||||
url: this._configModel.prefixUrl() + this.url() + '/sync_now',
|
||||
type: 'PUT'
|
||||
}).always(callback);
|
||||
},
|
||||
|
||||
// Checks for poll to finish
|
||||
pollCheck: function (i) {
|
||||
var self = this;
|
||||
var interval = this._INTERVAL;
|
||||
|
||||
this.pollTimer = setInterval(request, interval);
|
||||
|
||||
function request () {
|
||||
self.destroyCheck();
|
||||
|
||||
self.fetch({
|
||||
error: function (m, e) {
|
||||
self.set({
|
||||
error_message: e.statusText || '',
|
||||
state: 'failure'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
interval = interval * self._X;
|
||||
|
||||
self.pollTimer = setInterval(request, interval);
|
||||
}
|
||||
},
|
||||
|
||||
destroyCheck: function () {
|
||||
clearInterval(this.pollTimer);
|
||||
},
|
||||
|
||||
isSync: function () {
|
||||
return !this.isNew();
|
||||
},
|
||||
|
||||
linkToTable: function (table) {
|
||||
var self = this;
|
||||
if (table.has('synchronization')) {
|
||||
this.set(table.get('synchronization'));
|
||||
}
|
||||
|
||||
table.bind('change:synchronization', function () {
|
||||
self.set(table.get('synchronization'));
|
||||
}, table);
|
||||
|
||||
table.bind('destroy', function destroy () {
|
||||
self.unbind(null, null, table);
|
||||
self.destroy();
|
||||
}, table);
|
||||
// TODO: manage table renaming
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user