bug fixes

This commit is contained in:
HojouFotytu 2024-02-01 20:25:04 +09:00
parent 78e7e18631
commit 4f9b76bcea
5 changed files with 74 additions and 37 deletions

View File

@ -30,6 +30,8 @@
var intervalDashboardTop; var intervalDashboardTop;
var intervalDashboardBottom; var intervalDashboardBottom;
var loadDashboardTop = function () { var loadDashboardTop = function () {
$("#baglist-refresh-icon").html('<i class="fa fa-circle-o-notch fa-spin fa-fw" data-toggle="tooltip" data-placement="top" title="Loading fresh data..."></i>'); $("#baglist-refresh-icon").html('<i class="fa fa-circle-o-notch fa-spin fa-fw" data-toggle="tooltip" data-placement="top" title="Loading fresh data..."></i>');
$("#buylist-refresh-icon").html('<i class="fa fa-circle-o-notch fa-spin fa-fw" data-toggle="tooltip" data-placement="top" title="Loading fresh data..."></i>'); $("#buylist-refresh-icon").html('<i class="fa fa-circle-o-notch fa-spin fa-fw" data-toggle="tooltip" data-placement="top" title="Loading fresh data..."></i>');
@ -68,6 +70,23 @@
if (intervalDashboardBottom != null) { if (intervalDashboardBottom != null) {
clearInterval(intervalDashboardBottom); clearInterval(intervalDashboardBottom);
} }
console.log(counterIndex["DashboardBottom"]);
// Destroy all d3 svg graph to avoid memory leak every 10 refreshes of Dashboard Bottom
if (counterIndex["DashboardBottom"] >= 10) {
$(".nvtooltip").remove();
$("svg > *").remove();
$("svg").remove();
$("svg").off(); // Remove all event listeners from SVG elements
nv.charts = {};
nv.graphs = [];
nv.logs = {};
nv.tooltip = {};
window.cleanupData();
// Reset the counter
counterIndex["DashboardBottom"] = 0;
console.log("d3 svg graph destroyed");
}
// Load dashboard // Load dashboard
$("#dashboardBottom").load('@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)_get/DashboardBottom', '', function (responseText, textStatus, XMLHttpRequest) { $("#dashboardBottom").load('@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)_get/DashboardBottom', '', function (responseText, textStatus, XMLHttpRequest) {
@ -84,18 +103,7 @@
// Increment the counter // Increment the counter
counterIndex["DashboardBottom"] = (counterIndex["DashboardBottom"] || 0) + 1; counterIndex["DashboardBottom"] = (counterIndex["DashboardBottom"] || 0) + 1;
// Destroy all d3 svg graph to avoid memory leak every 30 refreshes of Dashboard Bottom
if (counterIndex["DashboardBottom"] >= 30) {
$(".nvtooltip").remove();
$("svg > *").remove();
$("svg").remove();
nv.charts = {};
nv.graphs = [];
nv.logs = {};
nv.tooltip = {};
// Reset the counter
counterIndex["DashboardBottom"] = 0;
}
} }
// Reinstate the interval. // Reinstate the interval.

View File

@ -404,6 +404,9 @@ else
// Get the chart's container // Get the chart's container
var container = d3.select('.trend-chart .nv-wrap.nv-lineChart .nv-linesWrap'); var container = d3.select('.trend-chart .nv-wrap.nv-lineChart .nv-linesWrap');
// Remove any existing y=0 line
container.selectAll('.zero-line').remove();
// Get the x-values of the first and last data points // Get the x-values of the first and last data points
var xRange = lineChart.xAxis.scale().range(); var xRange = lineChart.xAxis.scale().range();
var xMin = xRange[0]; var xMin = xRange[0];
@ -412,6 +415,7 @@ else
// Add a line at y=0 // Add a line at y=0
container.insert('line', ':first-child') container.insert('line', ':first-child')
.attr('class', 'zero-line') // Add a class to the line for easy
.attr('x1', xMin) // x position of the first end of the line .attr('x1', xMin) // x position of the first end of the line
.attr('y1', lineChart.yAxis.scale()(0)) // y position of the first end of the line .attr('y1', lineChart.yAxis.scale()(0)) // y position of the first end of the line
.attr('x2', xMax) // x position of the second end of the line .attr('x2', xMax) // x position of the second end of the line

View File

@ -503,6 +503,9 @@
// Get the chart's container // Get the chart's container
var container = d3.select('.profit-chart .nv-wrap.nv-lineChart .nv-linesWrap'); var container = d3.select('.profit-chart .nv-wrap.nv-lineChart .nv-linesWrap');
// Remove any existing y=0 line
container.selectAll('.zero-line').remove();
// Check if profitData[0].values is not empty // Check if profitData[0].values is not empty
if (profitData[0].values.length > 0) { if (profitData[0].values.length > 0) {
// Get the x-values of the first and last data points // Get the x-values of the first and last data points
@ -511,6 +514,7 @@
// Add a line at y=0 // Add a line at y=0
container.insert('line', ':first-child') container.insert('line', ':first-child')
.attr('class', 'zero-line') // Add a class to the line for easy selection
.attr('x1', xMin) // x position of the first end of the line .attr('x1', xMin) // x position of the first end of the line
.attr('y1', profitChart.yAxis.scale()(0)) // y position of the first end of the line .attr('y1', profitChart.yAxis.scale()(0)) // y position of the first end of the line
.attr('x2', xMax) // x position of the second end of the line .attr('x2', xMax) // x position of the second end of the line

View File

@ -299,13 +299,20 @@
<script src="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)assets/plugins/tablesaw/js/tablesaw.js"></script> <script src="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)assets/plugins/tablesaw/js/tablesaw.js"></script>
<script src="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)assets/plugins/tablesaw/js/tablesaw-init.js"></script> <script src="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)assets/plugins/tablesaw/js/tablesaw-init.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip();
});
</script>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function () { $(document).ready(function () {
$(".cdev").circlos(); $(".cdev").circlos();
$('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').tooltip();
$('.text-autocolor').autocolor(false); $('.text-autocolor').autocolor(false);
var assetDistributionChart; // Keep a reference to the chart
var assetDistributionData; // Keep a reference to the data var assetDistributionData; // Keep a reference to the data
@if (!Model.AssetDistributionData.Equals("")) { @if (!Model.AssetDistributionData.Equals("")) {
@ -367,27 +374,27 @@
.call(trendChart); .call(trendChart);
trendChart.dispatch.on('renderEnd', function() { trendChart.dispatch.on('renderEnd', function() {
// Get the chart's container // Get the chart's container
var container = d3.select('.trend-chart .nv-wrap.nv-lineChart .nv-linesWrap'); var container = d3.select('.trend-chart .nv-wrap.nv-lineChart .nv-linesWrap');
// Get the x-values of the first and last data points // Remove any existing y=0 line
var xRange = trendChart.xAxis.scale().range(); container.selectAll('.zero-line').remove();
var xMin = xRange[0];
var xMax = xRange[1];
// Get the x-values of the first and last data points
var xRange = trendChart.xAxis.scale().range();
var xMin = xRange[0];
var xMax = xRange[1];
// Add a line at y=0 // Add a line at y=0
container.insert('line', ':first-child') container.insert('line', ':first-child')
.attr('x1', xMin) // x position of the first end of the line .attr('class', 'zero-line') // Add a class to the line for easy selection
.attr('y1', trendChart.yAxis.scale()(0)) // y position of the first end of the line .attr('x1', xMin) // x position of the first end of the line
.attr('x2', xMax) // x position of the second end of the line .attr('y1', trendChart.yAxis.scale()(0)) // y position of the first end of the line
.attr('y2', trendChart.yAxis.scale()(0)) // y position of the second end of the line .attr('x2', xMax) // x position of the second end of the line
.attr('stroke', 'gray') // color of the line .attr('y2', trendChart.yAxis.scale()(0)) // y position of the second end of the line
.attr('stroke-width', 2); // width of the line .attr('stroke', 'gray') // color of the line
.attr('stroke-width', 2); // width of the line
}); });
nv.utils.windowResize(trendChart.update); nv.utils.windowResize(trendChart.update);
return trendChart; return trendChart;
}); });
@ -406,6 +413,7 @@
var profitChart; // Keep a reference to the chart var profitChart; // Keep a reference to the chart
var profitData; // Keep a reference to the data var profitData; // Keep a reference to the data
@if (!Model.ProfitChartDataJSON.Equals("")) { @if (!Model.ProfitChartDataJSON.Equals("")) {
<text> <text>
nv.addGraph(function () { nv.addGraph(function () {
@ -426,6 +434,9 @@
// Get the chart's container // Get the chart's container
var container = d3.select('.profit-chart .nv-wrap.nv-lineChart .nv-linesWrap'); var container = d3.select('.profit-chart .nv-wrap.nv-lineChart .nv-linesWrap');
// Remove any existing y=0 line
container.selectAll('.zero-line').remove();
// Check if profitData[0].values is not empty // Check if profitData[0].values is not empty
if (profitData[0].values.length > 0) { if (profitData[0].values.length > 0) {
// Get the x-values of the first and last data points // Get the x-values of the first and last data points
@ -434,12 +445,15 @@
// Add a line at y=0 // Add a line at y=0
container.insert('line', ':first-child') container.insert('line', ':first-child')
.attr('class', 'zero-line') // Add a class to the line for easy selection
.attr('x1', xMin) // x position of the first end of the line .attr('x1', xMin) // x position of the first end of the line
.attr('y1', profitChart.yAxis.scale()(0)) // y position of the first end of the line .attr('y1', profitChart.yAxis.scale()(0)) // y position of the first end of the line
.attr('x2', xMax) // x position of the second end of the line .attr('x2', xMax) // x position of the second end of the line
.attr('y2', profitChart.yAxis.scale()(0)) // y position of the second end of the line .attr('y2', profitChart.yAxis.scale()(0)) // y position of the second end of the line
.attr('stroke', 'gray') // color of the line .attr('stroke', 'gray') // color of the line
.attr('stroke-width', 2); // width of the line .attr('stroke-width', 2); // width of the line
window.profitChartUpdate = nv.utils.windowResize(function() { profitChart.update(); });
} }
}); });
@ -451,12 +465,6 @@
})(jQuery); })(jQuery);
</script> </script>
<script type="text/javascript">
$(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip();
});
</script>
<script type="text/javascript"> <script type="text/javascript">
(function ($) { (function ($) {
'use strict'; 'use strict';
@ -520,3 +528,16 @@
// Add other charts as needed // Add other charts as needed
}); });
</script> </script>
<script type="text/javascript">
window.cleanupData = function() {
TCVLiveChart = null;
TCVLiveData = null;
assetDistributionChart = null;
assetDistributionData = null;
trendChart = null;
trendData = null;
profitChart = null;
profitData = null;
};
</script>

View File

@ -6,7 +6,7 @@ using Core.Helper;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
[assembly: AssemblyVersion("2.7.1")] [assembly: AssemblyVersion("2.7.2")]
[assembly: AssemblyProduct("PT Magic")] [assembly: AssemblyProduct("PT Magic")]
namespace PTMagic namespace PTMagic