o
    iV-                     @   s|   d dl Z d dlZ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	m
Z
mZmZ d dlmZ G dd deZdd	 ZdS )
    N)pretty_json)api)report_errorsreport_warnings	print_err)datetimec                   @   s   e Zd Zedd Zedd Zedd Zed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 )ScreenboardClientc                 C   s  |j ddd}|jddddd |jd	d
d}d|_|j ddd}|jddd |jddd |jdddd |jdtg dd |jdtd dd |jdtd dd |j| jd |j dd d}|jd!d"d |jddd |jddd |jdddd |jdtg dd |jdtd dd |jdtd dd |j| jd |j d#d$d}|jd!d%d |j| j	d |j d&d'd}|jd!d(d |j| j
d |j d)d*d}|jd!d+d |j| jd |j d,d-d}	|	jd!d.d |	j| jd |j d/d0d}
|
jd!d1d |
jd2d3d |
j| jd |j d4d5d}|jd6dd7d8d |jd9d:d;td<d= |j| jd |j d>d?d}|jd2d@d |jdddd |j| jd d S )ANscreenboardz&Create, edit, and delete screenboards.)helpz--string_ids
store_true
string_idsz<Represent screenboard IDs as strings instead of ints in JSON)actiondestr
   Verbsverb)titler   TpostzCreate screenboards.r   ztitle for the new screenboarddescriptionz$short description of the screenboardgraphsz?graph definitions as a JSON string. if unset, reads from stdin.?)r
   nargsz--template_variableszla json list of template variable dicts, e.g. [{'name': 'host', 'prefix': 'host', 'default': 'host:my-host'}])typedefaultr
   z--widthzscreenboard width in pixelsz--heightzscreenboard height in pixels)funcupdatezUpdate existing screenboards.screenboard_idz/screenboard to replace  with the new definitionshowzShow a screenboard definition.zscreenboard to showdeletezDelete a screenboard.zscreenboard to deletesharez2Share an existing screenboard's with a public URL.zscreenboard to sharerevokez3Revoke an existing screenboard's with a public URL.zscreenboard to revokepullz2Pull a screenboard on the server into a local filezID of screenboard to pullfilenamezfile to pull screenboard intopushz;Push updates to screenboards from local files to the serverz--append_auto_textappend_auto_textzdWhen pushing to the server, appends filename and timestamp to the end of the screenboard descriptionfilez'screenboard files to push to the server+r)r
   r   r   new_filez7Create a new screenboard and put its contents in a filez-name of file to create with empty screenboard)
add_parseradd_argumentadd_subparsersrequired_template_variablesintset_defaults_post_update_show_delete_share_revoke_pullargparseFileType_push	_new_file)cls
subparsersparserverb_parserspost_parserupdate_parsershow_parserdelete_parsershare_parserrevoke_parserpull_parserpush_parsernew_file_parser rG   P/home/ubuntu/.local/lib/python3.10/site-packages/datadog/dogshell/screenboard.pysetup_parser   s   zScreenboardClient.setup_parserc                 C   s    |  |j|j|j|j|j d S N)_write_screen_to_filer   r!   timeoutformatr   )r:   argsrG   rG   rH   r5   s   s    zScreenboardClient._pullc                 C   s  |j t_|jD ]~}t|}|jr-t 	d}d
||j|d t }|d  |7  < d|v rCt|d |d< tjjd	i |}n	tjjd	i |}d|v r[td
|d |j t| t| t
dkrntt| ntt| |j
dkrtd
|j|d  qd S )
Nz%x %Xz*<br/>
Updated at {0} from {1} ({2}) on {3}idr   errorsz/Upload of screenboard {0} from file {1} failed.prettyz#Uploaded file {0} (screenboard {1})rG   )rL   r   _timeoutr$   jsonloadr#   r   nowstrftimerM   nameplatformnoder-   Screenboardr   creater   r   r   printr   dumps)r:   rN   f
screen_objdatetime_str	auto_textresrG   rG   rH   r8   x   s0   


zScreenboardClient._pushrawFc           	      C   s   t |dV}tj|}t| t| |}d|v r|d= d|v r$|d= |r.t|d |d< tj||dd |dkrCt	d
|| nt	d	
|| W d    d S W d    d S 1 s^w   Y  d S )
NwresourceurlrO      )indentrQ   z&Downloaded screenboard {0} to file {1}z{0} {1})openr   rZ   getr   r   strrS   dumpr\   rM   )	r:   r   r!   rL   rM   r   r^   rb   r_   rG   rG   rH   rK      s$   "z'ScreenboardClient._write_screen_to_filec                 C   s   t j }|jt_|j}|j}|jd u rt j }t	|}tj
j|j|j|g|j|j|jd}t| t| |dkrDtt| d S tt| d S )N)r   r   r   template_variableswidthheightrQ   )sysstdinreadrL   r   rR   rM   r   rS   loadsrZ   r[   r   r   rm   rn   ro   r   r   r\   r   r]   )r:   rN   r   rM   rb   rG   rG   rH   r/      s(   



zScreenboardClient._postc              	   C   s   |j t_|j}|j}|jd u rtj }t	|}tj
j|j|j|j||j|j|jd}t| t| |dkr@tt| d S tt| d S )N)board_titler   widgetsrm   rn   ro   rQ   )rL   r   rR   rM   r   rp   rq   rr   rS   rs   rZ   r   r   r   r   rm   rn   ro   r   r   r\   r   r]   r:   rN   rM   r   rb   rG   rG   rH   r0      s(   


	zScreenboardClient._updatec                 C   s.   t |jd }tjd| }t| d S )NrO   z/dash/dash/{0})rS   rT   r$   r   	_api_hostrM   
webbrowserri   )r:   rN   dash_idrf   rG   rG   rH   	_web_view   s   zScreenboardClient._web_viewc                 C   sl   |j t_|j}tj|j}t| t| |j	r!t
|d |d< |dkr-tt| d S tt| d S )NrO   rQ   )rL   r   rR   rM   rZ   rj   r   r   r   r   rk   r\   r   rS   r]   r:   rN   rM   rb   rG   rG   rH   r1      s   zScreenboardClient._showc                 C   s6   |j t_tj|j}|d urt| t| d S d S rJ   )rL   r   rR   rZ   r   r   r   r   )r:   rN   rb   rG   rG   rH   r2      s   zScreenboardClient._deletec                 C   F   |j t_|j}tj|j}|dkrtt| d S tt	
| d S NrQ   )rL   r   rR   rM   rZ   r   r   r\   r   rS   r]   r{   rG   rG   rH   r3        zScreenboardClient._sharec                 C   r|   r}   )rL   r   rR   rM   rZ   r   r   r\   r   rS   r]   r{   rG   rG   rH   r4     r~   zScreenboardClient._revokec                 C   s   |j t_|j}|j}|jd u rtj }t	|}tj
j|jd|j|gd}t| t| | |d |j|j ||j |dkrJtt| d S tt| d S )NzDescription for {0})rt   r   ru   rO   rQ   )rL   r   rR   rM   r   rp   rq   rr   rS   rs   rZ   r[   r!   r   r   rK   r   r\   r   r]   rv   rG   rG   rH   r9     s   


zScreenboardClient._new_fileN)rc   F)__name__
__module____qualname__classmethodrI   r5   r8   rK   r/   r0   rz   r1   r2   r3   r4   r9   rG   rG   rG   rH   r      s2    
]

!








r   c                 C   sB   d| vrdd |  dD S zt| W S  ty    tdw )N[c                 S   s   g | ]}|  qS rG   )strip).0vrG   rG   rH   
<listcomp>/  s    z'_template_variables.<locals>.<listcomp>,z$bad template_variable json parameter)splitrS   rs   	Exceptionr6   ArgumentTypeError)tpl_var_inputrG   rG   rH   r,   -  s   
r,   )r6   rS   rX   rp   rx   datadog.util.formatr   datadogr   datadog.dogshell.commonr   r   r   r   objectr   r,   rG   rG   rG   rH   <module>   s     