Skip to content

Commit

Permalink
Log command start and finish (#210)
Browse files Browse the repository at this point in the history
* Log command start and finish

* Fix group name instead of command name in logs

* Add exception message to logs for chadmin
  • Loading branch information
kirillgarbar authored Jul 22, 2024
1 parent 6619922 commit f08e610
Show file tree
Hide file tree
Showing 27 changed files with 156 additions and 38 deletions.
15 changes: 8 additions & 7 deletions ch_tools/chadmin/chadmin_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

import cloup

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.cli.move_group import move_group
from ch_tools.common import logging
from ch_tools.common.config import load_config

warnings.filterwarnings(action="ignore", message="Python 3.6 is no longer supported")
Expand Down Expand Up @@ -54,6 +54,7 @@

@cloup.group(
"chadmin",
cls=Chadmin,
help="ClickHouse administration tool.",
context_settings=CONTEXT_SETTINGS,
)
Expand Down Expand Up @@ -82,8 +83,6 @@ def cli(ctx, format_, settings, timeout, port, debug):
"""ClickHouse administration tool."""
config = load_config()

logging.configure(config["loguru"], "chadmin")

if port:
config["clickhouse"]["port"] = port
if timeout:
Expand Down Expand Up @@ -137,10 +136,12 @@ def cli(ctx, format_, settings, timeout, port, debug):
zookeeper_group,
]

for section_title, entries in {"Commands": commands, "Groups": groups}.items():
section = cloup.Section(section_title)
for entry in entries:
cli.add_command(entry, section=section)
section = cloup.Section("Commands")
for command in commands:
cli.add_command(command, section=section)
section = cloup.Section("Groups")
for group in groups:
cli.add_group(group, section=section)


def main():
Expand Down
78 changes: 78 additions & 0 deletions ch_tools/chadmin/cli/chadmin_group.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
from functools import wraps
from typing import Optional

import click
import cloup

from ch_tools import __version__
from ch_tools.common import logging

# pylint: disable=too-many-ancestors


class Chadmin(cloup.Group):
def add_command(
self,
cmd: click.Command,
name: Optional[str] = None,
section: Optional[cloup.Section] = None,
fallback_to_default_section: bool = True,
) -> None:
if cmd.callback is None:
super().add_command(
cmd,
name=name,
section=section,
fallback_to_default_section=fallback_to_default_section,
)
return

cmd_callback = cmd.callback

@wraps(cmd_callback)
@cloup.pass_context
def wrapper(ctx, *a, **kw):
logging.configure(
ctx.obj["config"]["loguru"], "chadmin", {"cmd_name": cmd.name}
)

logging.debug(
"Executing command '{}', params: {}, args: {}, version: {}",
cmd.name,
{
**ctx.parent.params,
**ctx.params,
},
ctx.args,
__version__,
)

try:
result = cmd_callback(*a, **kw)
logging.debug("Command '{}' completed", cmd.name)
except Exception:
logging.exception("Command '{}' failed with error:", cmd.name)

return result

cmd.callback = wrapper
super().add_command(
cmd,
name=name,
section=section,
fallback_to_default_section=fallback_to_default_section,
)

def add_group(
self,
cmd: click.Group,
name: Optional[str] = None,
section: Optional[cloup.Section] = None,
fallback_to_default_section: bool = True,
) -> None:
super().add_command(
cmd,
name=name,
section=section,
fallback_to_default_section=fallback_to_default_section,
)
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/chs3_backup_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from click import ClickException, argument, group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.backup import unfreeze_backup
from ch_tools.common import logging
from ch_tools.common.backup import (
Expand All @@ -12,7 +13,7 @@
from ch_tools.common.utils import clear_empty_directories_recursively


@group("chs3-backup")
@group("chs3-backup", cls=Chadmin)
def chs3_backup_group():
"""Commands to manage ClickHouse over S3 backups (backups for data stored in S3)."""
pass
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/crash_log_group.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from click import group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.utils import execute_query
from ch_tools.common import logging
from ch_tools.common.clickhouse.config import get_cluster_name


@group("crash-log")
@group("crash-log", cls=Chadmin)
def crash_log_group():
"""
Commands for retrieving information from system.crash_log.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/data_store_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from click import group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.clickhouse_disks import (
CLICKHOUSE_METADATA_PATH,
CLICKHOUSE_PATH,
Expand All @@ -18,7 +19,7 @@
from ch_tools.common.process_pool import WorkerTask, execute_tasks_in_parallel


@group("data-store")
@group("data-store", cls=Chadmin)
def data_store_group():
"""
Commands for manipulating data stored by ClickHouse.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/database_group.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
from cloup import argument, group, option, option_group, pass_context
from cloup.constraints import RequireAtLeast

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.utils import execute_query
from ch_tools.common import logging
from ch_tools.common.clickhouse.config import get_cluster_name


@group("database")
@group("database", cls=Chadmin)
def database_group():
"""Commands to manage databases."""
pass
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/dictionary_group.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from click import group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.dictionary import list_dictionaries, reload_dictionary
from ch_tools.common import logging
from ch_tools.common.cli.formatting import print_response


@group("dictionary")
@group("dictionary", cls=Chadmin)
def dictionary_group():
"""Commands to manage external dictionaries."""
pass
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/disk_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@

from click import group, option

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.common import logging


@group("disks")
@group("disks", cls=Chadmin)
def disks_group():
"""Commands to manage disks."""
pass
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/merge_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from click import group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.process import list_merges
from ch_tools.common.cli.formatting import (
format_bytes,
Expand All @@ -21,7 +22,7 @@
}


@group("merge")
@group("merge", cls=Chadmin)
def merge_group():
"""Commands to manage merges (retrieve information from system.merges)."""
pass
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/move_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from cloup import group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.process import list_moves
from ch_tools.common.cli.formatting import format_bytes, format_float, print_response
from ch_tools.common.clickhouse.config import get_cluster_name
Expand All @@ -12,7 +13,7 @@
}


@group("move")
@group("move", cls=Chadmin)
def move_group():
"""Commands to manage moves (retrieve information from system.moves)."""
pass
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/mutation_group.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from click import argument, group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.utils import execute_query
from ch_tools.common import logging
from ch_tools.common.clickhouse.config import get_cluster_name


@group("mutation")
@group("mutation", cls=Chadmin)
def mutation_group():
"""
Commands to manage mutations.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/object_storage_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from click import Context, group, option, pass_context
from humanfriendly import format_size

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.common.cli.formatting import print_response
from ch_tools.common.cli.parameters import TimeSpanParamType
from ch_tools.common.clickhouse.config import get_clickhouse_config
Expand All @@ -17,7 +18,7 @@
ORPHANED_OBJECTS_SIZE_FIELD = "orphaned_objects_size"


@group("object-storage")
@group("object-storage", cls=Chadmin)
@option(
"-d",
"--disk",
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/part_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from cloup import Choice, group, option, option_group, pass_context
from cloup.constraints import RequireAtLeast

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.part import (
attach_part,
detach_part,
Expand All @@ -22,7 +23,7 @@
}


@group("part")
@group("part", cls=Chadmin)
def part_group():
"""
Commands to manage data parts.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/part_log_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from click import Choice, group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.part import list_part_log
from ch_tools.common.cli.formatting import format_bytes, print_response
from ch_tools.common.clickhouse.config import get_cluster_name
Expand All @@ -13,7 +14,7 @@
}


@group("part-log")
@group("part-log", cls=Chadmin)
def part_log_group():
"""
Commands for retrieving information from system.part_log.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/partition_group.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from cloup import Choice, group, option, option_group, pass_context
from cloup.constraints import RequireAtLeast

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.partition import (
attach_partition,
detach_partition,
Expand All @@ -13,7 +14,7 @@
from ch_tools.common.cli.parameters import BytesParamType


@group("partition")
@group("partition", cls=Chadmin)
def partition_group():
"""
Commands to manage partitions.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/process_group.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from cloup import Choice, argument, group, option, option_group, pass_context
from cloup.constraints import RequireAtLeast

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.process import get_process, kill_process, list_processes
from ch_tools.chadmin.internal.utils import format_query
from ch_tools.common.cli.formatting import print_response
Expand All @@ -11,7 +12,7 @@
}


@group("process")
@group("process", cls=Chadmin)
def process_group():
"""
Commands to manage processes.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/query_log_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

from click import Choice, argument, group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.utils import execute_query
from ch_tools.common import logging
from ch_tools.common.clickhouse.config import get_cluster_name


@group("query-log")
@group("query-log", cls=Chadmin)
def query_log_group():
"""
Commands for retrieving information from system.query_log.
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/replica_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
)
from cloup.constraints import AnySet, If, RequireAtLeast, accept_none, require_all

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.table_replica import (
get_table_replica,
list_table_replicas,
Expand All @@ -26,7 +27,7 @@
from ch_tools.common.process_pool import WorkerTask, execute_tasks_in_parallel


@group("replica")
@group("replica", cls=Chadmin)
def replica_group():
"""Commands to manage table replicas."""
pass
Expand Down
3 changes: 2 additions & 1 deletion ch_tools/chadmin/cli/replicated_fetch_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from click import group, option, pass_context

from ch_tools.chadmin.cli.chadmin_group import Chadmin
from ch_tools.chadmin.internal.process import list_replicated_fetches
from ch_tools.common.cli.formatting import (
format_bytes,
Expand All @@ -18,7 +19,7 @@
}


@group("replicated-fetch")
@group("replicated-fetch", cls=Chadmin)
def replicated_fetch_group():
"""Commands to manage fetches (retrieve information from system.replicated_fetches)."""
pass
Expand Down
Loading

0 comments on commit f08e610

Please sign in to comment.