Files
assist/src/analytics/__pycache__/alert_system.cpython-311.pyc

111 lines
24 KiB
Plaintext
Raw Normal View History

2025-09-06 21:06:18 +08:00
<EFBFBD>
N#<23>h<EFBFBD>E<00><00><00>dZddlZddlmZmZmZmZmZddlmZm Z ddl
m Z ddl m Z ddlZddlmZdd lmZmZmZmZeje<17><00>ZGd
<EFBFBD>d e <0A><00>ZGd <0C>d e <0A><00>Ze Gd<0E>d<0F><00><00><00>ZGd<10>d<11><00>ZdS)uT
TSP助手智能预警系统
支持多种预警规则、实时监控和智能分析
<EFBFBD>N)<05>Dict<63>List<73>Any<6E>Optional<61>Callable)<02>datetime<6D> timedelta)<01> dataclass)<01>Enum<75>)<01>
db_manager)<04> WorkOrder<65> Conversation<6F> Analytics<63>Alertc<00>"<00>eZdZdZdZdZdZdZdS)<07>
AlertLevelu 预警级别<E7BAA7>info<66>warning<6E>error<6F>criticalN)<08>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>INFO<46>WARNING<4E>ERROR<4F>CRITICAL<41><00><00>DC:\Users\jiezhao\Desktop\TSP_assistant\src\analytics\alert_system.pyrrs(<00><00><00><00><00><00><16><16> <11>D<EFBFBD><17>G<EFBFBD> <13>E<EFBFBD><19>H<EFBFBD>H<EFBFBD>Hr!rc<00>&<00>eZdZdZdZdZdZdZdZdS)<08> AlertTypeu 预警类型<E7B1BB> performance<63>quality<74>volume<6D>system<65>businessN) rrrr<00> PERFORMANCE<43>QUALITY<54>VOLUME<4D>SYSTEM<45>BUSINESSr r!r"r$r$s-<00><00><00><00><00><00><16><16><1F>K<EFBFBD><17>G<EFBFBD> <15>F<EFBFBD> <15>F<EFBFBD><19>H<EFBFBD>H<EFBFBD>Hr!r$c<00><><00>eZdZUdZeed<eed<eed<eed<eed<eed<dZ e
ed <d
Z e ed <d Z eeed <dZe ed<d S)<10> AlertRuleu 预警规则<E8A784>name<6D> description<6F>
alert_type<EFBFBD>level<65> threshold<6C> conditionT<6E>enabled<65>,<00>check_intervalN<6C>
last_check<EFBFBD><00>cooldown)rrrr<00>str<74>__annotations__r$r<00>floatr7<00>boolr9<00>intr:rrr<r r!r"r0r0#s<><00><00><00><00><00><00><00><16><16>
<0A>I<EFBFBD>I<EFBFBD>I<EFBFBD><14><14><14><14><19><19><19><19> <15><15><15><15><14><14><14><14><12>N<EFBFBD>N<EFBFBD>N<EFBFBD><18>G<EFBFBD>T<EFBFBD><18><18><18><1D>N<EFBFBD>C<EFBFBD><1D><1D><1D>%)<29>J<EFBFBD><08><18>"<22>)<29>)<29>)<29><18>H<EFBFBD>c<EFBFBD><18><18><18><18>r!r0c<00><><00>eZdZdZd<02>Zdeeeffd<04>Zde eee
ffd<05>Z dedeee
ffd<07>Z ded eee
fde fd
<EFBFBD>Zded eee
fdeee
ffd <0B>Zded eee
fdefd <0C>Zd eee
fddfd<0F>Zde eee
ffd<10>Zdede fd<12>Zdeee
ffd<13>Zdede fd<14>Zdede fd<15>Zdede fd<16>ZdS)<17> AlertSystemu智能预警系统c<00>T<00>|<00><00><00>|_g|_i|_dS)N)<04>_initialize_rules<65>rules<65> alert_history<72> active_alerts)<01>selfs r"<00>__init__zAlertSystem.__init__4s+<00><00><19>+<2B>+<2B>-<2D>-<2D><04>
<EFBFBD><1F><04><1A><1F><04><1A><1A>r!<00>returnc <00><><00>i}tddtjtjddd<05><06><00>|d<tdd tjtjd
d d <0C><06><00>|d <tddtjtjddd<05><06><00>|d<tddtjtjddd<17><06><00>|d<tddtjtj ddd<1D><06><00>|d<tdd tjtjd!d"d<17><06><00>|d#<td$d%tjtjd&d'd<17><06><00>|d(<td)d*tjtjd+d,d<05><06><00>|d-<|S).u初始化预警规则<E8A784>满意度预警u用户满意度低于阈值g333333<33>?<3F>satisfaction_avg < thresholdi)r1r2r3r4r5r6r9<00>low_satisfaction<6F>解决时间预警u平均解决时间过长<E8BF87><00>avg_resolution_time > thresholdr;<00>high_resolution_time<6D>知识库命中率预警u知识库命中率过低g<00>?<3F>knowledge_hit_rate < threshold<6C>low_knowledge_hit_rate<74>错误率预警u系统错误率过高g<E9AB98><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>error_rate > thresholdr8<00>high_error_rate<74>工单量预警u工单量异常增长<E5A29E>2<00>hourly_orders > thresholdiX<00> high_volume<6D>响应时间预警u系统响应时间过长g@<40>avg_response_time > threshold<6C>low_response_time<6D>内存使用预警u系统内存使用率过高gT@<40>memory_usage > threshold<6C> memory_usage<67>对话中断预警u用户对话中断率过高g333333<33>?<3F>"conversation_drop_rate > threshold<6C>conversation_drop)
r0r$r+rrr*r-rr,r)rIrFs r"rEzAlertSystem._initialize_rules9s<><00><00><12><05>%.<2E>"<22>5<> <20>(<28><1C>$<24><19>4<><1F>%
<EFBFBD>%
<EFBFBD>%
<EFBFBD><05> <20>!<21>)2<>%<25>2<> <20>,<2C><1C>$<24><18>7<><1F>)
<EFBFBD>)
<EFBFBD>)
<EFBFBD><05>$<24>%<25>+4<>+<2B>2<> <20>(<28><1C>$<24><19>6<><1F>+
<EFBFBD>+
<EFBFBD>+
<EFBFBD><05>&<26>'<27>$-<2D>"<22>/<2F> <20>'<27><1C>"<22><19>.<2E><1E>$
<EFBFBD>$
<EFBFBD>$
<EFBFBD><05><1F> <20> )<29>"<22>/<2F> <20>'<27><1C>/<2F><18>1<><1E>
<EFBFBD>
<EFBFBD>
<EFBFBD><05>m<EFBFBD><1C>&/<2F>%<25>2<> <20>,<2C><1C>$<24><19>5<><1E>&
<EFBFBD>&
<EFBFBD>&
<EFBFBD><05>!<21>"<22>!*<2A>%<25>5<> <20>'<27><1C>$<24><1A>0<><1E>!
<EFBFBD>!
<EFBFBD>!
<EFBFBD><05>n<EFBFBD><1D>&/<2F>%<25>5<> <20>(<28><1C>$<24><19>:<3A><1F>&
<EFBFBD>&
<EFBFBD>&
<EFBFBD><05>!<21>"<22><15> r!c<00><00>g}|j<00><00><00>D]<5D>\}}|js<01> |jr*t j<00><00>|jz
j|jkr<01>> |<00>|<02><00>}|<00> ||<04><00>rC|<00>
||<04><00>}|<01> |<05><00>t j<00><00>|_<00><>#t$r*}t<00>d|<02>d|<06><00><04><00>Yd}~<06><>d}~wwxYw|S)u检查所有预警规则u 检查规则 u 失败: N)rF<00>itemsr7r:r<00>now<6F>secondsr<<00>_get_rule_data<74>_evaluate_rule<6C> _create_alert<72>append<6E> Exception<6F>loggerr)rI<00>triggered_alerts<74> rule_name<6D>rule<6C>data<74>alert<72>es r"<00>check_all_ruleszAlertSystem.check_all_rules<65>s.<00><00><1D><18>#<23>z<EFBFBD>/<2F>/<2F>1<>1<> F<01> F<01>O<EFBFBD>I<EFBFBD>t<EFBFBD><17><<3C> <19><18><14><EFBFBD> <19>H<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD>T<EFBFBD>_<EFBFBD>$D<>#M<>PT<50>P]<5D>#]<5D>#]<5D><18> F<01><1B>*<2A>*<2A>9<EFBFBD>5<>5<><04><18>&<26>&<26>t<EFBFBD>T<EFBFBD>2<>2<>5<> <20>.<2E>.<2E>t<EFBFBD>T<EFBFBD>:<3A>:<3A>E<EFBFBD>$<24>+<2B>+<2B>E<EFBFBD>2<>2<>2<>'/<2F>l<EFBFBD>n<EFBFBD>n<EFBFBD>D<EFBFBD>O<EFBFBD><4F><EFBFBD><1C> F<01> F<01> F<01><16> <0C> <0C>D<>Y<EFBFBD>D<>D<><11>D<>D<>E<>E<>E<>E<>E<>E<>E<>E<><45><EFBFBD><EFBFBD><EFBFBD> F<01><><EFBFBD><EFBFBD> <20>s<00>A.C
<02>
C><05> C9<05>9C>rrc<00>`<00>i} tj<00><00>5}tj<00><00>}|t d<01><02><00>z
}|<03>t <00><00><00>t j|kt j|k<00><00><00> <00><00>}|<03>t<00><00><00>tj |ktj |k<00><00><00> <00><00>}t|<06><00>}td<03>|D<00><00><00><00>} d<04>|D<00><00>}
|
rt|
<EFBFBD><00>t|
<EFBFBD><00>z nd|d<g} |D]M} | jdkr@| jr9| j| jz
<00><00><00>dz } | <0B>| <0A><00><00>N| rt| <0B><00>t| <0B><00>z nd|d <td
<EFBFBD>|D<00><00><00><00>}|r|t|<07><00>z nd|d <td <0C>|D<00><00><00><00>}|r|t|<07><00>z nd|d <|dz |d<g}|D]#}|jr|<10>|j<00><00><00>$|rt|<10><00>t|<10><00>z nd|d<ddlm}|<12><00>}|<13>dd<05><00>dz|d<t|<07><00>}td<15>|D<00><00><00><00>}|r||z nd|d<ddd<17><00>n #1swxYwYn4#t,$r'}t.<00>d|<16><00><02><00>Yd}~nd}~wwxYw|S)u获取规则相关数据rQ)<01>hoursc<00>(<00>g|]}|jdk<00> |<01><02>S)<01>resolved)<01>status<75><02>.0<EFBFBD>wos r"<00>
<listcomp>z.AlertSystem._get_rule_data.<locals>.<listcomp><3E>s%<00><00>&[<5B>&[<5B>&[<5B>b<EFBFBD>2<EFBFBD>9<EFBFBD>PZ<50>CZ<43>CZ<43>r<EFBFBD>CZ<43>CZ<43>CZr!c<00>*<00>g|]}|j<00> |j<00><02>Sr )<01>satisfaction_scorer}s r"r<>z.AlertSystem._get_rule_data.<locals>.<listcomp><3E>s$<00><00>&l<>&l<>&l<><12>VX<56>Vk<56>&l<>r<EFBFBD>'<<3C>&l<>&l<>&lr!r<00>satisfaction_avgr{r;<00>avg_resolution_timec<00> <00>g|] }|j<00> |<01><02> Sr )<01>knowledge_used<65>r~<00>cs r"r<>z.AlertSystem._get_rule_data.<locals>.<listcomp><3E>s <00><00>%S<>%S<>%S<>A<EFBFBD>!<21>BR<42>%S<>a<EFBFBD>%S<>%S<>%Sr!<00>knowledge_hit_ratec<00>H<00>g|]}d|j<00><00><00>v<00>|<01><02> S)r)<02>assistant_response<73>lowerr<72>s r"r<>z.AlertSystem._get_rule_data.<locals>.<listcomp><3E>s2<00><00>*o<>*o<>*o<><11>w<EFBFBD>RS<52>Rf<52>Rl<52>Rl<52>Rn<52>Rn<52>Gn<47>Gn<47>1<EFBFBD>Gn<47>Gn<47>Gnr!<00>
error_rate<EFBFBD> hourly_orders<72>avg_response_timer )<01>get_memory_usage<67>percent<6E>drcc<00>.<00>g|]}|j<00> |j<00>|<01><02>Sr )<02> user_messager<65>r<>s r"r<>z.AlertSystem._get_rule_data.<locals>.<listcomp><3E>s(<00><00>,u<>,u<>,u<>1<EFBFBD><11><1E>,u<>`a<>`t<>,u<>Q<EFBFBD>,u<>,u<>,ur!<00>conversation_drop_rateNu获取规则数据失败: )r <00> get_sessionrrir <00>queryr<00>filter<65>
created_at<EFBFBD>allr<00> timestamp<6D>len<65>sumr|<00>
updated_at<EFBFBD> total_secondsrn<00> response_time<6D> utils.helpersr<73><00>getrorpr)rIrrrt<00>session<6F>end_time<6D>
start_time<EFBFBD> work_orders<72> conversations<6E> total_orders<72>resolved_orders<72>satisfaction_scores<65>resolution_timesr<00>resolution_time<6D>knowledge_hits<74>error_conversations<6E>response_timesr<73>r<><00> memory_info<66>total_conversations<6E>dropped_conversationsrvs r"rkzAlertSystem._get_rule_data<74>s<><00><00><11><04>? ;<3B><1B>'<27>)<29>)<29>; {<01>W<EFBFBD>#<23><<3C>><3E>><3E><08>%<25> <09><02>(;<3B>(;<3B>(;<3B>;<3B>
<EFBFBD>&<26>m<EFBFBD>m<EFBFBD>I<EFBFBD>6<>6<>=<3D>=<3D><1D>(<28>J<EFBFBD>6<><1D>(<28>H<EFBFBD>4<><12><12><16>#<23>%<25>%<25><1C> !(<28> <0A> <0A>l<EFBFBD> ;<3B> ;<3B> B<> B<> <20>*<2A>j<EFBFBD>8<> <20>*<2A>h<EFBFBD>6<>!<12>!<12><16>#<23>%<25>%<25><1E> #<23>;<3B>/<2F>/<2F> <0C>"%<25>&[<5B>&[<5B>K<EFBFBD>&[<5B>&[<5B>&[<5B>"\<5C>"\<5C><0F>'m<01>&l<>{<7B>&l<>&l<>&l<>#<23>bu<62>+|<7C>3<EFBFBD>/B<>+C<>+C<>c<EFBFBD>J]<5D>F^<5E>F^<5E>+^<5E>+^<5E>{|<7C><04>'<27>(<28>$&<26> <20>%<25>A<01>A<01>B<EFBFBD><19>y<EFBFBD>J<EFBFBD>.<2E>.<2E>2<EFBFBD>=<3D>.<2E>+-<2D>=<3D>2<EFBFBD>=<3D>+H<>*W<>*W<>*Y<>*Y<>\`<60>*`<60><0F>(<28>/<2F>/<2F><0F>@<40>@<40>@<40><>_o<5F>.v<>c<EFBFBD>2B<32>.C<>.C<>c<EFBFBD>JZ<4A>F[<5B>F[<5B>.[<5B>.[<5B>uv<75><04>*<2A>+<2B>"%<25>%S<>%S<><1D>%S<>%S<>%S<>!T<>!T<><0E>Ta<54>-h<>^<5E>c<EFBFBD>-<2D>>P<>>P<>-P<>-P<>gh<67><04>)<29>*<2A>'*<2A>*o<>*o<>m<EFBFBD>*o<>*o<>*o<>&p<>&p<>#<23>Q^<5E>%e<>%8<>3<EFBFBD>}<7D>;M<>;M<>%M<>%M<>de<64><04>\<5C>"<22>)5<>r<EFBFBD>(9<><04>_<EFBFBD>%<25>"$<24><0E>&<26>?<3F>?<3F>A<EFBFBD><18><EFBFBD>?<3F>&<26>-<2D>-<2D>a<EFBFBD>o<EFBFBD>><3E>><3E>><3E><>Yg<59>,n<>C<EFBFBD><0E>,?<3F>,?<3F>#<23>n<EFBFBD>BU<42>BU<42>,U<>,U<>mn<6D><04>(<28>)<29>=<3D><<3C><<3C><<3C><<3C><<3C>.<2E>.<2E>0<>0<> <0B>'2<><EFBFBD><EFBFBD>y<EFBFBD>!<21>'D<>'D<>s<EFBFBD>'J<><04>^<5E>$<24>'*<2A>-<2D>&8<>&8<>#<23>(+<2B>,u<>,u<> <0A>,u<>,u<>,u<>(v<>(v<>%<25>`s<>1z<31>1F<31>I\<5C>1\<5C>1\<5C>yz<79><04>-<2D>.<2E>w; {<01>; {<01>; {<01>; {<01>; {<01>; {<01>; {<01>; {<01>; {<01>; {<01>; {<01><><EFBFBD><EFBFBD>; {<01>; {<01>; {<01>; {<01><><EFBFBD>z<19> ;<3B> ;<3B> ;<3B> <12>L<EFBFBD>L<EFBFBD>9<>a<EFBFBD>9<>9<> :<3A> :<3A> :<3A> :<3A> :<3A> :<3A> :<3A> :<3A><><EFBFBD><EFBFBD><EFBFBD> ;<3B><><EFBFBD><EFBFBD><14> s;<00>K:<00>K K.<03>" K:<00>.K2<07>2K:<00>5K2<07>6K:<00>:
L+<03>L&<03>&L+rsrtc<00><00> |jdkr|<02>dd<03><00>|jkS|jdkr|<02>dd<03><00>|jkS|jdkr|<02>dd<03><00>|jkS|jdkr|<02>d d<03><00>|jkS|jd
kr|<02>d d<03><00>|jkS|jd kr|<02>d d<03><00>|jkS|jdkr|<02>dd<03><00>|jkS|jdkr|<02>dd<03><00>|jkSdS#t$r(}t<00>d|<03><00><02><00>Yd}~dSd}~wwxYw)u评估规则条件rNr<>rrRr<>rUr<>rXr<>r\r<>r_r<>rbrcrer<>Fu评估规则条件失败: N)r6r<>r5rorpr)rIrsrtrvs r"rlzAlertSystem._evaluate_rule<6C>s<><00><00> <19><13>~<7E>!?<3F>?<3F>?<3F><1B>x<EFBFBD>x<EFBFBD> 2<>A<EFBFBD>6<>6<><14><1E>G<>G<><15><1E>#D<>D<>D<><1B>x<EFBFBD>x<EFBFBD> 5<>q<EFBFBD>9<>9<>D<EFBFBD>N<EFBFBD>J<>J<><15><1E>#C<>C<>C<><1B>x<EFBFBD>x<EFBFBD> 4<>a<EFBFBD>8<>8<>4<EFBFBD>><3E>I<>I<><15><1E>#;<3B>;<3B>;<3B><1B>x<EFBFBD>x<EFBFBD> <0C>a<EFBFBD>0<>0<>4<EFBFBD>><3E>A<>A<><15><1E>#><3E>><3E>><3E><1B>x<EFBFBD>x<EFBFBD><0F><11>3<>3<>d<EFBFBD>n<EFBFBD>D<>D<><15><1E>#B<>B<>B<><1B>x<EFBFBD>x<EFBFBD> 3<>Q<EFBFBD>7<>7<>$<24>.<2E>H<>H<><15><1E>#=<3D>=<3D>=<3D><1B>x<EFBFBD>x<EFBFBD><0E><01>2<>2<>T<EFBFBD>^<5E>C<>C<><15><1E>#G<>G<>G<><1B>x<EFBFBD>x<EFBFBD> 8<>!<21><<3C><<3C>t<EFBFBD>~<7E>M<>M<><18>5<EFBFBD><35><18> <19> <19> <19> <12>L<EFBFBD>L<EFBFBD>9<>a<EFBFBD>9<>9<> :<3A> :<3A> :<3A><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>s@<00>)E<00>)E<00>)E<00>)E<00>*)E<00>)E<00>>)E<00>()E<00>
F<03>F<03>Fc<00> <00>|j|jj|jj|<00>||<02><00>|t j<00><00><00><00><00>|jd<01>}|<00>|<03><00>||j |j<|S)u 创建预警)rrr3r4<00>messagertr<><00>rule_id)
r1r3<00>valuer4<00>_generate_alert_messagerri<00> isoformat<61> _save_alertrH)rIrsrtrus r"rmzAlertSystem._create_alerts<><00><00><1E><19><1E>/<2F>/<2F><19>Z<EFBFBD>%<25><1B>3<>3<>D<EFBFBD>$<24>?<3F>?<3F><18>!<21><1C><1E><1E>1<>1<>3<>3<><1B>y<EFBFBD>
<EFBFBD>
<EFBFBD><05> <0A><18><18><15><1F><1F><1F>).<2E><04><1A>4<EFBFBD>9<EFBFBD>%<25><14> r!c<00><><00>|jdkr#d|<02>dd<04><00>d<05>d|j<00>d<07>S|jdkr#d |<02>d
d<04><00>d <0B>d |j<00>d <0A>S|jdkr#d|<02>dd<04><00>d<05>d|j<00>d<07>S|jdkr#d|<02>dd<04><00>d<05>d|j<00>d<07>S|jdkr#d|<02>dd<04><00>d <0B>d|j<00>d<18>S|jdkr#d|<02>dd<04><00>d<05>d|j<00>d<1D>S|jdkr#d|<02>d d<04><00>d <0B>d!|j<00>d"<22>S|jd#kr#d$|<02>d%d<04><00>d<05>d|j<00>d<07>Sd&|j<00><00>S)'u生成预警消息rMu用户满意度较低: r<>rz.2fu
(阈值: <20>)rPu平均解决时间过长: r<>z.1fu小时 (阈值: u小时)rTu知识库命中率较低: r<>rWu系统错误率过高: r<>rZu工单量异常增长: r<>u个/小时 (阈值: u 个/小时)r^u系统响应时间过长: r<>u 秒 (阈值: u秒)rau系统内存使用率过高: rcu % (阈值: z%)rdu用户对话中断率过高: r<>u触发预警: )r1r<>r5)rIrsrts r"r<>z#AlertSystem._generate_alert_message"s<><00><00> <0F>9<EFBFBD>)<29> )<29> )<29>m<>T<EFBFBD>X<EFBFBD>X<EFBFBD>6H<36>!<21>-L<>-L<>m<>m<>m<>\`<60>\j<>m<>m<>m<> m<> <11>Y<EFBFBD>.<2E> .<2E> .<2E><><04><08><08>9N<39>PQ<50>0R<30>0R<30><><><>hl<68>hv<68><><><> <> <11>Y<EFBFBD>4<> 4<> 4<>r<><04><08><08>9M<39>q<EFBFBD>0Q<30>0Q<30>r<>r<>r<>ae<61>ao<61>r<>r<>r<> r<> <11>Y<EFBFBD>+<2B> +<2B> +<2B>g<>T<EFBFBD>X<EFBFBD>X<EFBFBD>l<EFBFBD>A<EFBFBD>-F<>-F<>g<>g<>g<>VZ<56>Vd<56>g<>g<>g<> g<> <11>Y<EFBFBD>+<2B> +<2B> +<2B>~<7E>T<EFBFBD>X<EFBFBD>X<EFBFBD>o<EFBFBD>q<EFBFBD>-I<>-I<>~<7E>~<7E>~<7E>cg<63>cq<63>~<7E>~<7E>~<7E> ~<7E> <11>Y<EFBFBD>.<2E> .<2E> .<2E>w<><04><08><08>9L<39>a<EFBFBD>0P<30>0P<30>w<>w<>w<>cg<63>cq<63>w<>w<>w<> w<> <11>Y<EFBFBD>.<2E> .<2E> .<2E>q<>4<EFBFBD>8<EFBFBD>8<EFBFBD>N<EFBFBD>A<EFBFBD>3N<33>3N<33>q<>q<>q<>_c<5F>_m<5F>q<>q<>q<> q<> <11>Y<EFBFBD>.<2E> .<2E> .<2E>y<>4<EFBFBD>8<EFBFBD>8<EFBFBD><T<>VW<56>3X<33>3X<33>y<>y<>y<>hl<68>hv<68>y<>y<>y<> y<>/<2F>D<EFBFBD>I<EFBFBD>/<2F>/<2F> /r!ruNc <00><><00> tj<00><00>5}t|d|d|d|dtj|dd<06><07><00>dt j<00><00><00> <09><00>}|<02>|<03><00>|<02><00><00>d
d
d
<EFBFBD><00>d
S#1swxYwYd
S#t$r(}t<00> d |<04><00><02><00>Yd
}~d
Sd
}~wwxYw) u保存预警到数据库rrr3r4r<>rtF)<01> ensure_asciiT)rrr3r4r<>rt<00> is_activer<65>Nu保存预警失败: ) r r<>r<00>json<6F>dumpsrri<00>add<64>commitrorpr)rIrur<><00>db_alertrvs r"r<>zAlertSystem._save_alert7s><00><00> 5<><1B>'<27>)<29>)<29> !<21>W<EFBFBD> <20>#<23>K<EFBFBD>0<>$<24>\<5C>2<><1F><07>.<2E>!<21>)<29>,<2C><1D><1A>E<EFBFBD>&<26>M<EFBFBD><05>F<>F<>F<>"<22>'<27>|<7C>~<7E>~<7E><12><12><12><08><18> <0B> <0B>H<EFBFBD>%<25>%<25>%<25><17><0E><0E> <20> <20> <20> !<21> !<21> !<21> !<21> !<21> !<21> !<21> !<21> !<21> !<21> !<21> !<21><><EFBFBD><EFBFBD> !<21> !<21> !<21> !<21> !<21> !<21><><19> 5<> 5<> 5<> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<> 4<> 4<> 4<> 4<> 4<> 4<><34><EFBFBD><EFBFBD><EFBFBD> 5<><35><EFBFBD>s;<00>B2<00>BB%<03> B2<00>%B)<07>)B2<00>,B)<07>-B2<00>2
C$<03><C<03>C$c<00><><00> tj<00><00>5}|<01>t<00><00><00>tjdk<00><00><00>tj<00><00><00><00><00><00> <00><00>}d<02>|D<00><00>cddd<03><00>S#1swxYwYdS#t$r)}t<00> d|<03><00><02><00>gcYd}~Sd}~wwxYw)u获取活跃预警Tc <00><><00>g|]\}|j|j|j|j|j|j<00><00><00>|jrtj |j<00><00>nid<00><07><02>]S))<07>idrrr3r4r<>r<>rt)
r<EFBFBD>rrr3r4r<>r<>r<>rtr<><00>loads)r~rus r"r<>z1AlertSystem.get_active_alerts.<locals>.<listcomp>Rsx<00><00>'<27>'<27>'<27><1C> <20>(<28>!&<26><1F>"'<27>"2<>"<22>[<5B>$<24>}<7D>"'<27>"2<>"<<3C>"<<3C>"><3E>"><3E>6;<3B>j<EFBFBD>H<>D<EFBFBD>J<EFBFBD>u<EFBFBD>z<EFBFBD>2<>2<>2<>b<EFBFBD><12><12>'<27>'<27>'r!Nu获取活跃预警失败: ) r r<>r<>rr<>r<><00>order_byr<79><00>descr<63>rorpr)rIr<><00>alertsrvs r"<00>get_active_alertszAlertSystem.get_active_alertsJs2<00><00> <16><1B>'<27>)<29>)<29> '<27>W<EFBFBD> <20><1D><1D>u<EFBFBD>-<2D>-<2D>4<>4<><19>O<EFBFBD>t<EFBFBD>+<2B><12><12><1A>(<28>5<EFBFBD>+<2B>0<>0<>2<>2<>3<>3<>C<EFBFBD>C<EFBFBD>E<EFBFBD>E<EFBFBD><17>'<27>'<27> &<26>'<27>'<27>'<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27><><EFBFBD><EFBFBD> '<27> '<27> '<27> '<27> '<27> '<27><><19> <16> <16> <16> <12>L<EFBFBD>L<EFBFBD>9<>a<EFBFBD>9<>9<> :<3A> :<3A> :<3A><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>sA<00>B7<00>BB*<03> B7<00>*B.<07>.B7<00>1B.<07>2B7<00>7
C*<03>C%<03>C*<03>%C*<03>alert_idc<00><><00> tj<00><00>5}|<02>t<00><00><00>tj|k<00><00><00><00><00>}|rAd|_tj <00><00>|_
|<02> <00><00> ddd<02><00>dS ddd<02><00>n #1swxYwYdS#t$r(}t<00>d|<04><00><02><00>Yd}~dSd}~wwxYw)u 解决预警FNTu解决预警失败: )r r<>r<>rr<>r<><00>firstr<74>rri<00> resolved_atr<74>rorpr)rIr<>r<>rurvs r"<00> resolve_alertzAlertSystem.resolve_alert`sE<00><00> <19><1B>'<27>)<29>)<29> <20>W<EFBFBD><1F> <0A> <0A>e<EFBFBD>,<2C>,<2C>3<>3<>E<EFBFBD>H<EFBFBD><08>4H<34>I<>I<>O<>O<>Q<>Q<><05><18> <20>&+<2B>E<EFBFBD>O<EFBFBD>(0<> <0C><0E><0E>E<EFBFBD>%<25><1B>N<EFBFBD>N<EFBFBD>$<24>$<24>$<24><1F>  <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20><><EFBFBD><EFBFBD> <20> <20> <20> <20><19>5<EFBFBD><35><18> <19> <19> <19> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>sA<00>C<00>BB3<03> C<00>' C<00>3B7<07>7C<00>:B7<07>;C<00>
C2<03>
C-<03>-C2c<00>j<00> tj<00><00>5}|<01>t<00><00><00><00><00>}|<01>t<00><00><00>tjdk<00><00><00><00><00>}i}tD]^}|<01>t<00><00><00>tj|j k<00><00><00><00><00>}|||j <<00>_i}tD]^}|<01>t<00><00><00>tj |j k<00><00><00><00><00>}|||j <<00>_||||d<02>cddd<03><00>S#1swxYwYdS#t$r)} t<00>d| <09><00><02><00>icYd} ~ Sd} ~ wwxYw)u获取预警统计T)<04> total_alertsrH<00>level_distribution<6F>type_distributionNu获取预警统计失败: )r r<>r<>r<00>countr<74>r<>rr4r<>r$r3rorpr)
rIr<>r<>rH<00> level_statsr4r<><00>
type_statsr3rvs
r"<00>get_alert_statisticsz AlertSystem.get_alert_statisticsos<><00><00> <16><1B>'<27>)<29>)<29> <12>W<EFBFBD>&<26>}<7D>}<7D>U<EFBFBD>3<>3<>9<>9<>;<3B>;<3B> <0C> '<27> <0A> <0A>e<EFBFBD> 4<> 4<> ;<3B> ;<3B>E<EFBFBD>O<EFBFBD>t<EFBFBD><S<> T<> T<> Z<> Z<> \<5C> \<5C> <0A>!<21> <0B>'<27>5<>5<>E<EFBFBD>#<23>M<EFBFBD>M<EFBFBD>%<25>0<>0<>7<>7<><05> <0B>u<EFBFBD>{<7B>8R<38>S<>S<>Y<>Y<>[<5B>[<5B>E<EFBFBD>/4<>K<EFBFBD><05> <0B>,<2C>,<2C> <20>
<EFBFBD>"+<2B>9<>9<>J<EFBFBD>#<23>M<EFBFBD>M<EFBFBD>%<25>0<>0<>7<>7<><05>8H<38>J<EFBFBD>L\<5C>8\<5C>]<5D>]<5D>c<>c<>e<>e<>E<EFBFBD>38<33>J<EFBFBD>z<EFBFBD>/<2F>0<>0<>%1<>%2<>*5<>)3<> <12><12>! <12> <12> <12> <12> <12> <12> <12> <12> <12> <12> <12> <12><><EFBFBD><EFBFBD> <12> <12> <12> <12> <12> <12><>.<19> <16> <16> <16> <12>L<EFBFBD>L<EFBFBD>9<>a<EFBFBD>9<>9<> :<3A> :<3A> :<3A><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>sA<00>E?<00>EE2<03>% E?<00>2E6<07>6E?<00>9E6<07>:E?<00>?
F2<03> F-<03>'F2<03>-F2c<00><><00> ||j|j<t<00>d|j<00><00><02><00>dS#t$r(}t<00>d|<02><00><02><00>Yd}~dSd}~wwxYw)u添加自定义规则u添加自定义规则: Tu添加自定义规则失败: NF)rFr1rprror)rIrsrvs r"<00>add_custom_rulezAlertSystem.add_custom_rule<6C>s~<00><00> <19>$(<28>D<EFBFBD>J<EFBFBD>t<EFBFBD>y<EFBFBD> !<21> <12>K<EFBFBD>K<EFBFBD>=<3D>$<24>)<29>=<3D>=<3D> ><3E> ><3E> ><3E><17>4<EFBFBD><34><18> <19> <19> <19> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>s<00>15<00>
A'<03>A"<03>"A'c <00>R<00> ||jvrg|j|}|<02><00><00>D]&\}}t||<04><00>rt|||<05><00><00>'t<00>d|<01><00><02><00>dSdS#t $r(}t<00>d|<06><00><02><00>Yd}~dSd}~wwxYw)u 更新规则u更新规则: TFu更新规则失败: N)rFrh<00>hasattr<74>setattrrprror)rIrr<00>kwargsrs<00>keyr<79>rvs r"<00> update_rulezAlertSystem.update_rule<6C>s<><00><00> <19><18>D<EFBFBD>J<EFBFBD>&<26>&<26><1B>z<EFBFBD>)<29>,<2C><04>"(<28>,<2C>,<2C>.<2E>.<2E>2<>2<>J<EFBFBD>C<EFBFBD><15><1E>t<EFBFBD>S<EFBFBD>)<29>)<29>2<><1F><04>c<EFBFBD>5<EFBFBD>1<>1<>1<><31><16> <0B> <0B>8<>Y<EFBFBD>8<>8<>9<>9<>9<><1B>t<EFBFBD><18>5<EFBFBD><35><18> <19> <19> <19> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>s<00>A.A4<00>4
B&<03>>B!<03>!B&c<00><><00> ||jvr'|j|=t<00>d|<01><00><02><00>dSdS#t$r(}t<00>d|<02><00><02><00>Yd}~dSd}~wwxYw)u 删除规则u删除规则: TFu删除规则失败: N)rFrprror)rIrrrvs r"<00> delete_rulezAlertSystem.delete_rule<6C>s<><00><00> <19><18>D<EFBFBD>J<EFBFBD>&<26>&<26><18>J<EFBFBD>y<EFBFBD>)<29><16> <0B> <0B>8<>Y<EFBFBD>8<>8<>9<>9<>9<><1B>t<EFBFBD><18>5<EFBFBD><35><18> <19> <19> <19> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>s<00>.4<00>
A&<03>A!<03>!A&)rrrrrJrr=r0rErrrwrkr@rlrmr<>r<>r<>rAr<>r<>r<>r<>r<>r r!r"rCrC1sF<00><00><00><00><00><00><1C><1C> <20> <20> <20>
U<15>4<EFBFBD><03>Y<EFBFBD><0E>#7<>U<15>U<15>U<15>U<15>n <20><14>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>!5<> <20> <20> <20> <20>:E<14><03>E<14><04>S<EFBFBD>#<23>X<EFBFBD><0E>E<14>E<14>E<14>E<14>N<19>9<EFBFBD><19>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD><19>t<EFBFBD><19><19><19><19>4<15>)<29><15>4<EFBFBD><03>S<EFBFBD><08>><3E><15>d<EFBFBD>3<EFBFBD>PS<50>8<EFBFBD>n<EFBFBD><15><15><15><15>(0<>I<EFBFBD>0<>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>0<>PS<50>0<>0<>0<>0<>*5<><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>5<>D<EFBFBD>5<>5<>5<>5<>&<16>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>#7<><16><16><16><16>, <19>c<EFBFBD> <19>d<EFBFBD> <19> <19> <19> <19><16>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD><16><16><16><16><<19>I<EFBFBD><19>$<24><19><19><19><19> <19>S<EFBFBD> <19>t<EFBFBD> <19> <19> <19> <19>
<19>S<EFBFBD>
<19>T<EFBFBD>
<19>
<19>
<19>
<19>
<19>
r!rC)r<00>logging<6E>typingrrrrrrr <00> dataclassesr
<00>enumr r<><00> core.databaser <00> core.modelsrrrr<00> getLoggerrrprr$r0rCr r!r"<00><module>r<>s<><00><01><04><04>
<0F><0E><0E><0E>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>!<21>!<21>!<21>!<21>!<21>!<21><15><15><15><15><15><15> <0B> <0B> <0B> <0B>&<26>&<26>&<26>&<26>&<26>&<26>C<>C<>C<>C<>C<>C<>C<>C<>C<>C<>C<>C<> <1A><17> <1A>8<EFBFBD> $<24> $<24><06><1A><1A><1A><1A><1A><14><1A><1A><1A><1A><1A><1A><1A><1A><04><1A><1A><1A> <0B> <19> <19> <19> <19> <19> <19> <19> <0B><19> <19><19><19><19><19><19><19><19><19><19>r!