Ejemplo n.º 1
0
        public void Run()
        {
            while (!exitFlag_)
            {
                try
                {
                    if (Enable && channel_.State == ChannelState.Ready)
                    {
                        QueryStatsResponse res = null;
                        try
                        {
                            res = client_.QueryStats(new QueryStatsRequest()
                            {
                                Pattern = "", Reset = true
                            });
                        }
                        catch (Exception ex)
                        {
                            Utils.SaveLog(ex.Message, ex);
                        }

                        if (res != null)
                        {
                            var   itemId         = config_.getItemId();
                            var   serverStatItem = GetServerStatItem(itemId);
                            ulong up             = 0,
                                  down           = 0;

                            //TODO: parse output
                            ParseOutput(res.Stat, out up, out down);

                            serverStatItem.todayUp   += up;
                            serverStatItem.todayDown += down;
                            serverStatItem.totalUp   += up;
                            serverStatItem.totalDown += down;

                            if (UpdateUI)
                            {
                                updateFunc_(up, down, new List <ServerStatItem> {
                                    serverStatItem
                                });
                            }
                        }
                    }
                    Thread.Sleep(config_.statisticsFreshRate);
                    channel_.ConnectAsync();
                }
                catch (Exception ex)
                {
                    Utils.SaveLog(ex.Message, ex);
                }
            }
        }
Ejemplo n.º 2
0
        public async Task <IEnumerable <V2RayEntity> > QueryV2RayDataAsync()
        {
            QueryStatsRequest request = new QueryStatsRequest()
            {
                Reset   = true,
                Pattern = ""
            };
            QueryStatsResponse response = await client.QueryStatsAsync(request);

            return(response.Stat.Select(stat =>
            {
                string[] keys = stat.Name.Split(">>>");
                logger.LogInformation("name: {0}, v: {1}, keys : {2}", stat.Name, stat.Value, keys);
                return new V2RayEntity()
                {
                    UserType = keys[0],
                    User = keys[1],
                    LinkType = keys[3],
                    DataSize = stat.Value
                };
            }));
        }
Ejemplo n.º 3
0
        public void Run()
        {
            while (!exitFlag_)
            {
                try
                {
                    if (enabled_ && channel_.State == ChannelState.Ready)
                    {
                        QueryStatsResponse res = null;
                        try
                        {
                            res = client_.QueryStats(new QueryStatsRequest()
                            {
                                Pattern = "", Reset = true
                            });
                        }
                        catch (Exception ex)
                        {
                            Utils.SaveLog(ex.Message, ex);
                        }

                        if (res != null)
                        {
                            var   addr = config_.address();
                            var   port = config_.port();
                            var   path = config_.path();
                            var   cur  = Statistic.FindIndex(item => item.address == addr && item.port == port && item.path == path);
                            ulong up   = 0,
                                  down = 0;

                            //TODO: parse output
                            ParseOutput(res.Stat, out up, out down);

                            Up   = up;
                            Down = down;

                            TotalUp   += up;
                            TotalDown += down;

                            if (cur != -1)
                            {
                                Statistic[cur].todayUp   += up;
                                Statistic[cur].todayDown += down;
                                Statistic[cur].totalUp   += up;
                                Statistic[cur].totalDown += down;
                            }

                            if (UpdateUI)
                            {
                                updateFunc_(TotalUp, TotalDown, Up, Down, Statistic);
                            }
                        }
                    }
                    Thread.Sleep(config_.statisticsFreshRate);
                    channel_.ConnectAsync();
                }
                catch (Exception ex)
                {
                    Utils.SaveLog(ex.Message, ex);
                }
            }
        }