1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/rocketchat_ynh.git synced 2024-09-03 20:16:25 +02:00
rocketchat_ynh/sources/programs/server/packages/konecty_multiple-instances-status.js
2016-04-29 16:32:48 +02:00

167 lines
16 KiB
JavaScript

(function () {
/* Imports */
var Meteor = Package.meteor.Meteor;
var colors = Package['nooitaf:colors'].colors;
/* Package-scope variables */
var InstanceStatus;
(function(){
////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/konecty_multiple-instances-status/multiple-instances-status.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
var events = new (Npm.require('events').EventEmitter)(), // 1
collectionName = process.env.MULTIPLE_INSTANCES_COLLECTION_NAME || 'instances', // 2
defaultPingInterval = 2000; // 2s // 3
// 4
var Intances = new Meteor.Collection(collectionName); // 5
// 6
Intances._ensureIndex({_updatedAt: 1}, {expireAfterSeconds: 60}); // 7
// 8
InstanceStatus = { // 9
name: undefined, // 10
extraInformation: undefined, // 11
// 12
events: events, // 13
// 14
getCollection: function() { // 15
return Intances; // 16
}, // 17
// 18
registerInstance: function(name, extraInformation) { // 19
InstanceStatus.name = name; // 20
InstanceStatus.extraInformation = extraInformation; // 21
// 22
if (InstanceStatus.id() === undefined || InstanceStatus.id() === null) { // 23
return console.error('[multiple-instances-status] only can be called after Meteor.startup'); // 24
} // 25
// 26
var now = new Date(), // 27
instance = { // 28
$set: { // 29
pid: process.pid, // 30
name: name // 31
}, // 32
$currentDate: { // 33
_createdAt: true, // 34
_updatedAt: true // 35
} // 36
}; // 37
// 38
if (extraInformation) { // 39
instance.$set.extraInformation = extraInformation; // 40
} // 41
// 42
try { // 43
Intances.upsert({_id: InstanceStatus.id()}, instance); // 44
var result = Intances.findOne({_id: InstanceStatus.id()}); // 45
InstanceStatus.start(); // 46
// 47
events.emit('registerInstance', result, instance); // 48
// 49
process.on('exit', InstanceStatus.onExit); // 50
// 51
return result; // 52
} catch (e) { // 53
return e; // 54
} // 55
}, // 56
// 57
unregisterInstance: function() { // 58
try { // 59
var result = Intances.remove({_id: InstanceStatus.id()}); // 60
InstanceStatus.stop(); // 61
// 62
events.emit('unregisterInstance', InstanceStatus.id()); // 63
// 64
process.removeListener('exit', InstanceStatus.onExit); // 65
// 66
return result; // 67
} catch (e) { // 68
return e; // 69
} // 70
}, // 71
// 72
start: function(interval) { // 73
InstanceStatus.stop(); // 74
// 75
interval = interval || defaultPingInterval; // 76
// 77
InstanceStatus.interval = Meteor.setInterval(function() { // 78
InstanceStatus.ping(); // 79
}, interval); // 80
}, // 81
// 82
stop: function(interval) { // 83
if (InstanceStatus.interval) { // 84
InstanceStatus.interval.close(); // 85
delete InstanceStatus.interval; // 86
} // 87
}, // 88
// 89
ping: function() { // 90
var count = Intances.update( // 91
{ // 92
_id: InstanceStatus.id() // 93
}, // 94
{ // 95
$currentDate: { // 96
_updatedAt: true // 97
} // 98
}); // 99
// 100
if (count === 0) { // 101
InstanceStatus.registerInstance(InstanceStatus.name, InstanceStatus.extraInformation); // 102
} // 103
}, // 104
// 105
onExit: function() { // 106
InstanceStatus.unregisterInstance(); // 107
}, // 108
// 109
activeLogs: function() { // 110
Intances.find().observe({ // 111
added: function(record) { // 112
var log = '[multiple-instances-status] Server connected: ' + record.name + ' - ' + record._id; // 113
if (record._id == InstanceStatus.id()) { // 114
log += ' (me)'; // 115
} // 116
console.log(log.green); // 117
}, // 118
removed: function(record) { // 119
var log = '[multiple-instances-status] Server disconnected: ' + record.name + ' - ' + record._id;
console.log(log.red); // 121
} // 122
}); // 123
}, // 124
// 125
id: function() {} // 126
}; // 127
// 128
Meteor.startup(function() { // 129
var ID = Random.id(); // 130
// 131
InstanceStatus.id = function() { // 132
return ID; // 133
}; // 134
}); // 135
// 136
////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
/* Exports */
if (typeof Package === 'undefined') Package = {};
Package['konecty:multiple-instances-status'] = {
InstanceStatus: InstanceStatus
};
})();
//# sourceMappingURL=konecty_multiple-instances-status.js.map