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

View File

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