Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
The Tor Project
Network Health
sbws
Commits
60fb6ee2
Commit
60fb6ee2
authored
Apr 19, 2022
by
juga
Browse files
chg: Add subcommand to show exits with 2 in FlowCtrl
Closes #40132
parent
037dd9c3
Pipeline
#36740
failed with stages
in 15 minutes and 20 seconds
Changes
3
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
sbws/core/flowctrl2.py
0 → 100644
View file @
60fb6ee2
import
logging
from
argparse
import
ArgumentDefaultsHelpFormatter
import
sbws.util.stem
as
stem_utils
from
sbws.lib.relaylist
import
RelayList
from
sbws.util.state
import
State
log
=
logging
.
getLogger
(
__name__
)
def
gen_parser
(
sub
):
d
=
"Log the number of exits that have 2 in FlowCtrl."
p
=
sub
.
add_parser
(
"flowctrl2"
,
description
=
d
,
formatter_class
=
ArgumentDefaultsHelpFormatter
,
)
return
p
def
main
(
args
,
conf
):
controller
=
stem_utils
.
launch_or_connect_to_tor
(
conf
)
# When there will be a refactor where conf is global, this can be removed
# from here.
state
=
State
(
conf
.
getpath
(
"paths"
,
"state_fname"
))
measurements_period
=
conf
.
getint
(
"general"
,
"data_period"
)
rl
=
RelayList
(
args
,
conf
,
controller
,
measurements_period
,
state
)
exits
=
rl
.
exits_not_bad_allowing_port
(
443
)
log
.
info
(
"Number of exits: %s"
,
len
(
exits
))
exits_min_bw
=
rl
.
exit_min_bw
()
log
.
info
(
"Exits minimum bandwidth: %s KB."
,
exits_min_bw
/
1000
)
exits_with_min_bw
=
stem_utils
.
only_relays_with_bandwidth
(
controller
,
exits
,
min_bw
=
exits_min_bw
)
log
.
info
(
"Number of exits with minimum bandwidth: %s"
,
len
(
exits_with_min_bw
)
)
exits_sorted
=
sorted
(
exits
,
key
=
lambda
r
:
r
.
consensus_bandwidth
,
reverse
=
True
)
log
.
info
(
"Exits lowest bandwidth: %s KB."
,
exits_sorted
[
-
1
].
consensus_bandwidth
/
1000
,
)
log
.
info
(
"Exits highest bandwidth: %s KB."
,
exits_sorted
[
0
].
consensus_bandwidth
/
1000
,
)
non_exits
=
rl
.
non_exits
log
.
info
(
"Number of non exits: %s."
,
len
(
non_exits
))
non_exits_with_helpers_double_bw
=
0
non_exits_with_helpers_same_bw
=
0
non_exits_without_helpers_same_double_bw
=
0
for
relay
in
non_exits
:
double_min_bw
=
max
(
exits_min_bw
,
relay
.
consensus_bandwidth
*
2
)
helpers
=
stem_utils
.
only_relays_with_bandwidth
(
controller
,
exits_with_min_bw
,
min_bw
=
double_min_bw
)
if
helpers
:
log
.
debug
(
"Number of helpers with double bandwidth for relay %s: %s."
,
relay
.
nickname
,
len
(
helpers
),
)
non_exits_with_helpers_double_bw
+=
1
else
:
min_bw
=
max
(
exits_min_bw
,
relay
.
consensus_bandwidth
)
helpers
=
stem_utils
.
only_relays_with_bandwidth
(
controller
,
exits_with_min_bw
,
min_bw
=
min_bw
)
if
helpers
:
log
.
debug
(
"Number of helpers for relay %s: %s."
,
relay
.
nickname
,
len
(
helpers
),
)
non_exits_with_helpers_same_bw
+=
1
else
:
log
.
debug
(
"No helpers for relay %s"
,
relay
.
nickname
)
non_exits_without_helpers_same_double_bw
+=
1
log
.
info
(
"Number of non exits with helpers that have double bandwidth: %s."
,
non_exits_with_helpers_double_bw
,
)
log
.
info
(
"Number of non exits with helpers that have same bandwidth: %s."
,
non_exits_with_helpers_same_bw
,
)
log
.
info
(
"Number of non exits without helpers that have double or same"
" bandwidth: %s."
,
non_exits_without_helpers_same_double_bw
,
)
exits_flowctrl2
=
rl
.
exits_with_2_in_flowctrl
(
443
)
log
.
info
(
"Number of exits that have 2 in FlowCtrl: %s."
,
len
(
exits_flowctrl2
)
)
exits_flowctrl2_min_bw
=
stem_utils
.
only_relays_with_bandwidth
(
controller
,
exits_flowctrl2
,
min_bw
=
exits_min_bw
)
log
.
info
(
"Number of exits that have 2 in FlowCtrl and minimum bandwidth: %s"
,
len
(
exits_flowctrl2_min_bw
),
)
exits_flowctrl2_sorted
=
sorted
(
exits_flowctrl2
,
key
=
lambda
r
:
r
.
consensus_bandwidth
,
reverse
=
True
)
log
.
info
(
"Exits that have 2 in FlowCtrl lowest bandwidth: %s KB."
,
exits_flowctrl2_sorted
[
-
1
].
consensus_bandwidth
/
1000
,
)
log
.
info
(
"Exits that have 2 in FlowCtrl highest bandwidth: %s KB."
,
exits_flowctrl2_sorted
[
0
].
consensus_bandwidth
/
1000
,
)
non_exits_with_helpers_flowctrl2_double_bw
=
0
non_exits_with_helpers_flowctrl2_same_bw
=
0
non_exits_without_helpers_flowctrl2_same_double_bw
=
0
for
relay
in
non_exits
:
double_min_bw
=
max
(
exits_min_bw
,
relay
.
consensus_bandwidth
*
2
)
helpers
=
stem_utils
.
only_relays_with_bandwidth
(
controller
,
exits_flowctrl2_min_bw
,
min_bw
=
double_min_bw
)
if
helpers
:
log
.
debug
(
"Number of helpers with double bandwidth for relay %s: %s."
,
relay
.
nickname
,
len
(
helpers
),
)
non_exits_with_helpers_flowctrl2_double_bw
+=
1
else
:
min_bw
=
max
(
exits_min_bw
,
relay
.
consensus_bandwidth
)
helpers
=
stem_utils
.
only_relays_with_bandwidth
(
controller
,
exits_flowctrl2_min_bw
,
min_bw
=
min_bw
)
if
helpers
:
log
.
debug
(
"Number of helpers for relay %s: %s."
,
relay
.
nickname
,
len
(
helpers
),
)
non_exits_with_helpers_flowctrl2_same_bw
+=
1
else
:
log
.
debug
(
"No helpers for relay %s"
,
relay
.
nickname
)
non_exits_without_helpers_flowctrl2_same_double_bw
+=
1
log
.
info
(
"Number of non exits with helpers that have 2 in FlowCtrl and double"
" bandwidth: %s."
,
non_exits_with_helpers_flowctrl2_double_bw
,
)
log
.
info
(
"Number of non exits with helpers that have 2 in FlowCtrl and same"
" bandwidth: %s."
,
non_exits_with_helpers_flowctrl2_same_bw
,
)
log
.
info
(
"Number of non exits without helpers that have 2 in FlowCtrl and"
" double or same bandwidth: %s."
,
non_exits_without_helpers_flowctrl2_same_double_bw
,
)
sbws/sbws.py
View file @
60fb6ee2
...
...
@@ -6,6 +6,7 @@ from requests.__version__ import __version__ as requests_version
from
stem
import
__version__
as
stem_version
import
sbws.core.cleanup
import
sbws.core.flowctrl2
import
sbws.core.generate
import
sbws.core.scanner
import
sbws.core.stats
...
...
@@ -77,6 +78,11 @@ def main():
"kw"
:
def_kwargs
,
},
"stats"
:
{
"f"
:
sbws
.
core
.
stats
.
main
,
"a"
:
def_args
,
"kw"
:
def_kwargs
},
"flowctrl2"
:
{
"f"
:
sbws
.
core
.
flowctrl2
.
main
,
"a"
:
def_args
,
"kw"
:
def_kwargs
,
},
}
try
:
if
args
.
command
not
in
known_commands
:
...
...
sbws/util/parser.py
View file @
60fb6ee2
...
...
@@ -2,6 +2,7 @@ import os
from
argparse
import
ArgumentParser
,
RawTextHelpFormatter
import
sbws.core.cleanup
import
sbws.core.flowctrl2
import
sbws.core.generate
import
sbws.core.scanner
import
sbws.core.stats
...
...
@@ -32,4 +33,5 @@ def create_parser():
sbws
.
core
.
scanner
.
gen_parser
(
sub
)
sbws
.
core
.
generate
.
gen_parser
(
sub
)
sbws
.
core
.
stats
.
gen_parser
(
sub
)
sbws
.
core
.
flowctrl2
.
gen_parser
(
sub
)
return
p
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment