Módulo VPSManager para WHMCS con configuración externa, acceso seguro al panel y métricas Graphite para LX.
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

69 linhas
3.7 KiB

  1. 'use strict';
  2. const fs = require('fs');
  3. const vm = require('vm');
  4. const assert = require('assert/strict');
  5. const source = fs.readFileSync(__dirname + '/../assets/metrics.js', 'utf8');
  6. const points = [{x: 1700000000000, y: 125000}, {x: 1700000060000, y: null}, {x: 1700000420000, y: 250000}];
  7. const metrics = {
  8. load: {'1 min': points, '5 min': points, '15 min': points},
  9. memory: {Usada: [{x: 1700000420000, y: 4365361152}], Total: [{x: 1700000420000, y: 8589934592}]},
  10. memoryPercent: [{x: 1700000420000, y: 50.81949234008789}],
  11. network: {RX: points, TX: points}
  12. };
  13. let assertions = 0;
  14. function check(condition) { assert.ok(condition); assertions++; }
  15. function run({version = '4.4.8', noChart = false, failLoad = false, absent = false, throwChart = false} = {}) {
  16. const configs = [];
  17. const cards = ['load','memory','network'].map(kind => ({
  18. dataset: {chart: kind}, summary: {textContent: ''}, canvas: {parentElement: {hidden: false}},
  19. querySelector(selector) { return selector === 'canvas' ? this.canvas : this.summary; }
  20. }));
  21. const data = JSON.parse(JSON.stringify(metrics));
  22. if (absent) data.network = {RX: [], TX: []};
  23. const root = {dataset: {metrics: JSON.stringify(data)}, querySelectorAll: () => cards};
  24. function FakeChart(canvas, config) { if (throwChart) throw Error('fixture'); configs.push(config); }
  25. FakeChart.version = version;
  26. let loaded = 0;
  27. const window = noChart ? {} : {Chart: FakeChart};
  28. const document = {
  29. readyState: 'complete', querySelectorAll: () => [root], createElement: () => ({}),
  30. head: {appendChild(script) {
  31. loaded++;
  32. check(script.src === 'modules/servers/vpsmanager/assets/chart-4.4.8.scoped.js');
  33. if (failLoad) script.onerror();
  34. else { window.O6HVpsChart = FakeChart; script.onload(); }
  35. }}
  36. };
  37. vm.runInNewContext(source, {window, document});
  38. return {configs, cards, loaded};
  39. }
  40. const r = run();
  41. check(r.configs.length === 3 && r.loaded === 0);
  42. const network = r.configs[2];
  43. check(network.data.datasets[0].data[0].y === 1000000); // Exactly one bytes/s -> bits/s conversion.
  44. check(network.data.datasets[0].data[1].y === null);
  45. check(network.data.datasets[0].data[2].x === 1700000420000);
  46. check(network.data.datasets[0].spanGaps === false);
  47. check(network.options.scales.x.type === 'linear');
  48. check(network.options.scales.y.ticks.callback(1000000) === '1 Mbit/s');
  49. check(network.options.scales.y.ticks.callback(1000) === '1 Kbit/s');
  50. check(network.options.scales.y.ticks.callback(1) === '1 bit/s');
  51. check(network.options.scales.y.ticks.callback(1000000000) === '1 Gbit/s');
  52. check(r.configs[0].options.scales.y.max === undefined); // Load is not CPU percent.
  53. check(r.configs[1].options.scales.y.ticks.callback(8589934592) === '8 GiB');
  54. check(r.cards[1].summary.textContent.includes('50.8 %'));
  55. check(r.cards[1].summary.textContent.includes('8 GiB'));
  56. check(run({version: '2.9.4'}).loaded === 1);
  57. check(run({noChart: true}).configs.length === 3);
  58. check(run({noChart: true, failLoad: true}).cards.every(c => c.canvas.parentElement.hidden));
  59. const partial = run({absent: true});
  60. check(partial.configs.length === 2 && partial.cards[2].summary.textContent === 'Las métricas no están disponibles temporalmente.');
  61. check(run({throwChart: true}).cards.every(c => c.canvas.parentElement.hidden));
  62. // Local bundle must not overwrite a WHMCS template's global Chart.
  63. const prior = {version: '2.9.4'};
  64. const context = {window: {Chart: prior}, console};
  65. vm.runInNewContext(fs.readFileSync(__dirname + '/../assets/chart-4.4.8.scoped.js', 'utf8'), context);
  66. check(context.window.Chart === prior);
  67. check(context.window.O6HVpsChart.version === '4.4.8');
  68. console.log(`PASS: ${assertions} frontend assertions.`);