
    ڵ1i                     r    d dl Z d dlmZ d dlmZ d dlmZ  e         G d d      Z e       Zd Z	d Z
d	 Zy)
    N)MongoClient)load_dotenv)
quote_plusc                   \     e Zd ZdZdZdZ fdZd Zed        Z	ed        Z
d Zd Z xZS )DatabaseConnectionNc                     | j                   2t        t        |   |       | _         | j                   j	                          | j                   S )N)	_instancesuperr   __new___initialize_connection)cls	__class__s    5/var/www/html/drjob-dev/drjob-ai/services/database.pyr   zDatabaseConnection.__new__   s;    == !"4cB3GCMMM002}}    c                 j   t        d       t        j                  dd      }t        t        j                  dd            }t        j                  dd      }t        j                  dd	      }t        j                  d
      }t        j                  dd      }t        d|        t        d|        t        d|        t        d|        t        d|        t	        |      }t	        |      }d| d| d| d| d| d| d}	t        d|	        	 t        |	ddddddd      | _        | j                  |   | _        t        d       | j                  j                  j                  d        t        d!       t        d"|        	 | j                  j                         }
t        d#|
        y%# t        $ r!}t        d$t        |              Y d%}~y%d%}~ww xY w# t        $ rE}t        d&t        |              t        d'       t        d(       d%| _        d%| _        Y d%}~y%d%}~ww xY w))z#Initialize database connection oncez(=== Initializing Database Connection ===DB_LIVE_HOST	localhostDB_LIVE_PORT27020DB_LIVE_DATABASEdrjobs_liveDB_LIVE_USERNAME
dreamztechDB_LIVE_PASSWORDDB_LIVE_AUTH_DATABASEadminzHost: zPort: z
Database: z
Username: zAuth Database: z
mongodb://:@/z?authSource=z&directConnection=truez.Connecting to MongoDB with connection string: i0u  i'  
   FT)serverSelectionTimeoutMSconnectTimeoutMSsocketTimeoutMSheartbeatFrequencyMSmaxPoolSizeretryWritesdirectConnectionzTesting database connection...pingzMongoDB connection successful!zConnected to database: zAvailable collections: zCould not list collections: NzMongoDB connection failed: z5This might be due to jump server connectivity issues.z Setting client and db to None...)printosgetenvintr   r   _client_dbr   commandlist_collection_names	Exceptionstr)selfhostportdatabaseusernamepasswordauth_databaseencoded_usernameencoded_passwordconnection_stringcollectionses               r   r   z)DatabaseConnection._initialize_connection   sA   89 yy5299^W5699/?99/>99/0		"97Ctfotfo
8*%&
8*%&/0 &h/%h/ ))9(:!<L;MQtfTUVZU[[\]e\ffr  tA  sB  BX  Y>?P>QRS 	&!).!& %%*!!%	DL ||H-DH 23LL&&v.23 +H:67?"hh<<>/}=> ?4SVH=>>?  	/Ax89IJ45DLDHH	s=   A5G$ (F7 7	G! GG$ G!!G$ $	H2-;H--H2c                     | j                   S )zGet MongoDB client)r-   r3   s    r   clientzDatabaseConnection.clientQ   s     ||r   c                     | j                   S )zGet MongoDB database)r.   r@   s    r   dbzDatabaseConnection.dbV   s     xxr   c                 >    | j                   duxr | j                  duS )Check if database is connectedN)r-   r.   r@   s    r   is_connectedzDatabaseConnection.is_connected[   s    ||4'@DHHD,@@r   c                     	 | j                   r&| j                   j                  j                  d       y	 y# t        $ r!}t	        dt        |              Y d}~yd}~ww xY w)zTest database connectionr(   TzConnection test failed: NF)r-   r   r/   r1   r)   r2   )r3   r>   s     r   test_connectionz"DatabaseConnection.test_connection_   s\    	||""**62    	,SVH56	s   16 	A AA )__name__
__module____qualname__r	   r-   r.   r   r   propertyrA   rC   rF   rH   __classcell__)r   s   @r   r   r   
   sP    IG
C:x    A	r   r   c                  "    t         j                  S )zGet database instance)db_connectionrC    r   r   get_databaserQ   o   s    r   c                  "    t         j                  S )zGet MongoDB client instance)rO   rA   rP   r   r   
get_clientrS   t   s    r   c                  *    t         j                         S )rE   )rO   rF   rP   r   r   is_database_connectedrU   y   s    %%''r   )r*   pymongor   dotenvr   urllib.parser   r   rO   rQ   rS   rU   rP   r   r   <module>rY      s>    	   # ^ ^D #$
 
(r   