blob: 70359f17466370e612a3f10a0157db9c93312264 [file] [log] [blame]
Wei-Yu Chen84cbc362022-01-11 23:31:27 +08001#! /usr/bin/python
2"""
3cbrs_backup.py
4
5a tool to download log file from target eNB devices
6"""
7
8# SPDX-FileCopyrightText: © 2022 Open Networking Foundation <support@opennetworking.org>
9# SPDX-License-Identifier: Apache-2.0
10
11import argparse
12import base64
13import datetime
14import requests
15from lxml import etree
16
17parser = argparse.ArgumentParser()
18parser.add_argument("address", help="eNB IP address", type=str)
19parser.add_argument(
20 "-u", "--username", help="eNB UI login username", type=bytes, default=b"sc_femto"
21)
22parser.add_argument(
23 "-p", "--password", help="eNB UI login password", type=bytes, default=b"scHt3pp"
24)
25args = parser.parse_args()
26
27ENB_DOMAIN = f"https://{args.address}/"
28CGI_URL = ENB_DOMAIN + "setup.cgi"
29
30USERNAME = args.username
31PASSWORD = args.password
32
33# Disable SSL verification since we signed the certificate by our own
34session = requests.session()
35session.verify = False
36
37# The login payload passed to cgi gateway
38login_payload = {
39 "un": base64.b64encode(USERNAME).decode(),
40 "pw": base64.b64encode(PASSWORD).decode(),
41 "this_file": "logon.htm",
42 "next_file": "status.htm",
43 "todo": "login",
44}
45
46r = session.post(CGI_URL, data=login_payload)
47e = etree.HTML(r.text)
48
49serial_number = e.xpath("//td")[4].text
50
51download_payload = {
52 "this_file": "logsave.htm",
53 "next_file": "logsave.htm",
54 "todo": "logdownLoad",
55}
56
57with session.post(CGI_URL, data=download_payload, stream=True) as r:
58 r.raise_for_status()
59 timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
60 filename = f"{serial_number}_{timestamp}_binary.zip"
61
62 with open(filename, "wb") as f:
63 for chunk in r.iter_content(chunk_size=8192):
64 f.write(chunk)
65
66 print(f"{filename} log backup at {timestamp}.")
67
68
69text_download_payload = {
70 "this_file": "logsave.htm",
71 "next_file": "logsave.htm",
72 "todo": "TxtlogdownLoad",
73}
74
75with session.post(CGI_URL, data=text_download_payload, stream=True) as r:
76 r.raise_for_status()
77 timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
78 filename = f"{serial_number}_{timestamp}_text.zip"
79
80 with open(filename, "wb") as f:
81 for chunk in r.iter_content(chunk_size=8192):
82 f.write(chunk)
83
84 print(f"{filename} log backup at {timestamp}.")
Wei-Yu Chencb75efa2022-01-14 02:00:12 +080085
86
87clean_payload = {
88 "this_file": "logsave.htm",
89 "next_file": "logsave.htm",
90 "todo": "logClear",
91}
92
93r = session.post(CGI_URL, data=clean_payload)
94print(f"{serial_number} log cleared.")