o
    h                     @   sX   d dl Z d dlZd dlZd dlZejejdd eeZG dd dZ	da
dd ZdS )    Nz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)levelformatc                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )DatabaseManageru6   
    管理 SQLite 数据库连接和初始化。
    data/honeypot.dbc                 C   s*   || _ tjtj| j dd |   dS )uh   
        初始化数据库管理器。
        :param db_path: SQLite 数据库文件路径。
        T)exist_okN)db_pathosmakedirspathdirnameinit_db)selfr    r   /root/ive/core/database.py__init__   s   zDatabaseManager.__init__c                 C   s   t | j}t j|_|S )uR   
        获取数据库连接。
        :return: SQLite 连接对象。
        )sqlite3connectr   Rowrow_factory)r   connr   r   r   get_connection   s   zDatabaseManager.get_connectionc              
   C   s   z9|   *}| }|d |d |d |  td| j  W d   W dS 1 s2w   Y  W dS  tjyO } z	t	d|   d}~w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   er   r   r   r   #   s   




&zDatabaseManager.init_dbN)r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   
   s
    


r   c                   C   s   t du rt a t S )uX   
    获取全局数据库管理器实例。
    :return: DatabaseManager 实例。
    N)
db_managerr   r   r   r   r   get_db_managerN   s   r$   )r   r   jsonloggingbasicConfigINFO	getLoggerr   r   r   r#   r$   r   r   r   r   <module>   s    
B