
    'g                     n	   d dl Z d dlZd dlmZ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 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 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*Z*d dl+m+Z+m,Z,  e       Z-e-j]                  d      defd       Z/e-j]                  d      dedefd       Z0e-j]                  d      dedefd       Z1e-j]                  d      dedefd       Z2e-j]                  d      de&defd        Z3e-j]                  d!      dedefd"       Z4e-j]                  d#      dedefd$       Z5e-j]                  d%      dedefd&       Z6e-j]                  d'      dedefd(       Z7e-j]                  d)      dedefd*       Z8e-j]                  d+      dedefd,       Z9e-j]                  d-      dedefd.       Z:e-j]                  d/      dedefd0       Z;e-j]                  d1      dedefd2       Z<e-j]                  d3      de defd4       Z=e-j]                  d5      de defd6       Z>e-j]                  d7      de defd8       Z?e-j]                  d9      de defd:       Z@e-j]                  d;      de defd<       ZAe-j]                  d=      de defd>       ZBe-j]                  d?      de defd@       ZCe-j]                  dA      de defdB       ZDe-j]                  dC      de defdD       ZEe-j]                  dE      de defdF       ZFe-j]                  dG      dedefdH       ZGe-j]                  dI      dedefdJ       ZHe-j]                  dK      dedefdL       ZIe-j]                  dM      dedefdN       ZJe-j]                  dO      dedefdP       ZKe-j]                  dQ      dedefdR       ZLe-j]                  dS      dedefdT       ZMe-j]                  dU      dedefdV       ZNe-j]                  dW      de"defdX       ZOe-j]                  dY      de"defdZ       Z5e-j]                  d[      de"defd\       Z5e-j]                  d]      de"defd^       ZPe-j]                  d_      de"defd`       ZQe-j]                  da      de"defdb       ZRy)c    N)FastAPIResponse)handle_response)GenericImageGenerator)
EC2Metrics)LoadBalancerMetrics)
VPNMetrics)
EBSMetrics)
WAFMetrics)WafMetricsR)MetricsRequest)
EC2Request)
WAFRequest)LoadBalancerRequest)
VPNRequest)
EBSRequest)CredentiaRequest)waf)WafRequestImage)datetime	timedeltaz/metricsrequestc                    K   | j                   }| j                  }| j                  }| j                  }| j                  }| j
                  }i }|j                  r9|j                  j                  }t        ||||      }	|	j                  ||      |d<   |j                  rN|j                  j                  }
t        ||||
      }|j                  ||      |d<   |j                  ||      |d<   |j                  rN|j                  j                   }t#        ||||      }|j%                  ||      |d<   |j'                  ||      |d<   |j(                  rN|j(                  j*                  }t-        ||||      }|j/                  ||      |d<   |j1                  ||      |d<   |j2                  rN|j2                  j4                  }t7        ||||      }|j9                  ||      |d<   |j;                  ||      |d	<   d
|iS w)Ncpu_utilizationrequest_countactive_connection_counttunnel_data_intunnel_data_outvolume_read_bytesvolume_read_opswaf_allowed_requestswaf_blocked_requestsmetrics_results)
access_key
secret_keyregion
start_timeend_timeservicesEC2instance_idr   get_cpu_utilizationLoadBalancerload_balancer_arnr   get_request_countget_active_connection_countVPNvpn_idr	   get_tunnel_data_inget_tunnel_data_outEBS	volume_idr
   get_volume_read_bytesget_volume_read_opsWAF
web_acl_idr   get_allowed_requestsget_blocked_requests)r   r$   r%   r&   r'   r(   r)   r#   r+   ec2_metricsr.   
lb_metricsr2   vpn_metricsr6   ebs_metricsr:   waf_metricss                     &/opt/lhia/tcloud/backend/python/app.pyget_metricsrC      s
     ##J##J^^F##JHHO ||ll.. ZM-8-L-LZYa-b)* $11CC(ZIZ[
+5+G+G
T\+](5?5[5[\fhp5q12 ||$$ ZH,7,J,J:W_,`()-8-L-LZYa-b)* ||LL**	 ZK/:/P/PQ[]e/f+,-8-L-LZYa-b)* ||\\,,
 ZL2=2R2RS]_g2h./2=2R2RS]_g2h.///s   G<G>z/metrics/ec2responsec                   K   t        || j                  d      }|j                  d      r|S 	 | j                  dk(  r t        |d      }|j                  d      r|S | j                  dk(  r!t        |dd	      }|j                  d      r|S t        | j                  | j                  | j                  | j                        }|j                  | j                  | j                        }t        ||d
      S # t        $ r"}t        |t        |            }|cY d }~S d }~wt        $ r}t        |      cY d }~S d }~ww xY ww)NzEC2 instance IDdata	data_namemessageinvalidT)
auth_checkzunknown-regionr*   )connection_checkrH   zEC2 metricsvalidation_check)r   r+   getr$   r&   r   r%   r,   r'   r(   
ValueErrorstr	Exception)r   rD   error_responser=   r#   es         rB   get_ec2_metricsrU   K   s(     %XG4G4GSdeN)$)*,X$GN!!),%%>>--,XX]^N!!),%% NN	
 &99':L:LgN^N^_xoWW (CFK )x(()se   ,E.C8 E/C8 EA)C8 7E8	D?DD?ED?*
D:4D?5E:D??Ez/metrics/waf-allowedc                 h  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr$   r%   r&   r:   AllowedRequestsmetricr'   r(   country_codetimestatrM   )r   r$   r%   r&   r:   get_Waf_Allowe_datar'   r(   r[   r\   r]   rR   r   rQ   r   rD   waf_serviceresultrT   s        rB   get_waf_datarb   m   s     B!))))>>))	
 00$))%% -- 1 
  Bx#a&AAB5   B2BB B2	B/B*$B/%B2*B//B2z/metrics/waf-blockedc                 h  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)NrW   deniedRequestsrY   rM   )r   r$   r%   r&   r:   get_Waf_blocked_datar'   r(   r[   r\   r]   rR   r   rQ   r_   s        rB   get_waf_blocked_datarg      s     B!))))>>))	
 11#))%% -- 2 
  Bx#a&AABrc   z/metrics/wafImagec           
      d  K   	 t        j                  | j                  | j                  | j                        }t        j                         }|j                  d      t        d      z
  j                  d      }|j                  d      t        d      z
  }|j                  d      }|j                  d      }|j                  d      }|j                  ddd	d
ddd|j                  dd| j                  dgddddddg||      }	|	d   d   d   }
|	d   d   d   }|
r|sdddS t        j                         }t!        j"                  d       t!        j$                  |
|d| j                   d d!d"#       t!        j&                  d$d%&       t!        j(                  d'd%&       t!        j*                  d(| j                   d)&       t!        j,                  d*+       t!        j.                          t!        j0                          t!        j2                  |d,-       |j5                  d       t7        j8                  |j;                               j=                  d.      }t!        j>                          d/d0|d1S # t@        $ r}d2|_!        dtE        |      dcY d }~S d }~ww xY ww)3N)aws_access_key_idaws_secret_access_keyregion_name   )daydays%Y-%m-%dT%H:%M:%S
cloudwatchallowedRequestsz	AWS/WAFV2rX   WebACLzACL-AWS-defecto)NameValueRegionCountry)	Namespace
MetricName
DimensionsiQ Sum)MetricPeriodStatT)Id
MetricStat
ReturnData)MetricDataQueries	StartTimeEndTimeMetricDataResultsr   
TimestampsValueserrorzNo data foundstatusrI   )
      )figsizezSolicitudes Permitidas ()greeno)labelcolormarkerFecha   )fontsizez"Cantidad de Solicitudes PermitidaszSolicitudes Permitidas en    -   )rotationpng)formatzutf-8successzWaf metrics by last monthr   rI   image_base64  )#boto3Sessionr$   r%   r&   r   nowreplacer   strftimeclientget_metric_datark   r[   ioBytesIOpltfigureplotxlabelylabeltitlextickslegendtight_layoutsavefigseekbase64	b64encodereaddecodecloserR   status_coderQ   )r   rD   sessionr   first_day_last_monthlast_day_last_monthr'   r(   cloudwatch_clientmetric_response
timestampsvaluesbufferr   rT   s                  rB   get_cloudwatch_metricsr      sy    96--%00")"4"4

 lln # 2YA5F FOOTUOV!kkak09!3DD)223FG
&//0CD#NN<8+;; , *5*;)1<M N)1G<O<O P)2W=Q=Q R+# #( %# #'& !+ < 
. %%89!<\J
 !45a8B%/BB

7#V-EgFZFZE[[\+]eluxy

7R(

7"E		.w/C/C.DEPRS

B

F5)A''6==gF		#/J[ghh 6"!c!f556sB   J0D*J .J0/EJ J0	J-J("J-#J0(J--J0z$/metrics/load_balancer/request_countc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr$   r%   r&   r.   RequestCountrZ   r'   r(   r\   r]   rM   r   r$   r%   r&   r.   r   r'   r(   r\   r]   rR   r   rQ   r   rD   load_balance_servicera   rT   s        rB   get_load_balance_request_countr      s     B2))))>>%77	 
 &55!))%% 6 
  Bx#a&AAB5   B'A6A; :B';	B$BB$B'B$$B'z+/metrics/load_balancer/target_response_timec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   TargetResponseTimer   rM   r   r   s        rB    get_load_balance_target_responser      s     B2))))>>%77	 
 &55'))%% 6 
  Bx#a&AABr   z%/metrics/load_balancer/http_2xx_countc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   HTTPCode_Target_2XX_Countr   rM   r   r   s        rB   get_load_balance_http2r          B2))))>>%77	 
 &55.))%% 6 
  Bx#a&AABr   z%/metrics/load_balancer/http_3xx_countc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   HTTPCode_Target_3XX_Countr   rM   r   r   s        rB   get_load_balance_http3r     r   r   z%/metrics/load_balancer/http_4xx_countc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   HTTPCode_Target_4XX_Countr   rM   r   r   s        rB   get_load_balance_http4r   0  r   r   z./metrics/load_balancer/active_connection_countc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   ActiveConnectionCountr   rM   r   r   s        rB   "get_load_balance_active_connectionr   F  s     B2))))>>%77	 
 &55*))%% 6 
  Bx#a&AABr   z/metrics/vpn/tunnel_data_inc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr$   r%   r&   r2   TunnelDataInr   rM   r	   r$   r%   r&   r2   get_tunnel_datar'   r(   r\   r]   rR   r   rQ   r   rD   vpn_servicera   rT   s        rB   get_vpn_metrics_tunnel_data_inr   \  s     B ))))>>>>	
 ,,!))%% - 
  Bx#a&AABr   z/metrics/vpn/tunnel_data_outc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   TunnelDataOutr   rM   r   r   s        rB   get_vpn_metrics_tunnel_data_outr   r  s     B ))))>>>>	
 ,,"))%% - 
  Bx#a&AABr   z/metrics/vpn/tunnel_statec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   TunnelStater   rM   r   r   s        rB   get_vpn_metrics_tunnel_stater     s     B ))))>>>>	
 ,, ))%% - 
  Bx#a&AABr   z/metrics/ebs/volume_read_opsc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr$   r%   r&   r6   VolumeReadOpsr   rM   r
   r$   r%   r&   r6   get_ebs_metric_datar'   r(   r\   r]   rR   r   rQ   r   rD   ebs_servicera   rT   s        rB    get_ebs_metrics_volumne_read_opsr     s     B ))))>>''	
 00"))%%$\\ 1 
  Bx#a&AABr   z/metrics/ebs/volume_write_opsc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeWriteOpsr   rM   r   r   s        rB   get_ebs_metrics_write_opsr          B ))))>>''	
 00#))%%$\\ 1 
  Bx#a&AABr   z/metrics/ebs/volume_read_bytesc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeReadBytesr   rM   r   r   s        rB   get_ebs_metrics_read_bytesr     s     B ))))>>''	
 00$))%%$\\ 1 
  Bx#a&AABr   z/metrics/ebs/volume_write_bytesc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeWriteBytesr   rM   r   r   s        rB   get_ebs_metrics_write_bytesr     s     B ))))>>''	
 00%))%%$\\ 1 
  Bx#a&AABr   z#/metrics/ebs/volume_total_read_timec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeTotalReadTimer   rM   r   r   s        rB   get_ebs_metrics_total_read_timer     s     B ))))>>''	
 00())%%$\\ 1 
  Bx#a&AABr   z$/metrics/ebs/volume_total_write_timec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeTotalWriteTimer   rM   r   r   s        rB    get_ebs_metrics_total_write_timer    s     B ))))>>''	
 00)))%%$\\ 1 
  Bx#a&AABr   z/metrics/ebs/volume_idle_timec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeIdleTimer   rM   r   r   s        rB   get_ebs_metrics_idle_timer  "  r   r   z /metrics/ebs/volume_queue_lengthc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeQueueLengthr   rM   r   r   s        rB   get_ebs_metrics_queue_lengthr  8  s     B ))))>>''	
 00&))%%$\\ 1 
  Bx#a&AABr   z)/metrics/ebs/volume_throughput_percentagec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   VolumeThroughputPercentager   rM   r   r   s        rB   get_ebs_metrics_throughputr
  N  s     B ))))>>''	
 00/))%%$\\ 1 
  Bx#a&AABr   z/metrics/ebs/BurstBalancec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   BurstBalancer   rM   r   r   s        rB   get_ebs_metrics_burst_balancer  d  s     B ))))>>''	
 00!))%%$\\ 1 
  Bx#a&AABr   z/metrics/ec2/categorizedc                 v  K   	 t        | j                  | j                  | j                  | j                        }d|j                  | j                  | j                        i}dt        j                  |d   d         i}t        ||d      S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr   r   zCategorized EC2 metricsrF   rM   )r   r$   r%   r&   r+   r,   r'   r(   r   categorize_metric_data_resultsr   rR   rQ   )r   rD   r=   r#   categorized_resultsrT   s         rB   categorize_ec2_metricsr  z  s     B NN	
 {>>w?Q?QSZScScd
 sAA/RcBdexByz
 x.AMfgg Bx#a&AABs5   B9BB B9	B6B1+B6,B91B66B9z/metrics/ec2/diskreadc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr$   r%   r&   r+   DiskReadOpsr   rM   r   r$   r%   r&   r+   get_ec2_metric_datar'   r(   r\   r]   rR   r   rQ   r   rD   ec2_servicera   rT   s        rB   get_ec2_diskread_metricsr    s     B ))))>>++	
 00 ))%%$\\ 1 
  Bx#a&AABr   z/metrics/ec2/diskwritec                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr  DiskWriteOpsr   rM   r  r  s        rB   get_ec2_diskwrite_metricsr    s     B ))))>>++	
 00!))%%$\\ 1 
  Bx#a&AABr   z/metrics/ec2/networkinc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr  	NetworkInr   rM   r  r  s        rB   get_ec2_networkin_metricsr    s     B ))))>>++	
 00))%%$\\ 1 
  Bx#a&AABr   z/metrics/ec2/networkoutc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr  
NetworkOutr   rM   r  r  s        rB   get_ec2_networkout_metricsr"    s     B ))))>>++	
 00))%%$\\ 1 
  Bx#a&AABr   z/metrics/ec2/diskreadbytesc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr  DiskReadBytesr   rM   r  r  s        rB   get_ec2_diskreadbytes_metricsr%    s     B ))))>>++	
 00"))%%$\\ 1 
  Bx#a&AABr   z/metrics/ec2/diskwritebytesc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr  DiskWriteBytesr   rM   r  r  s        rB   get_ec2_DiskWriteBytes_metricsr(    s     B ))))>>++	
 00#))%%$\\ 1 
  Bx#a&AABr   z/metrics/ec2/statuscheckfailedc                 R  K   	 t        | j                  | j                  | j                  | j                        }|j                  d| j                  | j                  | j                  | j                        }|S # t        $ r }t        |t        |            cY d }~S d }~ww xY ww)Nr  StatusCheckFailedr   rM   r  r  s        rB   !get_ec2_StatusCheckFailed_metricsr+    s     B ))))>>++	
 00&))%% 1 
  Bx#a&AABr   z"/metrics/ec2/categorized_day/imagec                   K   	 t        | j                  | j                  | j                  | j                        }t        j                         j                  d      }t        j                         j                  dddd      j                  d      }d|j                  ||      i}t        j                  |d   d         }t        j                  |      }dd|dS # t        $ r}d	|_        d
t        |      dcY d }~S d }~ww xY ww)Nrp   r   )hourminutesecondmicrosecondr   r   r   z Categorized EC2 metrics as Imager   r   r   r   )r   r$   r%   r&   
generic_idr   r   r   r   r,   r   r  generate_image_from_metricsrR   r   rQ   )	r   rD   r=   r(   r'   r#   r  r   rT   s	            rB   categorize_ec2_metrics_imager3  '  s     7 NN	
 ,,.))*=> \\^++1QTU+V__`st
{>>z8T
 "@@QbAcdwAxy667JK#/Qbnoo 7""c!f667s5   DCC D	D&D :D;D DDz1/metrics/load_balancer/target_response_time/imagec                   K   	 t        | j                  | j                  | j                  | j                        }d}t        j                         t        d      z
  j                  d      }t        j                         j                  d      }d}d}|j                  |||||      }|d	   }	|d
   }
t        j                  |	|
|      }dd|dS # t        $ r}d|_        dt        |      dcY d }~S d }~ww xY ww)Nr   r   rl   rn   rp     Averager   r   r   r   z7Categorized Load Balancer Target Response Time as Imager   r   r   r   )r   r$   r%   r&   r1  r   r   r   r   r   r   generate_base64_imagerR   r   rQ   )r   rD   r   r   r'   r(   r\   r]   r#   r   r   r   rT   s                rB   r   r   >  s    62))))>>%00	 
 #llnya'88BBCVW
<<>**+>?.>>! ? 
 %\2
 * -BB:vV[\#0i  |H  I  	I 6"!c!f5565   C<CC C<	C9C4.C9/C<4C99C<z%/metrics/ebs/volume_write_bytes/imagec                   K   	 t        | j                  | j                  | j                  | j                        }d}t        j                         t        d      z
  j                  d      }t        j                         j                  d      }d}d}|j                  |||||      }|d	   }	|d
   }
t        j                  |	|
|      }dd|dS # t        $ r}d|_        dt        |      dcY d }~S d }~ww xY ww)Nr   r   rl   rn   rp   r5  r6  r   r   r   r   zVolume Write Bytesr   r   r   r   )r
   r$   r%   r&   r1  r   r   r   r   r   r   r7  rR   r   rQ   )r   rD   r   r   r'   r(   r\   r]   r#   r   r   r   rT   s                rB   r   r   _  s    6 ))))>>((	
 llnya'88BBCVW
<<>**+>?%99! : 
 %\2
 * -BB:vV[\#0DVbcc 6"!c!f556r8  z!/metrics/vpn/tunnel_data_in/imagec                   K   	 t        | j                  | j                  | j                  | j                        }d}t        j                         t        d      z
  j                  d      }t        j                         j                  d      }d}d}|j                  |||||      }|d	   }	|d
   }
t        j                  |	|
|      }dd|dS # t        $ r}d|_        dt        |      dcY d }~S d }~ww xY ww)Nr   r   rl   rn   rp   r5  r6  r   r   r   r   zTunnel data inr   r   r   r   r	   r$   r%   r&   r1  r   r   r   r   r   r   r7  rR   r   rQ   r   rD   r   r   r'   r(   r\   r]   ra   r   r   r   rT   s                rB   $get_vpn_metrics_tunnel_data_in_imager=    s    6 ))))>>%%	
 llnya'88BBCVW
<<>**+>?,,! - 
 L)
! -BB:vV[\#0@R^__ 6"!c!f556r8  z"/metrics/vpn/tunnel_data_out/imagec                   K   	 t        | j                  | j                  | j                  | j                        }d}t        j                         t        d      z
  j                  d      }t        j                         j                  d      }d}d}|j                  |||||      }|d	   }	|d
   }
t        j                  |	|
|      }dd|dS # t        $ r}d|_        dt        |      dcY d }~S d }~ww xY ww)Nr   r   rl   rn   rp   r5  r6  r   r   r   r   zTunnel data outr   r   r   r   r;  r<  s                rB   %get_vpn_metrics_tunnel_data_out_imager?    s    6 ))))>>%%	
 llnya'88BBCVW
<<>**+>?,,! - 
 L)
! -BB:vV[\#0AS_`` 6"!c!f556r8  z/metrics/vpn/tunnel_state/imagec                   K   	 t        | j                  | j                  | j                  | j                        }d}t        j                         t        d      z
  j                  d      }t        j                         j                  d      }d}d}|j                  |||||      }|d	   }	|d
   }
t        j                  |	|
|      }dd|dS # t        $ r}d|_        dt        |      dcY d }~S d }~ww xY ww)Nr   r   rl   rn   rp   r5  r6  r   r   r   r   zTunnel stater   r   r   r   r;  r<  s                rB   "get_vpn_metrics_tunnel_state_imagerA    s    6 ))))>>%%	
 llnya'88BBCVW
<<>**+>?,,! - 
 L)
! -BB:vV[\#P\]] 6"!c!f556r8  )Sr   r   fastapir   r   utils.utilsr   utils.generic_base64_imager   services.ec2_metricsr   services.load_balancer_metricsr   services.vpn_metricsr	   services.ebs_metricsr
   services.waf_metricsr   services.waf_metricr   models.metricsrquestr   models.requests.ec2requestr   models.requests.wafrequestr   #models.requests.loadbalancerrequestr   models.requests.vpnrequestr   models.requests.ebsrequestr   !models.requests.credentialRequestr   metrics.wafr   models.requests.wafrequestImager   matplotlib.pyplotpyplotr   r   r   r   apppostrC   rU   rb   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r  r"  r%  r(  r+  r3  r=  r?  rA       rB   <module>rZ     s\    	 % ' < + > + + + + / 1 1 C 1 1 >  ;   (i*-0~ -0 -0^ .): ) ) )B 
 !B
 Bh B "B, 
 !B
 Bh B "B, 
:6/ :6X :6 :6x 
01B2E BQY B 2B* 
78B4G BS[ B 9B* 
12B*= B B 3B* 
12B*= B B 3B* 
12B*= B B 3B* 
:;B6I BU] B <B* 
'(B* B B )B* 
()B: B B *B* 
%&B
 Bh B 'B* 
()BJ B( B *B* 
)*BZ B8 B +B* 
*+Bj BH B ,B* 
+,Bz BX B -B* 
/0B: B B 1B* 
01BJ B( B 2B* 
)*BZ B8 B +B* 
,-B
 Bh B .B* 
56Bj BH B 7B* 
%&B Bx B 'B* 
$%B* B B &B$ 
!"BJ B( B #B* 
"#BZ B8 B $B* 
"#BZ B8 B $B* 
#$Bj BH B %B* 
&'B Bx B (B* 
'(B* B B )B* 
*+BZ B8 B ,B* 
./70@ 7H 7 07, 
=>64D 6PX 6 ?6@ 
1264D 6PX 6 36@ 
-.68H 6T\ 6 /6@ 
./69I 6U] 6 06> 
+,66F 6RZ 6 -6rY  