Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed detail command issue #47 #48

Merged
merged 1 commit into from
Dec 13, 2024
Merged
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
80 changes: 65 additions & 15 deletions pygeoweaver/commands/pgw_detail.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,69 @@
"""
Detail subcommand
Detail subcommand with integrated server management.
"""

import logging
import subprocess

import requests
from pygeoweaver.constants import *

from pygeoweaver.utils import (
download_geoweaver_jar,
get_geoweaver_jar_path,
get_java_bin_path,
get_root_dir,
get_spinner,
check_os,
)
from pygeoweaver.server import (
start_on_windows,
start_on_mac_linux,
check_geoweaver_status,
stop_on_windows,
stop_on_mac_linux,
)

logger = logging.getLogger(__name__)

def ensure_server_running(force_restart=False, force_download=False):
"""
Ensure the Geoweaver server is running. If not, start it.

:param force_restart: Restart the server even if it's already running.
:param force_download: Force download of Geoweaver jar if necessary.
"""
if not force_restart and check_geoweaver_status():
logger.info("Geoweaver server is already running.")
return

logger.info("Starting Geoweaver server...")

# Determine the operating system and start accordingly
os_type = check_os()
if os_type == 3: # Windows
start_on_windows(force_restart=force_restart, force_download=force_download, exit_on_finish=False)
else: # macOS or Linux
start_on_mac_linux(force_restart=force_restart, force_download=force_download, exit_on_finish=False)

# Verify server status after starting
if not check_geoweaver_status():
raise RuntimeError("Failed to start Geoweaver server. Please check logs for details.")

def detail_workflow(workflow_id):
def detail_workflow(workflow_id, force_restart=False, force_download=False):
"""
Display detailed information about a workflow.

:param workflow_id: The ID of the workflow.
:type workflow_id: str
:param force_restart: Restart the server even if it's already running.
:param force_download: Force download of Geoweaver jar if necessary.
"""
if not workflow_id:
raise RuntimeError("Workflow id is missing")
with get_spinner(text="Getting host details..", spinner="dots"):
raise RuntimeError("Workflow ID is missing.")

# Ensure server is running before proceeding
ensure_server_running(force_restart=force_restart, force_download=force_download)

with get_spinner(text="Getting workflow details...", spinner="dots"):
download_geoweaver_jar()
process = subprocess.run(
[
Expand All @@ -46,18 +81,23 @@ def detail_workflow(workflow_id):
print("=== Error ===")
print(process.stderr)
logger.error(process.stderr)


def detail_process(process_id):
def detail_process(process_id, force_restart=False, force_download=False):
"""
Display detailed information about a process.

:param process_id: The ID of the process.
:type process_id: str
:param force_restart: Restart the server even if it's already running.
:param force_download: Force download of Geoweaver jar if necessary.
"""
if not process_id:
raise RuntimeError("Process id is missing")
with get_spinner(text="Getting host details..", spinner="dots"):
raise RuntimeError("Process ID is missing.")

# Ensure server is running before proceeding
ensure_server_running(force_restart=force_restart, force_download=force_download)

with get_spinner(text="Getting process details...", spinner="dots"):
download_geoweaver_jar()
process = subprocess.run(
[
Expand All @@ -75,16 +115,22 @@ def detail_process(process_id):
print(process.stderr)
logger.error(process.stderr)

def detail_host(host_id):
def detail_host(host_id, force_restart=False, force_download=False):
"""
Display detailed information about a host.

:param host_id: The ID of the host.
:type host_id: str
:param force_restart: Restart the server even if it's already running.
:param force_download: Force download of Geoweaver jar if necessary.
"""
if not host_id:
raise RuntimeError("Host id is missing")
with get_spinner(text="Getting host details..", spinner="dots"):
raise RuntimeError("Host ID is missing.")

# Ensure server is running before proceeding
ensure_server_running(force_restart=force_restart, force_download=force_download)

with get_spinner(text="Getting host ...", spinner="dots"):
download_geoweaver_jar()
process = subprocess.run(
[
Expand All @@ -96,22 +142,26 @@ def detail_host(host_id):
],
cwd=f"{get_root_dir()}/",
)

print(process.stdout)
if process.stderr:
print("=== Error ===")
print(process.stderr)
logger.error(process.stderr)

def get_process_code(process_id):
def get_process_code(process_id, force_restart=False, force_download=False):
"""
Get the code of a process.

:param process_id: The ID of the process.
:type process_id: str
:param force_restart: Restart the server even if it's already running.
:param force_download: Force download of Geoweaver jar if necessary.
:return: The code of the process.
:rtype: str
"""
# Ensure server is running before proceeding
ensure_server_running(force_restart=force_restart, force_download=force_download)

r = requests.post(
f"{GEOWEAVER_DEFAULT_ENDPOINT_URL}/web/detail",
data={"type": "process", "id": process_id},
Expand Down
Loading