zioinfo-mail/workspace/zioinfo-web/deploy/test_trial.py
DESKTOP-TKLFCPR\ython 11c670f2a0 refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스)
- Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포
- 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 10:09:17 +09:00

74 lines
2.6 KiB
Python

#!/usr/bin/env python3
import paramiko, time, sys
HOST = '101.79.17.164'; USER = 'root'; PASS = '1q2w3e!Q'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(HOST, username=USER, password=PASS, timeout=15)
sftp = client.open_sftp()
script = """
import urllib.request, json
BASE = "http://localhost:8001"
def api(method, path, data=None, token=None, form=False):
url = f"{BASE}{path}"
if form:
import urllib.parse
body = urllib.parse.urlencode(data).encode() if data else None
ct = "application/x-www-form-urlencoded"
else:
body = json.dumps(data).encode() if data else None
ct = "application/json"
req = urllib.request.Request(url, data=body, method=method)
req.add_header("Content-Type", ct)
if token: req.add_header("Authorization", f"Bearer {token}")
try:
resp = urllib.request.urlopen(req, timeout=10)
body_out = resp.read()
return json.loads(body_out) if body_out else {}, resp.status
except urllib.error.HTTPError as e:
body_out = e.read()
try: return json.loads(body_out), e.code
except: return {"raw": body_out.decode()[:200]}, e.code
# JSON 로그인
d, s = api("POST", "/api/auth/login", {"username":"admin","password":"1111"})
TOKEN = d.get("access_token","")
print(f"Login HTTP {s}: {'OK' if TOKEN else 'FAIL'} token={TOKEN[:20]}...")
# Trial
d2, s2 = api("POST", "/api/license/trial", {"customer":"지오정보기술 체험판","days":7}, token=TOKEN)
print(f"Trial HTTP {s2}: {json.dumps(d2, ensure_ascii=False)[:200]}")
# 상태
d3, s3 = api("GET", "/api/license/status", token=TOKEN)
print(f"Status HTTP {s3}: valid={d3.get('valid')}, edition={d3.get('edition')}, days={d3.get('days_remaining')}")
print(f" message: {d3.get('message')}")
# 이력
d4, s4 = api("GET", "/api/license/history", token=TOKEN)
cnt = len(d4) if isinstance(d4,list) else "?"
print(f"History HTTP {s4}: {cnt}")
if isinstance(d4,list) and d4:
r = d4[0]
print(f" 최신: edition={r.get('edition')}, customer={r.get('customer')}, is_trial={r.get('is_trial')}")
"""
with sftp.open('/tmp/trial2.py', 'w') as f: f.write(script)
sftp.close()
chan = client.get_transport().open_session()
chan.set_combine_stderr(True)
chan.exec_command('python3 /tmp/trial2.py 2>&1')
start = time.time()
while not chan.exit_status_ready():
if chan.recv_ready(): sys.stdout.buffer.write(chan.recv(4096)); sys.stdout.flush()
if time.time() - start > 20: break
time.sleep(0.2)
while chan.recv_ready(): sys.stdout.buffer.write(chan.recv(4096))
sys.stdout.flush()
chan.recv_exit_status()
client.close()