
    i_"                         d dl mZ d dlZd dlZd dlZd dlZddlmZ  ej        ej	        j
                    G d de          ZdS )    )
OpenSearchN   )BaseDBHandlerc                   &    e Zd ZddZddZddZdS )OpenSearchHandlerNc           	         d|v r|}n| d}d }|r|r||f}t          j        ||dd          }|j        dk    r|| _        || _        |                                }|                    dd          }		 | d}
t          j        |
|d	d          }|j        dk    r_|                                }|                    d
d          }|                    dd          }|                     d|	 d| d| d          S |                     d|	 d          S #  |                     d|	 d          cY S xY w|                     |j        d|j                   S )Nz:12000   F)authtimeoutverify   cluster_nameUnknownz/_cluster/health
   statusunknownnumber_of_nodesz&Successfully connected to OpenSearch: z (/_cluster/health -> status: z, number of nodes: )z(, But /_cluster/health is not available.z, But Heath check was failed.z#OpenSearch connection failed: HTTP )requestsgetstatus_codebase_urlr
   jsonmake_connection_responsemake_error_response)selfserviceuserpassworddatabaser   r
   response
basic_datar   
health_urlhealth_responsehealth_datar   nodess                  G/Users/user/workspace/sujinbaek/cqa-test-app/products/dbs/opensearch.pyconnectzOpenSearchHandler.connect   s   wHH!)))H 	$H 	$(#D <	
 
 
 3&&$DMDI!J%>>.)DDLK (:::
"*,zbY^"_"_"_".#55"1"6"6"8"8K(__XyAAF'OO,=yIIE88\ \ \8>\ \SX\ \ \    88  :Ybn  :Y  :Y  :Y  Z  Z  ZK44  6J^j  6J  6J  6J  K  K  K  K  K++H,@B~hph|B~B~s   3BD :D D0c                    	 	 t          j        |          }n+# t           j        $ r |                     dd          cY S w xY wd|v r|                    dd          }d|d         i}d|v r|d         |d<   | j                            ||          }|                    di                               dg           }|                    di                               d	i           }t          |t                    r|                    d
d          }	n|}	|r|d         }
t          |
                    di           
                                          }g d|z   }g }|D ]}|                    dd          |                    dd          |                    dd          g}|                    di           }|D ]+}|                    |                    |d                      ,|                    |           |                     d|	 d||          S |                     d|	 dg g           S |                     dd          S # t          $ r#}|                     dd|           cY d }~S d }~ww xY w)N  z<Invalid JSON query. OpenSearch requires JSON format queries.queryindex_allsize)r,   bodyhitstotalvaluer   _source)_index_id_scorer4    r5   r6   zFound z results)msgcolumns_namesresultszSearch completed, z results foundzRUnsupported query format. Use the OpenSearch API interface for full functionality.  z=Internal Server Error, Please check the query and try again: )r   loadsJSONDecodeErrorr   r   clientsearch
isinstancedictlistkeysappendmake_success_response	Exception)r   r+   r    
query_jsonr,   search_bodyresultr0   r1   total_value	first_hitsource_keysr9   r:   hitrowsourcekeyes                      r'   execute_queryzOpenSearchHandler.execute_query:   s    :	vu!Z..

' u u u//5stttttu *$$"w77&
7(;<Z''*4V*<K'++%k+JJzz&"--11&"==

62..227B??eT** ("'))GQ"7"7KK"'K  $QI"&y}}Y'C'C'H'H'J'J"K"KK$?$?$?+$MM G# 	, 	,GGHb11GGE2..GGHa00
 "%B!7!7#. > >CJJvzz#t'<'<====s++++55:[:::&3 ' 6     55LLLL&( " 6    //  6J  K  K  K 	v 	v 	v++C1tqr1t1tuuuuuuuu	vsC    I %A I A  GI I 5I 
I8I3-I83I8c                 f   	 |                     d          sd|z   }| j         | }|                                dk    r|rw	 t          |t                    rt          j        |          n|}t          j        || j	        |dd          }n# t
          j
        $ r |                     dd          cY S w xY wt          j        || j	        dd          }n|                                d	k    r|rw	 t          |t                    rt          j        |          n|}t          j        || j	        |dd          }nF# t
          j
        $ r |                     dd          cY S w xY wt          j        || j	        dd          }n|                                d
k    r|rv	 t          |t                    rt          j        |          n|}t          j        || j	        |dd          }n# t
          j
        $ r |                     dd          cY S w xY wt          j        || j	        dd          }nO|                                dk    rt          j        || j	        dd          }n|                     dd|           S |j        dk    rR|j        dk     rG	 |                                }n#  |j        }Y nxY w|j        |                                 d| d|dS |                     |j        d|j                   S # t"          $ r#}|                     dd|           cY d}~S d}~ww xY w)zDExecute OpenSearch API query - this is the main method for API calls/GETFr	   )r
   r   r   r   r*   zInvalid JSON payload)r
   r   r   POSTPUTDELETEzUnsupported HTTP method: r   i,   z executed successfully)coder8   r!   zAPI call failed: HTTP r;   z(Internal Server Error, API call failed: N)
startswithr   upperr@   strr   r<   r   r   r
   r=   r   postputdeleter   textrF   )	r   methodendpointpayloadfull_urlpayload_jsonr!   rI   rQ   s	            r'   execute_api_queryz#OpenSearchHandler.execute_api_queryw   s   b	a&&s++ *>-333H ||~~&& 
U>HRU>V>V'ctz'':':':\c#+<$!%!-#($&$ $ $  / U U U#77=STTTTTU  (| !Y$ "	     HH 6)) 
U>HRU>V>V'ctz'':':':\c#+=$!%!-#($&$ $ $  / U U U#77=STTTTTU  (} !Y$ "	     HH 5(( 
U>HRU>V>V'ctz'':':':\c#+<$!%!-#($&$ $ $  / U U U#77=STTTTTU  (| !Y$ "	     HH 8++#? 	   //5YQW5Y5YZZZ #s**x/Cc/I/I+%]]__FF+%]FFF %0$llnnOOxOOO &   //0DFu_g_sFuFuvvv 	a 	a 	a++C1_\]1_1_````````	as   ?L A	B L %B52L 4B55<L 2A	D= ;L =%E%"L $E%%;L !A	G+ *L +%HL HA/L L J/ .L /	J:8'L  "L 
L0L+%L0+L0)N)__name__
__module____qualname__r(   rR   rg        r'   r   r      sf        ,@ ,@ ,@ ,@\;v ;v ;v ;vzda da da da da darl   r   )opensearchpyr   r   urllib3r   osbase_dbr   disable_warnings
exceptionsInsecureRequestWarningr   rk   rl   r'   <module>rt      s    # # # # # #    				 " " " " " "  +B C C CPa Pa Pa Pa Pa Pa Pa Pa Pa Parl   