pgadmin4/web/pgadmin/dashboard/static/js/SystemStats/utility.js

78 lines
2.1 KiB
JavaScript

/////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////
import url_for from 'sources/url_for';
import { DATA_POINT_SIZE } from 'sources/chartjs';
export const X_AXIS_LENGTH = 75;
/* URL for fetching graphs data */
export function getStatsUrl(sid=-1, did=-1, chart_names=[]) {
let base_url = url_for('dashboard.system_statistics');
base_url += '/' + sid;
base_url += (did > 0) ? ('/' + did) : '';
base_url += '?chart_names=' + chart_names.join(',');
return base_url;
}
export function transformData(labels, refreshRate) {
const colors = [
'#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF',
'#FF9F40', '#8D6E63', '#2196F3', '#FFEB3B', '#9C27B0',
'#00BCD4', '#CDDC39', '#FF5722', '#3F51B5', '#FFC107',
'#607D8B', '#E91E63', '#009688', '#795548', '#FF9800'
];
let datasets = Object.keys(labels).map((label, i)=>{
return {
label: label,
data: labels[label] || [],
borderColor: colors[i],
pointHitRadius: DATA_POINT_SIZE,
};
}) || [];
return {
datasets: datasets,
refreshRate: refreshRate,
};
}
/* This will process incoming charts data add it the previous charts
* data to get the new state.
*/
export function statsReducer(state, action) {
if(action.reset) {
return action.reset;
}
if(!action.incoming) {
return state;
}
if(!action.counterData) {
action.counterData = action.incoming;
}
let newState = {};
Object.keys(action.incoming).forEach(label => {
// Sys stats extension may send 'NaN' sometimes, better handle it.
const value = action.incoming[label] == 'NaN' ? 0 : action.incoming[label];
if(state[label]) {
newState[label] = [
action.counter ? value - action.counterData[label] :value,
...state[label].slice(0, X_AXIS_LENGTH-1),
];
} else {
newState[label] = [
action.counter ? value - action.counterData[label] : value,
];
}
});
return newState;
}