mirror of
https://github.com/Kiritow/wg-ops.git
synced 2024-03-22 13:11:37 +08:00
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
|
import sys
|
||
|
import subprocess
|
||
|
import sqlite3
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
if len(sys.argv) < 3:
|
||
|
sys.stderr.write('python3 collect-metrics.py <interface> <filepath>\n')
|
||
|
exit(1)
|
||
|
|
||
|
interface_name = sys.argv[1]
|
||
|
file_path = sys.argv[2]
|
||
|
|
||
|
wg_raw_info = subprocess.check_output(["wg", "show", interface_name, "dump"]).decode().strip().split('\n')
|
||
|
if not wg_raw_info:
|
||
|
sys.stderr.write('wireguard interface {} not found.\n'.format(interface_name))
|
||
|
exit(1)
|
||
|
|
||
|
wg_raw_info = wg_raw_info[1:]
|
||
|
wg_info = [line.split('\t') for line in wg_raw_info]
|
||
|
|
||
|
db = sqlite3.connect(file_path)
|
||
|
db.row_factory = sqlite3.Row
|
||
|
conn = db.cursor()
|
||
|
conn.execute("select count(1) as n from sqlite_master where type='table' and name='t_monitor'")
|
||
|
if not conn.fetchall()[0]['n']:
|
||
|
print('Table `t_monitor` not exists. Creating one...')
|
||
|
conn.execute('''
|
||
|
CREATE TABLE t_monitor (
|
||
|
f_interface varchar(64) not null,
|
||
|
f_peer_key varchar(64) not null,
|
||
|
f_endpoint varchar(256) not null default '',
|
||
|
f_rx_bytes bigint(20) not null default 0,
|
||
|
f_tx_bytes bigint(20) not null default 0,
|
||
|
f_last_handshake timestamp,
|
||
|
f_create_time timestamp not null default current_timestamp
|
||
|
)
|
||
|
''')
|
||
|
conn.execute("CREATE INDEX k_idx_ctime on t_monitor (f_create_time)")
|
||
|
db.commit()
|
||
|
|
||
|
for info_parts in wg_info:
|
||
|
conn.execute('insert into t_monitor(f_interface, f_peer_key, f_endpoint, f_rx_bytes, f_tx_bytes, f_last_handshake) values (?, ?, ?, ?, ?, ?)',
|
||
|
(interface_name, info_parts[0], info_parts[2], info_parts[5], info_parts[6], info_parts[4]))
|
||
|
|
||
|
db.commit()
|