
    F3h                         d dl Z d dlZd dlZd dlZ ej                  ej
                  d        ej                  e      Z G d d      Z	da
d Zy)    Nz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)levelformatc                   $    e Zd ZdZddZd Zd Zy)DatabaseManageru6   
    管理 SQLite 数据库连接和初始化。
    c                     || _         t        j                  t        j                  j	                  | j                         d       | j                          y)uh   
        初始化数据库管理器。
        :param db_path: SQLite 数据库文件路径。
        T)exist_okN)db_pathosmakedirspathdirnameinit_db)selfr	   s     !D:\code\IVE2\IVE\core\database.py__init__zDatabaseManager.__init__   s3    
 
BGGOODLL1DA    c                 n    t        j                  | j                        }t         j                  |_        |S )uR   
        获取数据库连接。
        :return: SQLite 连接对象。
        )sqlite3connectr	   Rowrow_factory)r   conns     r   get_connectionzDatabaseManager.get_connection   s'    
 t||,";;r   c                    	 | j                         5 }|j                         }|j                  d       |j                  d       |j                  d       |j                          t        j                  d| j                          ddd       y# 1 sw Y   yxY w# t        j                  $ r}t        j                  d|         d}~ww xY w)u<   
        初始化数据库，创建必要的表。
        a+  
                    CREATE TABLE IF NOT EXISTS environments (
                        id TEXT PRIMARY KEY,
                        driver TEXT NOT NULL,
                        config TEXT NOT NULL, -- JSON string
                        status TEXT NOT NULL
                    );
                u  
                    CREATE TABLE IF NOT EXISTS environment_rules (
                        environment_id TEXT NOT NULL,
                        rule_data TEXT NOT NULL, -- JSON string of the rule object
                        rule_order INTEGER NOT NULL, -- 用于保持规则顺序
                        FOREIGN KEY (environment_id) REFERENCES environments (id) ON DELETE CASCADE
                    );
                zUCREATE INDEX IF NOT EXISTS idx_env_rules_env_id ON environment_rules(environment_id);z%Database initialized successfully at NzError initializing database: )
r   cursorexecutecommitloggerinfor	   r   Errorerror)r   r   r   es       r   r   zDatabaseManager.init_db#   s    "	$$&$         vwCDLL>RS= '&&> }} 	LL8<=	s5   B A6BB BB B C0C		CN)zdata/honeypot.db)__name__
__module____qualname____doc__r   r   r    r   r   r   r   
   s    &r   r   c                  .    t         
t               a t         S )uX   
    获取全局数据库管理器实例。
    :return: DatabaseManager 实例。
    )
db_managerr   r'   r   r   get_db_managerr*   N   s     $&
r   )r   r
   jsonloggingbasicConfigINFO	getLoggerr#   r   r   r)   r*   r'   r   r   <module>r0      sS     	     ',,/e f			8	$? ?D 
r   