DPDK patches and discussions
 help / color / mirror / Atom feed
From: Nicholas Pratte <npratte@iol.unh.edu>
To: jspewock@iol.unh.edu
Cc: paul.szczepanek@arm.com, wathsala.vithanage@arm.com,
	probb@iol.unh.edu,  Luca.Vizzarro@arm.com, thomas@monjalon.net,
	juraj.linkes@pantheon.tech,  Honnappa.Nagarahalli@arm.com,
	yoan.picchi@foss.arm.com, dev@dpdk.org
Subject: Re: [PATCH v3 3/3] dts: Improve logging for interactive shells
Date: Fri, 14 Jun 2024 16:26:05 -0400	[thread overview]
Message-ID: <CAKXZ7ehitA3dR6T6NEg9R8sqMWt8aBsaTCQRipXcAEjqygjn8w@mail.gmail.com> (raw)
In-Reply-To: <20240529194910.26803-4-jspewock@iol.unh.edu>

Ran a couple test suites to observe the output. As expected,
everything works fine.

Tested-by: Nicholas Pratte <npratte@iol.unh.edu>
Reviewed-by: Nicholas Pratte <npratte@iol.unh.edu>

On Wed, May 29, 2024 at 3:49 PM <jspewock@iol.unh.edu> wrote:
>
> From: Jeremy Spewock <jspewock@iol.unh.edu>
>
> The messages being logged by interactive shells currently are using the
> same logger as the node they were created from. Because of this, when
> sending interactive commands, the logs make no distinction between when
> you are sending a command directly to the host and when you are using an
> interactive shell on the host. This change adds names to interactive
> shells so that they are able to use their own loggers with distinct
> names.
>
> Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu>
> ---
>  .../remote_session/interactive_remote_session.py         | 5 +++--
>  dts/framework/remote_session/interactive_shell.py        | 9 +++++----
>  dts/framework/testbed_model/node.py                      | 7 +++++++
>  dts/framework/testbed_model/os_session.py                | 6 ++++--
>  dts/framework/testbed_model/sut_node.py                  | 7 ++++++-
>  dts/framework/testbed_model/traffic_generator/scapy.py   | 2 +-
>  6 files changed, 26 insertions(+), 10 deletions(-)
>
> diff --git a/dts/framework/remote_session/interactive_remote_session.py b/dts/framework/remote_session/interactive_remote_session.py
> index c50790db79..4ddad4f428 100644
> --- a/dts/framework/remote_session/interactive_remote_session.py
> +++ b/dts/framework/remote_session/interactive_remote_session.py
> @@ -39,6 +39,7 @@ class InteractiveRemoteSession:
>          password: Password of the user connecting to the host. This will default to an
>              empty string if a password is not provided.
>          session: The underlying paramiko connection.
> +        node_config: The configuration of the node that this session is connected to.
>
>      Raises:
>          SSHConnectionError: There is an error creating the SSH connection.
> @@ -50,8 +51,8 @@ class InteractiveRemoteSession:
>      username: str
>      password: str
>      session: SSHClient
> +    node_config: NodeConfiguration
>      _logger: DTSLogger
> -    _node_config: NodeConfiguration
>      _transport: Transport | None
>
>      def __init__(self, node_config: NodeConfiguration, logger: DTSLogger) -> None:
> @@ -61,7 +62,7 @@ def __init__(self, node_config: NodeConfiguration, logger: DTSLogger) -> None:
>              node_config: The test run configuration of the node to connect to.
>              logger: The logger instance this session will use.
>          """
> -        self._node_config = node_config
> +        self.node_config = node_config
>          self._logger = logger
>          self.hostname = node_config.hostname
>          self.username = node_config.user
> diff --git a/dts/framework/remote_session/interactive_shell.py b/dts/framework/remote_session/interactive_shell.py
> index 148907f645..edc8f11443 100644
> --- a/dts/framework/remote_session/interactive_shell.py
> +++ b/dts/framework/remote_session/interactive_shell.py
> @@ -24,7 +24,7 @@
>      InteractiveSSHSessionDeadError,
>      InteractiveSSHTimeoutError,
>  )
> -from framework.logger import DTSLogger
> +from framework.logger import DTSLogger, get_dts_logger
>  from framework.settings import SETTINGS
>
>  from .interactive_remote_session import InteractiveRemoteSession
> @@ -69,8 +69,8 @@ class InteractiveShell(ABC):
>
>      def __init__(
>          self,
> +        name: str,
>          interactive_session: InteractiveRemoteSession,
> -        logger: DTSLogger,
>          get_privileged_command: Callable[[str], str] | None,
>          app_args: str = "",
>          timeout: float = SETTINGS.timeout,
> @@ -78,8 +78,9 @@ def __init__(
>          """Create an SSH channel during initialization.
>
>          Args:
> +            name: Name for the interactive shell to use for logging. This name will be appended to
> +                the name of the underlying node which it is running on.
>              interactive_session: The SSH session dedicated to interactive shells.
> -            logger: The logger instance this session will use.
>              get_privileged_command: A method for modifying a command to allow it to use
>                  elevated privileges. If :data:`None`, the application will not be started
>                  with elevated privileges.
> @@ -94,7 +95,7 @@ def __init__(
>          self._stdout = self._ssh_channel.makefile("r")
>          self._ssh_channel.settimeout(timeout)
>          self._ssh_channel.set_combine_stderr(True)  # combines stdout and stderr streams
> -        self._logger = logger
> +        self._logger = get_dts_logger(f"{interactive_session.node_config.name}.{name}")
>          self._timeout = timeout
>          self._app_args = app_args
>          self._start_application(get_privileged_command)
> diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
> index 74061f6262..a5beeae7e7 100644
> --- a/dts/framework/testbed_model/node.py
> +++ b/dts/framework/testbed_model/node.py
> @@ -199,6 +199,7 @@ def create_interactive_shell(
>          shell_cls: Type[InteractiveShellType],
>          timeout: float = SETTINGS.timeout,
>          privileged: bool = False,
> +        name: str = "",
>          app_args: str = "",
>      ) -> InteractiveShellType:
>          """Factory for interactive session handlers.
> @@ -210,6 +211,8 @@ def create_interactive_shell(
>              timeout: Timeout for reading output from the SSH channel. If you are reading from
>                  the buffer and don't receive any data within the timeout it will throw an error.
>              privileged: Whether to run the shell with administrative privileges.
> +            name: The name to use for the interactive application in the logs. If not specified,
> +                this will default to the name of `shell_cls`.
>              app_args: The arguments to be passed to the application.
>
>          Returns:
> @@ -218,10 +221,14 @@ def create_interactive_shell(
>          if not shell_cls.dpdk_app:
>              shell_cls.path = self.main_session.join_remote_path(shell_cls.path)
>
> +        if name == "":
> +            name = shell_cls.__name__
> +
>          return self.main_session.create_interactive_shell(
>              shell_cls,
>              timeout,
>              privileged,
> +            name,
>              app_args,
>          )
>
> diff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py
> index d5bf7e0401..1f6d8257ed 100644
> --- a/dts/framework/testbed_model/os_session.py
> +++ b/dts/framework/testbed_model/os_session.py
> @@ -134,6 +134,7 @@ def create_interactive_shell(
>          shell_cls: Type[InteractiveShellType],
>          timeout: float,
>          privileged: bool,
> +        name: str,
>          app_args: str,
>      ) -> InteractiveShellType:
>          """Factory for interactive session handlers.
> @@ -146,14 +147,15 @@ def create_interactive_shell(
>                  reading from the buffer and don't receive any data within the timeout
>                  it will throw an error.
>              privileged: Whether to run the shell with administrative privileges.
> +            name: Name for the shell to use in the logs.
>              app_args: The arguments to be passed to the application.
>
>          Returns:
>              An instance of the desired interactive application shell.
>          """
>          return shell_cls(
> -            self.interactive_session.session,
> -            self._logger,
> +            name,
> +            self.interactive_session,
>              self._get_privileged_command if privileged else None,
>              app_args,
>              timeout,
> diff --git a/dts/framework/testbed_model/sut_node.py b/dts/framework/testbed_model/sut_node.py
> index 97aa26d419..0bddef6f44 100644
> --- a/dts/framework/testbed_model/sut_node.py
> +++ b/dts/framework/testbed_model/sut_node.py
> @@ -442,6 +442,7 @@ def create_interactive_shell(
>          shell_cls: Type[InteractiveShellType],
>          timeout: float = SETTINGS.timeout,
>          privileged: bool = False,
> +        name: str = "",
>          app_parameters: str = "",
>          eal_parameters: EalParameters | None = None,
>      ) -> InteractiveShellType:
> @@ -459,6 +460,8 @@ def create_interactive_shell(
>                  reading from the buffer and don't receive any data within the timeout
>                  it will throw an error.
>              privileged: Whether to run the shell with administrative privileges.
> +            name: The name to use for the interactive application in the logs. If not specified,
> +                this will default to the name `shell_cls`.
>              eal_parameters: List of EAL parameters to use to launch the app. If this
>                  isn't provided or an empty string is passed, it will default to calling
>                  :meth:`create_eal_parameters`.
> @@ -478,7 +481,9 @@ def create_interactive_shell(
>                  self.remote_dpdk_build_dir, shell_cls.path
>              )
>
> -        return super().create_interactive_shell(shell_cls, timeout, privileged, app_parameters)
> +        return super().create_interactive_shell(
> +            shell_cls, timeout, privileged, name, app_parameters
> +        )
>
>      def bind_ports_to_driver(self, for_dpdk: bool = True) -> None:
>          """Bind all ports on the SUT to a driver.
> diff --git a/dts/framework/testbed_model/traffic_generator/scapy.py b/dts/framework/testbed_model/traffic_generator/scapy.py
> index d0e0a7c64e..5676235119 100644
> --- a/dts/framework/testbed_model/traffic_generator/scapy.py
> +++ b/dts/framework/testbed_model/traffic_generator/scapy.py
> @@ -262,7 +262,7 @@ def __init__(self, tg_node: Node, config: ScapyTrafficGeneratorConfig):
>          ), "Linux is the only supported OS for scapy traffic generation"
>
>          self.session = self._tg_node.create_interactive_shell(
> -            PythonShell, timeout=5, privileged=True
> +            PythonShell, timeout=5, privileged=True, name="ScapyXMLRPCServer"
>          )
>
>          # import libs in remote python console
> --
> 2.45.1
>

  parent reply	other threads:[~2024-06-14 20:26 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-12 17:25 [PATCH v1 0/2] Improve interactive shell output gathering jspewock
2024-03-12 17:25 ` [PATCH v1 1/2] dts: Improve output gathering in interactive shells jspewock
2024-04-03  9:00   ` Juraj Linkeš
2024-04-08 16:20     ` Jeremy Spewock
2024-04-10 10:20       ` Juraj Linkeš
2024-03-12 17:25 ` [PATCH v1 2/2] dts: Add missing docstring from XML-RPC server jspewock
2024-04-24 13:42   ` Patrick Robb
2024-05-01 16:16 ` [PATCH v2 0/3] Improve interactive shell output gathering and logging jspewock
2024-05-01 16:16   ` [PATCH v2 1/3] dts: Improve output gathering in interactive shells jspewock
2024-05-09  9:57     ` Luca Vizzarro
2024-05-13 14:58     ` Juraj Linkeš
2024-05-15 19:13       ` Jeremy Spewock
2024-05-01 16:16   ` [PATCH v2 2/3] dts: Add missing docstring from XML-RPC server jspewock
2024-05-09  9:57     ` Luca Vizzarro
2024-05-13 14:58     ` Juraj Linkeš
2024-05-01 16:16   ` [PATCH v2 3/3] dts: Improve logging for interactive shells jspewock
2024-05-09  9:57     ` Luca Vizzarro
2024-05-13 15:02     ` Juraj Linkeš
2024-05-15 19:23       ` Jeremy Spewock
2024-05-09  9:59   ` [PATCH v2 0/3] Improve interactive shell output gathering and logging Luca Vizzarro
2024-05-20 15:08     ` Nicholas Pratte
2024-05-29 19:49   ` [PATCH v3 " jspewock
2024-05-29 19:49     ` [PATCH v3 1/3] dts: Improve output gathering in interactive shells jspewock
2024-05-31 16:49       ` Luca Vizzarro
2024-06-07 13:37       ` Juraj Linkeš
2024-06-14 20:58       ` Nicholas Pratte
2024-06-17 15:00       ` Luca Vizzarro
2024-05-29 19:49     ` [PATCH v3 2/3] dts: Add missing docstring from XML-RPC server jspewock
2024-05-31 16:50       ` Luca Vizzarro
2024-06-07 13:37       ` Juraj Linkeš
2024-06-14 20:48       ` Nicholas Pratte
2024-06-17 15:06         ` Jeremy Spewock
2024-06-17 15:00       ` Luca Vizzarro
2024-05-29 19:49     ` [PATCH v3 3/3] dts: Improve logging for interactive shells jspewock
2024-05-31 16:50       ` Luca Vizzarro
2024-06-07 13:38       ` Juraj Linkeš
2024-06-14 20:26       ` Nicholas Pratte [this message]
2024-06-17 15:01       ` Luca Vizzarro
2024-06-20 17:36   ` [PATCH v4 0/3] Improve interactive shell output gathering and logging jspewock
2024-06-20 17:36     ` [PATCH v4 1/3] dts: Improve output gathering in interactive shells jspewock
2024-06-21  9:10       ` Juraj Linkeš
2024-06-20 17:36     ` [PATCH v4 2/3] dts: Add missing docstring from XML-RPC server jspewock
2024-06-21  9:12       ` Juraj Linkeš
2024-06-20 17:36     ` [PATCH v4 3/3] dts: Improve logging for interactive shells jspewock
2024-06-21  9:23       ` Juraj Linkeš
2024-06-21 15:31       ` Patrick Robb
2024-07-23 22:17     ` [PATCH v4 0/3] Improve interactive shell output gathering and logging Thomas Monjalon
2024-07-24 14:08   ` [PATCH v5 " jspewock
2024-07-24 14:08     ` [PATCH v5 1/3] dts: Improve output gathering in interactive shells jspewock
2024-07-24 14:08     ` [PATCH v5 2/3] dts: Add missing docstring from XML-RPC server jspewock
2024-07-24 14:08     ` [PATCH v5 3/3] dts: Improve logging for interactive shells jspewock
2024-07-24 18:39   ` [PATCH v6 0/3] Improve interactive shell output gathering and logging jspewock
2024-07-24 18:39     ` [PATCH v6 1/3] dts: Improve output gathering in interactive shells jspewock
2024-07-24 18:39     ` [PATCH v6 2/3] dts: Add missing docstring from XML-RPC server jspewock
2024-07-24 18:39     ` [PATCH v6 3/3] dts: Improve logging for interactive shells jspewock
2024-07-26 11:01     ` [PATCH v6 0/3] Improve interactive shell output gathering and logging Juraj Linkeš
2024-07-29 16:56       ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAKXZ7ehitA3dR6T6NEg9R8sqMWt8aBsaTCQRipXcAEjqygjn8w@mail.gmail.com \
    --to=npratte@iol.unh.edu \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=Luca.Vizzarro@arm.com \
    --cc=dev@dpdk.org \
    --cc=jspewock@iol.unh.edu \
    --cc=juraj.linkes@pantheon.tech \
    --cc=paul.szczepanek@arm.com \
    --cc=probb@iol.unh.edu \
    --cc=thomas@monjalon.net \
    --cc=wathsala.vithanage@arm.com \
    --cc=yoan.picchi@foss.arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).