From f1977fb99bb7298544bc4941d48d551445a2909f Mon Sep 17 00:00:00 2001 From: raja <1647193241@qq.com> Date: Thu, 9 Jan 2025 21:03:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=84=E5=88=99=E5=AE=A1=E8=AE=A1-?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E6=96=B0=E5=A2=9E/=E7=BC=96=E8=BE=91-?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=8E=A5=E5=8F=A3=20--story=3D121513458?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【新增】 1. 取消部分必须映射字段 【修复】 1. 修正规则审计 sql --- src/backend/locale/en/LC_MESSAGES/django.mo | Bin 71909 -> 72067 bytes src/backend/locale/en/LC_MESSAGES/django.po | 16 ++++++--- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 73538 -> 73692 bytes .../locale/zh_CN/LC_MESSAGES/django.po | 16 ++++++--- src/backend/services/web/risk/constants.py | 2 -- .../services/web/strategy_v2/exceptions.py | 10 ++++++ .../web/strategy_v2/handlers/rule_audit.py | 34 +++++++++++++++--- .../services/web/strategy_v2/serializers.py | 2 +- .../test_rule_audit_sql_formatter.py | 13 +++++-- 9 files changed, 75 insertions(+), 18 deletions(-) diff --git a/src/backend/locale/en/LC_MESSAGES/django.mo b/src/backend/locale/en/LC_MESSAGES/django.mo index ba261c77da15dba9e110b33e36295c1de0e80752..133483016e3d21da34499ec0fbcd7ddf6278ac37 100644 GIT binary patch delta 28414 zcmaLgb$Aumx5n`ao)8ES5(p3o?p~y&I0cGJao6HdoB|yzxHdQxx8m;ZP-t)|S_%|* zD9-)9XBPMJ*PZ8?e)e8_@3m#-oCNxlTWewsUKh)~nk3dFhbvEP$4P}VvpUYxIFxHD z>NwXsIZh1x8`XXjlc8T{#|gqP%!pa7UKKM?Z-Uuyh}BnN3hHN&shr0c%W+)ir3K!4 z0mtd$Yj9$t9~}cw3kbA&keS%x!5Bz;C~9Hp%_5kXdQG#H*$ZP5AK}w=oG}#GurmSu zaVjRnd8ou|Fh1@yk75Gq=TH;eM2&le>hJu-q9FmQo*aWPBgVr5sQkq+3G+LZDdaF{s-HPK?!0@hf47i!!Q)VMPkhW9WH#_GyMm;pnv5b9A@L028yQ%H)D zs1;8~Eod<+@d}KKo6X(kVboEcKqWkb%J&qt)A-%IiIbuho*9)dFY3gXRx`t3t4=qU0i zT;~J@E#L;~8NM`~UfxR?A2l!nwc^aE6DnZs-ODjsh2tf&OJtX>Lr^ySP77O#vti5jS#)<>O0Q;T;*-$`Ns z^EP^(fw0 z-LJ1VE&#Rg#Cznyr^ee*y=@4kEj%CU=`E^4N*I4g*u@gs3Y%->NgaX zcOq&-(@-ZkA9dmzTnc)r_M=vQ0aM^(GoT-fqMi|zpayEfhNv%|4yX0*19REh0)F(6a7w_|)6SdINs1vM# z%G(ju-$k9+WNTlH<(S{uOCcW(`YdYYMNt!fhgwKgi`PdbXpTDKZm52}P)9uwbz&n? zpN8qEovuQi>~_=!_n{s^wA#6yv;3m~-avIoKET^a22_IlsD+d;E21W>jY`}E)vvYH zyP;0vXH>ossD(~Kjhl_y=n`}_a5V)r>_81Xh#Ghn^-}$f+SyA?i?IiK6J|y|`>#;% zLMhad*GJ#Wi5k}*^+?8`=39aqw_zaX?>iC#+DSC(3+Wtc#Sc)=?iK3D5)ASd8jL!T zRH#Rh88tq;wdX@Epa|-vt%RDmIx25t)JEG3;>fk)UeWeWmo;Kg15~UyN zy(2%M7S;|mzB_7XeNoSPh&jQWWiB%}`{el_u)ryd$-rwE2me96B=@ZT1~q{*%=@9_ zZ>BPHqb4q8Ry7-%ZBYyEiFzahFo^k`(bi!mYQo>GzS%s0dX}fGejkM$v^dyiH`&)-;s0GYN?R=xvqfsYt1C{tSDq-wVUY;OS zJk(5&T2LNTzpqi_OQTMA}~!WtNe%}uwn75bqPj<9+Z>O|(CR=nNfr%;KmS^Y6;!uJ*r8sm*igMq}0 zpf*?@)vp<9Bi+4re*Rm-uU^1eXs$JPna5BQUqpSw-L?1!GhnPYQ8Lsc&4XG%A=FoV z8BB|{E#4dbdHzpA;|y~jYGe0NaH0QR6pQe3yC5;uld1`DX&>uL20J63-=| z0n0EauEoN59ktW2iC(`g$H_vyAZmwA%(iAXRKEVGmvsmx$N8uYY{x2i1Uu;SpM07(AQIJKv^fnm!6K`# zHg{lF;zv;vyg+@e)WE z_**mX3~!-HQ9DmV!67V%&qua~ieaf6O^#DqoD>ybT1R@`bn*^m1e|OPck~ZsusziWiz&Q45bYFQXFPMg35EkHsgmbv{}z~xTF4^Q=XZb9CJI{7OkaS%WHPs44&nz<6F4m8K2 z^3714`JIIn^uu5+rpAM)mEKYZe2sdhvFCa9q-I((7wS%cH&-`=I)dGN+pELJE4D*J27hWDPgW z$EcORN4=b>7kfJ|is962qc+eTHNh~ePegre7o$#gpT$p`x4pRQys-}cOT42G!w3eH zLnUs5I_kbwpJ*;d?QAP*;$s*GFJflAZuNM-doN!Qs$Ybe6Lae4|2Gtp(a;9J#sSu0 zt9c0Z@j8Q=;2vs6Pf2-52MR|hXuw7E$J>|y zpIH1O>IC91^ZI2l^P0s_6IaA|SR-mpc(Ct--Pd{yHz%Rabe_2ZwY9^j3|CPrxn({> zt>}~0{g-4};+(wu58LnYdYfq1|?WnM$I zKd}09R32xAx3FLgq#AB!GYhTY!K$GQ0VSwz4Rx*F%IsivL+#{e)VRT@g^x!~I2&~m zYf<^Oqx$c&_G74z$u-oo@^e>uN0I_HAdguHm8cjd#PX;K>Y)0yLmlN$s0oIl-nQ|m zesj!q=0WqK`2e*6_mdR@S9yUjGn1Jgm9PW`VNHyWEiB#{m1vMT&e~_97P`b-h03!L zL-7bQ&ULPP1?Qpp7K7*zceVGDB*TQ%v!f>Z29>xRDq$7WQ8u&s&!~Q5%;~6;Tx{)Y z%>5Xm5B7NrJT#p(UgBWXLNb{J&9Y`~)IwTg0Cq$@ir%ON3`Fg8ENTG@Exro1q3x%5gGM7?Ag%_69;vg%gvh>55VMkStzNpKOS$1SKI23JrEes6}X_xj~p&-tsN zBmsRa>Z9uYP&=7~O0dw{_gnjItA8@nZtxaX8nu8XsC->915QNc-Ga(@%IZ%yaQFptC~->*46qK9 z&EHXpw_E+JdB@`KP!lHI?Dfl!nW$GnZKN9}!=YB6g*w?as0FxttZ*Ln^Y9^RV8|9P zVHUF_DqbIzprgh6TYR#`f4BM;^B5+l|26Zq#S?G!#a$-@1wEsps0o^T4Nec#3ddS~ zfwk{IeY{SfUb-t*e~b~--(whtZ}Y|%LiMj~);E8|?E3t7r=ZX09CN9;9<`vI=1Ekd zo0txtT0QA@FP;{aCl~633S&wvZ|yBn-xohwy*DP(=RcByj%YIK3uKjb*lh6wsD)g$ z_*2x|{SlQgVuv?jX3R*v5GvltY-zSfH*5JR}TWKgNQ32GBN}*1o z25LtQPzicrI1WVhpN)zyNBxxCh?;mWD$iL=inpx()}@e*K)@bvhXqg_E1C^ZiQAjK zQJ*aL|TA{RA&1{5vH0@A3=wpty_Sxog zbBnbfwE9KVLT;lL@&vVz_ozo1xX<@9$92+CP(x1CPK%lqP&=!GT0mp-Csg7g);<>X zXeOcZ%tGZ^X>LQ`iCF!VdCe!!{{aO}@WvVf_j?J#%uJ~E{AO8;*E3tA7TOI{IYE^K8_*G@0_Ec2_BfAPzjP8@CIf_eTNsedNtJNw~^H+qINzPwU9L! z6E~w?*6kL*fSTtTs{b?e{r(^0AaA%IL5x8|jYHlq5VcUh7j#AaUeF&i;wY=H!Ti*B zpNT7po662U|Q6b(F(V-|>@B zC$$Roi^yT~BI@P6hg!fJ^8@OH{Em3E9kxO(v^Of>Ak>MD!Spy0^^R=DoXqc>r=SUAAM*w#K-H63J&o0~qE09; zDsf2+#7d}%>sh@6s$U<}&PP~%28L2!hAD6_CeqLUD->c8c!WBM=ct5lP>BMMdpk~r zdda>c^kF!C#Z$~XMRF0ByO~4QdGaRs0C#~J&IhY1(ZNN!kW>XzY2{B=!n{)2L6It zaU=#|6smo`xfzw{IO^@cj#~ID)VP2XUOhQ#r#Y@=;j5>+ssGY7yoy1m)A3~jEG-{(4Pz(46wb92e1x@%0HSis3r}0jD z3Byq@O?sCWfq7oO!AS{oXpe`oD7N|Vkt$hUQq^4m)TxGgDDfo^ObyU|;J9&eN z@sq_9pYl#58!B;O)VRv19W_P0D;-c9>4{p{VAM{dP`@cnN4;yCk&U~~Sqd8X7is}F zQ3*a+Jm9pKASvpkQlk1tpkCf=sFNs(dK49`UIR681Jt8zj>_8wm8ZY2o##J@f}ZUN zUx4p!)Q+N1181WqSb^HnM$`!%L>>7tRKN46#J5ljyoWl$7pNnTbH;lqLr@FPiYb`i zDWL*3z#P~Um0&(luJrXfSGAnAJ0(P9_KX ze*WjDpovPLR$2|UlO`5#iTWn%j@s#H)Co;TO}q$o5-ZIus158#--1zjFQHE49%}si zv-bIqcg`CSjM`Z^>SZZ}p;*i8fFaZeqY_R-o!k;s;(Zv3XHh5i0M-5hD`N8V-rwD} zL@j*QdCp%eT|_`TSZxj4Pzm;-j`$3!-v!hW-$0$%eN2k)P&-X@!8_V;)DAPC9zh;d zdqFIKrLDb>OF=t{vdtP^Ub-BBmfAN44PqY{j^_9)Z>W};r&6{v~VqVn!S z?eqw0!52{d?)lnz{*Ngr;TzNroJ-yU5}|e+YV{1L9b`itX+g6XYGGwji7TMSRYm1% zgc{cowV*y$AB^$z`5#9?JDjQj&PScVa#Vt~s0sI4{HS>XmG~U$CA@*!>3>)b<6QPm zq6%u_2BDZ$M(lxF z&w)kV0f)c+o<6QR=CPpPnjapDnRKNVFccB<+;f_q^m9DzFN)u@HJXDH}%e;w8F1?t(w`P+NuDNz#^K(!Y|O;i>2NNS-b zY=U}MI$8Y})B?w#`c1d`0&@+L*L8MM&;kykzT5vo9n}+5!jGs&l<SRB<}1C^&SYGdtD`TC-(XF8Zda-4)(;Yw7;gQ$}^hg$JH zYkz0;;9K6pGoTjsHL72Ei`TPyCu?_6k9aI(t^%gV#;Az~q4JKi`V7>(OK$W0V^Y{mpg3+vE#y7w87BPK zt0zY#%4QZq?YIo;QPf0z(>235*dNt@2fZcH>YFy$w-hv`r3R-y%jEe=VUKF+B zvZw?#P%CbPT3AQa3G}k|;i#QQp#jFJLR5#; zW^UAqOP~@}MSpCC+IeTQzc~suej4fomZCPc2{qv^^v9#ff?ekf1?}t(YQ?Y7A3s<; z?me$PnVH!vgyrd14t3SNW_;*sc^7`5OjsGZM6?R+i9$6ctG_zw)n8>l?a0~W^oPB4WOm<4sDrBMT_ zqu$~+79WjDI34vdU4+`nPK<~9QR9xI7IYKU{}Jllc#DCU@S(Til<52Se}yRM8CNjt zp?1~=wbIV0go98=IT|(LT#GM7O|;(XyHVqhnkP~3zy;K}>!^HpA9DU`cy0~vtYfT4 z-cbgk+QU&h&WK7-6!l2TqMm7O)B>8JcG?lO@PViknTYDQ40U1~Q484qi1XL8KS)43 zyMYbxKUBh+kNK}HVH4ERO+>wP`4HYC#oI3$KORaWmAyJ6OCACZHZ^ zbvKHFI?hHVSc*Er^{Asij7o36A%2C- z>pG<=Xu>L}37VU2Q48vV8u&A6;-Q!X$DzKE=AkCqZ1n?Hzl0ih2lZ%QpeFWz?u}25 zfqE#}DJXGa)PRy011qBjRKrBr1XE!b)P!SDk7T;FFGY>thRSycHU5OPUqdbU3F=*m z^8)o!q^6*Tf@USuTiYDM=j(S>O21;>QO#NE#RZo=Ee`W9&Mi>Q9LPz!ze zlJieW!FlDqY$2$IaMXlZFdyc%_Liu`9jx9B^>OTL4nTdHB2nWjpd-ABdh1`KK3>j$-dA%NYN21DPUL%3!kU;Eo1hl<6Kdk#=0H^ck*JML zMCG52NpP`CLC}E!yb}$9?%od{(Z^LAG43+q%#h;_b$9n6rl|nMxrK~ikfIShTsm=&Q7Be-a(zf6V#EuwRoI&UY>-g{;5zK%Zut?47Kp`7H^8a z|6+ef>(JXAgxdLN)PR|&1+BOC1E`lR8rAO{mcrW>&-&imNFLMz%AiiBIwr>!m!%7PyUCz z`jO|aM5#Y{12dpjm=85kNz~DmNBuHc-`e|G`zX}M?^g`R-%$Csp}vUrU@<&^I_X&a zYfimG2~hp`_rHF=hLos@GoV(OANB0MxAxkoiJG7ix3hRB)Jxb4wa~$+ev?q+=b%nx z1?uJAhMFhZ;_g)nTG0dR@B%e3o}U*FK}`^jdZt+|UK%w~Mby#O#!&2pnjjLjpoypr zEkZrQ?N&dDoUrTsOF;u3p*-b)B?UoJ?kG(3vFq3 zL7h}T)P@G2HaZ4%^pkwL{N)k_C7g>&xD>U34XDKXP#?e3s2?^rQ4`%o^?Qj~F=k9Z z-@n<+i8`rDsCTHf+0pEdny)YVKL0}~DDgPdNlZlTcs^?46{w@zi8|ubs0G|ZJ=0g1 z1_NSw@oZ*6vlMEfRZu6;5Vg^k=&GSJ1+Az*YR5yZ!(`MB=30D-#W$n+??Wy07;2&C zQ2G8v<#}oCv15DhLJ(>rX)z@hjP2+B`@b3lw4z3+fo(7o_QupW8}$r#qIU2HYNFGq zll$A^w=Mn%^{%`}EifpKH$KeFggWW`aa`}nN)gc8S_SoTG(`<;jhe8F)qA6MFv#jt z%(8q&s++c=p*W56fdqKm~*s$X5y z4!c*OcYNvZp@6HL-JM*vUzOzD5JTF0d)Fb#BwWIG*E3S{}u@&l( zj6f}93F<3&H)`Tbs1taII;nT4XPwC3TW}84xZ+;jb?Q*i1nsOt59=@-wevZs1+73$ zumd$=H0lKIp?3Je3=Hsgm=ZNUH)`CssD)KQb5Z|* znjlA@_o%)_)oY+0RddvY-B3G?L@hkZ>Z?%;--&uOr_lH3|9`E+Thz|uCGZlYL@gvM zYJw7GbyT9}s2%l0y~L5I#N$vWw*WP6JL-`gNA8tbkUrj+P-;Fw|KT#_^Z}sP>3Era;_$T!i9ESS12i1!kvM0JcXv!fPL5Y?|VeuqC;d^+l67F&HC>cn=V z`bVP{avk-v;syHthrI$qy`4m$c9_rVrOY2t30k8bO)u0!2BP|pMg6KZ%i{A;C%Ou? zpdIEB)JuF8^-f$0<@2wjdqhA9<0SKT9*o*~a?}LrQSJFrJ1SxIs%Arrw?*x+w>jF{ z=UDp+t8YhbmHT;8G@e|bdzbgpq(DZe0UmlbaBGGcv94nr9n-U5%qD+hFVBf)C6@d1mfvdi_m>Ut;+~13&jQ3s+z2Te-Vgy#}#w=%;Hq z#%5LhY3G~PcfBTdl)k@vRsHV;IXj58r#*&tz@?A*3t~-tHU32w@1L*ulTA{X6>a0b zN~hV}*NM-NWodY7f#fqNNu8`=W6Yf>&mUws^P?D`%#K|LvL=V^qP&g!Kgy+1UoJ0bi)FiugEff%KrA8U(Y_2! zidPs@pF1(}wzdE@{~Yz(4{_bLjL5>s#;7YPy}qKJm-=Fh{YPEb9Y#MS(+Td()JGHV ziu1Yq(6^Xne@=TfVw<>ka{tIZmRJ?~+@qY0@>nmo%bz&--X!pj23-TG_oiN#WOXR7 zVv>g#8`l$ypid0S!?<lNOoLnF$^C~vTYIn6Xt$7`i@%V`Om(P5(BTk4ba=2uzgAa_PzF8=MCwLPHUQH${> z0w)dQb#-NoK84>~c6~xi(7vDe*Vae<3Q>PyeW=E8c1E?WoyI*(m*zG_G|jiUr_ug{ zbq!>Rx@ORC8}}~mm!#Ujn7Lk)liT`O)tN=xXzpNgL}GCowld}%W1CXf)s1qZ7<_c@ z5lCbS_AwwC4dv+k`I=6wx7C}{mdg6-r<|@8mT)3%7bp*>e+d0ESv-Wgt~kVg;oeWb z0^CE0cZp#io%d9VGvG%$Y{&0x@H{$xzFMnHd@kzyK8kw`_X_ISiLWQeZOm^IUZbqy zCLG3ngL?+|D{Bv8+(_3d4Vici8-2;^{BU?UnpLr-i(A_UR~*1n^-2yPM>7l-_kz~ zu{FdxQ`Xgw`w(sJQ~t5lCP=`3{%N4coA zucG@r%BhJxCC_*GlK%RQCG!9BxsFR?92$1fIWPBJ>VHr_%79wd@gwCUv~A{YMq4%N zlWE(8UtV`<*TrvQ&KvFuw14M?eE)pMSY4->gWprRc>dYoAMWG?*5Y9r`!kS3a4v9v zz8VnkPM;;dfh>mlAsUO4bSC{zS#tI7%sq~N3Fwo+;(z0ITW~kpYpP=ecTYNP#NF2M z5S{W7(^V=eykW8erHTARy6YC*Kue(YE=So6`VOOhpSC8H$1!d;_ivP&;vL$) zqO9wjelvQ{pbK;^Pvc%M?)0KVE$X|tb^S?uAmwDlxuPs$e%89IP zC}mx}qUtqH@8+admzMNi(D%=~)EjUgC(Gw6rj1tpv8|cEN-gw4%?Gs4<=(_So>&9=gm71; zUX)u`F!gNYXzf*wwEso@IJf?ISI@?7CO%1%Q9o<3BDDWPTvuY+&QLDLxSP}uaRg2{ zfvGe+Uc!`*gVAT#h4QG`OAwr-%*dWoC>v}{GNO@=)*_A zDULUY6(?5(8#5D&asNSVEq(WMZ=hcr?)%)Ghz}z62lp7tN$8sepMHK5&y&#ai%F|f zUc*3L)36@4_0@P8Fp9zbxa-muOwuXbE4k}%r{z9RpYq&`xS!LnF?T9*p2ZQ|A;fh( zj@5z(#QKk5%PoU4=d+>8~i{EmLX%v4rmh^@tJ*pU9EZRQB-e^4K8^(JOPVi_6x z8}+MRjGu6JWh8N5f^%^yi)cr=y|wiuHi4uaxplq84)mGjC2^Wi)|H*)&#cc##-y|O z*OcpWr>1Q<{VFmpKi1ZF$ye4X0;|!fEUu$NLyK=>P!BpUp?;qDC(2ETwX%tlU<>ZS z)}Ll)B==zM3@qqha%M$c3+VHn99O)m^Ge?(^)1mf8mChJiViV}>pII_ir7HzqF+p) zw!T)sV&lKT1B|Q6eU5TJ?(vo<9_0m$8OQyW{JL^uUa!cJ(6J163~T%u7t%Nkw=?+j zl_6?E>tyal>s5!An6`{kboreO<+-ogh;zg;abKd(0>&h!EemHcnf5J~<8x+t$zoY7 z*oyi_#?IlM#hAy8Z}s_)T^p(BD&XOyqrRF>Rp_iMsVzd~4BVHgzrj41oJBNK16LQu zb;LKs&)_J=ceUIp&AhbjrX0$+2{CzVzW!qMPZ^ZgCe1>pyOifJ;2wRNQEq2R8c}{k zygvSA=qkNh6Ww;ctxD?irC?OpJtW!Gby@}_cLn!{m zy_iI$x#v@^Nx#?Jk=#4z6NaOSXXV~bpEbn3$G5nbwyNB^#*sJL%Bo-H&Y4UBR+`-! z)={m`t?M2GqPR2C){taNqE5C6cF$7l%v2AEgfnuF*V%cG@u;u1dRF@V!F`o}J&85v zeqn9@64#Z6{-3X2#EMz`PlA1!S=S0~{{Gb|@6}x=C6h0tV-8<4Kk{j8PAtIcnQ03l z@lfigX$!KXTP)!yVt;aXwsZCE zpIJ)h6?Be?Nx2_c!$gclf>^ZW!Jn}Vv4WISahIi>i=4W~Gfvk759f@<*U|3{cSe`N zx@LGd`xp>LtUjK>AGrt6F)r;liRHwP#O`qGD(vAjw~4-Cf+Dn?<=#WN1@Q@tuWS>m z`(o--XkW|i{zm1LB@w?;?@EKNMht$!{S)Qn#D26Sx2R{fKK*UtB(%k5Y)gxOr374w zssBw|AB#uOe=Ko7jHTZc(o&g8hg$?1;{}p@zEbeqciOL-YdmB@Q z_dj2nR-y)tQHh-c%ZH>c8be#@*B&WGka_{HXb-=^ffeS6kYBMvA zWbw~vJAw{l8p8l?T`g#@!Ci@X7{4I~M>Xvb%l(F)lPtqQo27_Ga~&t10(%he#Hy}Q zuk35_{;`vO=eWZxwv9etUgBGI8@=MtD>WI@62DC>Eq6K^(lBm5u}fHkyB6`{N>ltkWxfAJ+l^-Y! zu#UIs)Yi%;==?kP02>^I$EmNRJstL7Tvf{Y0i1+#ZrV>1*Y${U6&v>#ZYQp<{CL)W zl5z7WPl*v#qf==0PZo}=sp+O`4CRFkeT~W3?|I_KiC?DgBJP63#}WI1K8q>OAeMx? zI(;s#+tTS_NLaVdJ-W7N)ueUXRvlVKWb78vsdM*;)}4EFYPoLVkmQ9@-C8;K&dRwp zt5^DW;_TbQ$KRbe?ar!I-$e9n)wOH?bsM+&r~Q8t?7W;hU%H59JzBQy9zlkPA6s>5 Z)wNmoR^1{P-MMQwOS9>GLcfFo{{!L9dG-JR delta 28265 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 PTu+r}OW%Zk@dEx24rw

\n" "Language-Team: LANGUAGE \n" @@ -3533,6 +3533,14 @@ msgstr "Policy type cannot be modified" msgid "联表配置错误" msgstr "Link table configuration error" +#, python-brace-format +msgid "规则审计SQL生成错误: {err}" +msgstr "Rule audit SQL generates errors: {err}" + +#, python-format +msgid "source_field %s not found" +msgstr "source_field %s not found" + msgid "Strategy Name" msgstr "Strategy Name" @@ -3693,6 +3701,9 @@ msgstr "Map Field" msgid "control_id and control_version are required when strategy_type is model" msgstr "control_id and control_version are required when strategy_type is model" +msgid "Control Version not Exists" +msgstr "Control Version not Exists" + msgid "link_table_uid and link_table_version are required when strategy_type is rule and config_type is link table" msgstr "link_table_uid and link_table_version are required when strategy_type is rule and config_type is link table" @@ -3706,9 +3717,6 @@ msgstr "Processor Groups" msgid "Processor Group" msgstr "Processor Group" -msgid "Control Version not Exists" -msgstr "Control Version not Exists" - msgid "Strategy Name Duplicate" msgstr "Strategy Name Duplicate" diff --git a/src/backend/locale/zh_CN/LC_MESSAGES/django.mo b/src/backend/locale/zh_CN/LC_MESSAGES/django.mo index f1da0b212a422c7b0e3c2be7b7ae013c1ab2ff27..a76ab485d0dbfd1fd89e9959730e78ba67d23ae4 100644 GIT binary patch literal 73692 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 RDKg2D^noIVNPKb>@!uHlN|XQq diff --git a/src/backend/locale/zh_CN/LC_MESSAGES/django.po b/src/backend/locale/zh_CN/LC_MESSAGES/django.po index 42768d84..5f4427de 100644 --- a/src/backend/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/backend/locale/zh_CN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-08 21:34+0800\n" +"POT-Creation-Date: 2025-01-09 20:42+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3533,6 +3533,14 @@ msgstr "策略类型不可修改" msgid "联表配置错误" msgstr "联表配置错误" +#, python-brace-format +msgid "规则审计SQL生成错误: {err}" +msgstr "规则审计SQL生成错误: {err}" + +#, python-format +msgid "source_field %s not found" +msgstr "来源字段 %s 不存在" + msgid "Strategy Name" msgstr "策略名称" @@ -3693,6 +3701,9 @@ msgstr "映射字段" msgid "control_id and control_version are required when strategy_type is model" msgstr "当策略类型为模型审计时,必须提供 control_id 和 control_version" +msgid "Control Version not Exists" +msgstr "控件版本不存在" + msgid "link_table_uid and link_table_version are required when strategy_type is rule and config_type is link table" msgstr "当策略类型为规则审计并且配置类型为联表时,必须提供 link_table_uid 和 link_table_version" @@ -3706,9 +3717,6 @@ msgstr "处理组" msgid "Processor Group" msgstr "处理组" -msgid "Control Version not Exists" -msgstr "控件版本不存在" - msgid "Strategy Name Duplicate" msgstr "策略名称重复" diff --git a/src/backend/services/web/risk/constants.py b/src/backend/services/web/risk/constants.py index 7a7c280e..bcd36a03 100644 --- a/src/backend/services/web/risk/constants.py +++ b/src/backend/services/web/risk/constants.py @@ -377,9 +377,7 @@ def fields(self) -> List[Field]: # 事件基础字段中需要映射的字段 EVENT_BASIC_MAP_FIELDS = [ - EventMappingFields.EVENT_CONTENT, EventMappingFields.RAW_EVENT_ID, - EventMappingFields.EVENT_TYPE, EventMappingFields.EVENT_TIME, EventMappingFields.EVENT_SOURCE, EventMappingFields.OPERATOR, diff --git a/src/backend/services/web/strategy_v2/exceptions.py b/src/backend/services/web/strategy_v2/exceptions.py index 18ab0e2c..d2fe8c5c 100644 --- a/src/backend/services/web/strategy_v2/exceptions.py +++ b/src/backend/services/web/strategy_v2/exceptions.py @@ -78,3 +78,13 @@ class LinkTableConfigError(StrategyV2Exception): SATUS_CODE = 400 ERROR_CODE = "009" MESSAGE = gettext_lazy("联表配置错误") + + +class RuleAuditSqlGeneratorError(StrategyV2Exception): + STATUS_CODE = 400 + ERROR_CODE = "010" + MESSAGE = gettext_lazy("规则审计SQL生成错误: {err}") + + def __init__(self, err, *args, **kwargs): + self.MESSAGE = self.MESSAGE.format(err=err) + super().__init__(*args, **kwargs) diff --git a/src/backend/services/web/strategy_v2/handlers/rule_audit.py b/src/backend/services/web/strategy_v2/handlers/rule_audit.py index 8fbaed24..5c3ee0a9 100644 --- a/src/backend/services/web/strategy_v2/handlers/rule_audit.py +++ b/src/backend/services/web/strategy_v2/handlers/rule_audit.py @@ -15,8 +15,10 @@ We undertake not to change the open source license (MIT license) applicable to the current version of the project delivered to anyone in the future. """ +from gettext import gettext from typing import Any, Dict, List, Optional +from bk_resource.utils.common_utils import get_md5 from django.conf import settings from django.shortcuts import get_object_or_404 from pydantic import BaseModel @@ -40,7 +42,10 @@ from core.sql.sql_builder import SQLGenerator from services.web.risk.constants import EventMappingFields from services.web.strategy_v2.constants import LinkTableTableType, RuleAuditConfigType -from services.web.strategy_v2.exceptions import LinkTableConfigError +from services.web.strategy_v2.exceptions import ( + LinkTableConfigError, + RuleAuditSqlGeneratorError, +) from services.web.strategy_v2.models import LinkTable, Strategy @@ -107,6 +112,7 @@ class RuleAuditSQLBuilder: def __init__(self, strategy: Strategy): self.strategy = strategy self.query_builder = BKBaseQueryBuilder() + self.display2tmp_name_map = {} def build_system_ids_condition(self, table_name: str, system_ids: list) -> WhereCondition: """ @@ -238,6 +244,13 @@ def format(self, config_json: dict) -> SqlConfig: where=final_where, ) + def format_alias(self, alias: str) -> str: + r""" + 格式化别名为符合 bkbase 要求的字符串 [[A-Za-z_]\w*] + """ + + return f"u_{get_md5(alias)}" + def build_sql(self) -> str: """ 将规则审计策略生成 sql @@ -253,11 +266,18 @@ def build_sql(self) -> str: } # 1. 生成子查询 (sub_table) sql_config = self.format(config_json) + for field in sql_config.select_fields: + self.display2tmp_name_map[field.display_name] = self.format_alias(field.display_name) + # 格式化别名 + for field in sql_config.select_fields: + field.display_name = self.display2tmp_name_map[field.display_name] sub_table = ( RuleAuditSqlGenerator(query_builder=self.query_builder, config=sql_config).generate().as_("sub_table") ) # 2. 构造 JSON_OBJECT(...) 参数 - json_obj_args = {field.display_name: sub_table.field(field.display_name) for field in sql_config.select_fields} + display_names = self.display2tmp_name_map.keys() + fields = [sub_table.field(field.display_name) for field in sql_config.select_fields] + json_obj_args = dict(zip(display_names, fields)) # 3. 最外层 select 列表 # 3.1 JSON_OBJECT(...) => event_data # 3.2 strategy_id => strategy_id @@ -266,10 +286,14 @@ def build_sql(self) -> str: make_json_expr(json_obj_args).as_(EventMappingFields.EVENT_DATA.field_name), ValueWrapper(self.strategy.strategy_id, EventMappingFields.STRATEGY_ID.field_name), ] - for field_name, map_config in field_mapping.items(): + for display_name, map_config in field_mapping.items(): if map_config.target_value: - select_fields.append(ValueWrapper(map_config.target_value, field_name)) + select_fields.append(ValueWrapper(map_config.target_value, display_name)) elif map_config.source_field: - select_fields.append(sub_table.field(map_config.source_field).as_(field_name)) + if map_config.source_field not in self.display2tmp_name_map: + raise RuleAuditSqlGeneratorError(gettext("source_field %s not found" % map_config.source_field)) + select_fields.append( + sub_table.field(self.display2tmp_name_map[map_config.source_field]).as_(display_name) + ) # 4. 构建最终查询: from sub_table select ... return str(self.query_builder.from_(sub_table).select(*select_fields)) diff --git a/src/backend/services/web/strategy_v2/serializers.py b/src/backend/services/web/strategy_v2/serializers.py index 17f66148..e161e4b9 100644 --- a/src/backend/services/web/strategy_v2/serializers.py +++ b/src/backend/services/web/strategy_v2/serializers.py @@ -83,7 +83,7 @@ class EventFieldSerializer(serializers.Serializer): class EventBasicFieldSerializer(EventFieldSerializer): - map_config = MapFieldSerializer(label=gettext_lazy("Map Field"), required=False) + map_config = MapFieldSerializer(label=gettext_lazy("Map Field"), required=False, allow_null=True) class StrategySerializer(serializers.Serializer): diff --git a/src/backend/tests/test_strategy_v2/test_rule_audit_sql_formatter.py b/src/backend/tests/test_strategy_v2/test_rule_audit_sql_formatter.py index aad20e52..dcdcac14 100644 --- a/src/backend/tests/test_strategy_v2/test_rule_audit_sql_formatter.py +++ b/src/backend/tests/test_strategy_v2/test_rule_audit_sql_formatter.py @@ -31,6 +31,15 @@ class TestRuleAuditSQLFormatter(TestCase): 测试 RuleAuditSQLFormatter 的 build_sql 方法, 只关注最终产出的 SQL """ + def setUp(self): + self.patcher = patch( + "services.web.strategy_v2.handlers.rule_audit.RuleAuditSQLBuilder.format_alias", side_effect=lambda x: x + ) + self.mock_method = self.patcher.start() + + def tearDown(self): + self.patcher.stop() + def _build_and_assert_sql(self, strategy: Strategy, expected_sql: str, mock_link_table_obj=None): formatter = RuleAuditSQLBuilder(strategy) if mock_link_table_obj: @@ -197,7 +206,7 @@ def test_link_table_simple(self, mock_get_obj): "where": None, } event_basic_field_configs = [ - {"field_name": "operator_name", "map_config": {"source_field": "username", "target_value": None}}, + {"field_name": "operator_name", "map_config": {"source_field": "事件ID", "target_value": None}}, {"field_name": "bk_biz_id", "map_config": {"target_value": "123"}}, ] strategy = Strategy(strategy_id=999, configs=config_json, event_basic_field_configs=event_basic_field_configs) @@ -205,7 +214,7 @@ def test_link_table_simple(self, mock_get_obj): expected_sql = ( "SELECT " "udf_build_origin_data('事件ID',CONCAT_WS('',CAST(`sub_table`.`事件ID` AS STRING))) " - "`event_data`,999 `strategy_id`,`sub_table`.`username` `operator_name`,'123' `bk_biz_id` " + "`event_data`,999 `strategy_id`,`sub_table`.`事件ID` `operator_name`,'123' `bk_biz_id` " "FROM (" "SELECT `log_rt_1`.`event_id` `事件ID` " "FROM log_rt_1 `log_rt_1` "