masterwatcher.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. var logger = require('pomelo-logger').getLogger('pomelo', __filename);
  2. var utils = require('../util/utils');
  3. var Constants = require('../util/constants');
  4. var MasterWatchdog = require('../master/watchdog');
  5. module.exports = function(opts, consoleService) {
  6. return new Module(opts, consoleService);
  7. };
  8. module.exports.moduleId = Constants.KEYWORDS.MASTER_WATCHER;
  9. var Module = function(opts, consoleService) {
  10. this.app = opts.app;
  11. this.service = consoleService;
  12. this.id = this.app.getServerId();
  13. this.watchdog = new MasterWatchdog(this.app, this.service);
  14. this.service.on('register', onServerAdd.bind(null, this));
  15. this.service.on('disconnect', onServerLeave.bind(null, this));
  16. this.service.on('reconnect', onServerReconnect.bind(null, this));
  17. };
  18. // ----------------- bind methods -------------------------
  19. var onServerAdd = function(module, record) {
  20. logger.debug('masterwatcher receive add server event, with server: %j', record);
  21. if(!record || record.type === 'client' || !record.serverType) {
  22. return;
  23. }
  24. module.watchdog.addServer(record);
  25. };
  26. var onServerReconnect = function(module, record) {
  27. logger.debug('masterwatcher receive reconnect server event, with server: %j', record);
  28. if(!record || record.type === 'client' || !record.serverType) {
  29. logger.warn('onServerReconnect receive wrong message: %j', record);
  30. return;
  31. }
  32. module.watchdog.reconnectServer(record);
  33. };
  34. var onServerLeave = function(module, id, type) {
  35. logger.debug('masterwatcher receive remove server event, with server: %s, type: %s', id, type);
  36. if(!id) {
  37. logger.warn('onServerLeave receive server id is empty.');
  38. return;
  39. }
  40. if(type !== 'client') {
  41. module.watchdog.removeServer(id);
  42. }
  43. };
  44. // ----------------- module methods -------------------------
  45. Module.prototype.start = function(cb) {
  46. utils.invokeCallback(cb);
  47. };
  48. Module.prototype.masterHandler = function(agent, msg, cb) {
  49. if(!msg) {
  50. logger.warn('masterwatcher receive empty message.');
  51. return;
  52. }
  53. var func = masterMethods[msg.action];
  54. if(!func) {
  55. logger.info('masterwatcher unknown action: %j', msg.action);
  56. return;
  57. }
  58. func(this, agent, msg, cb);
  59. };
  60. // ----------------- monitor request methods -------------------------
  61. var subscribe = function(module, agent, msg, cb) {
  62. if(!msg) {
  63. utils.invokeCallback(cb, new Error('masterwatcher subscribe empty message.'));
  64. return;
  65. }
  66. module.watchdog.subscribe(msg.id);
  67. utils.invokeCallback(cb, null, module.watchdog.query());
  68. };
  69. var unsubscribe = function(module, agent, msg, cb) {
  70. if(!msg) {
  71. utils.invokeCallback(cb, new Error('masterwatcher unsubscribe empty message.'));
  72. return;
  73. }
  74. module.watchdog.unsubscribe(msg.id);
  75. utils.invokeCallback(cb);
  76. };
  77. var query = function(module, agent, msg, cb) {
  78. utils.invokeCallback(cb, null, module.watchdog.query());
  79. };
  80. var record = function(module, agent, msg) {
  81. if(!msg) {
  82. utils.invokeCallback(cb, new Error('masterwatcher record empty message.'));
  83. return;
  84. }
  85. module.watchdog.record(msg.id);
  86. };
  87. var masterMethods = {
  88. 'subscribe': subscribe,
  89. 'unsubscribe': unsubscribe,
  90. 'query': query,
  91. 'record': record
  92. };