mirror of
https://github.com/YunoHost-Apps/rocketchat_ynh.git
synced 2024-09-03 20:16:25 +02:00
167 lines
16 KiB
JavaScript
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
|