a #e"@sddlZddlZddlZddlZddlZddlZddlZddlmZm Z ddl m Z ddl m Z ddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZddlZd dlmZddlmZ m!Z!ddl"m#Z$ddl%m&Z&ddl'm(Z(ddl)Z)e dZ*e)j+,ej-Z.ej/r6ejj0nej1Z2ej3ddddZ4ej3ddddZ5ej3ddddZ6ej3ddddZ7ddZ8ej3ddd d!Z9d"d#Z:ej3ddd$d%Z;ej3dd&d'd(Zej3dd&d)d*Z#ej3ddd+d,Z.loop)targetT)rrdaemonstartset)rMrLrKrOr3r#rJr$ setIntervalgs  rTcsd|d}d}ztt}|durtt|dkrd}W|durV||rztWntjjy~Yn0dSt d|fdd}t d|}zt j j|d }Wndty t d |YW|dur||rztWntjjyYn0dS0z |WnHtyv}z.t d |ttjrb|WYd}~n d}~00W|dur||rztWntjjyYn0n@|dur||rztWntjjyYn00dS) Nz task_lock_{}TFzsTask {} has an expired lock! This could mean that WebODM is running out of memory. Check your server configuration.csttdSrH) redis_clientrSr9r#Zlock_idr#r$ update_locksz!process_task..update_lock)pkz!Task {} has already been deleted.zpUncaught error! This is potentially bad. Please report it to http://github.com/OpenDroneMap/WebODM/issues: {} {})r,rVZgetsetr9floatr+redis exceptionsZ RedisErrorrwarningrTr rgetrrprocess Exceptionerror traceback format_excr TESTING)taskIdZcancel_monitorZ delete_lockZtask_lock_last_updaterXr'er#rWr$ process_taskqsp     $  rhcCsHtjtddddttddttjtjgdBdddBtdddBS)NTF)processing_node__isnullauto_processing_noder0)status)Z status__in)rir0)Zpending_action__isnullr0)r rr)rr QUEUEDRUNNINGr#r#r#r$get_pending_taskss rncCs t}|D]}t|jq dSrH)rnrhdelayid)tasksr'r#r#r$process_pending_taskssrr)bindc Kszptd|t|tjdt|ddt j d}t ||fi|d|i}t j rlt |jj||WSty}z&tt|dt|iWYd}~Sd}~00dS)Nz$Exporting raster {} with options: {}z _raster.{}r,Zgtiffdirfilerb)rrr,jsondumpstempfilemktemprr_r r6export_raster_syncreTestSafeAsyncResultrSrequestrprarbstrselfinputoptstmpfileresultrgr#r#r$rs"rc Kszltd|t|tjd|ddtj d}t ||fi|d|i}tj rht |jj||WSty}z&tt|dt|iWYd}~Sd}~00dS)Nz)Exporting point cloud {} with options: {}z_pointcloud.{}r,Zlazrtrvrb)rrr,rwrxryrzr_r r6export_pointcloud_syncrer|rSr}rprarbr~rr#r#r$rsrc Cs<tjjdd}|D]"}|r.|}|dur>|tj}t}||kr6t dt |j j tjj|j d}d}|r6zBtjj|j dd}|durWq6t d||WnJty}z0t dt |t |j j t |fWYd}~n d}~00|d 7}||kr~q6q~q|qdS) N)Z quota__gtz-Quota deadline expired for %s, deleting tasks)project__ownerrz -created_atz Deleting %szCannot delete %s for %s: %sr)rrr)has_exceeded_quotaget_quota_deadlineset_quota_deadliner QUOTA_EXCEEDED_GRACE_PERIODr9rrr~userusernamer countorder_byfirstr+rawarnclear_quota_deadline)profilespdeadliner2Z task_countcZ last_taskrgr#r#r$ check_quotass0      :r)=r7r@ryrcrwrr9 threadingrrZcelery.utils.logrdjango.core.exceptionsrdjango.db.modelsrrZ app.modelsrr r nodeodmr nodeodm.modelsr webodmr workerceleryrZapp.raster_utilsrr{rapp.pointcloud_utilsrr django.utilsrdatetimerr\rZRedisfrom_urlCELERY_BROKER_URLrVreZMockAsyncResult AsyncResultr|r'r%r.r4rGrTrhrnrrrr#r#r#r$s^                      0