init chart

This commit is contained in:
icylogic
2015-09-19 15:26:25 +08:00
parent 6c7f33dec3
commit 3f56deb418
4 changed files with 101 additions and 46 deletions
@@ -1,6 +1,9 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using Shadowsocks.Controller;
using Shadowsocks.Model;
using SimpleJson;
@@ -11,6 +14,8 @@ namespace Shadowsocks.View
{
private readonly ShadowsocksController _controller;
private StatisticsStrategyConfiguration _configuration;
private DataTable _dataTable = new DataTable();
private List<string> _servers;
public StatisticsStrategyConfigurationForm(ShadowsocksController controller)
{
@@ -24,6 +29,8 @@ namespace Shadowsocks.View
private void LoadConfiguration()
{
var configs = _controller.GetCurrentConfiguration().configs;
_servers = configs.Select(server => server.FriendlyName()).ToList();
_configuration = _controller.StatisticsConfiguration
?? new StatisticsStrategyConfiguration();
if (_configuration.Calculations == null)
@@ -40,8 +47,23 @@ namespace Shadowsocks.View
var calculation = new CalculationControl(kv.Key, kv.Value);
calculationContainer.Controls.Add(calculation);
}
serverSelector.DataSource = _servers;
_dataTable.Columns.Add("Timestamp", typeof (DateTime));
_dataTable.Columns.Add("Package Loss", typeof (int));
_dataTable.Columns.Add("Ping", typeof (int));
StatisticsChart.Series["Package Loss"].XValueMember = "Timestamp";
StatisticsChart.Series["Package Loss"].YValueMembers = "PackageLoss";
StatisticsChart.Series["Ping"].XValueMember = "Timestamp";
StatisticsChart.Series["Ping"].YValueMembers = "Ping";
StatisticsChart.DataSource = _dataTable;
loadChartData(serverSelector.SelectedText);
StatisticsChart.DataBind();
}
private void CancelButton_Click(object sender, EventArgs e)
{
Close();
@@ -57,5 +79,21 @@ namespace Shadowsocks.View
_controller?.UpdateStatisticsConfiguration(StatisticsEnabledCheckBox.Checked);
Close();
}
private void loadChartData(string serverName)
{
_dataTable.Rows.Clear();
List<AvailabilityStatistics.RawStatisticsData> statistics;
if (!_controller.availabilityStatistics.FilteredStatistics.TryGetValue(serverName, out statistics)) return;
foreach (var data in statistics)
{
_dataTable.Rows.Add(data.Timestamp, (float) new Random().Next() % 50, new Random().Next() % 200);
}
}
private void serverSelector_SelectedIndexChanged(object sender, EventArgs e)
{
loadChartData(_servers[serverSelector.SelectedIndex]);
}
}
}