o
    $i                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlm  mZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ eeZeej dZd	Z G d
d deZ!e!j"fe!j"fe!j#e!j"fe!j#e!j"fe!j#e!j"fdZ$G dd deZ%dS )    N)Enum)quote)RequestResponse)DEFAULT_PROMETHEUS_HEADERSDEFAULT_PROMETHEUS_HOSTPROMETHEUS_HEADERS_ENV_VARPROMETHEUS_HOST_ENV_VARPrometheusQueryErrorparse_prom_headers)SubprocessModule)SubprocessRouteTable1h1sc                   @   s,   e Zd ZdZdZdde de d fZdS )PrometheusQueryzJEnum to store types of Prometheus queries for a given metric and grouping.)valuez#sum({}{{SessionName='{}'}}) by ({})maxz2max_over_time(sum({}{{SessionName='{}'}}) by ({})[:z])N)__name__
__module____qualname____doc__VALUEMAX_TIME_WINDOWSAMPLE_RATEMAX r   r   a/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/dashboard/modules/data/data_head.pyr       s    r   )ray_data_output_rowsray_data_spilled_bytesray_data_current_bytesray_data_cpu_usage_coresray_data_gpu_usage_coresc                       sH   e Zd Z fddZede dede	fddZ
dd	 Z  ZS )
DataHeadc                    s:   t  j|i | tjtt| _ttjt	t
| _d S )N)super__init__osenvirongetr	   r   prometheus_hostr   r   r   prometheus_headers)selfargskwargs	__class__r   r   r%   5   s   
zDataHead.__init__z/api/data/datasets/{job_id}reqreturnc              
      sx  |j d }zddlm} | }|j|I d H }|D ].}t D ]'\}}dd |D || |< || d D ]}	dd |D || d |	 |< q7q"qzt D ]\}}|D ]z}
|
j\}}| |	|| j
dI d H }|d	 d
 D ]}|d d |d d }}||v r||| | |< qq| |	|| j
dI d H }|d	 d
 D ].}|d d |d d |d d }}	}||v r|	|| d v r||| d |	 | |< qqVqPW n tjjy   td Y nw |D ]}ttdd || d  || d< qttdd | }t|dd dd}ttd|iddW S  ty; } ztd tdt|dW  Y d }~S d }~ww )Njob_idr   )get_or_create_stats_actorc                 S      i | ]}|j d  d qS r   r   .0queryr   r   r   
<dictcomp>N   s    z)DataHead.get_datasets.<locals>.<dictcomp>	operatorsc                 S   r4   r5   r6   r7   r   r   r   r:   P   s    datasetdataresultmetricr      zdataset, operatoroperatorzWException occurred while querying Prometheus. The Prometheus server may not be running.c                 S      d| d i| d S )NrA   r   r@   r   itemr   r   r   <lambda>       z'DataHead.get_datasets.<locals>.<lambda>c                 S   rB   )Nr<   r   r@   r   rC   r   r   r   rE      rF   c                 S   s   | d S )N
start_timer   )xr   r   r   rE      s    T)keyreversedatasetszapplication/json)textcontent_typez*Exception occurred while getting datasets.i  )statusrL   )
match_inforay.data._internal.statsr3   get_datasetsremoteDATASET_METRICSitemsr   _query_prometheusformatsession_nameaiohttpclient_exceptionsClientConnectorErrorlogging	exceptionlistmapsortedr   jsondumps	Exceptionstr)r+   r0   r2   r3   _stats_actorrK   r<   r?   queriesrA   r9   
query_name
prom_querydataset_resultresr   operator_resulter   r   r   rQ   A   s   







	"
zDataHead.get_datasetsc              	      s   | j j| j dt| | jd4 I d H &}|jdkr/| I d H }|W  d   I d H  S | I d H }t|j|1 I d H sBw   Y  d S )Nz/api/v1/query?query=)headers   )	http_sessionr(   r)   r   r*   rN   r`   rL   r
   )r+   r9   resp	prom_datamessager   r   r   rU      s   
zDataHead._query_prometheus)r   r   r   r%   routesr(   optional_utilsinit_ray_and_catch_exceptionsr   r   rQ   rU   __classcell__r   r   r.   r   r#   4   s    Tr#   )&r`   r[   r&   enumr   urllib.parser   rX   aiohttp.webr   r   ray.dashboard.optional_utils	dashboardrs   *ray.dashboard.modules.metrics.metrics_headr   r   r   r	   r
   r   !ray.dashboard.subprocesses.moduler   !ray.dashboard.subprocesses.routesr   rr   	getLoggerr   loggersetLevelINFOr   r   r   r   r   rS   r#   r   r   r   r   <module>   s.     



	