Update SQLAlchemy Settings

This commit is contained in:
Donald Zou 2025-05-24 18:25:52 +08:00
parent be10a644a0
commit 9ffb7f54c7
9 changed files with 160 additions and 153 deletions

View File

@ -1189,14 +1189,14 @@ def peerInformationBackgroundThread():
with app.app_context(): with app.app_context():
for c in WireguardConfigurations.values(): for c in WireguardConfigurations.values():
if c.getStatus(): if c.getStatus():
try: # try:
c.getPeersTransfer() c.getPeersTransfer()
c.getPeersLatestHandshake() c.getPeersLatestHandshake()
c.getPeersEndpoint() c.getPeersEndpoint()
c.getPeersList() c.getPeersList()
c.getRestrictedPeersList() c.getRestrictedPeersList()
except Exception as e: # except Exception as e:
print(f"[WGDashboard] Background Thread #1 Error: {str(e)}", flush=True) # print(f"[WGDashboard] Background Thread #1 Error: {str(e)}", flush=True)
time.sleep(10) time.sleep(10)
def peerJobScheduleBackgroundThread(): def peerJobScheduleBackgroundThread():

View File

@ -1,9 +1,7 @@
""" """
AmneziaWG Configuration AmneziaWG Configuration
""" """
import re import random, sqlalchemy, os, subprocess, re, uuid
import sqlalchemy
from .PeerJobs import PeerJobs from .PeerJobs import PeerJobs
from .AmneziaWGPeer import AmneziaWGPeer from .AmneziaWGPeer import AmneziaWGPeer
@ -69,55 +67,55 @@ class AmneziaWireguardConfiguration(WireguardConfiguration):
self.peersTable = sqlalchemy.Table( self.peersTable = sqlalchemy.Table(
dbName, self.metadata, dbName, self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False, primary_key=True), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False, primary_key=True),
sqlalchemy.Column('private_key', sqlalchemy.String), sqlalchemy.Column('private_key', sqlalchemy.String(255)),
sqlalchemy.Column('DNS', sqlalchemy.String), sqlalchemy.Column('DNS', sqlalchemy.Text),
sqlalchemy.Column('advanced_security', sqlalchemy.String), sqlalchemy.Column('advanced_security', sqlalchemy.String(255)),
sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.String), sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.Text),
sqlalchemy.Column('name', sqlalchemy.String), sqlalchemy.Column('name', sqlalchemy.Text),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
sqlalchemy.Column('endpoint', sqlalchemy.String), sqlalchemy.Column('endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('status', sqlalchemy.String), sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('latest_handshake', sqlalchemy.String), sqlalchemy.Column('latest_handshake', sqlalchemy.String(255)),
sqlalchemy.Column('allowed_ip', sqlalchemy.String), sqlalchemy.Column('allowed_ip', sqlalchemy.String(255)),
sqlalchemy.Column('cumu_receive', sqlalchemy.Float), sqlalchemy.Column('cumu_receive', sqlalchemy.Float),
sqlalchemy.Column('cumu_sent', sqlalchemy.Float), sqlalchemy.Column('cumu_sent', sqlalchemy.Float),
sqlalchemy.Column('cumu_data', sqlalchemy.Float), sqlalchemy.Column('cumu_data', sqlalchemy.Float),
sqlalchemy.Column('mtu', sqlalchemy.Integer), sqlalchemy.Column('mtu', sqlalchemy.Integer),
sqlalchemy.Column('keepalive', sqlalchemy.Integer), sqlalchemy.Column('keepalive', sqlalchemy.Integer),
sqlalchemy.Column('remote_endpoint', sqlalchemy.String), sqlalchemy.Column('remote_endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('preshared_key', sqlalchemy.String), sqlalchemy.Column('preshared_key', sqlalchemy.String(255)),
extend_existing=True extend_existing=True
) )
self.peersRestrictedTable = sqlalchemy.Table( self.peersRestrictedTable = sqlalchemy.Table(
f'{dbName}_restrict_access', self.metadata, f'{dbName}_restrict_access', self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False, primary_key=True), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False, primary_key=True),
sqlalchemy.Column('private_key', sqlalchemy.String), sqlalchemy.Column('private_key', sqlalchemy.String(255)),
sqlalchemy.Column('DNS', sqlalchemy.String), sqlalchemy.Column('DNS', sqlalchemy.Text),
sqlalchemy.Column('advanced_security', sqlalchemy.String), sqlalchemy.Column('advanced_security', sqlalchemy.String(255)),
sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.String), sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.Text),
sqlalchemy.Column('name', sqlalchemy.String), sqlalchemy.Column('name', sqlalchemy.Text),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
sqlalchemy.Column('endpoint', sqlalchemy.String), sqlalchemy.Column('endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('status', sqlalchemy.String), sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('latest_handshake', sqlalchemy.String), sqlalchemy.Column('latest_handshake', sqlalchemy.String(255)),
sqlalchemy.Column('allowed_ip', sqlalchemy.String), sqlalchemy.Column('allowed_ip', sqlalchemy.String(255)),
sqlalchemy.Column('cumu_receive', sqlalchemy.Float), sqlalchemy.Column('cumu_receive', sqlalchemy.Float),
sqlalchemy.Column('cumu_sent', sqlalchemy.Float), sqlalchemy.Column('cumu_sent', sqlalchemy.Float),
sqlalchemy.Column('cumu_data', sqlalchemy.Float), sqlalchemy.Column('cumu_data', sqlalchemy.Float),
sqlalchemy.Column('mtu', sqlalchemy.Integer), sqlalchemy.Column('mtu', sqlalchemy.Integer),
sqlalchemy.Column('keepalive', sqlalchemy.Integer), sqlalchemy.Column('keepalive', sqlalchemy.Integer),
sqlalchemy.Column('remote_endpoint', sqlalchemy.String), sqlalchemy.Column('remote_endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('preshared_key', sqlalchemy.String), sqlalchemy.Column('preshared_key', sqlalchemy.String(255)),
extend_existing=True extend_existing=True
) )
self.peersTransferTable = sqlalchemy.Table( self.peersTransferTable = sqlalchemy.Table(
f'{dbName}_transfer', self.metadata, f'{dbName}_transfer', self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
@ -130,26 +128,26 @@ class AmneziaWireguardConfiguration(WireguardConfiguration):
) )
self.peersDeletedTable = sqlalchemy.Table( self.peersDeletedTable = sqlalchemy.Table(
f'{dbName}_deleted', self.metadata, f'{dbName}_deleted', self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False, primary_key=True), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False),
sqlalchemy.Column('private_key', sqlalchemy.String), sqlalchemy.Column('private_key', sqlalchemy.String(255)),
sqlalchemy.Column('advanced_security', sqlalchemy.String), sqlalchemy.Column('DNS', sqlalchemy.Text),
sqlalchemy.Column('DNS', sqlalchemy.String), sqlalchemy.Column('advanced_security', sqlalchemy.String(255)),
sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.String), sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.Text),
sqlalchemy.Column('name', sqlalchemy.String), sqlalchemy.Column('name', sqlalchemy.Text),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
sqlalchemy.Column('endpoint', sqlalchemy.String), sqlalchemy.Column('endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('status', sqlalchemy.String), sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('latest_handshake', sqlalchemy.String), sqlalchemy.Column('latest_handshake', sqlalchemy.String(255)),
sqlalchemy.Column('allowed_ip', sqlalchemy.String), sqlalchemy.Column('allowed_ip', sqlalchemy.String(255)),
sqlalchemy.Column('cumu_receive', sqlalchemy.Float), sqlalchemy.Column('cumu_receive', sqlalchemy.Float),
sqlalchemy.Column('cumu_sent', sqlalchemy.Float), sqlalchemy.Column('cumu_sent', sqlalchemy.Float),
sqlalchemy.Column('cumu_data', sqlalchemy.Float), sqlalchemy.Column('cumu_data', sqlalchemy.Float),
sqlalchemy.Column('mtu', sqlalchemy.Integer), sqlalchemy.Column('mtu', sqlalchemy.Integer),
sqlalchemy.Column('keepalive', sqlalchemy.Integer), sqlalchemy.Column('keepalive', sqlalchemy.Integer),
sqlalchemy.Column('remote_endpoint', sqlalchemy.String), sqlalchemy.Column('remote_endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('preshared_key', sqlalchemy.String), sqlalchemy.Column('preshared_key', sqlalchemy.String(255)),
extend_existing=True extend_existing=True
) )

View File

@ -97,19 +97,21 @@ class DashboardConfig:
if not os.path.isdir(sqlitePath): if not os.path.isdir(sqlitePath):
os.mkdir(sqlitePath) os.mkdir(sqlitePath)
cn = None # cn = None
if self.GetConfig("Database", "type")[1] == "sqlite":
cn = f'sqlite:///{os.path.join(sqlitePath, f"{database}.db")}'
elif self.GetConfig("Database", "type")[1] == "postgresql":
cn = f'postgresql+psycopg2://{self.GetConfig("Database", "username")[1]}:{self.GetConfig("Database", "password")[1]}@{self.GetConfig("Database", "host")[1]}/{database}'
if self.GetConfig("Database", "type")[1] == "postgresql":
cn = f'postgresql+psycopg2://{self.GetConfig("Database", "username")[1]}:{self.GetConfig("Database", "password")[1]}@{self.GetConfig("Database", "host")[1]}/{database}'
elif self.GetConfig("Database", "type")[1] == "mysql":
cn = f'mysql+mysqldb://{self.GetConfig("Database", "username")[1]}:{self.GetConfig("Database", "password")[1]}@{self.GetConfig("Database", "host")[1]}/{database}'
else:
cn = f'sqlite:///{os.path.join(sqlitePath, f"{database}.db")}'
if not database_exists(cn): if not database_exists(cn):
create_database(cn) create_database(cn)
return cn return cn
def __createAPIKeyTable(self): def __createAPIKeyTable(self):
self.apiKeyTable = db.Table('DashboardAPIKeys', self.dbMetadata, self.apiKeyTable = db.Table('DashboardAPIKeys', self.dbMetadata,
db.Column("Key", db.String, nullable=False, primary_key=True), db.Column("Key", db.String(255), nullable=False, primary_key=True),
db.Column("CreatedAt", db.Column("CreatedAt",
(db.DATETIME if self.GetConfig('Database', 'type')[1] == 'sqlite' else db.TIMESTAMP), (db.DATETIME if self.GetConfig('Database', 'type')[1] == 'sqlite' else db.TIMESTAMP),
server_default=db.func.now() server_default=db.func.now()

View File

@ -10,14 +10,14 @@ class DashboardLogger:
self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log")) self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log"))
self.metadata = db.MetaData() self.metadata = db.MetaData()
self.dashboardLoggerTable = db.Table('DashboardLog', self.metadata, self.dashboardLoggerTable = db.Table('DashboardLog', self.metadata,
db.Column('LogID', db.VARCHAR, nullable=False, primary_key=True), db.Column('LogID', db.String(255), nullable=False, primary_key=True),
db.Column('LogDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), db.Column('LogDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP),
server_default=db.func.now()), server_default=db.func.now()),
db.Column('URL', db.VARCHAR), db.Column('URL', db.String(255)),
db.Column('IP', db.VARCHAR), db.Column('IP', db.String(255)),
db.Column('Status', db.VARCHAR, nullable=False), db.Column('Status', db.String(255), nullable=False),
db.Column('Message', db.VARCHAR) db.Column('Message', db.Text)
) )
self.metadata.create_all(self.engine) self.metadata.create_all(self.engine)
self.log(Message="WGDashboard started") self.log(Message="WGDashboard started")

View File

@ -10,12 +10,12 @@ class PeerJobLogger:
self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log")) self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log"))
self.metadata = db.MetaData() self.metadata = db.MetaData()
self.jobLogTable = db.Table('JobLog', self.metadata, self.jobLogTable = db.Table('JobLog', self.metadata,
db.Column('LogID', db.String, nullable=False, primary_key=True), db.Column('LogID', db.String(255), nullable=False, primary_key=True),
db.Column('JobID', db.String, nullable=False), db.Column('JobID', db.String(255), nullable=False),
db.Column('LogDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), db.Column('LogDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP),
server_default=db.func.now()), server_default=db.func.now()),
db.Column('Status', db.String, nullable=False), db.Column('Status', db.String(255), nullable=False),
db.Column('Message', db.String) db.Column('Message', db.Text)
) )
self.logs: list[Log] = [] self.logs: list[Log] = []
self.metadata.create_all(self.engine) self.metadata.create_all(self.engine)

View File

@ -12,15 +12,15 @@ class PeerJobs:
self.engine = db.create_engine(DashboardConfig.getConnectionString('wgdashboard_job')) self.engine = db.create_engine(DashboardConfig.getConnectionString('wgdashboard_job'))
self.metadata = db.MetaData() self.metadata = db.MetaData()
self.peerJobTable = db.Table('PeerJobs', self.metadata, self.peerJobTable = db.Table('PeerJobs', self.metadata,
db.Column('JobID', db.String, nullable=False, primary_key=True), db.Column('JobID', db.String(255), nullable=False, primary_key=True),
db.Column('Configuration', db.String, nullable=False), db.Column('Configuration', db.String(255), nullable=False),
db.Column('Peer', db.String, nullable=False), db.Column('Peer', db.String(255), nullable=False),
db.Column('Field', db.String, nullable=False), db.Column('Field', db.String(255), nullable=False),
db.Column('Operator', db.String, nullable=False), db.Column('Operator', db.String(255), nullable=False),
db.Column('Value', db.String, nullable=False), db.Column('Value', db.String(255), nullable=False),
db.Column('CreationDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), nullable=False), db.Column('CreationDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), nullable=False),
db.Column('ExpireDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP)), db.Column('ExpireDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP)),
db.Column('Action', db.String, nullable=False), db.Column('Action', db.String(255), nullable=False),
) )
self.metadata.create_all(self.engine) self.metadata.create_all(self.engine)
self.__getJobs() self.__getJobs()

View File

@ -13,9 +13,9 @@ class PeerShareLinks:
self.metadata = db.MetaData() self.metadata = db.MetaData()
self.peerShareLinksTable = db.Table( self.peerShareLinksTable = db.Table(
'PeerShareLinks', self.metadata, 'PeerShareLinks', self.metadata,
db.Column('ShareID', db.String, nullable=False, primary_key=True), db.Column('ShareID', db.String(255), nullable=False, primary_key=True),
db.Column('Configuration', db.String, nullable=False), db.Column('Configuration', db.String(255), nullable=False),
db.Column('Peer', db.String, nullable=False), db.Column('Peer', db.String(255), nullable=False),
db.Column('ExpireDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP)), db.Column('ExpireDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP)),
db.Column('SharedDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), db.Column('SharedDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP),
server_default=db.func.now()), server_default=db.func.now()),

View File

@ -1,13 +1,9 @@
""" """
WireGuard Configuration WireGuard Configuration
""" """
import random, shutil, configparser, ipaddress, os, subprocess import sqlalchemy, random, shutil, configparser, ipaddress, os, subprocess, time, re, uuid, psutil, traceback
import time, re, uuid, psutil
import traceback
from zipfile import ZipFile from zipfile import ZipFile
from datetime import datetime, timedelta from datetime import datetime, timedelta
import sqlalchemy
from itertools import islice from itertools import islice
from .DashboardConfig import DashboardConfig from .DashboardConfig import DashboardConfig
@ -222,53 +218,53 @@ class WireguardConfiguration:
dbName = self.Name dbName = self.Name
self.peersTable = sqlalchemy.Table( self.peersTable = sqlalchemy.Table(
dbName, self.metadata, dbName, self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False, primary_key=True), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False, primary_key=True),
sqlalchemy.Column('private_key', sqlalchemy.String), sqlalchemy.Column('private_key', sqlalchemy.String(255)),
sqlalchemy.Column('DNS', sqlalchemy.String), sqlalchemy.Column('DNS', sqlalchemy.Text),
sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.String), sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.Text),
sqlalchemy.Column('name', sqlalchemy.String), sqlalchemy.Column('name', sqlalchemy.Text),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
sqlalchemy.Column('endpoint', sqlalchemy.String), sqlalchemy.Column('endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('status', sqlalchemy.String), sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('latest_handshake', sqlalchemy.String), sqlalchemy.Column('latest_handshake', sqlalchemy.String(255)),
sqlalchemy.Column('allowed_ip', sqlalchemy.String), sqlalchemy.Column('allowed_ip', sqlalchemy.String(255)),
sqlalchemy.Column('cumu_receive', sqlalchemy.Float), sqlalchemy.Column('cumu_receive', sqlalchemy.Float),
sqlalchemy.Column('cumu_sent', sqlalchemy.Float), sqlalchemy.Column('cumu_sent', sqlalchemy.Float),
sqlalchemy.Column('cumu_data', sqlalchemy.Float), sqlalchemy.Column('cumu_data', sqlalchemy.Float),
sqlalchemy.Column('mtu', sqlalchemy.Integer), sqlalchemy.Column('mtu', sqlalchemy.Integer),
sqlalchemy.Column('keepalive', sqlalchemy.Integer), sqlalchemy.Column('keepalive', sqlalchemy.Integer),
sqlalchemy.Column('remote_endpoint', sqlalchemy.String), sqlalchemy.Column('remote_endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('preshared_key', sqlalchemy.String), sqlalchemy.Column('preshared_key', sqlalchemy.String(255)),
extend_existing=True extend_existing=True
) )
self.peersRestrictedTable = sqlalchemy.Table( self.peersRestrictedTable = sqlalchemy.Table(
f'{dbName}_restrict_access', self.metadata, f'{dbName}_restrict_access', self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False, primary_key=True), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False, primary_key=True),
sqlalchemy.Column('private_key', sqlalchemy.String), sqlalchemy.Column('private_key', sqlalchemy.String(255)),
sqlalchemy.Column('DNS', sqlalchemy.String), sqlalchemy.Column('DNS', sqlalchemy.Text),
sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.String), sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.Text),
sqlalchemy.Column('name', sqlalchemy.String), sqlalchemy.Column('name', sqlalchemy.Text),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
sqlalchemy.Column('endpoint', sqlalchemy.String), sqlalchemy.Column('endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('status', sqlalchemy.String), sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('latest_handshake', sqlalchemy.String), sqlalchemy.Column('latest_handshake', sqlalchemy.String(255)),
sqlalchemy.Column('allowed_ip', sqlalchemy.String), sqlalchemy.Column('allowed_ip', sqlalchemy.String(255)),
sqlalchemy.Column('cumu_receive', sqlalchemy.Float), sqlalchemy.Column('cumu_receive', sqlalchemy.Float),
sqlalchemy.Column('cumu_sent', sqlalchemy.Float), sqlalchemy.Column('cumu_sent', sqlalchemy.Float),
sqlalchemy.Column('cumu_data', sqlalchemy.Float), sqlalchemy.Column('cumu_data', sqlalchemy.Float),
sqlalchemy.Column('mtu', sqlalchemy.Integer), sqlalchemy.Column('mtu', sqlalchemy.Integer),
sqlalchemy.Column('keepalive', sqlalchemy.Integer), sqlalchemy.Column('keepalive', sqlalchemy.Integer),
sqlalchemy.Column('remote_endpoint', sqlalchemy.String), sqlalchemy.Column('remote_endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('preshared_key', sqlalchemy.String), sqlalchemy.Column('preshared_key', sqlalchemy.String(255)),
extend_existing=True extend_existing=True
) )
self.peersTransferTable = sqlalchemy.Table( self.peersTransferTable = sqlalchemy.Table(
f'{dbName}_transfer', self.metadata, f'{dbName}_transfer', self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
@ -281,25 +277,25 @@ class WireguardConfiguration:
) )
self.peersDeletedTable = sqlalchemy.Table( self.peersDeletedTable = sqlalchemy.Table(
f'{dbName}_deleted', self.metadata, f'{dbName}_deleted', self.metadata,
sqlalchemy.Column('id', sqlalchemy.String, nullable=False, primary_key=True), sqlalchemy.Column('id', sqlalchemy.String(255), nullable=False, primary_key=True),
sqlalchemy.Column('private_key', sqlalchemy.String), sqlalchemy.Column('private_key', sqlalchemy.String(255)),
sqlalchemy.Column('DNS', sqlalchemy.String), sqlalchemy.Column('DNS', sqlalchemy.Text),
sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.String), sqlalchemy.Column('endpoint_allowed_ip', sqlalchemy.Text),
sqlalchemy.Column('name', sqlalchemy.String), sqlalchemy.Column('name', sqlalchemy.Text),
sqlalchemy.Column('total_receive', sqlalchemy.Float), sqlalchemy.Column('total_receive', sqlalchemy.Float),
sqlalchemy.Column('total_sent', sqlalchemy.Float), sqlalchemy.Column('total_sent', sqlalchemy.Float),
sqlalchemy.Column('total_data', sqlalchemy.Float), sqlalchemy.Column('total_data', sqlalchemy.Float),
sqlalchemy.Column('endpoint', sqlalchemy.String), sqlalchemy.Column('endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('status', sqlalchemy.String), sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('latest_handshake', sqlalchemy.String), sqlalchemy.Column('latest_handshake', sqlalchemy.String(255)),
sqlalchemy.Column('allowed_ip', sqlalchemy.String), sqlalchemy.Column('allowed_ip', sqlalchemy.String(255)),
sqlalchemy.Column('cumu_receive', sqlalchemy.Float), sqlalchemy.Column('cumu_receive', sqlalchemy.Float),
sqlalchemy.Column('cumu_sent', sqlalchemy.Float), sqlalchemy.Column('cumu_sent', sqlalchemy.Float),
sqlalchemy.Column('cumu_data', sqlalchemy.Float), sqlalchemy.Column('cumu_data', sqlalchemy.Float),
sqlalchemy.Column('mtu', sqlalchemy.Integer), sqlalchemy.Column('mtu', sqlalchemy.Integer),
sqlalchemy.Column('keepalive', sqlalchemy.Integer), sqlalchemy.Column('keepalive', sqlalchemy.Integer),
sqlalchemy.Column('remote_endpoint', sqlalchemy.String), sqlalchemy.Column('remote_endpoint', sqlalchemy.String(255)),
sqlalchemy.Column('preshared_key', sqlalchemy.String), sqlalchemy.Column('preshared_key', sqlalchemy.String(255)),
extend_existing=True extend_existing=True
) )
@ -353,7 +349,8 @@ class WireguardConfiguration:
return changed return changed
def getPeers(self): def getPeers(self):
self.Peers = [] # self.Peers = []
tmpList = []
if self.configurationFileChanged(): if self.configurationFileChanged():
with open(self.configPath, 'r') as configFile: with open(self.configPath, 'r') as configFile:
p = [] p = []
@ -419,7 +416,7 @@ class WireguardConfiguration:
self.peersTable.columns.id == i['PublicKey'] self.peersTable.columns.id == i['PublicKey']
) )
) )
self.Peers.append(Peer(tempPeer, self)) tmpList.append(Peer(tempPeer, self))
except Exception as e: except Exception as e:
if __name__ == '__main__': if __name__ == '__main__':
print(f"[WGDashboard] {self.Name} getPeers() Error: {str(e)}") print(f"[WGDashboard] {self.Name} getPeers() Error: {str(e)}")
@ -427,7 +424,9 @@ class WireguardConfiguration:
with self.engine.connect() as conn: with self.engine.connect() as conn:
existingPeers = conn.execute(self.peersTable.select()).mappings().fetchall() existingPeers = conn.execute(self.peersTable.select()).mappings().fetchall()
for i in existingPeers: for i in existingPeers:
self.Peers.append(Peer(i, self)) tmpList.append(Peer(i, self))
self.Peers = []
self.Peers = tmpList
def addPeers(self, peers: list) -> tuple[bool, dict]: def addPeers(self, peers: list) -> tuple[bool, dict]:
result = { result = {
@ -661,11 +660,13 @@ class WireguardConfiguration:
def getPeersTransfer(self): def getPeersTransfer(self):
if not self.getStatus(): if not self.getStatus():
self.toggleConfiguration() self.toggleConfiguration()
try: # try:
data_usage = subprocess.check_output(f"{self.Protocol} show {self.Name} transfer", data_usage = subprocess.check_output(f"{self.Protocol} show {self.Name} transfer",
shell=True, stderr=subprocess.STDOUT) shell=True, stderr=subprocess.STDOUT)
data_usage = data_usage.decode("UTF-8").split("\n") data_usage = data_usage.decode("UTF-8").split("\n")
data_usage = [p.split("\t") for p in data_usage] data_usage = [p.split("\t") for p in data_usage]
cur_i = None
with self.engine.begin() as conn: with self.engine.begin() as conn:
for i in range(len(data_usage)): for i in range(len(data_usage)):
if len(data_usage[i]) == 3: if len(data_usage[i]) == 3:
@ -675,7 +676,9 @@ class WireguardConfiguration:
) )
).mappings().fetchone() ).mappings().fetchone()
if cur_i is not None: if cur_i is not None:
# print(cur_i is None)
total_sent = cur_i['total_sent'] total_sent = cur_i['total_sent']
# print(cur_i is None)
total_receive = cur_i['total_receive'] total_receive = cur_i['total_receive']
cur_total_sent = float(data_usage[i][2]) / (1024 ** 3) cur_total_sent = float(data_usage[i][2]) / (1024 ** 3)
cur_total_receive = float(data_usage[i][1]) / (1024 ** 3) cur_total_receive = float(data_usage[i][1]) / (1024 ** 3)
@ -697,7 +700,8 @@ class WireguardConfiguration:
total_sent = 0 total_sent = 0
total_receive = 0 total_receive = 0
_, p = self.searchPeer(data_usage[i][0]) status, p = self.searchPeer(data_usage[i][0])
if status:
if p.total_receive != total_receive or p.total_sent != total_sent: if p.total_receive != total_receive or p.total_sent != total_sent:
conn.execute( conn.execute(
self.peersTable.update().values({ self.peersTable.update().values({
@ -709,8 +713,10 @@ class WireguardConfiguration:
) )
) )
except Exception as e: # except Exception as e:
print(f"[WGDashboard] {self.Name} getPeersTransfer() Error: {str(e)} {str(e.__traceback__)}") # print(cur_i, cur_i['total_receive'])
# print(f"[WGDashboard] {self.Name} getPeersTransfer() Error: {str(e)} {str(e.__traceback__)}")
def getPeersEndpoint(self): def getPeersEndpoint(self):
if not self.getStatus(): if not self.getStatus():

View File

@ -11,3 +11,4 @@ tcconfig
sqlalchemy sqlalchemy
sqlalchemy_utils sqlalchemy_utils
psycopg2 psycopg2
mysqlclient