
    $                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ e	j                   e	j                  e	j                  j                  e	j                  j                          G d	 d
e	j"                                      Z e	j                  e	j                  j&                         G d de             Z ej*                  d      e_         ej*                  d      e_        y)z"Command for listing health checks.    )absolute_import)division)unicode_literals)base_classes)lister)base)
exceptionsc                        e Zd ZdZdZed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zed        Zed        Zed        Zed        Zed        Zed        Z fdZ xZS )ListzList health checks in GA.Nc                 Z    t        j                  | dd       | j                  dd       y )NT)regionalglobal_z
--protocolz        If protocol is specified, only health checks for that protocol are
        listed, and protocol-specific columns are added to the output. By
        default, health checks for all protocols are listed.
        )help)r   AddMultiScopeListerFlagsadd_argument)parsers    )lib/surface/compute/health_checks/list.pyArgsz	List.Args"   s/    
##FT4H
      c                 6    |j                   j                         S N)protocolupperselfargss     r   &_ConvertProtocolArgsToProtocolEnumNamez+List._ConvertProtocolArgsToProtocolEnumName.   s    ==  r   c                     | j                   j                  j                  j                         }|j	                  | j                  |            S r   )messagesHealthCheckTypeValueValuesEnumto_dictgetr   )r   r   protocol_dicts      r   _ConvertProtocolArgToValuezList._ConvertProtocolArgToValue1   s<    MM--AAIIKMTHHNOOr   c                 j   | j                   j                  j                  j                  j                  | j                   j                  j                  j
                  j                  | j                   j                  j                  j                  j                  | j                   j                  j                  j                  j                  | j                   j                  j                  j                  j                  | j                   j                  j                  j                  j                  gS r   )
r   r    r!   GRPCnumberHTTPHTTPSHTTP2TCPSSLr   s    r   _ProtocolAllowlistzList._ProtocolAllowlist6   s     	!!55::AA!!55::AA!!55;;BB!!55;;BB!!5599@@!!5599@@ r   c                    g d}|j                   | j                  |      }|| j                  j                  j                  j
                  j                  k(  r|j                  ddg       |S || j                  j                  j                  j                  j                  k(  r|j                  g d       |S || j                  j                  j                  j                  j                  k(  r|j                  g d       |S || j                  j                  j                  j                  j                  k(  r|j                  g d       |S || j                  j                  j                  j                  j                  k(  r|j                  g d       |S || j                  j                  j                  j                  j                  k(  r|j                  g d       |S )	z Returns a list of valid columns.)zname:label=NAMEzregion.basename():label=REGIONztype:label=PROTOCOLzgrpcHealthCheck.port:label=PORTz7grpcHealthCheck.grpcServiceName:label=GRPC_SERVICE_NAME)zhttpHealthCheck.host:label=HOSTzhttpHealthCheck.port:label=PORTz.httpHealthCheck.requestPath:label=REQUEST_PATHz.httpHealthCheck.proxyHeader:label=PROXY_HEADER)z httpsHealthCheck.host:label=HOSTz httpsHealthCheck.port:label=PORTz/httpsHealthCheck.requestPath:label=REQUEST_PATHz/httpsHealthCheck.proxyHeader:label=PROXY_HEADER)z http2HealthCheck.host:label=HOSTz http2HealthCheck.port:label=PORTz/http2HealthCheck.requestPath:label=REQUEST_PATHz/http2HealthCheck.proxyHeader:label=PROXY_HEADER)ztcpHealthCheck.port:label=PORTz$tcpHealthCheck.request:label=REQUESTz&tcpHealthCheck.response:label=RESPONSEz-tcpHealthCheck.proxyHeader:label=PROXY_HEADER)zsslHealthCheck.port:label=PORTz$sslHealthCheck.request:label=REQUESTz&sslHealthCheck.response:label=RESPONSEz-sslHealthCheck.proxyHeader:label=PROXY_HEADER)r   r%   r   r    r!   r'   r(   extendr)   r*   r+   r,   r-   )r   r   columnsprotocol_values       r   _GetValidColumnszList._GetValidColumnsA   s   G }} 66t<n

--
#
#
7
7
<
<
C
CD-E
 	F N? MM%%99>>EEF J 	K: N3 MM%%99??FFG K 	L. N' MM%%99??FFG K 	L" N MM%%99==DDE I 	J N MM%%99==DDE I 	J
 Nr   c                      y)z4Override the default collection from the base class.N r.   s    r   
CollectionzList.Collectiont   s    r   c                    t        j                  | j                               }|j                  }|j                  | _        |j
                  | j                  |       |j                  d      s"|j                  s| j                  |      |_
        t        j                  ||j                        }t        j                  ||j                  j                   |j                  j"                  |j                  j"                        }t        j$                  ||      }|j
                  |S g }|D ]+  }|d   | j'                  |      k(  s|j)                  |       - |S )Nformat)regional_serviceglobal_serviceaggregation_servicetype)r   ComputeApiHolderReleaseTrackclientr   r   _validateProtocolIsSpecifieduri_Formatr9   r   ParseMultiScopeFlags	resourcesMultiScopeListerapitools_clientregionHealthCheckshealthChecksInvoker   append)	r   r   holderr@   request_datalist_implementationitemshealth_checkshealth_checks	            r   RunzList.Runx   s,   **4+<+<+>?F]]FOODM}} 
T"H%dhhLL&dk..tV5E5EFL 11//BB--::"22??	 MM,(;<E}}l M	f	!L!L
" 
 	\*	 
 r   c                     | j                  |      }|| j                         vr%t        j                  d|j                  z   dz         y )NInvalid health check protocol .)r%   r/   r	   ArgumentErrorr   )r   r   r3   s      r   rA   zList._validateProtocol   sL    44T:NT4466$$
*T]]
:S
@  7r   c                 f    | j                  |      }dj                  dj                  |            S )Ntable[]({columns}),r2   )r4   r9   join)r   r   r2   s      r   rD   zList._Format   s/    ##D)G&&sxx/@&AAr   c                 .    | j                   j                  S r   computerJ   r.   s    r   servicezList.service   s    <<$$$r   c                      y)NrJ   r6   r.   s    r   resource_typezList.resource_type   s    r   c                 .    | j                   j                  S )z*The service used to list global resources.r^   r.   s    r   r;   zList.global_service        <<$$$r   c                 .    | j                   j                  S ),The service used to list regional resources.)r_   rI   r.   s    r   r:   zList.regional_service   s     <<***r   c                      y)rf   Nr6   r.   s    r   zonal_servicezList.zonal_service   s     r   c                 .    | j                   j                  S )z5The service used to get aggregated list of resources.r^   r.   s    r   r<   zList.aggregation_service   rd   r   c              #   >  K   t         t        |   ||      }d }|j                  H| j	                  |      }|| j                         vr%t        j                  d|j                  z   dz         |D ])  }|!|d   |j                  j                         k(  s&| + y w)NrU   rV   r=   )	superr   GetResourcesr   r%   r/   r	   rW   r   )r   r   errorsrQ   r3   rR   	__class__s         r   rl   zList.GetResources   s     $24@M N}} 66t<n	t668	8&&'G'+}}(57:(; < 	< &

 
v
$--"5"5"7
7 &s   BBB)__name__
__module____qualname____doc__r   staticmethodr   r   r%   r/   r4   r7   rS   rA   rD   propertyr`   rb   r;   r:   rh   r<   rl   __classcell__rn   s   @r   r   r      s     "(	 	!P
	1f>B % %   % % + +   % % r   r   c                   2     e Zd ZdZ fdZd Z fdZ xZS )	ListAlphazList health checks in Alpha.c                     t         t        |          }|j                  | j                  j
                  j                  j                  j                         |S r   )	rk   rx   r/   rL   r   r    r!   GRPC_WITH_TLSr(   )r   	allowlistrn   s     r   r/   zListAlpha._ProtocolAllowlist   sG    i9;I!!55CCJJ r   c                 V    |j                   j                         j                  dd      S )N-_)r   r   replacer   s     r   r   z0ListAlpha._ConvertProtocolArgsToProtocolEnumName   s"    == ((c22r   c                    t         t        |   |      }|j                  | j	                  |      }|| j
                  j                  j                  j                  j                  k(  r|j                  g d       nJ|| j
                  j                  j                  j                  j                  k(  r|j                  ddg       dj                  dj                  |            S )N)zudpHealthCheck.port:label=PORTz$udpHealthCheck.request:label=REQUESTz&udpHealthCheck.response:label=RESPONSEz"grpcTlsHealthCheck.port:label=PORTz:grpcTlsHealthCheck.grpcServiceName:label=GRPC_SERVICE_NAMErY   rZ   r[   )rk   rx   r4   r   r%   r   r    r!   UDPr(   r1   rz   r9   r\   )r   r   r2   r3   rn   s       r   rD   zListAlpha._Format   s    It5d;G}} 66t<n

--
#
#
7
7
;
;
B
BC 
 	 ]]&&::HHOOP 	0H
 	
  &&sxx/@&AAr   )ro   rp   rq   rr   r/   r   rD   ru   rv   s   @r   rx   rx      s    $3B Br   rx   zhealth checksN)rr   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   googlecloudsdk.callioper   0googlecloudsdk.command_lib.compute.health_checksr	   UniverseCompatibleReleaseTracksr?   BETAGAListCommandr   ALPHArx   GetGlobalListerHelpdetailed_helpr6   r   r   <module>r      s    ) &  ' 7 1 ( G D%%**D,=,=,@,@Ap4 p B pf D%%++,"B "B -"BJ 6\55oF :,::?K	 r   