BandWith.ps1
param( $Opt = 'soulard', $site = '*', $file = 'C:\git\PSOpt2\OptBox-SpeedTest.json' ) ipmo C:\Git\RDS.Dragonfly\Ressources\RDS.DragonFly-Tools.psm1 ipmo PsWrite, PSOpt2 $ScriptBlock = { param($Opt) # Include Area # $out = Invoke-OptBoxCommand -IpAddresses $Opt.OptBox.LanInfos.IP -Commands ` "curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --connect-timeout 1 | python -" # ,"ip route | grep $($Opt.OptBox.LanInfos.IP -replace('\d+$'))" $Opt.OptBox.WebInfos = [PSCustomObject]@{ IPPublic = $Out[1] -replace('.*\((.*)\).*','$1') Operator = $Out[1] -replace('Testing from (.*) \(.*','$1') Provider = $Out[4] -replace('Hosted by (.*]): .*','$1') Latence = [double]($Out[4] -replace('Hosted by .*\]: (\d+\.\d+) ms','$1')) Download = [double]($Out[6] -replace('.*Download: (\d+\.\d+) Mbit/s','$1')) Upload = [double]($Out[8] -replace('.*Upload: (\d+\.\d+) Mbit/s','$1')) } # $out = $out[8..$out.count] $Out = Invoke-OptBoxCommand -IpAddresses $Opt.OptBox.LanInfos.IP -Commands "ip route | grep $($Opt.OptBox.LanInfos.IP -replace('\d+$'))" $Opt.OptBox.LanInfos.Gateway = ($out -like 'default via *')[0] -replace('default via ([\d*\.]+) .*','$1') $Opt.OptBox.LanInfos.Mask = ($out -like '*/*')[0] -replace('.*(/\d\d) .*' ,'$1') $Opt } | Include-ToScriptblock -Functions 'Invoke-OptBoxCommand','Write-Object' Get-Opt2 $opt -details:$false | Get-Opt2Tunnels -filter $site | %{ foreach($tunnel in $_.tunnels){ if ((Test-TcpPort $tunnel.IP -port 8080 -ConfirmIfDown -Quick)) { $size = 1 $Upload = [math]::Round($size / (Measure-Command { Invoke-WebRequest -Uri "http://$($tunnel.IP):8080/${size}M" -OutFile "$env:tmp\${size}M" }).TotalSeconds * 8,2) $Download = [math]::Round($size / (Measure-Command { Invoke-WebRequest -Uri "http://$($tunnel.IP):8080/" -Method Post -Infile "$env:tmp\${size}M" -ContentType 'image/jpg' }).TotalSeconds * 8,2) } [PSCustomObject]@{ VLAN = $_.vlan Opt2 = $_.hostName OptBox = [PSCustomObject]@{ Name = $tunnel.Name WebInfos = [PSCustomObject]@{} LanInfos = [PSCustomObject]@{ IP = $tunnel.IP Mask = $null Gateway = $null Configs = $tunnel.Configs Latence = [math]::Round((Test-TcpPort $tunnel.IP -port 22).time, 2) Download = $download Upload = $Upload } } } } } | Invoke-Parallel -ScriptBlock $ScriptBlock -psmodule posh-ssh -MaxThreads 32 -TimeOutGlobal 1000 -TimeOutThread 60 | ConvertTo-Json -Depth 4 | Out-File $file -Force # Export-Opt2Config |