changes
This commit is contained in:
@@ -10,42 +10,64 @@ from internal.liquidsoap_config_utils import generate_liquid_script
|
||||
|
||||
LOGGER = create_logger(__name__)
|
||||
|
||||
op25_process = None
|
||||
OP25_PATH = "/op25/op25/gr-op25_repeater/apps/"
|
||||
OP25_SCRIPT = "run_multi-rx_service.sh"
|
||||
_PGID_FILE = "/tmp/op25.pgid"
|
||||
|
||||
|
||||
def _save_pgid(pgid: int) -> None:
|
||||
with open(_PGID_FILE, "w") as f:
|
||||
f.write(str(pgid))
|
||||
|
||||
|
||||
def _read_pgid():
|
||||
try:
|
||||
return int(open(_PGID_FILE).read().strip())
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def _is_running() -> bool:
|
||||
pgid = _read_pgid()
|
||||
if pgid is None:
|
||||
return False
|
||||
try:
|
||||
os.killpg(pgid, 0)
|
||||
return True
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
|
||||
def create_op25_router():
|
||||
router = APIRouter()
|
||||
|
||||
@router.post("/start")
|
||||
async def start_op25():
|
||||
global op25_process
|
||||
if op25_process is None:
|
||||
try:
|
||||
op25_process = subprocess.Popen(os.path.join(OP25_PATH, OP25_SCRIPT), shell=True, preexec_fn=os.setsid, cwd=OP25_PATH)
|
||||
LOGGER.debug(op25_process)
|
||||
return {"status": "OP25 started"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
else:
|
||||
if _is_running():
|
||||
return {"status": "OP25 already running"}
|
||||
try:
|
||||
proc = subprocess.Popen(os.path.join(OP25_PATH, OP25_SCRIPT), shell=True, preexec_fn=os.setsid, cwd=OP25_PATH)
|
||||
_save_pgid(proc.pid)
|
||||
LOGGER.debug(proc)
|
||||
return {"status": "OP25 started"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
@router.post("/stop")
|
||||
async def stop_op25():
|
||||
global op25_process
|
||||
if op25_process is not None:
|
||||
try:
|
||||
os.killpg(os.getpgid(op25_process.pid), signal.SIGTERM)
|
||||
op25_process = None
|
||||
return {"status": "OP25 stopped"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
else:
|
||||
pgid = _read_pgid()
|
||||
if pgid is None or not _is_running():
|
||||
return {"status": "OP25 is not running"}
|
||||
try:
|
||||
os.killpg(pgid, signal.SIGTERM)
|
||||
os.remove(_PGID_FILE)
|
||||
return {"status": "OP25 stopped"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
@router.get("/status")
|
||||
async def get_status():
|
||||
return {"status": "running" if op25_process else "stopped"}
|
||||
return {"status": "running" if _is_running() else "stopped"}
|
||||
|
||||
@router.post("/generate-config")
|
||||
async def generate_config(generator: ConfigGenerator):
|
||||
@@ -63,13 +85,14 @@ def create_op25_router():
|
||||
devices = [DeviceConfig()]
|
||||
save_talkgroup_tags(generator.tags)
|
||||
save_whitelist(generator.whitelist)
|
||||
has_talkgroups = bool(generator.whitelist)
|
||||
trunking = TrunkingConfig(
|
||||
module="tk_p25.py",
|
||||
chans=[TrunkingChannelConfig(
|
||||
sysname=generator.systemName,
|
||||
control_channel_list=','.join(generator.channels),
|
||||
tagsFile="/configs/active.cfg.tags.tsv",
|
||||
whitelist="/configs/active.cfg.whitelist.tsv"
|
||||
control_channel_list=','.join(str(ch) for ch in generator.channels),
|
||||
tagsFile="/configs/active.cfg.tags.tsv" if has_talkgroups else None,
|
||||
whitelist="/configs/active.cfg.whitelist.tsv" if has_talkgroups else None
|
||||
)]
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user