Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 12 additions & 11 deletions modules/alert_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from modules.module import MtcModule
from mypylib.mypylib import get_timestamp, print_table, color_print
from mytoncore import get_hostname, signed_int_to_hex64
from mytonctrl.console_cmd import add_command, check_usage_one_arg, check_usage_two_args
from mytonctrl.utils import timestamp2utcdatetime


Expand Down Expand Up @@ -333,15 +334,15 @@ def _is_alert_active(self, alert_name: str) -> bool:
return self.get_alert_from_db(alert_name).get('active', False)

def enable_alert(self, args):
if len(args) != 1:
raise Exception("Usage: enable_alert <alert_name>")
if not check_usage_one_arg("enable_alert", args):
return
alert_name = args[0]
self.set_alert_enabled(alert_name, True)
color_print("enable_alert - {green}OK{endc}")

def disable_alert(self, args):
if len(args) != 1:
raise Exception("Usage: disable_alert <alert_name>")
if not check_usage_one_arg("disable_alert", args):
return
alert_name = args[0]
self.set_alert_enabled(alert_name, False)
color_print("disable_alert - {green}OK{endc}")
Expand All @@ -360,8 +361,8 @@ def test_alert(self, args):
self.send_message('Test alert')

def setup_alert_bot(self, args):
if len(args) != 2:
raise Exception("Usage: setup_alert_bot <bot_token> <chat_id>")
if not check_usage_two_args("setup_alert_bot", args):
return
self.token = args[0]
self.chat_id = args[1]
init_alerts()
Expand Down Expand Up @@ -602,8 +603,8 @@ def check_status(self):
self.local.try_function(self.check_online_collators)

def add_console_commands(self, console):
console.AddItem("enable_alert", self.enable_alert, self.local.translate("enable_alert_cmd"))
console.AddItem("disable_alert", self.disable_alert, self.local.translate("disable_alert_cmd"))
console.AddItem("list_alerts", self.print_alerts, self.local.translate("list_alerts_cmd"))
console.AddItem("test_alert", self.test_alert, self.local.translate("test_alert_cmd"))
console.AddItem("setup_alert_bot", self.setup_alert_bot, self.local.translate("setup_alert_bot_cmd"))
add_command(self.local, console, "enable_alert", self.enable_alert)
add_command(self.local, console, "disable_alert", self.disable_alert)
add_command(self.local, console, "list_alerts", self.print_alerts)
add_command(self.local, console, "test_alert", self.test_alert)
add_command(self.local, console, "setup_alert_bot", self.setup_alert_bot)
15 changes: 7 additions & 8 deletions modules/backups.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from typing import Optional

from modules.module import MtcModule
from mytonctrl.console_cmd import add_command, check_usage_two_args, check_usage_args_min_max_len
from mypylib.mypylib import color_print, ip2int, run_as_root, parse
from mytoncore.utils import get_package_resource_path
from mytonctrl.utils import get_current_user, pop_user_from_args
Expand Down Expand Up @@ -38,10 +39,9 @@ def run_create_backup(args, user: Optional[str] = None):
with get_package_resource_path('mytonctrl', 'scripts/create_backup.sh') as backup_script_path:
return subprocess.run(["bash", backup_script_path, "-u", user] + args, timeout=5)

def create_backup(self, args: list) -> typing.Union[int, None]:
if len(args) > 3:
color_print("{red}Bad args. Usage:{endc} create_backup [filename] [-u <user>]")
return None
def create_backup(self, args):
if not check_usage_args_min_max_len("create_backup", args, 0, 3):
return
tmp_dir = self.create_tmp_ton_dir()
command_args = ["-m", self.ton.local.buffer.my_work_dir, "-t", tmp_dir]
user = pop_user_from_args(args)
Expand All @@ -64,8 +64,7 @@ def run_restore_backup(args, user: Optional[str] = None):
return run_as_root(["bash", restore_script_path, "-u", user] + args)

def restore_backup(self, args):
if len(args) == 0 or len(args) > 5:
color_print("{red}Bad args. Usage:{endc} restore_backup <filename> [-y] [--skip-create-backup] [-u <user>]")
if not check_usage_args_min_max_len('restore_backup', args, 1, 5):
return
user = pop_user_from_args(args)
if '-y' not in args:
Expand Down Expand Up @@ -99,5 +98,5 @@ def restore_backup(self, args):
color_print("restore_backup - {red}Error{endc}")

def add_console_commands(self, console):
console.AddItem("create_backup", self.create_backup, self.local.translate("create_backup_cmd"))
console.AddItem("restore_backup", self.restore_backup, self.local.translate("restore_backup_cmd"))
add_command(self.local, console, "create_backup", self.create_backup)
add_command(self.local, console, "restore_backup", self.restore_backup)
9 changes: 5 additions & 4 deletions modules/btc_teleport.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
from typing import Optional

from modules.module import MtcModule
from mypylib.mypylib import run_as_root, color_print

from mytonctrl.console_cmd import add_command, check_usage_args_min_max_len
from mypylib.mypylib import run_as_root
from mytoncore.utils import get_package_resource_path
from mytonctrl.utils import get_current_user

Expand Down Expand Up @@ -91,8 +93,7 @@ def run_remove_btc_teleport(args):
return run_as_root(["bash", script_path] + args)

def remove_btc_teleport(self, args: list):
if len(args) > 1:
color_print("{red}Bad args. Usage:{endc} remove_btc_teleport [--force]")
if not check_usage_args_min_max_len("remove_btc_teleport", args, min_len=0, max_len=1):
return
if '--force' not in args:
if -1 < self.ton.GetValidatorIndex() < self.ton.GetConfig34()['mainValidators']:
Expand All @@ -104,4 +105,4 @@ def remove_btc_teleport(self, args: list):
self.local.add_log('Removed btc_teleport', 'info')

def add_console_commands(self, console):
console.AddItem("remove_btc_teleport", self.remove_btc_teleport, self.local.translate("remove_btc_teleport_cmd"))
add_command(self.local, console, "remove_btc_teleport", self.remove_btc_teleport)
47 changes: 20 additions & 27 deletions modules/collator.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from modules.module import MtcModule
from mypylib import color_print, print_table
from mytoncore import b642hex, signed_int_to_hex64, shard_prefix_len, hex_shard_to_int, shard_prefix, shard_is_ancestor
from mytonctrl.console_cmd import check_usage_args_min_len, add_command, check_usage_no_args, check_usage_args_lens
from mytonctrl.utils import pop_arg_from_args


Expand Down Expand Up @@ -44,9 +45,7 @@ def _check_input_shards(node_shards: list, shards_need_to_add: list, monitor_min
def setup_collator(self, args: list):
from mytoninstaller.mytoninstaller import set_node_argument
from mytoninstaller.node_args import get_node_args

if not args:
color_print("{red}Bad args. Usage:{endc} setup_collator [--force] [--adnl <ADNL address>] <shard1> [shard2] ...")
if not check_usage_args_min_len("setup_collator", args, 1):
return
force = '--force' in args
args.remove('--force') if '--force' in args else None
Expand Down Expand Up @@ -81,6 +80,8 @@ def setup_collator(self, args: list):
color_print("setup_collator - {green}OK{endc}")

def stop_collator(self, args: list):
if not check_usage_args_lens("stop_collator", args, [0, 2]):
return
if not args:
text = f"{{red}}WARNING: This action will stop and delete all local collation broadcasts from this node for all shards.{{endc}}\n"
color_print(text)
Expand All @@ -104,17 +105,12 @@ def stop_collator(self, args: list):
color_print("stop_collator - {green}OK{endc}")
return

if len(args) == 2:
adnl_addr, shard_str = args
if ':' not in shard_str:
color_print("{red}Bad args. Usage:{endc} stop_collator <adnl_id> <workchain>:<shard_hex>")
return
shard_id = hex_shard_to_int(shard_str)
workchain = int(shard_id['workchain'])
shard_int = int(shard_id['shard'])
else:
color_print("{red}Bad args. Usage:{endc} stop_collator <adnl_id> <workchain>:<shard_hex>")
return
adnl_addr, shard_str = args
if ':' not in shard_str:
raise Exception(f"Invalid shard: {shard_str}, use format <workchain>:<shard_hex>")
Copy link

Copilot AI Dec 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error message uses angle brackets <> inconsistently with the usage format pattern elsewhere in the codebase. For consistency with other usage strings, it should match the established convention (which typically uses angle brackets for required parameters in usage strings but not in error messages).

Suggested change
raise Exception(f"Invalid shard: {shard_str}, use format <workchain>:<shard_hex>")
raise Exception(f"Invalid shard: {shard_str}, use format workchain:shard_hex")

Copilot uses AI. Check for mistakes.
shard_id = hex_shard_to_int(shard_str)
workchain = int(shard_id['workchain'])
shard_int = int(shard_id['shard'])

res = self.ton.validatorConsole.Run(f"del-collator {adnl_addr} {workchain} {shard_int}")
if 'successfully removed collator' not in res.lower():
Expand All @@ -136,8 +132,7 @@ def print_collators(self, args: list = None):
print_table(table)

def add_validator_to_collation_wl(self, args: list):
if len(args) < 1:
color_print("{red}Bad args. Usage:{endc} add_validator_to_collation_wl <adnl> [adnl2] [adnl3] ...")
if not check_usage_args_min_len("add_validator_to_collation_wl", args, 1):
return
self.ton.validatorConsole.Run(f"collator-whitelist-enable 1")
self.local.add_log("Collation whitelist enabled")
Expand All @@ -148,8 +143,7 @@ def add_validator_to_collation_wl(self, args: list):
color_print("add_validator_to_collation_wl - {green}OK{endc}")

def delete_validator_from_collation_wl(self, args: list):
if len(args) < 1:
color_print("{red}Bad args. Usage:{endc} delete_validator_from_collation_wl <adnl> [adnl2] [adnl3] ...")
if not check_usage_args_min_len("delete_validator_from_collation_wl", args, 1):
return
for adnl_addr in args:
result = self.ton.validatorConsole.Run(f"collator-whitelist-del {adnl_addr}")
Expand All @@ -158,8 +152,7 @@ def delete_validator_from_collation_wl(self, args: list):
color_print("delete_validator_from_collation_wl - {green}OK{endc}")

def disable_collation_validator_wl(self, args: list):
if len(args) != 0:
color_print("{red}Bad args. Usage:{endc} disable_collation_validator_wl")
if not check_usage_no_args("disable_collation_wl", args):
return
result = self.ton.validatorConsole.Run(f"collator-whitelist-enable 0")
if 'success' not in result:
Expand All @@ -186,10 +179,10 @@ def check_disable(self):


def add_console_commands(self, console):
console.AddItem("setup_collator", self.setup_collator, self.local.translate("setup_collator_cmd"))
console.AddItem("print_local_collators", self.print_collators, self.local.translate("print_local_collators_cmd"))
console.AddItem("add_validator_to_collation_wl", self.add_validator_to_collation_wl, self.local.translate("add_validator_to_collation_wl_cmd"))
console.AddItem("delete_validator_from_collation_wl", self.delete_validator_from_collation_wl, self.local.translate("delete_validator_from_collation_wl_cmd"))
console.AddItem("disable_collation_wl", self.disable_collation_validator_wl, self.local.translate("disable_collation_validator_wl_cmd"))
console.AddItem("print_collation_whitelist", self.print_collation_validators_whitelist, self.local.translate("print_collation_validators_whitelist_cmd"))
console.AddItem("stop_collator", self.stop_collator, self.local.translate("stop_collator_cmd"))
add_command(self.local, console, "setup_collator", self.setup_collator)
add_command(self.local, console, "print_local_collators", self.print_collators)
add_command(self.local, console, "add_validator_to_collation_wl", self.add_validator_to_collation_wl)
add_command(self.local, console, "delete_validator_from_collation_wl", self.delete_validator_from_collation_wl)
add_command(self.local, console, "disable_collation_wl", self.disable_collation_validator_wl)
add_command(self.local, console, "print_collation_whitelist", self.print_collation_validators_whitelist)
add_command(self.local, console, "stop_collator", self.stop_collator)
12 changes: 6 additions & 6 deletions modules/collator_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from mypylib.mypylib import color_print
from modules.module import MtcModule
from mytonctrl.console_cmd import add_command, check_usage_one_arg


class CollatorConfigModule(MtcModule):
Expand Down Expand Up @@ -47,15 +48,14 @@ def add_collator_config_to_vc(self, config: dict):
return 'success' in result, result

def set_collator_config(self, args):
if len(args) != 1:
color_print("{red}Bad args. Usage:{endc} set_collator_config <path/url>")
if not check_usage_one_arg("set_collation_config", args):
return
location = args[0]
config = self.get_config(location)
self.ton.set_collator_config(location)
added, msg = self.add_collator_config_to_vc(config)
if not added:
print(f'Failed to add collator config to validator console: {msg}')
print(f'Failed to add collation config to validator console: {msg}')
color_print("set_collator_config - {red}ERROR{endc}")
return
color_print("set_collator_config - {green}OK{endc}")
Expand Down Expand Up @@ -86,6 +86,6 @@ def update_collator_config(self, args):
color_print("update_collator_config - {green}OK{endc}")

def add_console_commands(self, console):
console.AddItem("set_collation_config", self.set_collator_config, self.local.translate("set_collation_config_cmd"))
console.AddItem("update_collation_config", self.update_collator_config, self.local.translate("update_collation_config_cmd"))
console.AddItem("print_collation_config", self.get_collator_config, self.local.translate("print_collation_config_cmd"))
add_command(self.local, console, "set_collation_config", self.set_collator_config)
add_command(self.local, console, "update_collation_config", self.update_collator_config)
add_command(self.local, console, "print_collation_config", self.get_collator_config)
Loading
Loading