Example #1
0
        static public async Task <List <SpeedTestClient.Result> > RunSpeedTestWithMultiTryAsync(TcpIpSystem system, IPAddress ip, int port, int numConnection, int timespan, SpeedTestModeFlag mode, int numTry, int interval, CancellationToken cancel = default)
        {
            List <SpeedTestClient.Result> ret = new List <Result>();

            numTry = Math.Max(numTry, 1);

            for (int i = 0; i < numTry; i++)
            {
                if (cancel.IsCancellationRequested)
                {
                    return(new List <Result>());
                }

                SpeedTestClient tc = new SpeedTestClient(system, ip, port, numConnection, timespan, mode, cancel);

                var result = await tc.RunClientAsync();

                if (result != null)
                {
                    ret.Add(result);
                }

                await cancel._WaitUntilCanceledAsync(Util.GenRandInterval(interval));
            }

            return(ret);
        }
        protected override async Task GetValueAsync(SortedDictionary <string, string> ret, RefInt nextPollingInterval, CancellationToken cancel = default)
        {
            SnmpWorkSettings settings = Host.Settings;

            if (settings.SpeedTargets._IsSamei("none") || settings.SpeedTargets._IsSamei("null"))
            {
                return;
            }

            string[] speedTargets = settings.SpeedTargets._Split(StringSplitOptions.RemoveEmptyEntries, ",");

            count++;


            foreach (string target in speedTargets)
            {
                ParseTargetString(target, out string hostnameAndPort, out string alias);

                cancel.ThrowIfCancellationRequested();

                string[] tokens = hostnameAndPort._Split(StringSplitOptions.RemoveEmptyEntries, '|');
                string   host;
                int      port = 9821;
                host = tokens[0];
                if (tokens.Length >= 2)
                {
                    port = tokens[1]._ToInt();
                }

                //long downloadBps_1 = 0;
                //long uploadBps_1 = 0;
                long downloadBps_32 = 0;
                long uploadBps_32   = 0;

                int intervalBetween = settings.SpeedIntervalsSec * 1000;
                if (count <= 1)
                {
                    intervalBetween = 0;
                }

                int numTry = settings.SpeedTryCount;
                if (count <= 1)
                {
                    numTry = 1;
                }

                int span = settings.SpeedSpanSec * 1000;
                if (count <= 1)
                {
                    span = 2000;
                }

                try
                {
                    IPAddress ipAddress = await LocalNet.GetIpAsync(host, cancel : cancel);

                    try
                    {
                        var downloadResult_32 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 32, span, SpeedTestModeFlag.Download, numTry, intervalBetween, cancel);

                        downloadBps_32 = downloadResult_32.Select(x => x.BpsDownload).OrderByDescending(x => x).FirstOrDefault();
                    }
                    catch (Exception ex)
                    {
                        ex._Debug();
                    }
                    try
                    {
                        var uploadResult_32 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 32, span, SpeedTestModeFlag.Upload, numTry, intervalBetween, cancel);

                        uploadBps_32 = uploadResult_32.Select(x => x.BpsUpload).OrderByDescending(x => x).FirstOrDefault();
                    }
                    catch (Exception ex)
                    {
                        ex._Debug();
                    }


                    //try
                    //{
                    //    var downloadResult_1 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 1, span, SpeedTestModeFlag.Download, numTry, intervalBetween, cancel);

                    //    downloadBps_1 = downloadResult_1.Select(x => x.BpsDownload).OrderByDescending(x => x).FirstOrDefault();
                    //}
                    //catch (Exception ex)
                    //{
                    //    ex._Debug();
                    //}


                    //try
                    //{
                    //    var uploadResult_1 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 1, span, SpeedTestModeFlag.Upload, numTry, intervalBetween, cancel);

                    //    uploadBps_1 = uploadResult_1.Select(x => x.BpsUpload).OrderByDescending(x => x).FirstOrDefault();
                    //}
                    //catch (Exception ex)
                    //{
                    //    ex._Debug();
                    //}
                }
                catch (Exception ex)
                {
                    ex._Debug();
                }

                ret.TryAdd($"{alias} - RX (Mbps)", ((double)downloadBps_32 / 1000.0 / 1000.0).ToString("F3"));
                ret.TryAdd($"{alias} - TX (Mbps)", ((double)uploadBps_32 / 1000.0 / 1000.0).ToString("F3"));

                //ret.TryAdd($"{alias} - 01_RX (Mbps)", ((double)downloadBps_1 / 1000.0 / 1000.0).ToString("F3"));
                //ret.TryAdd($"{alias} - 01_TX (Mbps)", ((double)uploadBps_1 / 1000.0 / 1000.0).ToString("F3"));
            }
        }