459d745cb1
add tasks to debug page ignore .git on debug page for speed add perfchunks table Renamed phrases (changed statistics to stats): panel_menu_stats panel_menu_stats_posts panel_menu_stats_topics panel_menu_stats_forums panel_menu_stats_routes panel_menu_stats_agents panel_menu_stats_systems panel_menu_stats_languages panel_menu_stats_referrers panel_menu_stats_memory panel_menu_stats_active_memory panel_menu_stats_perf panel_stats_views_head_suffix panel_stats_user_agents_head panel_stats_forums_head panel_stats_languages_head panel_stats_post_counts_head panel_stats_referrers_head panel_stats_routes_head panel_stats_operating_systems_head panel_stats_topic_counts_head panel_stats_requests_head panel_stats_memory_head panel_stats_active_memory_head panel_stats_spam_hide panel_stats_spam_show panel_stats_memory_type_total panel_stats_memory_type_stack panel_stats_memory_type_heap panel_stats_time_range_one_year panel_stats_time_range_three_months panel_stats_time_range_one_month panel_stats_time_range_one_week panel_stats_time_range_two_days panel_stats_time_range_one_day panel_stats_time_range_twelve_hours panel_stats_time_range_six_hours panel_stats_post_counts_chart_aria panel_stats_topic_counts_chart_aria panel_stats_requests_chart_aria panel_stats_memory_chart_aria panel_stats_details_head panel_stats_post_counts_table_aria panel_stats_topic_counts_table_aria panel_stats_route_views_table_aria panel_stats_requests_table_aria panel_stats_memory_table_aria panel_stats_views_suffix panel_stats_posts_suffix panel_stats_topics_suffix panel_stats_user_agents_no_user_agents panel_stats_forums_no_forums panel_stats_languages_no_languages panel_stats_post_counts_no_post_counts panel_stats_referrers_no_referrers panel_stats_routes_no_routes panel_stats_operating_systems_no_operating_systems panel_stats_memory_no_memory Added phrases: panel_debug_tasks panel_debug_tasks_half_second panel_debug_tasks_second panel_debug_tasks_fifteen_minute panel_debug_tasks_hour panel_debug_tasks_shutdown panel_stats_perf_head panel_stats_perf_low panel_stats_perf_high panel_stats_perf_avg You will need to run the updater / patcher for this commit.
194 lines
5.5 KiB
JavaScript
194 lines
5.5 KiB
JavaScript
function memStuff(window, document, Chartist) {
|
|
'use strict';
|
|
|
|
Chartist.plugins = Chartist.plugins || {};
|
|
Chartist.plugins.byteUnits = function(options) {
|
|
options = Chartist.extend({}, {}, options);
|
|
|
|
return function byteUnits(chart) {
|
|
if(!chart instanceof Chartist.Line) return;
|
|
|
|
chart.on('created', function() {
|
|
console.log("running created")
|
|
const vbits = document.getElementsByClassName("ct-vertical");
|
|
if(vbits==null) return;
|
|
|
|
let tbits = [];
|
|
for(let i = 0; i < vbits.length; i++) {
|
|
tbits[i] = vbits[i].innerHTML;
|
|
}
|
|
console.log("tbits:",tbits);
|
|
|
|
const calc = (places) => {
|
|
if(places==3) return;
|
|
|
|
const matcher = vbits[0].innerHTML;
|
|
let allMatch = true;
|
|
for(let i = 0; i < tbits.length; i++) {
|
|
let val = convertByteUnit(tbits[i], places);
|
|
if(val!=matcher) allMatch = false;
|
|
vbits[i].innerHTML = val;
|
|
}
|
|
|
|
if(allMatch) calc(places + 1);
|
|
}
|
|
calc(0);
|
|
});
|
|
};
|
|
};
|
|
}
|
|
|
|
function perfStuff(window, document, Chartist) {
|
|
'use strict';
|
|
|
|
Chartist.plugins = Chartist.plugins || {};
|
|
Chartist.plugins.perfUnits = function(options) {
|
|
options = Chartist.extend({}, {}, options);
|
|
|
|
return function perfUnits(chart) {
|
|
if(!chart instanceof Chartist.Line) return;
|
|
|
|
chart.on('created', function() {
|
|
console.log("running created")
|
|
const vbits = document.getElementsByClassName("ct-vertical");
|
|
if(vbits==null) return;
|
|
|
|
let tbits = [];
|
|
for(let i = 0; i < vbits.length; i++) {
|
|
tbits[i] = vbits[i].innerHTML;
|
|
}
|
|
console.log("tbits:",tbits);
|
|
|
|
const calc = (places) => {
|
|
if(places==3) return;
|
|
|
|
const matcher = vbits[0].innerHTML;
|
|
let allMatch = true;
|
|
for(let i = 0; i < tbits.length; i++) {
|
|
let val = convertPerfUnit(tbits[i], places);
|
|
if(val!=matcher) allMatch = false;
|
|
vbits[i].innerHTML = val;
|
|
}
|
|
|
|
if(allMatch) calc(places + 1);
|
|
}
|
|
calc(0);
|
|
});
|
|
};
|
|
};
|
|
}
|
|
|
|
const Kilobyte = 1024;
|
|
const Megabyte = Kilobyte * 1024;
|
|
const Gigabyte = Megabyte * 1024;
|
|
const Terabyte = Gigabyte * 1024;
|
|
const Petabyte = Terabyte * 1024;
|
|
|
|
function convertByteUnit(bytes, places = 0) {
|
|
let out;
|
|
if(bytes >= Petabyte) out = [bytes / Petabyte, "PB"];
|
|
else if(bytes >= Terabyte) out = [bytes / Terabyte, "TB"];
|
|
else if(bytes >= Gigabyte) out = [bytes / Gigabyte, "GB"];
|
|
else if(bytes >= Megabyte) out = [bytes / Megabyte, "MB"];
|
|
else if(bytes >= Kilobyte) out = [bytes / Kilobyte, "KB"];
|
|
else out = [bytes,"b"];
|
|
|
|
if(places==0) return Math.ceil(out[0]) + out[1];
|
|
else {
|
|
let ex = Math.pow(10, places);
|
|
return (Math.round(out[0], ex) / ex) + out[1];
|
|
}
|
|
}
|
|
|
|
let ms = 1000;
|
|
let sec = ms * 1000;
|
|
let min = sec * 60;
|
|
let hour = min * 60;
|
|
let day = hour * 24;
|
|
function convertPerfUnit(quan, places = 0) {
|
|
let out;
|
|
if(quan >= day) out = [quan / day, "d"];
|
|
else if(quan >= hour) out = [quan / hour, "h"];
|
|
else if(quan >= min) out = [quan / min, "m"];
|
|
else if(quan >= sec) out = [quan / sec, "s"];
|
|
else if(quan >= ms) out = [quan / ms, "ms"];
|
|
else out = [quan,"μs"];
|
|
|
|
if(places==0) return Math.ceil(out[0]) + out[1];
|
|
else {
|
|
let ex = Math.pow(10, places);
|
|
return (Math.round(out[0], ex) / ex) + out[1];
|
|
}
|
|
}
|
|
|
|
// TODO: Fully localise this
|
|
// TODO: Load rawLabels and seriesData dynamically rather than potentially fiddling with nonces for the CSP?
|
|
function buildStatsChart(rawLabels, seriesData, timeRange, legendNames, typ=0) {
|
|
console.log("buildStatsChart");
|
|
console.log("seriesData:",seriesData);
|
|
let labels = [];
|
|
let aphrases = phraseBox["analytics"];
|
|
if(timeRange=="one-year") {
|
|
labels = [aphrases["analytics.now"],"1" + aphrases["analytics.months_short"]];
|
|
for(let i = 2; i < 12; i++) {
|
|
labels.push(i + aphrases["analytics.months_short"]);
|
|
}
|
|
} else if(timeRange=="three-months") {
|
|
labels = [aphrases["analytics.now"],"3" + aphrases["analytics.days_short"]]
|
|
for(let i = 6; i < 90; i = i + 3) {
|
|
if (i%2==0) labels.push("");
|
|
else labels.push(i + aphrases["analytics.days_short"]);
|
|
}
|
|
} else if(timeRange=="one-month") {
|
|
labels = [aphrases["analytics.now"],"1" + aphrases["analytics.days_short"]];
|
|
for(let i = 2; i < 30; i++) {
|
|
if (i%2==0) labels.push("");
|
|
else labels.push(i + aphrases["analytics.days_short"]);
|
|
}
|
|
} else if(timeRange=="one-week") {
|
|
labels = [aphrases["analytics.now"]];
|
|
for(let i = 2; i < 14; i++) {
|
|
if (i%2==0) labels.push("");
|
|
else labels.push(Math.floor(i/2) + aphrases["analytics.days"]);
|
|
}
|
|
} else if (timeRange=="two-days" || timeRange == "one-day" || timeRange == "twelve-hours") {
|
|
for(const i in rawLabels) {
|
|
if (i%2==0) {
|
|
labels.push("");
|
|
continue;
|
|
}
|
|
let date = new Date(rawLabels[i]*1000);
|
|
console.log("date:", date);
|
|
let minutes = "0" + date.getMinutes();
|
|
let label = date.getHours() + ":" + minutes.substr(-2);
|
|
console.log("label:", label);
|
|
labels.push(label);
|
|
}
|
|
} else {
|
|
for(const i in rawLabels) {
|
|
let date = new Date(rawLabels[i]*1000);
|
|
console.log("date:", date);
|
|
let minutes = "0" + date.getMinutes();
|
|
let label = date.getHours() + ":" + minutes.substr(-2);
|
|
console.log("label:", label);
|
|
labels.push(label);
|
|
}
|
|
}
|
|
labels = labels.reverse()
|
|
for(let i = 0; i < seriesData.length; i++) {
|
|
seriesData[i] = seriesData[i].reverse();
|
|
}
|
|
|
|
let config = {height: '250px', plugins:[]};
|
|
if(legendNames.length > 0) config.plugins = [
|
|
Chartist.plugins.legend({legendNames: legendNames})
|
|
];
|
|
if(typ==1) config.plugins.push(Chartist.plugins.byteUnits());
|
|
else if(typ==2) config.plugins.push(Chartist.plugins.perfUnits());
|
|
Chartist.Line('.ct_chart', {
|
|
labels: labels,
|
|
series: seriesData,
|
|
}, config);
|
|
}
|
|
|
|
runInitHook("analytics_loaded"); |