Skip to content

Commit 4e36b89

Browse files
committed
enable logs and status for plugins
1 parent 6f9a1e5 commit 4e36b89

File tree

4 files changed

+51
-4
lines changed

4 files changed

+51
-4
lines changed

src/warnet/constants.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
KUBE_INTERNAL_NAMESPACES = ["kube-node-lease", "kube-public", "kube-system", "kubernetes-dashboard"]
1919
HELM_COMMAND = "helm upgrade --install"
2020

21+
MISSION_TAG = "mission"
2122
TANK_MISSION = "tank"
2223
COMMANDER_MISSION = "commander"
2324
PLUGIN_MISSION = "plugin"
25+
LIGHTNING_MISSION = "lightning"
2426

27+
CONTAINER_TAG = "container"
2528
BITCOINCORE_CONTAINER = "bitcoincore"
2629
COMMANDER_CONTAINER = "commander"
2730

src/warnet/control.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import io
2+
import itertools
23
import json
34
import os
45
import subprocess
@@ -23,7 +24,6 @@
2324
COMMANDER_CHART,
2425
COMMANDER_CONTAINER,
2526
COMMANDER_MISSION,
26-
PLUGIN_MISSION,
2727
TANK_MISSION,
2828
)
2929
from .k8s import (
@@ -41,6 +41,7 @@
4141
wait_for_pod,
4242
write_file_to_container,
4343
)
44+
from .plugins import get_plugin_missions, get_plugin_primary_containers
4445
from .process import run_command, stream_command
4546

4647
console = Console()
@@ -366,7 +367,8 @@ def format_pods(pods: list[V1Pod]) -> list[str]:
366367
pod_list = []
367368
formatted_commanders = format_pods(get_mission(COMMANDER_MISSION))
368369
formatted_tanks = format_pods(get_mission(TANK_MISSION))
369-
formatted_plugins = format_pods(get_mission(PLUGIN_MISSION))
370+
plugin_pods = [get_mission(mission) for mission in get_plugin_missions()]
371+
formatted_plugins = format_pods(list(itertools.chain.from_iterable(plugin_pods)))
370372
pod_list.extend(formatted_commanders)
371373
pod_list.extend(formatted_tanks)
372374
pod_list.extend(formatted_plugins)
@@ -395,6 +397,7 @@ def format_pods(pods: list[V1Pod]) -> list[str]:
395397
try:
396398
pod = get_pod(pod_name, namespace=namespace)
397399
eligible_container_names = [BITCOINCORE_CONTAINER, COMMANDER_CONTAINER]
400+
eligible_container_names.extend(get_plugin_primary_containers())
398401
available_container_names = [container.name for container in pod.spec.containers]
399402
container_name = next(
400403
(

src/warnet/plugins.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from inquirer.themes import GreenPassion
1515

1616
from warnet.constants import (
17+
CONTAINER_TAG,
18+
MISSION_TAG,
1719
PLUGIN_YAML,
1820
PLUGINS_LABEL,
1921
WARNET_USER_DIR_ENV_VAR,
@@ -196,3 +198,11 @@ def get_plugins_with_status(plugin_dir: Optional[Path] = None) -> list[tuple[Pat
196198
]
197199
plugins = [plugin_dir for plugin_dir in candidates if any(plugin_dir.glob("plugin.yaml"))]
198200
return [(plugin, check_if_plugin_enabled(plugin)) for plugin in plugins]
201+
202+
203+
def get_plugin_missions() -> list[str]:
204+
return [getattr(module, MISSION_TAG.upper(), None) for module in imported_modules.values()]
205+
206+
207+
def get_plugin_primary_containers() -> list[str]:
208+
return [getattr(module, CONTAINER_TAG.upper(), None) for module in imported_modules.values()]

src/warnet/status.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import itertools
12
import sys
23

34
import click
@@ -8,8 +9,10 @@
89
from rich.text import Text
910
from urllib3.exceptions import MaxRetryError
1011

12+
from .constants import COMMANDER_MISSION, TANK_MISSION
1113
from .k8s import get_mission
1214
from .network import _connected
15+
from .plugins import get_plugin_missions
1316

1417

1518
@click.command()
@@ -20,6 +23,7 @@ def status():
2023
try:
2124
tanks = _get_tank_status()
2225
scenarios = _get_deployed_scenarios()
26+
plugins = _get_plugin_status()
2327
except ConfigException as e:
2428
print(e)
2529
print(
@@ -65,6 +69,20 @@ def status():
6569
else:
6670
table.add_row("Scenario", "No active scenarios", "")
6771

72+
# Add a separator if there are plugins
73+
if plugins:
74+
table.add_row("", "", "")
75+
76+
# Add plugins to the table
77+
active_plugins = 0
78+
if plugins:
79+
for plugin in plugins:
80+
table.add_row("Plugin", plugin["name"], plugin["status"], plugin["namespace"])
81+
if plugin["status"] == "running" or plugin["status"] == "pending":
82+
active_plugins += 1
83+
else:
84+
table.add_row("Plugin", "No active plugins", "")
85+
6886
# Create a panel to wrap the table
6987
panel = Panel(
7088
table,
@@ -81,12 +99,13 @@ def status():
8199
summary = Text()
82100
summary.append(f"\nTotal Tanks: {len(tanks)}", style="bold cyan")
83101
summary.append(f" | Active Scenarios: {active}", style="bold green")
102+
summary.append(f" | Active Plugins: {active_plugins}", style="bold green")
84103
console.print(summary)
85104
_connected(end="\r")
86105

87106

88107
def _get_tank_status():
89-
tanks = get_mission("tank")
108+
tanks = get_mission(TANK_MISSION)
90109
return [
91110
{
92111
"name": tank.metadata.name,
@@ -97,8 +116,20 @@ def _get_tank_status():
97116
]
98117

99118

119+
def _get_plugin_status():
120+
plugin_pods = [get_mission(mission) for mission in get_plugin_missions()]
121+
return [
122+
{
123+
"name": pod.metadata.name,
124+
"status": pod.status.phase.lower(),
125+
"namespace": pod.metadata.namespace,
126+
}
127+
for pod in list(itertools.chain.from_iterable(plugin_pods)) # flatten
128+
]
129+
130+
100131
def _get_deployed_scenarios():
101-
commanders = get_mission("commander")
132+
commanders = get_mission(COMMANDER_MISSION)
102133
return [
103134
{
104135
"name": c.metadata.name,

0 commit comments

Comments
 (0)