
    j                        d dl Z d dlZd dlmZ 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mZ dd	lmZmZmZ dd
lmZmZmZmZmZmZmZ ddlmZmZmZ ddl m!Z! ddl"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(  e	j)        ddg          d             Z* e	j)        ddg          d             Z+ e	j)        ddg          d             Z, e	j)        ddg          d             Z-d Z. e	j)        ddg          d             Z/ e	j)        ddg          d             Z0 e	j)        ddg          d              Z1 e	j)        d!dg          d"             Z2 e	j)        d#dg          d$             Z3 e	j)        d%dg          d&             Z4 e	j)        d'dg          d(             Z5 e	j)        d)dg          d*             Z6dS )+    N)quote)requestjsonifyResponse   )dashboard_bp)logger)	query_one)get_summary)get_case_trendget_person_trendget_score_trend)get_case_type_distributionget_risk_level_distributionget_area_distributionget_age_distributionget_gender_distributionget_source_distributionget_school_ranking)get_recent_alertsmark_alert_readhandle_alert)run_all_rules)get_heatmap)parse_int_argvalidate_allowedvalidate_int_rangevalidate_zjhmz/summaryGET)methodsc                  8    t          t                                S )N)r   r        :/home/longshao/multi-rider-rag/modules/dashboard/routes.pysummaryr%      s    ;==!!!r#   z/trendc                     t          t          j                            d          d          } t          j                            dd                                          }t          | dd          st          ddd	          d
fS t          |h d          st          dg dd          d
fS |dk    rt          |           }|}d}n||dk    rt          |           }|}d}nbt          |           }t          |t                    r:|                    dg           }t          |                    dd                    }n|}d}t          || ||d          S )Nmonths   metriccasesr   <   invalid_monthsu   months 必须为 1-60)errormessage  >   r*   scorepersonsinvalid_metric)r*   r1   r0   r-   validr1   Fr0   pointsdegraded)r)   r'   r5   r6   )r   r   argsgetstripr   r   r   r   r   r   
isinstancedictbool)r'   r)   datar5   r6   s        r$   trendr>      sq   7<++H55r::F\h006688Ffa,, ]!1>UVVWWY\\\F$A$A$ABB a!1<Y<Y<YZZ[[]```''	7		v&&f%%dD!! 	XXh++FDHHZ7788HHFHf&V^__```r#   z/distributionc                     t           j                            dd          } t          t          t
          t          t          t          d}|                    |           }|s3t          dt          |                                          d          dfS  |            }t          |t                    r:|                    dg           }t          |                    dd	                    }n|}d	}t          | ||d
          S )Ndim	case_type)rA   
risk_levelareaagegendersourceinvalid_dimr3   r/   itemsr6   F)	dimensionrH   r6   )r   r7   r8   r   r   r   r   r   r   r   listkeysr:   r;   r<   )r@   handlershandlerresultrH   r6   s         r$   distributionrO   9   s    
,

5+
.
.C 01%#)) H ll3G Vhmmoo9N9NOOPPRUUUWYYF&$ 

7B''

:u5566u(KKLLLr#   z/alertsc                      t          t          j                            d          d          } t	          | dd          st          ddi          dfS t          dt          |           i          S )	Nlimit   r   d   r-   invalid_limitr/   rH   )r   r   r7   r8   r   r   r   )rQ   s    r$   alertsrU   T   si    ',**733R88EeQ,, 8122C77G.u556777r#   c               #     K   t                      } t          j                    }	 	 t          d          pg }g }|D ]F}|                    d          }|| v r|                     |           |                    |           Gt          |          D ]9}t          j	        |dt                    }d| dV  t          j                    }:t          j                    |z
  dk    rd	V  t          j                    }t          j        d
           nL# t          $ r Y d S t          $ r3}t          j        d|           t          j        d
           Y d }~nd }~ww xY w:)NT   idF)ensure_asciidefaultzdata: z

   z:

   z!Dashboard alert stream failed: %s)settime	monotonicr   r8   addappendreversedjsondumpsstrsleepGeneratorExit	Exceptionr	   warning)
pushed_idslast_heartbeatrU   
new_alertsalertalert_idpayloadexcs           r$   _alert_stream_eventsrq   \   s     J^%%N	&q))/RFJ ) ) 99T??z))x(((!!%((((!*-- 2 2*ULLL,w,,,,,,!%!1!1~.0B66!%!1!1JqMMMM 	 	 	FF 	 	 	N>DDDJqMMMMMMMM	/s   C*D 
E	E')EEz/alerts/streamc                  h    t          t                      d          } d| j        d<   d| j        d<   | S )Nztext/event-stream)mimetypezno-cachezCache-ControlnozX-Accel-Buffering)r   rq   headers)responses    r$   alert_streamrw   {   s<    ,..9LMMMH(2H_%,0H()Or#   z/alerts/scanPOSTc                  <    t          dt                      i          S )NrN   )r   r   r"   r#   r$   
alert_scanrz      s    Hmoo.///r#   z/heatmapc                      t          t          j                            d          d          } t	          | dd          st          ddi          dfS t          | t          |           d          S )	Ndaysr[   r   im  r-   invalid_daysr/   )r|   rH   )r   r   r7   r8   r   r   r   )r|   s    r$   heatmapr~      sk    ))&11266DdAs++ 7011366D;t+<+<==>>>r#   z/data-healthc                  <    ddl m}  t           |                       S )Nr   collect_health)services.data_health_servicer   r   r   s    r$   data_healthr      s*    <<<<<<>>##$$$r#   z/alerts/<int:alert_id>/readc                 B    t          |           }t          d|i          S )Nsuccess)r   r   )rn   oks     r$   
alert_readr      s!    		"	"BIr?###r#   z/alerts/<int:alert_id>/handlec                 *   t          j        d          pi }t          |                    dd          pd                                          }t          |h d          st          ddi          d	fS t          | |          }t          d
|i          S )NTsilentstatushandled >   closedr   ignoredpendingr-   invalid_statusr/   r   )r   get_jsonre   r8   r9   r   r   r   )rn   r=   r   r   s       r$   alert_handler      s    4(((.BD(I..4"55;;==FF$O$O$OPP 9!1233S88	h	'	'BIr?###r#   z/dispatch/from-personc                     t          j        d          pi } t          |                     d          pd                                          }|st          ddd          dfS t          |          st          dd	d          dfS d
}	 t          |d|i          }n/# t          $ r"}t          j
        d||           i }Y d }~nd }~ww xY w|st          dd	d          dfS dt          |          z   }t          d||d          S )NTr   zjhmr   Fmissing_zjhm)r   r-   r/   invalid_zjhmzx
        SELECT zjhm
        FROM "jcgkzx_monitor"."wcnr_target_pool"
        WHERE zjhm = %(zjhm)s
        LIMIT 1
    z1Dispatch from person validation failed for %s: %sz/dispatch?zjhm=)r   r   redirect)r   r   re   r8   r9   r   r   r
   rh   r	   ri   r   )r=   r   sqlrowrp   redirect_urls         r$   dispatch_from_personr      sI   4(((.BDtxx%2&&,,..D Den==>>CC Den==>>CCCfd^,,   JDRUVVV  Den==>>CC %uT{{2L$,GGHHHs   
B 
C	'CC	z/rankingc                     t           j                            dd                                          } t           j                            dd                                          }|dvrt	          dddgd          d	fS | d
k    rt          |          }n,| dk    rt          |          }nt	          ddd
gd          d	fS t	          | ||d d         d          S )NbyrC   r)   
risk_count>   
case_countr   r2   r   r3   r/   school
invalid_by
   )r   r)   rH   )r   r7   r8   r9   r   r   r   )r   r)   r=   s      r$   rankingr      s    			$	'	'	-	-	/	/B\h55;;==F111!1\<<XYYZZ\___	X~~!&))	v$V,,8JKKLLcQQ"crcCCDDDr#   )7rc   r^   urllib.parser   flaskr   r   r   r   r   shared.config.configr	   shared.db.kingbaser
   services.summary_servicer   services.trend_servicer   r   r   services.distribution_servicer   r   r   r   r   r   r   services.alert_servicer   r   r   services.alert_rule_enginer   services.heatmap_servicer   shared.validatorsr   r   r   r   router%   r>   rO   rU   rq   rw   rz   r~   r   r   r   r   r   r"   r#   r$   <module>r      s           , , , , , , , , , ,       ' ' ' ' ' ' ( ( ( ( ( ( 1 1 1 1 1 1 U U U U U U U U U U                 
 U T T T T T T T T T 5 5 5 5 5 5 1 1 1 1 1 1 ` ` ` ` ` ` ` ` ` ` ` ` J000" " 10" Hug...a a /.a: OeW555M M 65M4 Iw///8 8 0/8  > $ug666  76 NVH5550 0 650 J000? ? 10? NUG444% % 54% 1F8DDD$ $ ED$
 3fXFFF$ $ GF$ +fX>>>I I ?>I6 J000E E 10E E Er#   