You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Splunk_Deploiement/apps/trackme/lib/trackme_compress_exec.py

58 lines
1.4 KiB

#!/usr/bin/env python
# coding=utf-8
"""Compression execution helpers used by TrackMe backup/restore.
Current backend: zstd via system binary if available.
"""
import os
import shutil
import subprocess
from typing import List, Optional
def _resolve_zstd_cmd() -> str:
return os.environ.get("TRACKME_ZSTD_CMD", "zstd")
def _zstd_argv() -> List[str]:
try:
env_path = shutil.which("env")
if os.name != "nt" and env_path:
return [env_path, _resolve_zstd_cmd()]
except Exception:
pass
return [_resolve_zstd_cmd()]
def is_available() -> bool:
if shutil.which(_resolve_zstd_cmd()) is None:
return False
try:
subprocess.run(_zstd_argv() + ["--version"], check=True, timeout=10, capture_output=True)
return True
except Exception:
return False
def compress_tar(tar_path: str) -> None:
subprocess.run(_zstd_argv() + ["-f", tar_path], check=True)
def decompress(src_zst_path: str, out_tar_path: str, cwd: Optional[str] = None) -> subprocess.CompletedProcess:
return subprocess.run(
_zstd_argv() + ["-d", os.path.abspath(src_zst_path), "-o", out_tar_path],
capture_output=True,
text=True,
check=True,
cwd=cwd,
)
def test_archive(path: str) -> int:
proc = subprocess.run(_zstd_argv() + ["-t", path], capture_output=True)
return proc.returncode