增加总流量
This commit is contained in:
parent
d27ac92b36
commit
977694eaa8
@ -1,12 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
namespace FastGithub.FlowAnalyze
|
||||
{
|
||||
sealed class FlowAnalyzer : IFlowAnalyzer
|
||||
{
|
||||
private const int INTERVAL_SECONDS = 5;
|
||||
private long totalRead = 0;
|
||||
private long totalWrite = 0;
|
||||
private readonly ConcurrentQueue<QueueItem> readQueue = new();
|
||||
private readonly ConcurrentQueue<QueueItem> writeQueue = new();
|
||||
|
||||
@ -21,10 +24,12 @@ namespace FastGithub.FlowAnalyze
|
||||
{
|
||||
if (flowType == FlowType.Read)
|
||||
{
|
||||
Interlocked.Add(ref this.totalRead, length);
|
||||
Add(this.readQueue, length);
|
||||
}
|
||||
else
|
||||
{
|
||||
Interlocked.Add(ref this.totalWrite, length);
|
||||
Add(this.writeQueue, length);
|
||||
}
|
||||
}
|
||||
@ -71,7 +76,13 @@ namespace FastGithub.FlowAnalyze
|
||||
Flush(this.writeQueue);
|
||||
var writeRate = (double)this.writeQueue.Sum(item => item.Length) / INTERVAL_SECONDS;
|
||||
|
||||
return new FlowRate { ReadRate = readRate, WriteRate = writeRate };
|
||||
return new FlowRate
|
||||
{
|
||||
TotalRead = this.totalRead,
|
||||
TotalWrite = this.totalWrite,
|
||||
ReadRate = readRate,
|
||||
WriteRate = writeRate
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,16 @@
|
||||
{
|
||||
public record FlowRate
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取总读上行
|
||||
/// </summary>
|
||||
public long TotalRead { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取总下行
|
||||
/// </summary>
|
||||
public long TotalWrite { get; init; }
|
||||
|
||||
public double ReadRate { get; init; }
|
||||
|
||||
public double WriteRate { get; init; }
|
||||
|
||||
@ -5,9 +5,17 @@
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="300" d:DesignWidth="300">
|
||||
d:DesignHeight="100" d:DesignWidth="300">
|
||||
<Grid>
|
||||
<lvc:CartesianChart Name="flowChart" Series="{Binding Series}" LegendLocation="None" >
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width=".7*"></ColumnDefinition>
|
||||
<ColumnDefinition Width=".3*"></ColumnDefinition>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"></RowDefinition>
|
||||
<RowDefinition Height="*"></RowDefinition>
|
||||
</Grid.RowDefinitions>
|
||||
<lvc:CartesianChart Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Name="flowChart" Series="{Binding Series}" LegendLocation="None" >
|
||||
<lvc:CartesianChart.AxisY>
|
||||
<lvc:Axis Foreground="#222" MinValue="0" LabelFormatter="{Binding YFormatter}"></lvc:Axis>
|
||||
</lvc:CartesianChart.AxisY>
|
||||
@ -15,5 +23,12 @@
|
||||
<lvc:Axis Foreground="#222" Labels="{Binding Labels}"></lvc:Axis>
|
||||
</lvc:CartesianChart.AxisX>
|
||||
</lvc:CartesianChart>
|
||||
<StackPanel Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" VerticalAlignment="Top">
|
||||
<TextBlock FontSize="12" FontWeight="Light" Foreground="DodgerBlue" HorizontalAlignment="Center" Margin="0 5">上行流量</TextBlock>
|
||||
<TextBlock x:Name="textBlockRead" Text="0B" Foreground="DodgerBlue" HorizontalAlignment="Center" Margin="0 0 0 8"/>
|
||||
|
||||
<TextBlock FontSize="12" FontWeight="Light" Foreground="IndianRed" HorizontalAlignment="Center" Margin="0 5">下行流量</TextBlock>
|
||||
<TextBlock x:Name="textBlockWrite" Text="0B" Foreground="IndianRed" HorizontalAlignment="Center" Margin="0 0 0 8"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@ -69,6 +69,9 @@ namespace FastGithub.UI
|
||||
var json = await response.EnsureSuccessStatusCode().Content.ReadAsStringAsync();
|
||||
var flowRate = Newtonsoft.Json.JsonConvert.DeserializeObject<FlowRate>(json);
|
||||
|
||||
this.textBlockRead.Text = flowRate.ToTotalReadString();
|
||||
this.textBlockWrite.Text = flowRate.ToTotalWriteString();
|
||||
|
||||
this.readSeries.Values.Add(flowRate.ReadRate / 1024);
|
||||
this.writeSeries.Values.Add(flowRate.WriteRate / 1024);
|
||||
this.Labels.Add(DateTime.Now.ToString("HH:mm:ss"));
|
||||
|
||||
@ -2,8 +2,41 @@
|
||||
{
|
||||
public class FlowRate
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取总读上行
|
||||
/// </summary>
|
||||
public long TotalRead { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取总下行
|
||||
/// </summary>
|
||||
public long TotalWrite { get; set; }
|
||||
|
||||
public double ReadRate { get; set; }
|
||||
|
||||
public double WriteRate { get; set; }
|
||||
|
||||
|
||||
public string ToTotalReadString()
|
||||
{
|
||||
return ToNetworkString(this.TotalRead);
|
||||
}
|
||||
|
||||
public string ToTotalWriteString()
|
||||
{
|
||||
return ToNetworkString(this.TotalWrite);
|
||||
}
|
||||
private static string ToNetworkString(long value)
|
||||
{
|
||||
if (value < 1024)
|
||||
{
|
||||
return $"{value}B";
|
||||
}
|
||||
if (value < 1024 * 1024)
|
||||
{
|
||||
return $"{value / 1024d:0.00}KB";
|
||||
}
|
||||
return $"{value / 1024d / 1024d:0.00}MB";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user