We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Extend `aim.ext.tensorboard_tracker.run.Run` to also allow system stats, parameters, and stdout capture.
## 🚀 Feature

Allow capturing of system parameters and terminal logs by the `aim.ext.tensorboard_tracker.run.Run`, as this is great feature shouldn't be only available to the default `Run`.

### Motivation

The new feature of allowing continuous syncing from `tensorboard` files to `aim` is really nice, but because `aim.ext.tensorboard_tracker.run.Run` inherits from `BasicRun` rather than `Run`, it misses out on the ability to log the standard out, system stats and system parameters. Since `aim.ext.tensorboard_tracker.run.Run` should be a possible replacement for `Run`, I don't see a reason why this behaviour shouldn't be allowed.

It has been highlighted in Discord by @mihran113:

> The reason behind inheriting from basic run is exactly to avoid terminal log tracking and system param tracking actually, cause we don’t want to add anything else rather than what’s tracked via tensorboard. Cause there can be times when live tracking is done from a different process, and catching that process’s terminal logs and system params won’t make any sense I guess. If you’re interested you can open a PR to address those points, cause adding the possibility to enable those won’t make any harm as well.

so I believe the *default* arguments should *not* do this extra logging, but still optionally allow this behaviour. 

### Pitch

Have `aim.ext.tensorboard_tracker.run.Run` inherit from `aim.sdk.run.Run` instead of `aim.sdk.run.BasicRun`, so that it can utilise it's extra capabilities.

### Alternatives

Instead of inheritance we could change the system resource tracking be a mixin? 

Extend `aim.ext.tensorboard_tracker.run.Run` to also allow system stats, parameters, and stdout capture.
## 🚀 Feature

Allow capturing of system parameters and terminal logs by the `aim.ext.tensorboard_tracker.run.Run`, as this is great feature shouldn't be only available to the default `Run`.

### Motivation

The new feature of allowing continuous syncing from `tensorboard` files to `aim` is really nice, but because `aim.ext.tensorboard_tracker.run.Run` inherits from `BasicRun` rather than `Run`, it misses out on the ability to log the standard out, system stats and system parameters. Since `aim.ext.tensorboard_tracker.run.Run` should be a possible replacement for `Run`, I don't see a reason why this behaviour shouldn't be allowed.

It has been highlighted in Discord by @mihran113:

> The reason behind inheriting from basic run is exactly to avoid terminal log tracking and system param tracking actually, cause we don’t want to add anything else rather than what’s tracked via tensorboard. Cause there can be times when live tracking is done from a different process, and catching that process’s terminal logs and system params won’t make any sense I guess. If you’re interested you can open a PR to address those points, cause adding the possibility to enable those won’t make any harm as well.

so I believe the *default* arguments should *not* do this extra logging, but still optionally allow this behaviour. 

### Pitch

Have `aim.ext.tensorboard_tracker.run.Run` inherit from `aim.sdk.run.Run` instead of `aim.sdk.run.BasicRun`, so that it can utilise it's extra capabilities.

### Alternatives

Instead of inheritance we could change the system resource tracking be a mixin? 


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `aim/ext/tensorboard_tracker/run.py`
Content:
```
1 from typing import Optional, Union
2 
3 from aim.sdk.run import BasicRun
4 from aim.ext.tensorboard_tracker.tracker import TensorboardTracker
5 
6 from typing import TYPE_CHECKING
7 
8 if TYPE_CHECKING:
9     from aim.sdk.repo import Repo
10 
11 
12 class Run(BasicRun):
13     def __init__(self, run_hash: Optional[str] = None, *,
14                  sync_tensorboard_log_dir: str,
15                  repo: Optional[Union[str, 'Repo']] = None,
16                  experiment: Optional[str] = None,
17                  force_resume: Optional[bool] = False,
18                  ):
19         super().__init__(run_hash, repo=repo, read_only=False, experiment=experiment, force_resume=force_resume)
20         self['tb_log_directory'] = sync_tensorboard_log_dir
21         self._tensorboard_tracker = TensorboardTracker(self._tracker, sync_tensorboard_log_dir)
22         self._tensorboard_tracker.start()
23         self._resources.add_extra_resource(self._tensorboard_tracker)
24
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/aim/ext/tensorboard_tracker/run.py b/aim/ext/tensorboard_tracker/run.py
--- a/aim/ext/tensorboard_tracker/run.py
+++ b/aim/ext/tensorboard_tracker/run.py
@@ -1,6 +1,6 @@
 from typing import Optional, Union
 
-from aim.sdk.run import BasicRun
+from aim.sdk.run import Run as SdkRun
 from aim.ext.tensorboard_tracker.tracker import TensorboardTracker
 
 from typing import TYPE_CHECKING
@@ -9,14 +9,23 @@
     from aim.sdk.repo import Repo
 
 
-class Run(BasicRun):
-    def __init__(self, run_hash: Optional[str] = None, *,
-                 sync_tensorboard_log_dir: str,
-                 repo: Optional[Union[str, 'Repo']] = None,
-                 experiment: Optional[str] = None,
-                 force_resume: Optional[bool] = False,
-                 ):
-        super().__init__(run_hash, repo=repo, read_only=False, experiment=experiment, force_resume=force_resume)
+class Run(SdkRun):
+    def __init__(
+            self, run_hash: Optional[str] = None, *,
+            sync_tensorboard_log_dir: str,
+            repo: Optional[Union[str, 'Repo']] = None,
+            experiment: Optional[str] = None,
+            force_resume: Optional[bool] = False,
+            system_tracking_interval: Optional[Union[int, float]] = None,
+            log_system_params: Optional[bool] = False,
+            capture_terminal_logs: Optional[bool] = False,
+    ):
+        super().__init__(
+            run_hash, repo=repo, read_only=False, experiment=experiment, force_resume=force_resume,
+            system_tracking_interval=system_tracking_interval, log_system_params=log_system_params,
+            capture_terminal_logs=capture_terminal_logs
+        )
+
         self['tb_log_directory'] = sync_tensorboard_log_dir
         self._tensorboard_tracker = TensorboardTracker(self._tracker, sync_tensorboard_log_dir)
         self._tensorboard_tracker.start()

{"golden_diff": "diff --git a/aim/ext/tensorboard_tracker/run.py b/aim/ext/tensorboard_tracker/run.py\n--- a/aim/ext/tensorboard_tracker/run.py\n+++ b/aim/ext/tensorboard_tracker/run.py\n@@ -1,6 +1,6 @@\n from typing import Optional, Union\n \n-from aim.sdk.run import BasicRun\n+from aim.sdk.run import Run as SdkRun\n from aim.ext.tensorboard_tracker.tracker import TensorboardTracker\n \n from typing import TYPE_CHECKING\n@@ -9,14 +9,23 @@\n     from aim.sdk.repo import Repo\n \n \n-class Run(BasicRun):\n-    def __init__(self, run_hash: Optional[str] = None, *,\n-                 sync_tensorboard_log_dir: str,\n-                 repo: Optional[Union[str, 'Repo']] = None,\n-                 experiment: Optional[str] = None,\n-                 force_resume: Optional[bool] = False,\n-                 ):\n-        super().__init__(run_hash, repo=repo, read_only=False, experiment=experiment, force_resume=force_resume)\n+class Run(SdkRun):\n+    def __init__(\n+            self, run_hash: Optional[str] = None, *,\n+            sync_tensorboard_log_dir: str,\n+            repo: Optional[Union[str, 'Repo']] = None,\n+            experiment: Optional[str] = None,\n+            force_resume: Optional[bool] = False,\n+            system_tracking_interval: Optional[Union[int, float]] = None,\n+            log_system_params: Optional[bool] = False,\n+            capture_terminal_logs: Optional[bool] = False,\n+    ):\n+        super().__init__(\n+            run_hash, repo=repo, read_only=False, experiment=experiment, force_resume=force_resume,\n+            system_tracking_interval=system_tracking_interval, log_system_params=log_system_params,\n+            capture_terminal_logs=capture_terminal_logs\n+        )\n+\n         self['tb_log_directory'] = sync_tensorboard_log_dir\n         self._tensorboard_tracker = TensorboardTracker(self._tracker, sync_tensorboard_log_dir)\n         self._tensorboard_tracker.start()\n", "issue": "Extend `aim.ext.tensorboard_tracker.run.Run` to also allow system stats, parameters, and stdout capture.\n## \ud83d\ude80 Feature\r\n\r\nAllow capturing of system parameters and terminal logs by the `aim.ext.tensorboard_tracker.run.Run`, as this is great feature shouldn't be only available to the default `Run`.\r\n\r\n### Motivation\r\n\r\nThe new feature of allowing continuous syncing from `tensorboard` files to `aim` is really nice, but because `aim.ext.tensorboard_tracker.run.Run` inherits from `BasicRun` rather than `Run`, it misses out on the ability to log the standard out, system stats and system parameters. Since `aim.ext.tensorboard_tracker.run.Run` should be a possible replacement for `Run`, I don't see a reason why this behaviour shouldn't be allowed.\r\n\r\nIt has been highlighted in Discord by @mihran113:\r\n\r\n> The reason behind inheriting from basic run is exactly to avoid terminal log tracking and system param tracking actually, cause we don\u2019t want to add anything else rather than what\u2019s tracked via tensorboard. Cause there can be times when live tracking is done from a different process, and catching that process\u2019s terminal logs and system params won\u2019t make any sense I guess. If you\u2019re interested you can open a PR to address those points, cause adding the possibility to enable those won\u2019t make any harm as well.\r\n\r\nso I believe the *default* arguments should *not* do this extra logging, but still optionally allow this behaviour. \r\n\r\n### Pitch\r\n\r\nHave `aim.ext.tensorboard_tracker.run.Run` inherit from `aim.sdk.run.Run` instead of `aim.sdk.run.BasicRun`, so that it can utilise it's extra capabilities.\r\n\r\n### Alternatives\r\n\r\nInstead of inheritance we could change the system resource tracking be a mixin? \r\n\nExtend `aim.ext.tensorboard_tracker.run.Run` to also allow system stats, parameters, and stdout capture.\n## \ud83d\ude80 Feature\r\n\r\nAllow capturing of system parameters and terminal logs by the `aim.ext.tensorboard_tracker.run.Run`, as this is great feature shouldn't be only available to the default `Run`.\r\n\r\n### Motivation\r\n\r\nThe new feature of allowing continuous syncing from `tensorboard` files to `aim` is really nice, but because `aim.ext.tensorboard_tracker.run.Run` inherits from `BasicRun` rather than `Run`, it misses out on the ability to log the standard out, system stats and system parameters. Since `aim.ext.tensorboard_tracker.run.Run` should be a possible replacement for `Run`, I don't see a reason why this behaviour shouldn't be allowed.\r\n\r\nIt has been highlighted in Discord by @mihran113:\r\n\r\n> The reason behind inheriting from basic run is exactly to avoid terminal log tracking and system param tracking actually, cause we don\u2019t want to add anything else rather than what\u2019s tracked via tensorboard. Cause there can be times when live tracking is done from a different process, and catching that process\u2019s terminal logs and system params won\u2019t make any sense I guess. If you\u2019re interested you can open a PR to address those points, cause adding the possibility to enable those won\u2019t make any harm as well.\r\n\r\nso I believe the *default* arguments should *not* do this extra logging, but still optionally allow this behaviour. \r\n\r\n### Pitch\r\n\r\nHave `aim.ext.tensorboard_tracker.run.Run` inherit from `aim.sdk.run.Run` instead of `aim.sdk.run.BasicRun`, so that it can utilise it's extra capabilities.\r\n\r\n### Alternatives\r\n\r\nInstead of inheritance we could change the system resource tracking be a mixin? \r\n\n", "before_files": [{"content": "from typing import Optional, Union\n\nfrom aim.sdk.run import BasicRun\nfrom aim.ext.tensorboard_tracker.tracker import TensorboardTracker\n\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from aim.sdk.repo import Repo\n\n\nclass Run(BasicRun):\n    def __init__(self, run_hash: Optional[str] = None, *,\n                 sync_tensorboard_log_dir: str,\n                 repo: Optional[Union[str, 'Repo']] = None,\n                 experiment: Optional[str] = None,\n                 force_resume: Optional[bool] = False,\n                 ):\n        super().__init__(run_hash, repo=repo, read_only=False, experiment=experiment, force_resume=force_resume)\n        self['tb_log_directory'] = sync_tensorboard_log_dir\n        self._tensorboard_tracker = TensorboardTracker(self._tracker, sync_tensorboard_log_dir)\n        self._tensorboard_tracker.start()\n        self._resources.add_extra_resource(self._tensorboard_tracker)\n", "path": "aim/ext/tensorboard_tracker/run.py"}], "after_files": [{"content": "from typing import Optional, Union\n\nfrom aim.sdk.run import Run as SdkRun\nfrom aim.ext.tensorboard_tracker.tracker import TensorboardTracker\n\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from aim.sdk.repo import Repo\n\n\nclass Run(SdkRun):\n    def __init__(\n            self, run_hash: Optional[str] = None, *,\n            sync_tensorboard_log_dir: str,\n            repo: Optional[Union[str, 'Repo']] = None,\n            experiment: Optional[str] = None,\n            force_resume: Optional[bool] = False,\n            system_tracking_interval: Optional[Union[int, float]] = None,\n            log_system_params: Optional[bool] = False,\n            capture_terminal_logs: Optional[bool] = False,\n    ):\n        super().__init__(\n            run_hash, repo=repo, read_only=False, experiment=experiment, force_resume=force_resume,\n            system_tracking_interval=system_tracking_interval, log_system_params=log_system_params,\n            capture_terminal_logs=capture_terminal_logs\n        )\n\n        self['tb_log_directory'] = sync_tensorboard_log_dir\n        self._tensorboard_tracker = TensorboardTracker(self._tracker, sync_tensorboard_log_dir)\n        self._tensorboard_tracker.start()\n        self._resources.add_extra_resource(self._tensorboard_tracker)\n", "path": "aim/ext/tensorboard_tracker/run.py"}]}