72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
import asyncio
|
|
import asyncpg
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# DB 設定
|
|
DB_CONFIG = {
|
|
"database": "cmts_nms",
|
|
"user": "swpa",
|
|
"password": "swpa4920",
|
|
"host": "127.0.0.1",
|
|
"port": "5432"
|
|
}
|
|
|
|
async def init_database():
|
|
try:
|
|
logger.info("🔄 正在連線到 PostgreSQL (asyncpg)...")
|
|
conn = await asyncpg.connect(
|
|
database=DB_CONFIG["database"],
|
|
user=DB_CONFIG["user"],
|
|
password=DB_CONFIG["password"],
|
|
host=DB_CONFIG["host"],
|
|
port=int(DB_CONFIG["port"])
|
|
)
|
|
|
|
# 1. 建立選項快取表 cmts_options
|
|
logger.info("🛠️ 正在建立 cmts_options 資料表...")
|
|
await conn.execute("""
|
|
CREATE TABLE IF NOT EXISTS cmts_options (
|
|
host VARCHAR(255) NOT NULL,
|
|
config_type VARCHAR(50) NOT NULL,
|
|
path VARCHAR(500) NOT NULL,
|
|
data JSONB NOT NULL,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (host, config_type, path)
|
|
);
|
|
""")
|
|
|
|
# 2. 建立設備狀態表 device_status
|
|
logger.info("🛠️ 正在建立 device_status 資料表...")
|
|
await conn.execute("""
|
|
CREATE TABLE IF NOT EXISTS device_status (
|
|
host VARCHAR(255) NOT NULL,
|
|
config_type VARCHAR(50) NOT NULL,
|
|
cmts_version VARCHAR(100) DEFAULT 'unknown',
|
|
last_scanned VARCHAR(100),
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (host, config_type)
|
|
);
|
|
""")
|
|
|
|
# 3. 建立過濾器設定表 system_filters
|
|
logger.info("🛠️ 正在建立 system_filters 資料表...")
|
|
await conn.execute("""
|
|
CREATE TABLE IF NOT EXISTS system_filters (
|
|
config_type VARCHAR(50) PRIMARY KEY,
|
|
hidden_keys TEXT[] DEFAULT '{}',
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
await conn.close()
|
|
logger.info("✅ 資料庫初始化完成!所有資料表已準備就緒。")
|
|
|
|
except Exception as e:
|
|
logger.error(f"❌ 資料庫初始化失敗: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(init_database())
|