Optimize traffic statistics

pull/3107/head
2dust 2023-01-04 10:21:26 +08:00
parent 97a369df0a
commit 7b28aa8500
3 changed files with 28 additions and 17 deletions

View File

@ -134,11 +134,6 @@ namespace v2rayN.Handler
return SqliteHelper.Instance.ExecuteAsync(sql);
}
public List<ServerStatItem> ServerStatItems()
{
return SqliteHelper.Instance.Table<ServerStatItem>().ToList();
}
public List<RoutingItem> RoutingItems()
{
return SqliteHelper.Instance.Table<RoutingItem>().Where(it => it.locked == false).ToList();

View File

@ -14,6 +14,8 @@ namespace v2rayN.Handler
private StatsService.StatsServiceClient client_;
private bool exitFlag_;
private ServerStatItem _serverStatItem;
private List<ServerStatItem> _lstServerStat;
public List<ServerStatItem> ServerStat => _lstServerStat;
Action<ServerSpeedItem> updateFunc_;
@ -83,11 +85,13 @@ namespace v2rayN.Handler
GetServerStatItem(config_.indexId);
ParseOutput(res.Stat, out ServerSpeedItem server);
_serverStatItem.todayUp += server.proxyUp;
_serverStatItem.todayDown += server.proxyDown;
_serverStatItem.totalUp += server.proxyUp;
_serverStatItem.totalDown += server.proxyDown;
if (server.proxyUp != 0 || server.proxyDown != 0)
{
_serverStatItem.todayUp += server.proxyUp;
_serverStatItem.todayDown += server.proxyDown;
_serverStatItem.totalUp += server.proxyUp;
_serverStatItem.totalDown += server.proxyDown;
}
if (Global.ShowInTaskbar)
{
server.indexId = config_.indexId;
@ -97,11 +101,6 @@ namespace v2rayN.Handler
server.totalDown = _serverStatItem.totalDown;
updateFunc_(server);
}
if (server.proxyUp != 0 || server.proxyDown != 0)
{
_ = SqliteHelper.Instance.UpdateAsync(_serverStatItem);
}
}
}
var sleep = config_.statisticsFreshRate < 1 ? 1 : config_.statisticsFreshRate;
@ -118,12 +117,27 @@ namespace v2rayN.Handler
{
SqliteHelper.Instance.Execute($"delete from ServerStatItem ");
_serverStatItem = null;
_lstServerStat = new();
}
public void SaveTo()
{
try
{
SqliteHelper.Instance.UpdateAll(_lstServerStat);
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
}
}
private void Init()
{
long ticks = DateTime.Now.Date.Ticks;
SqliteHelper.Instance.Execute($"update ServerStatItem set todayUp = 0,todayDown=0,dateNow={ticks} where dateNow<>{ticks}");
_lstServerStat = SqliteHelper.Instance.Table<ServerStatItem>().ToList();
}
private void GetServerStatItem(string indexId)
@ -136,7 +150,7 @@ namespace v2rayN.Handler
if (_serverStatItem == null)
{
_serverStatItem = SqliteHelper.Instance.Table<ServerStatItem>().FirstOrDefault(t => t.indexId == indexId);
_serverStatItem = _lstServerStat.FirstOrDefault(t => t.indexId == indexId);
if (_serverStatItem == null)
{
_serverStatItem = new ServerStatItem
@ -149,6 +163,7 @@ namespace v2rayN.Handler
dateNow = ticks
};
_ = SqliteHelper.Instance.Replacesync(_serverStatItem);
_lstServerStat.Add(_serverStatItem);
}
}

View File

@ -637,6 +637,7 @@ namespace v2rayN.ViewModels
SysProxyHandle.UpdateSysProxy(_config, true);
}
_statistics?.SaveTo();
_statistics?.Close();
_coreHandler.CoreStop();
@ -685,7 +686,7 @@ namespace v2rayN.ViewModels
List<ServerStatItem> lstServerStat = new();
if (_statistics != null && _statistics.Enable)
{
lstServerStat = LazyConfig.Instance.ServerStatItems();
lstServerStat = _statistics.ServerStat;
}
lstModel = (from t in lstModel
join t2 in lstServerStat