o
    Nrf¬5  ã                   @   sÈ  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZmZ e  ¡ e jddddede jdd	d
dede jddddede jddddede jddddede jddddede jddddede jddd d!e jd"dd#d!e jd$dd%d!e jd&dd'd(e jd)d*d+ede jd,d-d.ede jd/d0d1ede jd2d3d4ede jd5d6d7edd8d9„ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒZ		
									:	*	-	0	3	6d=d;d<„ZdS )>é    N)ÚCONTAINER_PREFIXÚNETWORK_PREFIXÚREDIS_PREFIXÚ
REDIS_CONFz-tz
--temp-dirú/tmp/higlass-dockerzThe temp directory to use)ÚdefaultÚhelpÚtypez-dz
--data-dirú	~/hg-dataz!The higlass data directory to usez-vz	--versionÚlatestzeThe version of the Docker container to use (or "local" for images built locally using higlass-docker)z-pz--porté#  z0The port that the HiGlass instance should run onz-nz	--hg-namer   z"The name for this higlass instancez-sz
--site-urlzXWhen creating an external-facing instance, enter its IP or hostname using this parameterz-mz--media-dirz2Use a specific media directory for uploaded files.z--public-data/--no-public-dataTz@Include or exclude public data in the list of available tilesets)r   r   z--default-track-optionsz4Specify a json file containing default track optionsz	--workerszCSpecify a custom number of workers for the uWSGI application serverz--use-rediszHInitialize a Redis-based caching service and bind higlass instance to it)Zis_flagr   z--redis-dirú~/redis-dataz(Use a specific directory for Redis filesz--hg-repositoryúhiglass/higlass-dockerz2The Docker repository to use for the HiGlass imagez--redis-repositoryÚredisz0The Docker repository to use for the Redis imagez--redis-tagú5.0.3-alpinez4The Docker tag to use for the Redis image repositoryz--redis-portéë  z#The port to use for the Redis imagec                 C   s*   t | |||||||||	|
|||||ƒ d S )N)Ú_start)Útemp_dirÚdata_dirÚversionÚportÚhg_nameÚsite_urlÚ	media_dirÚpublic_dataÚdefault_track_optionsÚworkersÚ	use_redisÚ	redis_dirÚhg_repositoryÚredis_repositoryÚ	redis_tagÚ
redis_port© r#   ú]/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/higlass_manage/start.pyÚstart   s$   sðr%   Fc           *   
   C   sd  d  t|¡}t ¡ }z|j |¡}tj d¡ | 	¡  | 
¡  W n tjjy+   Y n tjjy<   tj d¡ Y dS w |
rÁd  t|¡}d  t|¡}z|jj|gd}|rg|j |¡}tj d¡ | 
¡  W n tjjy~   tj d¡ t d¡ Y nw z
|jj|d	d
}W n" tjjy« } ztj d  |¡¡ t d¡ W Y d}~nd}~ww z|j |¡}tj d¡ | 	¡  | 
¡  W n  tjjyÍ   Y n tjjyâ   tj d¡ t d¡ Y nw tj d  ||¡¡ tj ¡  |jj||d}tj d¡ tj ¡  t |¡}t |¡st |¡ tj  tj !tj "t#¡¡dd¡}tj |¡s:tj d  |¡¡ t d¡ |dddœ|t$ddœi}d  t$¡}z|jj%|||||dd}W ng tjj&y| } ztj d  |¡¡ t d¡ W Y d}~nId}~w tjj'yž } ztj d  |¡¡ t d¡ W Y d}~n'd}~w tjjyÀ } ztj d  |¡¡ t d¡ W Y d}~nd}~ww |dkrÍ|j d¡}ntj d¡ tj ¡  |j ||¡}tj d¡ tj ¡  t |¡}t | ¡} t | ¡sÿt | ¡ t |¡s
t |¡ i }|dur||d < |	dur|	|d!< tj d"  |¡¡ tj d#  | ¡¡ |du r7d$nd%  |¡}tj d&  ||¡¡ | d'ddœ|dddœi} |r`d(ddœ| |< d(|d)< |
sr|jj%|d*|i| ||dd+}n||d,< ||d-< |jj%||d*|i| ||ddd.}tj d/  |¡¡ d0}!d1}"|!süz1tj d2  |"¡¡ |"d17 }"tjd3  |¡d4d5}#|#j(d6krÈtj d7  |#j(¡¡ t) *d8¡ nd}!W n- tjjyâ   tj d9¡ t) *d8¡ Y n tjj+yø   tj d:¡ t) *d8¡ Y nw |!rštj d;  |¡¡ |r|durt, -¡ }$d<  |$¡}%| .|%¡}&|s]t/ 0|#j1 2d=¡¡}'d>g|'d?< d}!d@|'dAœ}'| .dB¡}&tj3dC  |¡|'dD}&tj dE  |&j1¡¡ | .dF  |$¡¡}&tj dE  |&¡¡ |durŽt4|dGƒ}(t/ 5|(¡})dH  t/ 6|)¡¡}%|%dI7 }%| .|%¡}&W d  ƒ n	1 s‰w   Y  dJ}%|%dK7 }%| .|%¡}&dL}%|%dK7 }%| .|%¡}&tj dM¡ tj dN¡ dS )Oz"
    Start a HiGlass instance
    z{}-{}z&Stopping previously running container
zVError connecting to the Docker daemon, make sure it is started and you are logged in.
N)Únamesz6Attempting to remove existing Docker network instance
zHError: Could not access Docker network list to remove existing network.
éÿÿÿÿZbridge)Zdriverz-Error: Could not access Docker network ({}).
z,Stopping previously running Redis container
z]Error: Error connecting to the Docker daemon, make sure it is started and you are logged in.
zPulling {}:{}
)Útagzdone
r   z
redis.confz6Error: Could not locate Redis configuration file [{}]
z/dataÚrw)ÚbindÚmodezredis-server {}T)ÚnameÚnetworkÚvolumesÚdetachz/Error: Redis container could not be started
{}
z3Error: Redis container image could not be found
{}
z8Error: Redis container server ran into a fatal error
{}
Úlocalzimage-defaultzPulling latest image... 
ZSITE_URLZWORKERSzData directory: {}
zTemp directory: ()
Ú z:{}zStarting... {} {}
z/tmpz/mediaZHIGLASS_MEDIA_ROOTéP   )Úportsr.   r,   Úenvironmentr/   Z
REDIS_HOSTZ
REDIS_PORT)r-   r3   r.   r,   r4   Zpublish_all_portsr/   zDocker started: {}
Fé   zsending request {}
z/http://localhost:{}/api/v1/viewconfs/?d=defaulté   )ÚtimeoutéÈ   z.Non 200 status code returned ({}), waiting...
g      à?zWaiting to start (tilesets)...
zRequest timed out
zpublic_data: {}
zYbash -c 'cp higlass-app/static/js/main.*.chunk.js higlass-app/static/js/main.{}.chunk.js'zutf-8z/api/v1ZtrackSourceServersZdefault_local)ÚuidZviewconfzpython higlass-server/manage.py shell --command="import tilesets.models as tm; o = tm.ViewConf.objects.get(uuid='default_local'); o.delete();" z%http://localhost:{}/api/v1/viewconfs/)Újsonzret: {}
z^bash -c 'sed -i '"'"'s/"default"/"default_local"/g'"'"' higlass-app/static/js/main.*.chunk.js'Úrzobash -c 'sed -i '"'"'s/assign({{}},this.props.options/assign({{defaultOptions: {} }},this.props.options/g'"'"' z' higlass-app/static/js/main.*.chunk.js'zDbash -c 'sed -i '"'"'s/main.*.chunk.js/main.invalid.chunk.js/g'"'"' z$ higlass-app/precache-manifest.*.js'zMbash -c 'sed -i '"'"'s/index.html/index_invalidated_by_higlass_manage/g'"'"' zReplaced js file
zStarted
)7Úformatr   ÚdockerZfrom_envÚ
containersÚgetÚsysÚstderrÚwriteÚstopÚremoveÚerrorsZNotFoundÚrequestsÚ
exceptionsÚConnectionErrorr   r   ZnetworksÚlistZAPIErrorÚexitÚcreateÚflushZimagesÚpullÚopÚ
expanduserÚexistsÚosÚmakedirsÚpathÚjoinÚdirnameÚrealpathÚ__file__r   ÚrunZContainerErrorZImageNotFoundÚstatus_codeÚtimeÚsleepZ
ReadTimoutÚslugidÚniceZexec_runr:   ÚloadsÚcontentÚdecodeÚpostÚopenÚloadÚdumps)*r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zhg_container_nameÚclientZhg_containerZnetwork_nameZ
redis_nameZnetwork_listr-   ÚerrZredis_containerZredis_imageZ
redis_confZredis_volumesZredis_commandZhg_imageZhg_environmentZhg_version_additionZ
hg_volumesÚstartedÚcounterÚreqZnew_hashZsed_commandÚretÚconfigÚfZdefault_options_jsonr#   r#   r$   r   š   sÂ  ÿüÿ€ÿüÿ€üÿü



ÿÿÿ


þ

úÿ€ÿ€ÿ€ü










þú
øþÿÿ€þêÿ


ÿ
ÿÿÿ

ÿ÷ÿ

r   )r   r
   r   r   r   NNTNNFr   r   r   r   r   )Zclickr=   r:   rQ   Zos.pathrS   rN   rF   r\   r@   rZ   Zhiglass_manage.commonr   r   r   r   ÚcommandÚoptionÚstrÚintr%   r   r#   r#   r#   r$   Ú<module>   sú    ûûûûûûûýýýýüüüüÿ*'ð