a
    /&|j&                     @  s   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 d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ dZdd ZddddZedkree dS )    )annotationsN)datetimetimezone)Path)EventThread)RealtimeGateway)YahooPollingProvider)OpportunityRadar)RadarDecisionBridge)HanzRealtimeService)SQLiteStateStorezhttps://ntfy.sh/Hanz-Newsc              
   C  s  | j }| j}| j}| j}| j}|dkr6d}d| }nd}d| }| d| d| d|d	d
| 	}tjjt|	dd||ddd}	z2tjj
|	dd  ttd||ddd W nB ty }
 z*ttd|t|
ddd W Y d }
~
n
d }
~
0 0 d S )NREADYZurgentzHANZ READY - defaultzHANZ PREPARE - z	
Status: z
Evidence: z

Anomaly: z.1fz	
Reason: utf-8ZPOSTZchart_with_upwards_trend)ZTitleZPriorityZTags)datamethodZheaders
   Ztimeoutz	ntfy-sent)eventsymbolstatusTflushz
ntfy-error)r   r   error)r   r   Zevidence_scoreanomaly_scorereasonurllibZrequestZRequestNTFY_URLencodeZurlopenreadprintjsondumps	Exceptionstr)Zsignal_datar   r   evidenceanomalyr   ZprioritytitlemessageZreqexc r+   //home/opc/hanz-radar/runtime/run_yahoo_radar.py	send_ntfy   sd    

r-   int)returnc                    s  t jdd} | jddd | jdtdd | jd	tdd | jd
dd | jddd |   dd  jdD }t|d jd}t	 t
ddttt jdt jt i fdd}ttj| ttj|  fdd}ttd| j jdddd t|dd}|  zp| D ]N} rV q|}ttd |j|j|j |j!|j"# d!dd qBW $  |j%d"d# n$  |j%d"d# 0 d$S )%Nz HANZ Yahoo IDX Opportunity Radar)Zdescriptionz	--symbolszBBCA.JK,BMRI.JK,BBRI.JK)r   z--poll-seconds<   )typer   z--rank-secondsz--dbz)/home/opc/hanz-radar/runtime/hanz.sqlite3z
--snapshotz0/home/opc/hanz-radar/runtime/radar_snapshot.jsonc                 S  s   g | ]}|  r|  qS r+   )strip.0itemr+   r+   r,   
<listcomp>t   s   zmain.<locals>.<listcomp>,BEI)symbolsmarketpoll_seconds   )Zmax_results)Zstorec                    s"       ttddidd d S )Nr   zhanz-yahoo-stopTr   )setr!   r"   r#   )_)stopr+   r,   shutdown   s    zmain.<locals>.shutdownc                    s`    js\zttj} tj }j	|| d}j
jddd dd |jD }g }|D ]}zp|j|v rvW qb|}||jt|ddt|dd |t|d	d
t|dd
t|dd
||d	 W qb ty   Y qbY qb0 qb|jdd dd |d d }| }||d< jtj|ddddd ttd|jt|j|  ddd t }|jD ]f}	|	j}
|	j}||
 |dvrql |
}|d u p|dko|dk}|rlt!|	 ||
< qltD ]}
|
|vr܈|
= q܈j"|| dD ]}#| qW q  tyX } z(ttdt$|ddd W Y d }~q d }~0 0 q d S ) N)nowT)parentsexist_okc                 S  s   h | ]
}|j qS r+   )r   r3   r+   r+   r,   	<setcomp>   s   z*main.<locals>.rank_loop.<locals>.<setcomp>r:   r8   Z
last_pricer   g        velocityprice_change_pct)	r   r:   pricer&   r'   rE   rF   r   Zriskc                 S  s   | d | d fS )Nr&   r'   r+   )xr+   r+   r,   <lambda>   s    z)main.<locals>.rank_loop.<locals>.<lambda>)keyreverser   Z	WATCHLISTF   )Zensure_asciiindentr   )encodingzradar-heartbeat)r   totalZ
candidatesZ
updated_atr   )PREPAREr   rP   r   zradar-error)r   r   )%waitrank_secondsr   rA   r   ZutcliststatesvaluesZevaluateparentmkdirZactive_signalsr   Z_evidence_scoreappendgetattrZ_reasonZ_riskr$   sortZto_dictZ
write_textr"   r#   r!   Ztotal_symbolslen	isoformatr=   r   addgetr-   Z	decisionsZprocess_decisionr%   )rA   rT   snapshotZradar_symbolsZ	watchliststater&   Zsnapshot_dataZactive_symbolsr5   r   r   ZpreviousZshould_notifyZdecisionr*   argsZbridgeZgatewayZnotified_statusZradarZserviceZsnapshot_pathr?   r+   r,   	rank_loop   s    



	









zmain.<locals>.rank_loopzhanz-yahoo-startz	Hanz-News)r   r9   r;   rR   ZntfyTr   )targetZdaemontick)r   r   rG   volumeZscore	timestamprL   r   r   )&argparseArgumentParseradd_argumentr.   
parse_argsr9   splitr	   r;   r   r
   r   r   r   Zdbr   r_   r   signalSIGINTSIGTERMr!   r"   r#   rR   r   startstreamZis_setZingestr   rG   rf   r   rg   r\   r=   join)parserr9   Zproviderr@   rc   Zworkerre   r`   r+   ra   r,   mainR   s    



 	


rt   __main__)Z
__future__r   rh   r"   rm   Zurllib.requestr   r   r   pathlibr   Z	threadingr   r   Zhanz_realtime.gatewayr   Zhanz_realtime.yahoo_providerr	   Zhanz_radar.enginer
   Zhanz_radar.bridger   Zhanz_server.servicer   Zhanz_server.storer   r   r-   rt   __name__
SystemExitr+   r+   r+   r,   <module>   s(   <  