o
    i:                     @   sd   d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZ G dd deZdS )    N)set_of_ints	comma_setcomma_list_or_emptyparse_date_as_epoch_timestamp)pretty_json)api)report_errorsreport_warningsc                   @   s   e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd ZdS )ServiceLevelObjectiveClientc                 C   s  |j ddd}|jddd}d|_|j dd	d}|jd
dddgd |jddd d |jddd d |jddd td |jddd |jddd d |jddd d |jddd td |jdd d d |jd!d"d td |j| jd# |j d$d%d}|jd&d't	d(d) |j| j
d# |j d*d+d}|jd,d-d |jd
d.ddgd |jddd d |jddd d |jddd |jddd td |jddd d |jddd d |jddg td |jdd d d |jd!d"d d |j| jd# |j d/d0d}|jd&d't	d(d) |j| jd# |j d1d2d}|jd,d3d |j| jd# |j d4d5d}	|	jd6d7d |	jd8d9td) |	jd:d;d<d |	jd=d>d?d |	j| jd# |j d@dAd}
|
jd,dBd |
j| jd# |j dCdAd}|jdDdEtd) |j| jd# |j dFdGd}|jd,dHd |jdIdJtd) |j| jd# |j dKdLd}|jdDdEtd) |j| jd# |j dMdNd}|jd,dOd |jdPtdQdR |jdStdTdR |j| jd# d S )UNservice_level_objectivez1Create, edit, and delete service level objectives)helpVerbsverb)titledestTcreatezCreate a SLOz--typeztype of the SLO, e.g.metricmonitor)r   choicesz--namezname of the SLO)r   defaultz--descriptionzdescription of the SLOz--tagszcomma-separated list of tags)r   r   typez--thresholdsz^comma separated list of <timeframe>:<target>[:<warning>[:<target_display>[:<warning_display>]]z--numeratorz+numerator metric query (sum of good events)z--denominatorz.denominator metric query (sum of total events)z--monitor_idsz!explicit monitor_ids to use (CSV)z--monitor_searchzmonitor search terms to usez--groupszWfor a single monitor you can specify the specific groups as a pipe (|) delimited string)funcfcreatezCreate a SLO from filefilezjson file holding all detailsr)r   r   updatezUpdate existing SLOslo_idz&SLO to replace with the new definitionz1type of the SLO (must specify it's original type)fupdatezUpdate existing SLO from fileshowzShow a SLO definitionzSLO to showshow_allzShow a list of all SLOsz--queryz8string to filter SLOs by query (see UI or documentation)z	--slo_idsz;comma separated list indicating what SLO IDs to get at oncez--offsetzoffset of query paginationr   z--limitzlimit of query paginationd   deletezDelete a SLOzSLO to deletedelete_manyslo_idsz)comma separated list of SLO IDs to deletedelete_many_timeframezDelete a SLO timeframezSLO ID to update
timeframesz,CSV of timeframes to delete, e.g. 7d,30d,90d
can_deletezCheck if can delete SLOshistoryzGet the SLO historyzSLO to query the historyfrom_tsz`from` date or timestamp)r   r   to_tsz`to` date or timestamp)
add_parseradd_subparsersrequiredadd_argumentr   r   set_defaults_createargparseFileType_file_createlist_update_file_update_showr   	_show_all_delete_delete_many_delete_timeframe_can_deleter   _history)cls
subparsersparserverb_parserscreate_parserfile_create_parserupdate_parserfile_update_parsershow_parsershow_all_parserdelete_parserdelete_many_parserdelete_timeframe_parsercan_delete_parserhistory_parser rL   \/home/ubuntu/.local/lib/python3.10/site-packages/datadog/dogshell/service_level_objective.pysetup_parser   s  z(ServiceLevelObjectiveClient.setup_parserc                 C   s  |j t_|j}|j|jd}|jr$ttdd |j	dD }||d< g }|j
	dD ]I}|	d}|d }t|d }	||	d	}
t|d
krPt|d
 |
d< t|dkr`|d r`|d |
d< t|dkrp|d rp|d |
d< ||
 q,||d< |jr|j|d< |jdkr|j|jd|d< n$|jr|j|d< nt|j|d< |jrt|jdkr|j	d}||d< |jr|j|d< tjjdi |}t| t| |dkrtt| d S tt| d S )N)r   namec                 S      g | ]
}|  r|  qS rL   strip.0trL   rL   rM   
<listcomp>       z7ServiceLevelObjectiveClient._create.<locals>.<listcomp>,tags:r      	timeframetarget   warning   target_display   warning_display
thresholdsdescriptionr   	numeratordenominatorquerymonitor_searchmonitor_ids|groupsprettyrL   )timeoutr   _timeoutformatr   rO   rY   sortedsetsplitre   floatlenappendrf   rh   ri   rk   r3   rl   rn   ServiceLevelObjectiver   r	   r   printr   jsondumps)r=   argsrr   paramsrY   re   threshold_strpartsr]   r^   	thresholdrn   resrL   rL   rM   r/      sP   




z#ServiceLevelObjectiveClient._createc                 C   sj   |j t_|j}t|j}tjjdddi|}t	| t
| |dkr,tt| d S tt| d S )N
return_rawTro   rL   )rp   r   rq   rr   r{   loadr   ry   r   r	   r   rz   r   r|   r=   r}   rr   slor   rL   rL   rM   r2      s   z(ServiceLevelObjectiveClient._file_createc                 C   s  |j t_|j}d|ji}|jrcg }|jdD ]G}|d}|d }|d }||d}	t|dkr9t|d |	d< t|d	krI|d	 rI|d	 |	d
< t|dkrY|d rY|d |	d< |	|	 q||d< |j
rk|j
|d< |jdkr|jr|jr|j|jd|d< n"|jr|j|d< n|j|d< |jrt|jdkr|jd}
|
|d< |jrttdd |jD }||d< tjj|jfddi|}t| t| |dkrtt| d S tt| d S )Nr   rX   rZ   r   r[   r\   r_   r`   ra   rb   rc   rd   re   rf   r   rg   rj   rk   rl   rm   rn   c                 S   rP   rL   rQ   rS   rL   rL   rM   rV   &  rW   z7ServiceLevelObjectiveClient._update.<locals>.<listcomp>rY   r   Tro   )rp   r   rq   rr   r   re   ru   rw   rv   rx   rf   rh   ri   rk   rl   rn   rY   rs   rt   ry   r   r   r	   r   rz   r   r{   r|   )r=   r}   rr   r~   re   r   r   r]   r^   r   rn   rY   r   rL   rL   rM   r4      sR   






z#ServiceLevelObjectiveClient._updatec                 C   sp   |j t_|j}t|j}tjj|d fddi|}t	| t
| |dkr/tt| d S tt| d S )Nidr   Tro   )rp   r   rq   rr   r{   r   r   ry   r   r	   r   rz   r   r|   r   rL   rL   rM   r5   0  s   z(ServiceLevelObjectiveClient._file_updatec                 C   sp   |j t_|j}tjj|jdd}t| t| |j	r#t
|d |d< |dkr/tt| d S tt| d S )NTr   r   ro   )rp   r   rq   rr   ry   getr   r	   r   
string_idsstrrz   r   r{   r|   )r=   r}   rr   r   rL   rL   rM   r6   >  s   z!ServiceLevelObjectiveClient._showc                 C   s   |j t_|j}|j|jd}|jr|j|d< n|j|d< tjj	dddi|}t
| t| |dkr;tt| d S tt| d S )N)offsetlimitrj   idsr   Tro   rL   )rp   r   rq   rr   r   r   rj   r#   ry   get_allr	   r   rz   r   r{   r|   )r=   r}   rr   r~   r   rL   rL   rM   r7   N  s   
z%ServiceLevelObjectiveClient._show_allc                 C   s`   |j t_tjj|jdd}|d ur.t| t| tdkr%t	t
| d S t	t| d S d S )NTr   ro   )rp   r   rq   ry   r!   r   r	   r   rr   rz   r   r{   r|   r=   r}   r   rL   rL   rM   r8   b  s   z#ServiceLevelObjectiveClient._deletec                 C   \   |j t_tj|j}|d ur,t| t| tdkr#t	t
| d S t	t| d S d S Nro   )rp   r   rq   ry   r"   r#   r	   r   rr   rz   r   r{   r|   r   rL   rL   rM   r9   o  s   z(ServiceLevelObjectiveClient._delete_manyc                 C   sf   |j t_|j|ji}tj|}|d ur1t| t| t	dkr(t
t| d S t
t| d S d S r   )rp   r   rq   r   r%   ry   bulk_deleter	   r   rr   rz   r   r{   r|   )r=   r}   opsr   rL   rL   rM   r:   |  s   z-ServiceLevelObjectiveClient._delete_timeframec                 C   r   r   )rp   r   rq   ry   r&   r#   r	   r   rr   rz   r   r{   r|   r   rL   rL   rM   r;        z'ServiceLevelObjectiveClient._can_deletec                 C   r   r   )rp   r   rq   ry   r'   r   r	   r   rr   rz   r   r{   r|   r   rL   rL   rM   r<     r   z$ServiceLevelObjectiveClient._historyc                 C   s   | dd dd ddS )Nz\r
z\n	z\t)replace)r=   srL   rL   rM   _escape  s   z#ServiceLevelObjectiveClient._escapeN)__name__
__module____qualname__classmethodrN   r/   r2   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   rL   rL   rL   rM   r
      s8    
 
9

7







r
   )r0   r{   datadog.util.clir   r   r   r   datadog.util.formatr   datadogr   datadog.dogshell.commonr   r	   objectr
   rL   rL   rL   rM   <module>   s   