
    g                        d dl mZmZmZ d dlmZ d dlm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 d dlmZ d dlmZ d d	lmZ  ed
d      Z ee      Z e e	j.                  dd       e	j.                  dd       e	j.                  dd             Z e e	j.                  dd      e      ZdZej4                  j7                  e       d e	j.                  dd       Zd Zd ZejA                  ddg      d        Z!ejA                  d d!g      d"        Z"ejA                  dd!g      d#        Z#ejA                  d      d$        Z$ed%k(  r7ejK                  d& e	j.                  d'd(       e	j.                  d)d*      +       yy),    )Flaskrequestjsonify)Redis)Queue)environN)datetime)sleep)ConnectionError)setup_loggerbrokerz
broker.log)log_file
REDIS_HOST	localhost
REDIS_PORT6379REDIS_DB)hostportdbREDIS_QUEUEztrello-notifications)
connectiontrello_notification_/SID_FILE_PATHz	sids.jsonc                     t        j                  | d      }t         t        j                  |j                  d            j                          S )NT)	sort_keyszutf-8)jsondumpsDEDUPE_KEY_PREFIXhashlibmd5encode	hexdigest)datadata_strs     >/var/www/trellinator.diamondhoofcare.com/public_html/broker.pygenerate_dedupe_keyr(      s@    zz$$/H   X__W-E!F!P!P!R STT    c                    g }t         j                  j                  t              r.t	        t        d      5 }t        j                  |      }d d d        |j                  | t        j                         j                         d       t	        t        d      5 }t        j                  ||       d d d        y # 1 sw Y   mxY w# 1 sw Y   y xY w)Nr)sid	timestampw)ospathexistsr   openr   loadappendr	   now	isoformatdump)new_sidr%   files      r'   	store_sidr:   &   s    D	ww~~m$-% 	#99T?D	# 	KKhlln.F.F.HIJ	mS	! T		$ 		# 	# s   B8C8CCz/webhookGET)methodsc                     	 t         j                  d       t        j                  j	                         } | j                  dd       r)t        | j                  d             t        ddi      dfS t         j                  d       t        ddi      dfS # t        $ r1}t         j                  d	|        t        ddi      d
fcY d }~S d }~ww xY w)Nz:: WEBHOOK GET Received ::r,   successT   Couldn't find SIDF  Exception:   )
loggerinfor   argsto_dictgetr:   r   error	Exception)rF   es     r'   verificationrL   0   s    001||##%88E4 dhhuo&It,-s22LL,-Iu-.33 0{1#&'	5)*C//0s$   A-B 0#B 	C&C	C	Cz/update-sidPOSTc                  h   	 t         j                  } | j                  dd       r*t        | j                  d             t	        ddd      dfS t
        j                  d       t	        ddd      d	fS # t        $ r5}t
        j                  d
|        t	        dd| d      dfcY d }~S d }~ww xY w)Nr,   TzData Updated.)r>   msgr?   r@   FzInvalid Data...rA   rB   zError Occured: rC   )r   r   rH   r:   r   rD   rI   rJ   )r%   rK   s     r'   	updateSIDrP   ?   s    
N||88E4 dhhuo&tODEsJJLL,-u5FGH#MM N{1#&'5?1#1FGH#MMNs$   AA3 $A3 3	B1<*B,&B1,B1c                     t         j                  } t        j                  d       	 | rt	        |       }|st        ddi      dfS t        j                  |      r(t        j                  d|        t        ddd      d	fS d
}d}|dkD  r	 t        j                  |dd       	 |dk(  r$t        j                  d       t        ddi      dfS 	 t        j                  d|       }t        j                  d|j                   d|         t        d|j!                         d      d	fS t        j                  d       t        ddi      dfS # t        $ r1 t        j                  d| d       |dz  }t        |       |dz  }Y nw xY w|dkD  r# t"        $ r1}t        j                  d|        t        ddi      dfcY d }~S d }~ww xY w# t"        $ r1}t        j                  d|        t        ddi      dfcY d }~S d }~ww xY w) NzData ReceivedrI   zInvalid notification datarA   z!Duplicate notification detected: 	duplicatezNotification already processed)statusmessager?         r   i  	processedz%Redis connection failed. Retrying in zs...   z2Failed to connect to Redis after several attempts.z+Service unavailable, please try again lateri  zworker.process_jobzJob z added to the queue with data: accepted)rS   job_idzFailed to enqueue job: zInternal server errorrC   z(Invalid data received, missing JSON bodyzInvalid datazException : )r   r   rD   rE   r(   r   redisrH   setexRedisConnectionErrorwarningr
   rI   queueenqueueidget_idrJ   )r%   
dedupe_keyretriesbackoff_timejobrK   s         r'   webhookrg   O   s   <<D
KK +7,T2J)DEFKK yy$?
|LM+Bbcdfiii GLA+&KK
I{C !|QR)VWXZ]]]Hmm$8$?d366(*I$PQ*

MNPSSS
 NNEFG^45s::) , &NN%J<.X\#]^qLG,' A%L	& A+(  H6qc:;)@ABCGGH  7|A3'(013667s~   G <G 	G E #)G AF '#G 7FG FG 	G
&G?G
 G G

G 	H&H<HHc                       y)Nz<h1>Nothing Here...</h1> ri   r)   r'   indexrj      s    %r)   __main__FSERVER_HOSTz0.0.0.0SERVER_PORTi  )debugr   r   )&flaskr   r   r   r[   r   rqr   r/   r   r   loggingr!   r	   timer
   redis.exceptionsr   r]   rD   r   __name__apprH   r_   r    r0   dirname__file__r   r(   r:   routerL   rP   rg   rj   runri   r)   r'   <module>rz      s   ) )    	      D  	h	6Ho 	;7;;|[97;;|V4Z+	- 	kgkk-)?@US + 77??8,-Q{w{{?K/X.YZU :w'0 (0 =6(+N ,N :x(.7 ).7` 3& & zGG%kgkk-C+'++VceiJjGk r)   