stats.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. var Gun = (typeof window !== "undefined")? window.Gun : require('../gun');
  2. Gun.on('opt', function(root){
  3. this.to.next(root);
  4. if(root.once){ return }
  5. if(typeof process === 'undefined'){ return }
  6. if(typeof require === 'undefined'){ return }
  7. var noop = function(){};
  8. var os = require('os') || {};
  9. var fs = require('fs') || {};
  10. fs.existsSync = fs.existsSync || require('path').existsSync;
  11. if(!fs.existsSync){ return }
  12. if(!process){ return }
  13. process.uptime = process.uptime || noop;
  14. process.cpuUsage = process.cpuUsage || noop;
  15. process.memoryUsage = process.memoryUsage || noop;
  16. os.totalmem = os.totalmem || noop;
  17. os.freemem = os.freemem || noop;
  18. os.loadavg = os.loadavg || noop;
  19. os.cpus = os.cpus || noop;
  20. setTimeout(function(){
  21. root.stats = Gun.obj.ify((fs.existsSync(__dirname+'/../stats.'+root.opt.file) && fs.readFileSync(__dirname+'/../stats.'+root.opt.file).toString())) || {};
  22. root.stats.up = root.stats.up || {};
  23. root.stats.up.start = root.stats.up.start || +(new Date);
  24. root.stats.up.count = (root.stats.up.count || 0) + 1;
  25. root.stats.stay = root.stats.stay || {};
  26. root.stats.gap = {};
  27. },1);
  28. setInterval(function(){
  29. if(!root.stats){ root.stats = {} }
  30. var stats = root.stats, tmp;
  31. (stats.up||{}).time = process.uptime();
  32. stats.memory = process.memoryUsage() || {};
  33. stats.memory.totalmem = os.totalmem();
  34. stats.memory.freemem = os.freemem();
  35. stats.cpu = process.cpuUsage() || {};
  36. stats.cpu.loadavg = os.loadavg();
  37. stats.peers = {};
  38. stats.peers.count = Object.keys(root.opt.peers||{}).length;
  39. stats.node = {};
  40. stats.node.count = Object.keys(root.graph||{}).length;
  41. var dam = root.opt.mesh;
  42. if(dam){
  43. stats.dam = {'in': {count: dam.hear.c, done: dam.hear.d, long: dam.hear.long}, 'out': {count: dam.say.c, done: dam.say.d}};
  44. dam.hear.c = dam.hear.d = dam.say.c = dam.say.d = 0; // reset
  45. stats.peers.time = dam.bye.time || 0;
  46. dam.hear.long = [];
  47. }
  48. var rad = root.opt.store; rad = rad && rad.stats;
  49. if(rad){
  50. stats.rad = rad;
  51. root.opt.store.stats = {get:{time:{}, count:0}, put: {time:{}, count:0}}; // reset
  52. }
  53. fs.writeFile(__dirname+'/../stats.'+root.opt.file, JSON.stringify(stats, null, 2), function(err){});
  54. stats.gap = {};
  55. }, 1000 * 15);
  56. Object.keys = Object.keys || function(o){ return Gun.obj.map(o, function(v,k,t){t(k)}) }
  57. });