| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- var ENV = ENV || (function() {
- var first = true;
- var counter = 0;
- var data;
- var _base;
- (_base = String.prototype).lpad || (_base.lpad = function(padding, toLength) {
- return padding.repeat((toLength - this.length) / padding.length).concat(this);
- });
- function formatElapsed(value) {
- var str = parseFloat(value).toFixed(2);
- if (value > 60) {
- minutes = Math.floor(value / 60);
- comps = (value % 60).toFixed(2).split('.');
- seconds = comps[0].lpad('0', 2);
- ms = comps[1];
- str = minutes + ":" + seconds + "." + ms;
- }
- return str;
- }
- function getElapsedClassName(elapsed) {
- var className = 'Query elapsed';
- if (elapsed >= 10.0) {
- className += ' warn_long';
- }
- else if (elapsed >= 1.0) {
- className += ' warn';
- }
- else {
- className += ' short';
- }
- return className;
- }
- function countClassName(queries) {
- var countClassName = "label";
- if (queries >= 20) {
- countClassName += " label-important";
- }
- else if (queries >= 10) {
- countClassName += " label-warning";
- }
- else {
- countClassName += " label-success";
- }
- return countClassName;
- }
- function updateQuery(object) {
- if (!object) {
- object = {};
- }
- var elapsed = Math.random() * 15;
- object.elapsed = elapsed;
- object.formatElapsed = formatElapsed(elapsed);
- object.elapsedClassName = getElapsedClassName(elapsed);
- object.query = "SELECT blah FROM something";
- object.waiting = Math.random() < 0.5;
- if (Math.random() < 0.2) {
- object.query = "<IDLE> in transaction";
- }
- if (Math.random() < 0.1) {
- object.query = "vacuum";
- }
- return object;
- }
- function cleanQuery(value) {
- if (value) {
- value.formatElapsed = "";
- value.elapsedClassName = "";
- value.query = "";
- value.elapsed = null;
- value.waiting = null;
- } else {
- return {
- query: "***",
- formatElapsed: "",
- elapsedClassName: ""
- };
- }
- }
- function generateRow(object, keepIdentity, counter) {
- var nbQueries = Math.floor((Math.random() * 10) + 1);
- if (!object) {
- object = {};
- }
- object.lastMutationId = counter;
- object.nbQueries = nbQueries;
- if (!object.lastSample) {
- object.lastSample = {};
- }
- if (!object.lastSample.topFiveQueries) {
- object.lastSample.topFiveQueries = [];
- }
- if (keepIdentity) {
- // for Angular optimization
- if (!object.lastSample.queries) {
- object.lastSample.queries = [];
- for (var l = 0; l < 12; l++) {
- object.lastSample.queries[l] = cleanQuery();
- }
- }
- for (var j in object.lastSample.queries) {
- var value = object.lastSample.queries[j];
- if (j <= nbQueries) {
- updateQuery(value);
- } else {
- cleanQuery(value);
- }
- }
- } else {
- object.lastSample.queries = [];
- for (var j = 0; j < 12; j++) {
- if (j < nbQueries) {
- var value = updateQuery(cleanQuery());
- object.lastSample.queries.push(value);
- } else {
- object.lastSample.queries.push(cleanQuery());
- }
- }
- }
- for (var i = 0; i < 5; i++) {
- var source = object.lastSample.queries[i];
- object.lastSample.topFiveQueries[i] = source;
- }
- object.lastSample.nbQueries = nbQueries;
- object.lastSample.countClassName = countClassName(nbQueries);
- return object;
- }
- function getData(keepIdentity) {
- var oldData = data;
- if (!keepIdentity) { // reset for each tick when !keepIdentity
- data = [];
- for (var i = 1; i <= ENV.rows; i++) {
- data.push({ dbname: 'cluster' + i, query: "", formatElapsed: "", elapsedClassName: "" });
- data.push({ dbname: 'cluster' + i + ' slave', query: "", formatElapsed: "", elapsedClassName: "" });
- }
- }
- if (!data) { // first init when keepIdentity
- data = [];
- for (var i = 1; i <= ENV.rows; i++) {
- data.push({ dbname: 'cluster' + i });
- data.push({ dbname: 'cluster' + i + ' slave' });
- }
- oldData = data;
- }
- for (var i in data) {
- var row = data[i];
- if (!keepIdentity && oldData && oldData[i]) {
- row.lastSample = oldData[i].lastSample;
- }
- if (!row.lastSample || Math.random() < ENV.mutations()) {
- counter = counter + 1;
- if (!keepIdentity) {
- row.lastSample = null;
- }
- generateRow(row, keepIdentity, counter);
- } else {
- data[i] = oldData[i];
- }
- }
- first = false;
- return {
- toArray: function() {
- return data;
- }
- };
- }
- var mutationsValue = 0.5;
- function mutations(value) {
- if (value) {
- mutationsValue = value;
- return mutationsValue;
- } else {
- return mutationsValue;
- }
- }
- var body = document.querySelector('body');
- var theFirstChild = body.firstChild;
- var sliderContainer = document.createElement( 'div' );
- sliderContainer.style.cssText = "display: flex";
- var slider = document.createElement('input');
- var text = document.createElement('label');
- text.innerHTML = 'mutations : ' + (mutationsValue * 100).toFixed(0) + '%';
- text.id = "ratioval";
- slider.setAttribute("type", "range");
- slider.style.cssText = 'margin-bottom: 10px; margin-top: 5px';
- slider.addEventListener('change', function(e) {
- ENV.mutations(e.target.value / 100);
- document.querySelector('#ratioval').innerHTML = 'mutations : ' + (ENV.mutations() * 100).toFixed(0) + '%';
- });
- sliderContainer.appendChild( text );
- sliderContainer.appendChild( slider );
- body.insertBefore( sliderContainer, theFirstChild );
- return {
- generateData: getData,
- rows: 50,
- timeout: 0,
- mutations: mutations
- };
- })();
|