From 09e58b4170233e8a08f0ff8e5757d312ca5b6ef5 Mon Sep 17 00:00:00 2001 From: igor04091968 Date: Fri, 29 May 2026 06:46:19 +0300 Subject: [PATCH] chore(install-kit): rebuild awindows package --- .gitattributes | 1 + install-kit-awindows-20260427-211240.tar.gz | Bin 119349 -> 151236 bytes install-kit-awindows-20260427-211240.zip | Bin 148222 -> 179640 bytes .../MANIFEST.txt | 48 +- .../ansible/README.md | 39 + .../ansible/deploy_aw_server.yml | 238 +- .../ansible/deploy_aw_windows.yml | 123 +- .../ansible/group_vars/all.example.yml | 13 +- .../group_vars/pfsense-poller.example.yml | 8 +- .../ansible/group_vars/windows.example.yml | 13 +- .../aw-server/apply_webui_ru_patch.sh | 12 +- .../aw-server/aw-host-groups.json | 6 +- .../aw-server/aw-ru-patch.js | 333 ++- .../aw-server/aw-rus-healthd.py | 15 +- .../aw-server/aw-server.env.example | 20 +- .../aw-server/aw-worktime-api.py | 2045 ++++++++++++++++- .../aw-server/aw-worktime-panel.js | 12 +- .../aw-server/install_aw_server.sh | 9 + .../aw-server/settings/views-default.json | 5 - .../windows/ActivityWatch.Windows.Common.psm1 | 1380 ++++++++--- .../browser-domains-native-collector.ps1 | 125 +- .../windows/deploy-domain-users.ps1 | 32 + .../windows/deploy-ensemble.ps1 | 25 + .../windows/deploy-single-user.ps1 | 2 + .../dlp-endpoint-signals-collector.ps1 | 73 +- .../windows/hardening-recovery.ps1 | 46 + .../windows/validate-deployment.ps1 | 78 +- .../windows/worktime-session-collector.ps1 | 279 ++- scripts/rebuild_install_kit.sh | 3 + .../innosetup/AWatch-rus-InstallKit.exe | 3 + 30 files changed, 4534 insertions(+), 452 deletions(-) create mode 100644 .gitattributes create mode 100644 windows/installkit/innosetup/AWatch-rus-InstallKit.exe diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..67c2cea --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +windows/installkit/innosetup/AWatch-rus-InstallKit.exe filter=lfs diff=lfs merge=lfs -text diff --git a/install-kit-awindows-20260427-211240.tar.gz b/install-kit-awindows-20260427-211240.tar.gz index 967b47c17f01f310ef93061bca1e5b45d0ad185e..42626af8e175a816fc236328b5bd3dfd18bc12d9 100644 GIT binary patch literal 151236 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%0Aw7MNgAt5Z?~=UJ^S3XBol7!8HF`hIGo{ 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 diff --git a/install-kit-awindows-20260427-211240.zip b/install-kit-awindows-20260427-211240.zip index 5d503e46017612800d13a7c4352bd865b6517c59..e7d4c50abc1553057ca20124b773c3db58c6489b 100644 GIT binary patch delta 149930 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 delta 118483 zcmaI7Q*bU!*ew{_wr$(CZQIy!-q^NnXUDdk?AW&L`TkSq)YO@a>FVx_?tZFoRy`LB z?Vm6|q0sP3vY=ovK>suFO8zFo^Fm6=!`l3}5*2Yk|2s+dO9JLdo|lAzQ&)oq0{!2Y z$+wdK>o#%8@c+DT;s*W;g8W~F9=zN+>pVFS5IQt4kZ|HYPx@s62pr)5Ew*v@garZy z`=2lW*LKYhaNQbp|2Jt>weD)e#td4Je_Eu6m|DvrjF87AD1JyH5eaop%MZgUPQKaq-j z2%|~b4)d^(Qu4Wpc)IPa0gFTpC4vh2Xl!|iG}*4d5&JXsOp?{;d`omAD;b@yb zZwgHjfJLu32;hz#V)3AA5x0zCj)Ah<|`W++!OK z_{=B@B)L$!95>RoJ*GjehJ<{Cod9flI#-=}O`eg@Y;anf^~odBf^hc1BGx^G^bCMx zMCskA57}ttU7b?FKtQkk$n4_9v203a`Z!59(tJdm9Pa3TeAp5(3O+WTf~i_u(4GGk z0-n%#l#us@2{O0y)kjao%qA|hP(RfjHOe*qs`RokIkZ6aoNc%AFNZq<#Ay@m(x z5C&7)&N+8#^@Cp=0G~fx)Ytbpv=!jmwQ9KBP96uTlfa1s0S54VzKFNTHY`M z5)T+X8wl?-V5oNP=z9EDC;+|_9TYpP5S80MM}PpH_bw;$co+@Z>{GE|mJ?8Jm@gn* zv*Ri=W?8^{sDiv@cZBmuMI06;NR4r)*C|+TZGl_ZG?q$MLeb@DfZ%XOt2;s!Sof zd*98zNFZK70a>^E0?K&S;SXTmzM2=VYcl9e!$fz*_xEN0K{*#ae|7l+Pl%zJhW$93 zIG24pnk%1kJqy7RC`8TIHL_zcqKFT>M};_Fb4DU4XM_-jJa2q>q}5ESAMk||F*};Z zf_*ovD4F&pl9QSYUq5fZGyfDaiYRP&9tUPQCM|xi`u0!xE!2=~ zW3D8Yd&Sk5OUsKFa3n;YoK=tq0BQl%g@Cvq%bY-yC&TTAyvPjVCN-Ke82qfy1d0E} zhBszsG{3d$VG0x9?K()L*aVt#xEjz7nf)p#`Tu2c92MT{cn8{&cL;`VnMjikX-0K~< zY#r}QfYjOnmRwM+g~4zz94qCvi;s}2KwCJdynDYY)rvWiaSp(HoB&F_NqcbCP3wFX zwr1CFQbg$P?`6b^`FAbM`k{UB!UsI}qAGM?%{|~QcFWxeeII~D954irs0Mv3Iv7t* zJSd1y35}k5$MM_`q7Juu*an_J;olY*_Eh5?HO5G3cE=2vTWpUS_5M6!d zWdV0;Rvt+dF2Lf>GTzs-9UT+BW}D=V%$*^uRL<&Fu!@Ik zItF2pFw$Z6qd}A@AY@1UbLEC*o{q*}AYdONfH*}?zwLvFDy@t(Dl1e!&yO`S`$6&$ zW|0B0q6GNd0@X1FnS?L))CQuo*ao{Y>oCcCQWrIz9txiX6-i@Je42y8x6<&o<>XhcdhLURK6X2>SD%Eg z9}T#AQe6x!6V@ig#z=Kb{1#{nuRHdpfYl#(_l5{$wy02^x0=jzE*(w|J?$4~NTX|5 z`lQ;8qytb$g45>;QB%8W!>3^VkjuoapwqbF^HW~(Sn!Q?>!JQk$j|TR+eq_#sWK~v z14_*F)2z6oT~tGe|1j~TRjOf0L@8HGYyfCS>R3ixQB_aHP2KU~em?Pr;UA@>EP{&S zbwJ_vfbUbB3uwwnVsYnV7WDF4>@mf>T?^S)iRPYfr&_6jKFJvhXy|}~79&wk(bS$! zeLsxlq-Pdx@JC$GWIl|HDi=!l`y;{`NKl7J4vwfcw1~JT=BO`Aq?(Qj7^wK9!2#gm z8Yv<54qGsRIpM;|!FLaG6uN+Gr5DbiNGJ2i@xlyG2d=ePpk-Pn3Zt*Pm8Ad~mb#@{sib<_94!0R(2tEt*4F))QN0{JzV||>#yQ=6mnmT(| zaz;b3CFz8e;ocb}UngB+OlVEU7~Mx-kz(^XQWoVavFVP=sIa#Pl2QqR41U6|=V9TN zw+uqX7{Ez+M6O+`j!P;l1q3P2tX0QCwJs&Wfb90*0iLJe0PD zsol4#bmUe!p@5K~c~sqp4-`nMLj3nZ-ZXp%ni!5avu z{f$K}|Jhi%#y!#9^!dEB*(ox!0Cw*t>f8yk39T zdT`8a%O3@J*_%2hx5<036{v(YdIc;?g)+VT3fo8hz6$SMZf>`?m^#=SVnQw5hn3;3 zHS@pf2PyO6RbI+<-_O3()?NY}9d>#<+GHu6MMwIDdN6Xt5+O z$Uo>!wW*#@s)B-V{7`(kngUc2VYhM$!^OkQvwSUISG)z|!fmf#E{^ltH1_(ITWB3? zDrgz|I-Qf(0hw*ByX({JY}Xhe4QZ=!A4smYM0&fu-zO_GELb&IO+r1b4t-viv-Lt1 z9Ch0p-GK=h%;XJHTMW7s^3Ai)T{~yMQt9q{3(M7J_lY-B{mW8!@ZIJI{fvL52pKSJ zIc{+#%B;9CvZ}b2@u7Z#c1LM87!z4~` zR(r#Rwvy=k#TYlo0p;0f;%7dN_E)_{TUt)at#T~A+!k8YkN z-7Qpx^%!iriV{K*%>q2Xe{MJa!l}bI49H0Dt1<`sfPrm zdn-UrU5uwwl@}i>1q>(NM=%FyLFY?^|uY?sUXk2h)FKP zfdxy_Dq-(JNv=QWhh=={U)6m5~RA;CqLRw7am+w;Z`$|DD$ClAIT zPiLGOU$H1AWkK0@YH98{n;i{i(1d20E}vMDvMuq=9fCa5-*UMWgM|IdIp;PL1${44 zc)>Gg71kDYim@usy|JC|ZbYg0=cuWNztGCxhV4JPwXj}ZJdc9_?A54r`V^U_*d8)v z8wNJyL$P%zA?5u8yy9`L*>eZTKuHTZ8p-Y)Wo0&a)F=nREKkFcKR-6ZV(BR^hSVNd z&5S2N^Wz*HZ)KQDRoIGpQHmWQi)>~EB04wAkY&CsSy#P1y9$_mwQZ)Yi6 z3v5bj%-qNYAuRdZlezetfW^~un+UEsaGMbq!|oRs6=HwlC^eM7vPxw(vvrg(d-r(9 zhCmO6zZLv@xg%jsbNK-{$tG(waD8QS>Xef=Z~96_7~Wdad^`lMO9(q12iy2%qbmS1 zFosYfH%excrabR>6ncikr4c2_(99r|Bc9DCmPZpsJVLjCP)E4QM>)x#%|(?a8{Xcx zh$@79fN>3~9C`m+6e)8ir02wuQqOKY!8I(b5%0a(G!;y2Bnk_7E8;0{w(}0U@5acY zLG6B*36=W@<8G`{n&qbtvzw}=FLWGAJQd@XJ`%jh-e<@hKZ$d@{b}(P2pL}lV?)&vi95qwltmto~F|{rM0VM zOvUtbRSt3W_<%JDL@x>O{Hp*x? zUqm&k!B{BMQh-*gk+0Pjr6Z%2l?_6Ilc#pq_sOT%6jo z74qbfNVa9;K0&Q&C+mjjuS*>fxxI`6ckugML^$M&|uD*L2dr1CZ9_I%v#06MQf~2JjZ+oQ{Q3uuogo!>T$LJiQR{b$^2muBAVzh(#JQ zD&((9ExUS7THmCxLiu)g&^PdOXy$w)bb150e`emA$g2G1Xa#yjx2k=BbilL_OI_J1 zYi^PRHBiLnYTew@wW`MtdxQm#42INB8!8Tf)p`3W-HZy8;piow%J^$53H)sA18FIh zCT^O~D_M^rJ|UVb8*!_01kgFCd!pE?y4lNeL`r=$4Cp`pRa?{+7@^z9m6y*yss8}r zL!|0Jh-)4!X-v+e!!6{isb%>6Ie&6?=w4ZR(BgOIzTrDTue?_Yt*lS-?;j?bh!PZX zQn0-qKyE!pm!hfJ&zjjVah6d^slUrpcuLWs*}*7z%LGAsA1e6DEd%2R*@Q3peDWz> zCs1NOOuflDen7L)4W$ZNeC`BXpTrCwq}m4x%7v5Q`3eL-98VrJ~(3R;+?%qK29$UcKe6KMl8r`V3%BlhX&32v|lS(|L{=_qeO zOW2{N=j~IvF%gpgIrQlyzUKzuBrRDEKl9Flb^=RGmsf4BuOUUNfrjun4jq_TX1Lwo zmz?5h5Xg@U_0_U;%MvwtwzRX=)vy0R8SNvE*P6Ndx|BN&G}J&bX+mJUE*FxBVB1kk z>&${;#d_~23^;@=`4V&xMx;O26wq|}cgxkGynm3Um?le4pA#k+?=As`A6MOc2iM-O zFYWqu8s#hItH=a&KK$dMa!Od|o0ig(=+K|NXGzR;wy_*pODoP+h!hn1!jPFkeD#Hb zPaeI-?}5;Mv2;H{slGd(W7W4ky-#hn6UXbL z`>7tfw~~YkH%(=Np_eVmyAPOCP-iXGeS4`TnwY5u>saFlMPW|A2ubg$PEU}KQ;JRK zRxeM!)M2SZxm$_OK?fpdA0nUM74-VhKW*U?p%#)90Gt0IX#vy0$eS&Eh58%H+?B)V z;ylp3NaO4sh*|zGAfd=TK%P(dTQt3))`X>ZiOoJtY8E9=@NadCT6F zH#gcz#B?K>x`eJ9Nn}6O{;b)G?!Oy6z4>Ap3(-T{7(hj3gJno%+5&8@FcL3Ci{JWJ zq!BVKyC~mDaSXS8ScmhTTkt$H)g(l#X}bySA9dfU*q}atQ*-p&EDw9ui>A*B-AZ!q zzM*|8%2LGGPTv_e1$Y@&uLSu2nyCrKN?+Q1!#?)fH7zxrYV|j-Tb@$KSMy>?`Amp# z*O1-(7$ClFoUi_N!H9MU=nt2+5o;pBiZGC&mqzQQjYaej*2s{u9=2F?TyOFv4%2~} zG`NC+0a>)j5)z{o!KZZ6KMmF-&{!@GX~75BRPZSB_Yvs4EW{ipwA&1ewYLCp-lWBI zItIqe*_}=zw4H~2pE*;ts{#sLWY>e7C>Z`OFMuBD40js0WcW|KTzBT5A~_V!!CQSp zm#SpF46>d=`hElXC4^KlHL$B6<%KZ-(zOL#j$=mWN~Y zah7*|%0KfK^y(NQxs5;kbt8+xnHhHDPvl<~HC$Mp{rt0?T5*r$*gvy1nrx8o178POJ8yd7(kbvdta7rZ!#qXCr(6@V4dno$nC?KPtUeZ zlkvB^1?0E3PFjW2tWk0kr}H|s_0j`W{0Hx@5qLj4`!jPOjsyuGZElM8fF z9k0{VbE|5t;4nb7TS83I|7ff(9muM2)@frP&z~&uN-)!kY=@8`rn>+Y(qg@R2O!}9 zxun6YRGD4_gsxIAaEx*`cs#74-JgL|n zS=7^jmhsUa?F}_bGy8;A;eO+sACSAT1R5B=!aR#Bbj`)&mysklEFC~b_#cKun7!V@ zMNycNW8v{@`cJ~+kJi|L>2)CS^`yzw3;g$Zy&G6A-2>1E=t22OBY!~0SypI`j9AxQ zniehtRrWI{%&g1fKOGq;1s;LH&|jPIsC&J_(u*R-5K~iRmOJcI8R1t90ZtjqBKZOW zX0Wr(dBE1rEI$$RFpc$Z2M=vh7dj69=LZ!d?8SD+ zJwatXR$z0z(8Kv(^u$en0iI_y!OVf$LNl#9z)F`qkM+JDm@)8c8Mu)SwWl*GGF>x} zaXsP8!#p!)iU>+Sl{fu+DAr`R79?Cl0SOp6NGe0%3qi*3NWm67E|x~aC*v@={y=I6 zws_uFR#B6I(2Jv4^VCE`8hNd1>)xv%+E;qK2800<9`I&*(Z{Sf0DL#6*^M-MCdWG4 zF4BCnXZef+p^`yUmryu8KuDWx1-{X_YsE{$wIL{M+v(b6H7K?2kO7HGvnr%uN7A?1 zP*~*7-+1Z}yL@xKGO(xzZawB6qC7pNkql8qQm#y$w5i!|+*=)tkds zJq?|=GS&dsO<`m=h!edy8?8Rj`JK5OT{u5R6<9WeAq<-eO(7~!-;4o42%@WtW<^I z;b7xsQNG_;hYe4;rg6r0%Sf^E2fC=nxHI@}nNwl7G@7z$z**Qpe@sLCq@?%52?QHw zLq{T;psmLPRfrb!+Uzr|^@#cIu{H0^Ove^-TdWaUrD_+P^jc zkHe3j6L^^+LPmFe!;k++gG=Et>>$`qnHVe)phaQ;#0)n5q!_D#ZiqDeW!3)o#oxvF zP4d@>d*Gn7&Jco~Ph6Ct=FEEleix$Y`quXLjy|c2;V{g#07IKAD)0^tM0j_$MfRDxNUfOdztP;Xh{q!+cg zkqu;bsHwKykO2@m>yz?${4~&oqL)6SBp)=$ik#AstHfy!ml+{-ATSOxC{}E7Rw0J~ z*8pui1B}5e7MD9ySW#F?0G79aMxbNR`i%exiEY<87`x1Libe|QF(~LcMJ!ld%HdWnY^KRz3nT8-&lnLWt&3j2+jOHb@@g+aygF;R^Lql= z&h&o4cS5HuN+}LdvTle@)`8P+(D1wm-9jB_3u$UbaT0+#{!agSQ(2IDjkO&U^=MM` zE_zog^mRMheH~b2tRgQ?;jcm}@wICV>b3fd+Pk*~+DXd9jd`$sWS8hRV;9LdNbYc( zS^wwO?p8jn%bC%D=fN#7zAd#P#4ro6O@s&Z8A(>VnDpK=MN6ALew?~IY%phq+?cZH zw!k()eaHv%N8sFUwq&+)c$|`rkV*HfM@lX1Ja{&luw1uX75FA*%`1iz3o8v8B^1Ih z^$*_BJPs1GayA7R<|akI>ZDr^QVt@~fx77YQaB>HYGa8O_A@7+whl^HB4k z-rU^Ts{U5Rg?Vzma3>eY(Y%yHL|sTuNd?J- zsWkk6veJ;Vi3e!<6);xjUe>|am7Pf6%K~N$5<%KdbExP{P_QA0`|i@IAO6usj-nwh z#qC}i=Fq0GIc*Gukf3brjvWD5oiOaXZ%R$|a#1=g?GY+lB*%B7>^+4nGSkW$VqYFm z%7rZ^!Ni6~qgk>0iguUiM+-WLtPnLn6)3d)&cK`xGHU9)tgqNQpjm|uJcrJ{%e0N9 zQl(ellZ@A)KjzlT%EUZKnJ(O=$cD~8JSRh)>J!_3xxRtF^xRRHDk%rpES+~%or(Zw z2(MmgjRF1Y8ykZ?#v)Ng9k}O$UqY1etsyJc$%mHs?c?R>om8}^vPH*?9b=n_U zU{sl*h0iA*;q|!SHFuLd_>X)Ma0b^w|jf{{IXWW6ip*zxt5VN3r+7H9eWfk&tGtVl?ZufZB9KM zHF-JfowXz9iw_&x-$apG_b&+sB}GZwa>py07Mg8K^MQR>XZeU3b7{{Knl0+cG-}X7 zD-$<>3w1J-tk-5-$CkERrD~mgMwPZJE{KmsLO;eF?jmK`$ngP6Q7`C!C>ni6I!2R% zV)=$`)oqXJ{O4+7NM##%K*Z$1YPY!kv{R<9c=O7+pH=j|sB|+Jsiyktc&sI2Ff7Ql zL|(JpB~s;s=mZuS%<(O*c+`~BWzbaj%l%a?6*EKvKl+rA7sqXEXq@2M7G(sRJV zjZUB3yYN~-DYpRE)w~_G-ru}D=25UybMJBEMwryA0Y*vnw!&T$*@1v@2(_*UN;^|z zj1FHxea4ADGX{#C*vV{ZcnSES50ayvmP(u zCMY=iJ1=Nl$uK;xxK_F3>m-UfEiKs~AQuM8Z$H@X*k;2u{feOz0^A!>IlF}$8g$ABYZ#m6CO}I!2G0f z3o(`!z3Y@L+88Giou?+;#Y8u)m@B}C8iN9ua^msag^koFQf#~iGYJTg4d;wb& zPC6^?j6h_C65o5PD><>ifugNeMCmn+w?fUKZKwye>>TitdaXtgO6iKS43P4Q!hu4c z!2*1gsy1-r^%?X*`0sf&)}#|Cgkmqmw9W#>OgmmoKrHPWJ*P*IT@QsRL3f~w*3P&@ z8M#h0=TWw}BPTfSW!Ag(FbO=8a|n!H@jrVbqlnAP7fUQcs&m$oCkh@g$T|NpOL-0K z-mQtI$SMbYJZR^cB{bUP>5Q9H>ydy!d33Yc>wU|d z5FS@V=wxX1nkrt&q=8sV8ZRT*;svB|ADjVz{>Pn$_McG<>VMp6di_tR34W+RK;0@p zKqCJ+%aXO3kO2SNlJ@^~l`Zqxy5dT@>^{?$IsF5kcLq-4;imbwfE-_9H|otq=3W(D z5ft79Y7{%d(2b}9HIiap>LUGL4?U6<&?m3_0?u=d@=}re1>Ymof1U2NcnJ(8n=((8 zN9x+<=jZ><$tx_g)?_nTLIzwWoCDXJPG7%N#MOKMdssvF^p(@E z2h9&r+GLHV3!}QJxQxk^^;>G}>g6_3*z@2o^BBL_kU?meswnK=h6C)IU;tTNx#^GH z^OpSamKnv!#p9lBu+3oblG&qF$j-@KRuc=3rME;WbohgS=%HVJyNKLjuQScdCwG!J z@SNcT*YxrPESk9j(JRORB2o!Fej!8qb?c3MwB`)_FbYYVDIHfSP~x`&PK6i(c@&qZ zWJ@nf69lJ6do*>~yb17IA_SA9-^Om?blc_Q_=e8c%MROBc;ighj`5zh1*P6}saQY= zPuy?5tHeO4;_rADehtoV``MX>AwGcI8Myrc%9yMRVJ)Iiu=zcV?NPkh)z#JRN(6=x zk}8xzE=oMVEeB-%{63j{TtAt-z@@xJpTA#CogZICV}UVilmZ-W7uzlu+wx_19V&*J zD0^i^DaMP(I=0-k>&KLoI0IN8cM15Pifk`nm^`xRWDv@hV%x-4a)9&cZsNBpVD~`zr5jACRrvlp zl6VT%3>dncp*!xc!8kVjj9cCtu|qJOD`@;!`jwAq*S{LL7sn>SSSwnn5y!*vmF74k zXkB(k0aC7G$|dlQB4R7>!OwaRB96o;p!cnUIBn<9A2{^D3r2FVL4TMW{$={<8P*A| z?e0_;YXab|%ajo%s~I2JZBN#_#6fil-TW@#omm82nJc7#q_=+LW#U^s#yb}2^*?El{lJUDrcZe)v3s@Odl>jU~!Cs7<7r?f@!cQq@8=mmHK4gX#&7O_?47%6j+j zzyZ!1PxEEO^Ej>r$}G!;;{WP^7?WmT0%T+$d&h&|1_%=nCuEQnbe5~`@@ni6nA#!} zA(1OMzCr5{=&;CoPTLuxYmL=*tux3??>Rr))-elU3A6$Gc$WGU$tu$z%<3@kEK7d}zc}f>I4kl8 z$GQ))A~#$o&`Y$Q(XOGm2Nmj@b$QSz_Y_c0s|bXxk4I(=IV@F7 z>C-Ao;4~v$8eE$zWvn>de{8R?tCx)>t=C8~cbGL%cQ%&nqN?gf3?TNF_A;JWHnDgq z)G+ea+lb8>!7;G^mg!QEkxlwQhyrx7P~RjKjBrEElsH>F1*<*VQOEEPDAG=t5jh=U zfW?oC?r9)cWbB0~pQ!FCKqv+Um(HZsT5PSb@_1x>D++l`VY9I8Qc_=Xil{uc%_6FtVf7Zt-^!zz2))^T6aas6QBQ6V zGt7P}9eAc`ut+Vccedx=`6h@5JnIheVs=!iVC`>YHVkU#oJ8z3n2bhLW zcvYgQyNKUTEO$-^7w#`BR&#F*{Y}s#&6nvF??QA?N{RH5q5v3@mx!P&*5i?URcR9U1I3tF1&570^jSQxG$#CG~s-XP#FZ@8*1zYLb!3`WybOTf3 zjUsY%@yPuB-YqlLp zbYcW%Re3w5WHIt1Ot7CpzF|JJy!)wJEOW1}%=QLjPb!)Yr#D^3r* z`W**j#N+w6{Gi?wf0#A3XBa)tJqrQkl-=DIvDB(iMtMS&#n&9Z9p28d-;m8l(lx6_ z@*YFIJ>Zr{B2HA{d7sr4-E*_sM?Z9Ei{OidE~@b18_;TNIO*uXH2!iu^+pwC?4|z= zV(>CN5$fmcR2V^c>>E6}WU==?YlY~+^dKs=$THhN>;%sGK3-|i5LAmMb74Yx8o0Qv zwxj#(iG zw%10JyT4d>*+(0K(e>W)1zj(gF|FGgkr&0x`PQX79i12>Zn;vi7_00}3oYj_dXZq@ z1bhO0IKy=)q#cw!ija!L7%PJxuqwtjy_?>WNkIlAzrEYYsr{$ly@c2vrR@n*hx~-U zk{C+*z`RWfM#F?35p?Wr4uM@1I06UVwsr@xTo~@5a{gt>Cb(^rLopqs?Nz7dXpU%= zR6N?AT-@;;=#^Kg-T9M?T(7xAiaX7!59m#5!y(3{uc1L`Z~yz5dz8qOKPJ1KmOv-6 za~Q6-bP@%PvX?lD0z>dUUJIdsFjNYhI4;Ci@aqI*B3%KxoRMddDLM}RfH*JYFmFe* zS$_t70BybJ?PQDe$qBtQF2@%Xg(#kZf9*&eW5cY;0v%Mn%(|^CSwg4OO&P850w@$~ z@Usn~{SOkkP}TF264Cs|CAG;oB~T)go4V6M!wJoZH;Ib2vhbnjinb+w*}hhg7}}qA z<<%`tOZx^!+9==6-^bTF26wSCc2dLmzD!^{$LX9{N8k|~%xk7?DrM@;?wR~KY=GMb zeQhlr!a&ttiowA_j5SKTqO<>!0PL|^h7J5u_J;^ZPBSreg;B`RU~E_}AN?&8C^hlo zM^GIlraws%R`^^VPIbI5%_3GZx~#O|8kBzrT2Z;PD}EzU^|m|7KGZ6NJ=e^ysOfIuzAXxGr}Z= zm{gamlJlt|BkwMX^+8P_otrwvsy6gNM2~3k?)<+K2-K_y_6(w5jRA z+6tIIliiV1EW~LN-V%rh!cG}#zJgQ_Ge60SPbQaV$Jo#kJE~Ybz^*wp+w#uKq-a6O z{<<_WW(Pd;`{AbBg$If4R7V7^u6LO5_R3HOJ^7_+m;98;Opk zFbp41O0&e@AcO2zK%vvIFJuns&Jl4#Qpl}gfJTHIx{{dO>*A&M4Z7?)gSwWuTx<+G zn@PFNiMRT^9QeU7?wyDHjZ2e*!k>YSh;qf}q)W!|@aIq|c9TRw^vnzl=pXBpQfn<= zPDJLkW%R%DImt8_UQthEMHLG>Oj%bTS|pXI5v4ok3PO`M0Qc8xw-1>tj-!%|-cSYE z=$E|}Gx^=to_=#^f7^>*GXX6cBep#K_(1Qeq^b=IbL28`%>o|?z^oV8*x{p(9IjMrvi^tWhB6pVaS^*N*G&ro?0=CQANJ%! zcon;ElYSSsLHt>+-mf?(D-Wz-*?5Rr@0t8A@*=vp0q1^!o^a=Q3Ii=A@0(zq5s~;L zkhVqJu0&i2|Ljj zp*cOQ@F{2XMG+_mn`gx-jD5Q1Y6^xyEDl#UQdw&e_-b6p{)?~fZV}I2Yv1{jV`29% ztD3&SZ{m;myl+y(AgglYk%E-U{!%qd4(YkzfXkHJHyhCC|1{H#-tzg((>El;ExK=8 z|7Z6eyxbwF$hnAjP{_eG$xXNUI8Xc045qQ%D) z0EI#5kFl5+pAN+iLL)m5IY5*0a$9Ssz%9Oz0Qw!tx~U^NEs}TOeDg1=YjUGn{p9`7 z<1@u@tm&d;gbrkX_RrQ}$Y!Rg$H8pRwUi2{7H$FOWGfOROTU^`-*VBnM%LzBahH6U zUW%9y!GiMleUsz(u`zV9HNxm>*mXb~fIyMtqcu*E;zi+mH-6eSMDsW)+qv)>GtY?f z&RN0Y7lsgUzyQj-ZrFR9d=0z1NYx&l(NWZoi1xJW$x0tSR`dx|ZJWwKcl2AC)?E!V zF|RDk)-2>Tky^dsd3uj-1N=)0;)zYA2EkV}^jn7E`>F2>dyUfI52|xt+J62EaIXe|H`Bw2+~GJ17xSSrOI^wPG}e2QZ2 zar7-wprQ^SD{?a=>s+#qHRCe7%)m;JUMTD>pKGh~q1=7O_{bpc+$DfZ-4|l4iEeT? z9)pgWQiXg=)W1|~X)Q!}o-|3R;k(cj%-XoTLSaDEU%baIAHCnyR}U9o-IqKFc^otT zU)j^-EJ=m`6DIwieChwnlE%ey^$CLm0ja?Q0ZAqsEAgg#6@eiC|Aa|HHFX_PCDHun z>ajvKUrd%l{y8dFs;RZ86-13Kd-AtRV&B?%SX^U8rGNn=Dj})lZ~lOxCMBVm{0v?R zUT`;I-tyQg`D)L-&wjH|x?xbI$!VkX>pEjUkH7r$;BDKwdBLcS0Dy8whm-^p$%7G% z>Wo#LdXd(RS?|Ih4{su}=ezI&q};h)tnO_s0OWE^RT&R5%m#%;k*-myl6O@6ZV0b` zg0~&FB>C!e7f%<6uw+XI;C5R8?k;qw1y@%e{?|^UAJm8te82>Xquw)ovVW4A_nDTP zk1`gAQM-4KYyv)o0dmitq${qWaFuueGAQg~#Vi#Vz~PiORQsUoGI`Hdk72oO)<`6? z?WOl|18~oa#mby%jVO{qXDI2Uuq2qzL?@&4M5}lcvcKG`+nP4-v+3UMr6eML1?0`9 zyYow6j%y+h7L-cDfupSq8-(NGDwS&B8>{|?S@gA?-d?v(0#YWRxDLb!6poB(i}J%D z;i@65P|HvWsxXN314o1J#SCzcDJoZ;Lq@kbq0rKxK*>r@BYCoKLi+?Y99y< zXM-w}`tw7u-?_iq4$J4Q5@qMq35TRW`r#0u#qB<<=4Sqtf(%mRs<`<0;pssRiHvDa zgT@78J+tIi1(?fv^j>%7Zu8%v`fh)Ma1^1gm@u&^Gg+veITx@k*PLaK#ZNr%P$=ek za{tM7mjQ=Fiy49dWILg$tR2^^wYJrWS(Okas+^*j2%q{z6q$eK_EYizg8=yjXY@6Z zx*7{)y1JS({7t?>XTF^t^ktHD&FW!09rk65z5+YD1rGvWBarrcgT;rc1)aX^fvy9j(3Y|!NyT3P9hVvuNRQaPX(!Wx@gDsUA2a60E7@1r z6F)$-LQm>1|GuK#Kw#qc?E-}Yv^Et7wx+J!Ur2mlGidMjmgE~S^DwQz-=7^u(t5zt zOqmG(0Sc{G$QjYp21@r$$gJ_A->d3nhJ3^*shbu)QK!G)Zm0OXiB4I3%$M^}Gw+b& zC$ZQm8QyPpz9CoM`=-0D;6r>G4_blgzQ;#Up7?pG&34GvnNQ5E6`5_Y+;I0tWWZDe zEhLSmsPXbKX9djspn`O>XA0%i5@0oY=tXkW0lyxOn_YEFL)G?O!c890_W761C;tq} zH4>?;ywC(J=ZNKH<<#iIkTOVIz3_!n*HlD~GPQkM9;U62@8ChUlh1sHc-`V$FsXoS z12SGU;AlMa_(wwY3n?l#yA|S?rjdrpan!~o`%zSYR@S9V2Z*tr;TDHm5AiulD(7t{ z0ki#Y;O&X8Yv|r!9X>D=qS%3i9mMquPghuKeqbA^<^YI6X06{n>H=5Fxc~zSOqz2x zMgK~a>>`X3*vI^9h#G3H(ZO~xMOr&<`uTa&=~Dc~!ug5>SUweTX!Jv*7}(8L zPLiv!dU>RJ#sN`xr%7%(Ak;?&Qj{ShL_hgW_t+0bc3_BGFK?d0&OLlXdLCxInZ-a- zW7D)ew^!$h!+@&)=txds_UMFGzmz#8aWp$gLTwsd^P0d3DE5KOQ7EJ#4;(cCz+!@$ z(uVy+{!3rr(zVG|SKG3hZt;YwJUa=72&i`PnDNUU4qBqxN+`$a(cZ&Wm@Mlt=1r3It4Gz4Fd{NL#S)qno?3Cf_4|KoFLN$2 ziDJM&K#HJ1K*>f*{OORzAh`cOjW{-`(IJ=#DeP4sG<6$Tgv=wSoh!p;Mpp&qp^(xxAQ7Idp)6 zH7?g^pXFArWVR?+60TIdFvaMi)IHd$x1IYz>-wu%ql&DsnM(@{m&UY!^dv{P39U58 z)bvP)a<+&K|#t?QHMkUjX*OH1tLyyLMzE10^Up%OBixIHSTI~RM*TO%+$)b zCzZTKU^rH&KQ4ddHDdzpDSV{!ykdgV8*@!AMAO4_>rY}ksXJ6QeRhx0|BgY5r+@+X zzZkUri-9VL0A!P7p{)7eZ)RhkvI^LLST-bKtD5`|=&#BThWsDBvy~N$vc!LW3)~1v zq^d$`!$sg&|3A^o*4%Vl=fdooRzqD4)gx(0;(&uT!!a(R<#MwLYLjICBbs+;mdQ>D zPhl~9246JVVt-s`|E0es?6=s=(zue=5mp)ZT0R4Rq7}0ZSbxF5m2bGf(KUaOVC!&D z*fFh^7>zz{2*8vyXf-V}V$;neG3>x1+eP_AtV}#|cNB$izg7lD`sKZT)$*6-dP)Ih zxe^fza)oB4K=GO#KbtBqKU4$4oQ5I3ugG}I(k_FD9*taQgT6fQ*D_y>6s@_dzB4Nu zv3xn7(HSlOCv1F)9b9B(RHJgj!3m%GFLhhi&Dc{(CE%$zvQ#JS#J?c{U18gMG!qh8 zJ&=x6qX)_%S@p~JtR#PT)zYbtVf@P>-5Y%DDSZV0;d;mYpxaq&Aqx-k#c4Vp6i=dR zrrMe#5E`^Z$`@Fdi08#l*3X}=cT-uz%zOP$Jy}EHmN>)|^Vq-GaH|!i{!$e-k6H_! zfj>4El>_9rhgt~4Xm_Q&oLVD5><9FXC~o&8Yfn18e-8OlJMiVY*fzon^gql;#p$ww+mgMLyTF7-e6BTlg9yq@un7eX-B0 ztpmKG4A{++fO2w%=)4jncyWH;r$7tiYWBsm$LUra_+@@qrI}q&)P0(&IS#C93A~$A zgk=j<6@q!gDVla}k8B?iP@ek2RjZ+_32Lw~;R1mL{&>0Z65B@9V;>Nacd`Ymf6%essC~Oy5*^%~ zB6NYTGqy7J)FStyZ)_j_RSyuZq7(E%(=KvtG8cPS*AS6{zfw1{#$Kx^=NG521g%x% zKN(*{AK`b-Tj~#wn9*qGk$&$|r2=P^>m5HAu5|d8|2(hN55UZe;x2O#$!hF{SljeKm{>ZpM9J(nSHTI9oPCuq|wqU z#Hfn`kRYqsFePq9Bi7Cg&$OI07LmoWh956X5tcZ-%whNT@Npbb6c3;8;feXnueBa-EbeHu!%gKqGza{{g%7VgCypHMIF3kk`oPzra=#=l=njOsOFL^V4xjnj*G} z1_GgTfk0ddyDWgJq^N{~B$I>r|JwuS|2uFnspsIdzJ&F0Y2;GxAF-LCI>+SWvJ9qs z-mqA4muoE0$|(XK>+M z6h)}$D`aG7pZ?PR*Zzy${a&IsKQW5N;-iuh#H{V$QE8SNnkt1oP!A!2L*Xa>S`U@J#EHpu5< zXN%zK1hhmMYg|lEzlT(h2PvB+;Q^a#!m8gSx4sHtYM|nZeifT$kABBeyn-zoAI(qxFx8ZA@-HrFb=`t?M1|5S>l^X26zMwO*Owq_i&4NXv@>X9>pu+H4lD5$BzZBe#6LZ#TG*a8FAwYxi(I1?J>V>w zu2vn}&Lipdme_1_nsK-9OQlSDjH7>ceHMerR}<0sNP&w`MjwoUwtRcjM6z_1Q8XG* zv(D@?QsGYQ7oR|h_N)eVO06N}UeW37$^pc*DU==O72GxFuR6 zw+!`qC@u)*aHVVRm1X&2{UT4D*HyZrOBK=Bza=-1?3Sa>j8f|?t6U8!)GNyoyeSD? zgsXNfPC%vtzo8M*d0F`dd>KJuTYLiuUu+a#afcdB)jsmCSB=b30|X+m%FYQA^1v%S z{dhr3r*_LXbijJ+vWJ0%(v?#tS<%SWi9W_C^6!E9ztUfSMOyETOlHNR=q5U&^l13U zrfs?%;S(5fb`0wu?Fh=!x^lFnUhCH&LP(v%Cjh|_$zuWEpDZjF1FWc>TWx1A_AI!M zoBmR;gRo^I^2q1gbZ%d=L1ZO08Gh+>7a>&kOsAQ&%fmym2o*<6&o!%KWQt34FETNb za6;fdtuNKmDl>At*2d$`;KD+2B#y7-mUGw%lvp3BeTi0{5I1EAXevutenWRuZ{zyd z9&oVBqx5s#58LS~-GX%dWRUceAPVd3i|xUl!7H8*bkO~d+%piWAy&`!kV;026euJ1 zr;))9Yr=2LhAy_`z=^yWu^;1?g@g`^)Yq!;TAJ^{u`@%xRZ{^cuT4oG(IAt*G_1R7 zk?Zl#pRw#axMyy}O%N{@jhkfQgU+o{H2?_jHDn_qgw2=C?UV+!A%=ad$`6WUC*~f8 zEBigmWvAVEz2`O+9yvsW#`6}>ug-re1ZrKpI&068ceu_FR!RTiZA!4tg_2B8o*VDV z?i_p*_S^eJR-G-kf|nK3GG0vP^4T4>eA-Pi?8q@9CJ)0I$H9GO)bgnuUSN4IF>vP* zuapTzKNo9d~%}=P)iV+8}O^}If*(SN{CvGUtA7z$%&$QTbCVnvg%tj zN43IfU(x-;aZ?s)^29&xhC0>aF7f%Uu{Nv_ z>J4sKE*V8pfQH1gH5>~{ndx(VHN#bO{lQMrz@_^uVekhpsUZ2QuVN)RkmVz0B6Ntm ziTQr_NlC9zP*^v`+vFz0K{c*p7S?TQD;GS`>VBVgx5{w#-W)ORPXCi?rAuM)T%5%; zU@u8tgjmp5x!_X;7gwLFvj}|QSk{{c_r)j-tycY`C~-*+3Gz~uIw9SqK>oATu^9Y> zcWq|>f`=1RY=tApMT7tafCIxWxGfqmGzo(-8dHtM9Jz*x#sa&JYI2wPz~4dCXFSK7jT0}Jtwh9lq^*FeST?LgeB(rrXq?}3J~hlAi@FIMe@Vp ztsp{awQ8nI-r2@x_!dbZ!eZ$w8lfO<$EQjX{UZG51^s7mdIx)!<$(y?b4|#L= zE=I~C&kgC0AE!)o|;&es3yE-+gcw>xnpgLir;fS#!?d6wyc^83`x{V9U22y zNHR({+1i&B*{tR^(j>kAzIIQSZOr=k*Vp{_rr))k}s16i{>zt&)E2o9L7=x4PC^&@i$?TxCd%!Zqm69YV>LSm{iEQ~#L){C`*R-X9ek0{pgpXkL) zsb3^Fkh%0Bxc=BjEXFqOQmv%3jCgO3)Gc#Oqz|PhD1<fy{Cuw$n&b_K*y!pRPVj0H24fhg2$kdNm41PwKO0=$ zGXh6Z=80gY#rldtY~HAkP}(}2HsKnmprPmq(wN*$Yla1v{X_nI-+RhX8YF{~6GDnx zAHY^eK-x=mauqY?XPH5oeFrb~(z)jO*vBm#HzlV@oy8$zuzB8m65VSH#rGFjjcHGi zN7TPtF}@@H=Vb$x$fWD@i&gYk)8ufx=2A>&3Y81Tvt)O3M}{u%$daFSS7=<8U!v*3oT z6<|Cv&J{WjbJELw-xZ2@S{6o5AOFFE@6+JtYc){I zX$1eq8gnLFEo?;L8r8MKORr!gj}Y*t3Peci z2_4-rReall`8HY)#Zx^s7ykA=?}2CvO!BB+c_JEvAxof4Af5OR%lxzP3FR-mgz2Jt zvV;tV?ew6jrSEnvg3fOCzJsoNs@`{j8FIm9A>6#M(xK7Nf3L6Ob**(X%@}Yn)j5fkQ3^629T^y4NYwSWy~0ff zWV}~FS~7B_1U{=KA?K?3NG0M(8WzQsxyp0W*9l>pnAutR<0Jdg-Q5S2(XvR(tb&@q zaVLjG!vr|_YTdJmvmfQr7B3SUvGIR%e4iMd|LZ{}n{C%5ia_Hl`C+(HEs}U%-H5=lrcj#F^jWvbvpGwZHW`G}-O$1Dzy5U-Nt^BCkShgntzoHe?~?YASn1lU zW0#xmnQ}`sE}_#}aiqBNYxJE-g|4XNh$tu{M>`J83|QfX%=I2oCDn6{TJFmm0QiqL zb>%vNJhOBHcVB5nbhpDVz9?FRm@dsBPETIGGtF)I3awV@ol+i=5a8*9OpE&bh+2j- zkH4l4YmTR~>N0>p46T%e>1DjD&pq#Ip>38kZn}#ScSE5ugDm>3wAa`ZS)za%=+SYa z%Dov`?zV5JQq?&lXZ~(BEMT2`dV|~`l%NhrjGlz-pN8y;FayMMRXoQMv34!s!;Y-B zCD(VH?j;shm~MY1vOh7&vfJ%d+pH4|ne)x~+`nm8<&OY-*K0QrA)Me<1zSG`=_<&! z1Lv7p;m_s<;Xi%U615&D1%cZnKdI(&Mt?;-0t3vdkq$zMR4;LDmr`8gOv4-=beWBO z_DKP$mbPnKs8+#lG17b7T-0pTqD=*qfmn;sd8Lkewh($Zi(}8I>peKv@t~jd*6^s{ zJTc|5Z1O;Kd`WPaAz#fZd^2fUcese~$y!C{(mjJi$JuVi>-iuXUw=8y?-}@m>SgkZ zJc@he^)H5vhpJM=KXt5u$F@uL$&lSIPI8IplSM|bd0ryBcz(XZwMT0Tu#`v`1|0O_Ue{Kwf-ahZ^HL{@QBHN0_ zXx-%C>k5B&;SE(vJFuuj+=$UB^M{B-9*B|r_zD(dmYWuLXTfYGW6OW7$?pJBHRAw3 z90mgn*-|Sah|r(nNG!Cu;)>7`w+wqCl^(A7Qx8c0DztfWF(RsXyoPT$El+IkxG#oZ zr59BLThwesK)RRd8eT&sI;NIh{UR8~-!#~5QsqjRzjJ(m4uvj6p%8VA36ipzDnZ4If&U3JP8PtRVk4&-5%m- z`rVUE2;;*AkC(Lv)fl9i$TwBmF~(#fzbt231chJydl*DvmYu=^kEmB&lWp-x4|D*h z$5bBg)Ih}xQ=59fV)bGmf%NWMlMqJ0&NDdRzTB)_CXL0`s3lRaKDWe}n&V5a~bdlN}Xu!v2x` z1xX~TjA?mDVDM>~<=}+y|Br!kqhD|y*ncur=wF3xD_}vO2LcdCDlOj~j4jDHl;Hm+ ziP_Y4P+M=q{>M<|x6e>8D8e#M)QBG|Uo)Poj!>BR@Fzd;v_u;atZOBHr@h|3O0cKC z)%$AoVq=rBB7LL~H^s|0cc%3_o%qob`vEf&cg`6-eKtu}2ill0`iRmE}*_lgd&uQVfNO_ z%Js$E0K@#`_m{z{gLlFl$}XwIBP$JD{6gUFX5r15g_SKOcX}95P!hr|;V7~rGOOP@ zduVN6J*w_%T;B#q3TJWrHYNXY>}Jkn-QLpJ(VXontC_0*g;-GunVr6ehwmp5Q6``` zG5UmBN3Am8&Hhvnt<4IPL!moSI{PlAVR5@EAi#+{#UvH;cCXk7VIL~XK!H7vPY7h; zmd2=hqWv=YAPBBTg%P`b@@3-`j-6(fnwOhHTsYc}HYTI?Xpi^Kc)i|?k6u;FKu z(24no0?H6^jE(3h_u9DVyrbv0jZ*+ut5Ada&a4gZu)<4WcxZKYK!81(T&4^A&UbCH z-?NV_sN++PRKfV9LkQ8_G1yLu){<8%n5Mn+#KX5 z@$q8e6v~O~{y98!0-MOwI>HK9&AX(-4G7$mMSy$%a@WA3UvWsi5bHJh*|hG64i2xf zVwo)+q$4KA3Fp-FOWBW;pn=>q@H_$r0_<2X6C8mnpr*uFgr*-8YpTZ%&CFts6-I=n6zU4e89ZEcnQ3guJaij=M zH^!DckZC*{d$gE9+-fjy<9Q}USeAXiF2Br}0+x;I*;X&>oiee_IqA@dB%YD?f-ZK= z7lYD^Al3~Vqlv>pv?0LMf~0;H$%uuIF z-JrdheC1{E<1$>C61=Az&agNN-|D zaTsJOYGHlAjizWf4+psMnpUz29#43AsZO8Hn;YhEgrvKB2J6PL-iU`;vjrQp{a)G* z0oJpRutNxbSE@7&>_Xw)`b}cK>c+HqM;PYuj_X|T)97$WheF2dm3X}Mbkg`naTurJ zv2&*V!Nj__XqGb4jf}VtfeaKr8^X@VdA|E;MKxnh@MNDPObO(BX*RIFh+u^pe;|&6 z*u)i2bq`)18-U^!5jLnoiS4eSX0m8-My<_Mb+=^SaS(KG+lsidL_D2)Qk`~7IOWiJ zO5@Fzng(R@Me+89$5_J;{RdX9*D7Hq0zXaeg!ZTH6Or(HNw9evu|P@N%PMrGy6Ra`7o@LVM3c6 zCN-f@sPI=2)6NwM02~QCDyA!&9R5e!gv5tt5)xJx{Op_93~cJ|tI2&0h{yFedf_v} zL13#dNp85n^<{-kzDI)q&AewIQ7B?~vmH&0=rY{kKi{55h`F^wt{XFt=jo3{r;ESs z3q?SvRcTl?;2+N#!u?TJ=}Vm0@qvfx^`e#&@l zJW4KG6@oTKx94dscMxCW#@GPfVIYBN=5GmcXdj6;J7IeUI#aj`fv6O;9Oon|x7}s! zWNO%nOQ3ZGMeUe*koz-uO@$?6G24pgEEQU8B4{M6fNcD0%}65KFB(sca92EJ+jbE) zMaDAs)F@70J1EA8c;cSb@3}V|Ogcw?f5KnM?I6_6j_V=M??4*zf?w@YroGY3Pvp=W zOuBJgR_6VHT_L zDds}O?R@1{%vlo*--vEU83Y6Rv8lv0-pb^FQ^mz{t?!d`-jvC$6hL0D_4AbSp}RQ4 z5A3I1Bn`cpRyONsS8n(3KQcON(*w)Md}4v9(<+iNB5(oq{fL*hw(^b-K@aG745Inh zb>QaR7@HM)a{lNl!@BW7_-Q-9bN)@0#O;3h-5)TP7L~YPt~ovj98ZRr)cSYuxrH3r3BaqMXKa@ltg3%oS+>mDAn_H$ijH0*~XP=Dv>5+M__i^HE2 zBqQf>E3@%&o;a#L;GDp>F~bXZ?sJIJ6$-!SBKb4(=s(@t`kN&%^%L%9hne`IC^*}` ziiJE-(WU9B>--Zf(I=@ve(>iL^qLieq1?CYWZaP%0=t>spvo;IoaSBl ze>MH|+jMM#;{VM+a3lQF0smLoGZl;Te=B<~G$$3;MNqr$Fv%;!H78SjoJ8R$gLqW3 zgv)IcFqrH5>KT2K0-TFcBfViObeXEXcd-Hz#pe6i&%0Et97<=z0%WSaPyVT`Ev+oA z{=5!#a6;r&zc{WVG?iWxY=c?~fMj+Ai;QI;f1sdq(3g>OiN`WZaZZQB`ekB&!hHd| zo*8CO0&$T0Ej!B9_Z8kWq}J*y$!mPRz_c&wFp1Bea#pNouotydL)>fZ?6sKVc-Mx{ zH{20+-qJ4D@7FRfx3}^rO%iW=rT<#%4@O8W%GO+EgxL>a0lM%UT_=(!846Q;(N1)L zPWY^&YLG>v18YrhxDQUHr@rB40YpkIt(+NllIRg9ezHL%2ZyF)9OrLoR3^Tch5Do=J zEd$^#wdhe}RD{69ki5#k2)RZYe#SR?;W(Y=H73H~kG3N>N!Ou)l_{g97_C~C{2)Zt zHTSP@%np%=VXPicfjyaeG<535W5@%?z5p-}!i5{aD$F-CXhIcjKu3OqT)h+MW!z2} zqrov{$J)R7&TT`Chj21yDvDyqD>!g%!mBqHZV?>987%N(Cy=wiC2t2WvO<&}d-!W& zm%_L*)<*ieLt2hC<`MeFX8iEpTPZCW+mzAG0LXsn9rz=aIl5R=uHqW;?nfMF@T>CJ zC$QbHh;R5M8WT0Aukq{U5OOI1k`>NWmV5ZMOD<4`a>G-3a5=kDoMl*^lz}!BCBLN2 z@Fj9rH9KT9BjiM0sMM?yp;)poi|GiyT~+f4{sEYI{dBz~p8kb=_kFzy&Q;U*j*q^g z9uGB~kOER5tl-MAX(MLT^@@D&vpGWrjR5lvjqDo?X}XE z1Fa)~JeKf%& zCWFf;bMLYaorWKMT|r7}c;%CBuguO-(Uo78ESm9?2iz)=&c=bd9a_!qJ0gcmz+|Mb zO+S6ExWk{t36%eRrOTR{s$I1}pdkMwl|-5U`4r_PVgdxq-)Y`9y9;=4?ItAHA(S&O z@v5&=aVjp0_sNSR2mpM&SjQkod#3z`CYzkb6=&Yi(--n z;j6m?VApY%jak2yromOCT=yl=OQt`vjs#x6E4sULSRc8t!B#Zy{Jw$|?Zi{({%3@+ zYQNQv

xO8o=Fo{H>-KZ4^KX?=S0r2qKBORpH}-2DU?ip;kETU;#qO;ZCgWA9ILS zbvWv`Wy0s7-xpSRUTh1IfGWxpO*0G3zkDid5q(Xqi`p?xT6Kkrb3_k?qFc#8)`{dj zf7ET#_naa6LV*fRJ`*CYzDX%QTSS+puYNBkw!m-~1VnR^Xe!L?MO}730nDtWGb@3n z6Dq2sx+3@!*PicL`?>FD_m!~FlQH1=`SEe}_!n7-=c%nh|4Yg=<$J{G+xth-yF=NH zJ@C4tX28Vn`tlw6eIq!>ztAoxmaD*!EqV@=nmHWY9KH62_R^nmb#-+iyasf3@JZC+#EBb-uy&fnl$n(_9 z)QyLf#8G-HJWIoW?NsP%bIvj8Z9)fno>p%6ad!HwXY#XKFpT?ldCwnYu;Ag zvNz2#Jq$yePzL08hrp2>=lrY_9>l@;WGG6S zkMXWUu^mzZ8|w}t0*!%z<2^cCeY!q93Hf@%b^~Can~Y~M?a$HxJ%(BhrEFa9b@;m# zqMSDM zVcA%wN|RyLJ0i3%=u?2Tb@!g;@ZwyeaNSCfNh_S}aGA z$1Z@$2h5?LDA`vYbxZI`0_7ViK;X863fb?>h>j1g9LV?#(%twXBYhN<`Oyci!+km~ z9vNYaX#if3EcKgaqQE%*;Kp`iY31H&<}Q{8q;yXPi|W%fssynXLLFi|)Y65tSsnI! z>+6ak4BLvFYT!3Fwnys+l);HWJ{M+`n`F{iGJ#;q4e6}91Z(zyGQyTI3Y=W(*t};5^DvRPqRyejV2uK0dld<)*?oFwJavp;f8>J89;_sH1l# z*|3Hz`p61;!;qkt62$NUrV;y63>S7Wis|+YuU74f@jjVrmC|6b88Z5GGdZb*94=UIO7=7nn)TIcpC}7O>c=Nk3W$VhiNQT-lBAx+9tDoa1(lE4 zD7BD)^D-1%8lI6@S9!3#(q``Ol3<%vq5x`+RDbLNiKccodluv^BR# z$#@VVG(lUi3H`wwFayTIMFA1#)_+D}4c{i*q69uS9>cSS*?}YuapQ%#GxYPPR|&>Z z`xddWjF}mHGaMBOT$4#3Wsh_q42@}^tdU$8*fe(=_R;OeCwR(c7oY_6@@0D_g(#muY9hu4nuZfZ|f(8^Hi+$Gtl9C>du& zX`lOKiXg{+K>_ZkdJ!%_ZZovK&atmsFajD^sFAtmR)G$eRsl~`+HTdhMt3XvDWMuo zN=E3bj=J398~n z*z-;`$LfSOaX>B-i2@4_~8R1h*o3$U4h$b4s# z2tN^k?9^8Y`5Z!Dnzme`NlfoTb^Fy^8LuI!Zn~Tm;^N)-(d})Fy|<0hyHEL3y-yMF z;YUo}k6$2%R^zxXG=*c*Gmi_{tA=W zOw7&`u5BP_4a~kVp5lNZu*9AOEOdz`R10GQQT6h0rR^#{1}Zax^*=6k8Ibz0NyIi( z1To(l`x*Q*DIny$1USLt??t8cq8#zp9*`^LbNlB4VaSkOnE%4Pw@^xYx;Gqi*;Ab+ zIAo3{pIZF&qPAJT>fg@oVO9m-RI~nPkpp*qLxOm#jCQ;YCLo;T+_$Qx7o})K_&^2) zXrNFqp%ey^)f4URkY#M5cGSQG4U-`fK}j~5!&86~npw`Hms zJis3nEhA7pPI83>$bNG!OPD%x%`1`T&U%oH{rdJoj&6Vkb4fa_+4PQkaj(V+WWE!c z9iPo^NI||X4ezhX1+dtM>Gh7$pm2e07L zZQu(;57>tCh~fMLqMxIIB%vZ#phJk8JET=ewAo+R`6Nl37-h|QWEAe zO$O;NtbuHn2;ydvm<6tv=OeL#Hr=HQGzaFAfO!W)70SnAD6l7lRZCVb;?_fnA5{&5 z59bz-xMN%pNI$l7pd!~3tbW8t z{z%9OVZ2~PS-Slx(lc+xY@#qph}lbr*g)@#YxoIa-z?s@5~zy6j&Ul?^TaC~5w{vh zW=(FBU&R4MVSD~{Pn@i#&y~&Gm-GmFp*Il!8>{-9v1RTa?Fwa6z()>hCM3Fr{S!Kg z<4Qi`s{CB+0%YVq;9QzpDCy)Oh330&F8CA{v58<3*9+K&VZIf!K~m_L%p_FUZ%Po% zSV7bH!yoz8HDKA7u-fpMh`dm6twc1ctYCbo7KGsvBy>hC78qi)3bDCFyABET^bF+X za|w(7>XrzuaV2$_{8D6pUiLf4Vm6Si=KRkzlclXOC>(7x1jr$t7bQ7ry{TNjPz6el%>bE`p)l zkRc5bZuU+HB)K=$>?FLTcvx?JIZCyLBHnuc-9Cvt;E}KUAde%mwX7e8NhZnz3o?J_ zn(jkpAG9hWbaXAHnxK^l0!@i!#wHuj;60Ln$r`L;TiS(pk6v%P;vl42LT^~;jn zMy$ZWFf11(#Ej0)a9k zYbs$+j-=i#DK9b$j-p^olTjoS!57iB$XIUys7Vs}GT|sv0tQy0hw?&G0JgCNu_uEI zf}brzYN~5pZ1U@zgYWL1N9V|%U60)%%NXP;ahR`|CWFqP_*&Hs`pIXj)(s%0D&{{R--Gx5h1jw1Dlkpi4NI5$H+1rf%8= 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%0D`HgG^dCnEnko<{Wl$j>sT zV{M5yg#6yoX~gJ1*E42x5Q_xoH+aouPqOqGQXy;=SNGl1bs#eXyTz28hBH9FhkR3D za6w=&_!W4dyV@c0tdsF2N@q> z$g_6Ndzcp(^W-uR064!2?_Pk^Zk6PLE)f@s&TC_AQv_XRE%UIq7gD^^0gvZ4PmG?ez(x;ogF+1X`q|m^jPI`FIWO zna|$PuQpfI$dh5_mHqxN357ZojI;??Z-#I7s^zsoB|MrCW?q>5%$Wg{ae$)*@Ghdh%l{=hZy(gcKUe zoN=9??L$qk@LA&>p-h@h?*a%Xp>w^0jL~2h$-7EPT~UOBknA&Kqv0hlLu6z}JN*P< z=-KwDmxVEwaDDI#a(>BG&H&%MBG*Bre0ngf-#S6^c}4gEC*| z^x0~9n8f`A0P>!!Kcrs-4Xrao!P0^F}Okd>!JPi*VDsO=_~&ewwL$LQ@sHL z|IKyOQ|X@a=TpoqJwDwIv|oI?7m0xJjh=~xNjR$~?#G8tf>(}_j|9MF;>7jC1CwWUpfucy;VG1K_Pf;9Hm+g$j^lX&vGt zO!~1qkizA0XB#EKF8LQp#!&wX7}M2R`EJm*33%eJNxlb{cFI(bWiQn)Mc%Prj>&#y ze_KQfn7i%c>AMr{QN%Jf=_kvxY$=9O9MZq5jL-`kXz>Rw^~K;&f@Z0@joDh29x;MS zlf$rQRDJ?C#RrtG$1d|DD+sv+IDsw|6woFiS8QttUWiM^ruMiPLW6daTeYW?Vx31% zyjJUQ+VfNR1BKI*CFek1ae)6!S^v?0^<`{Pmk)1^&jYH>JER6p$y~zy14Cvv)0YcX z%T3q9CD-n#0q*C zj)tCi_Ax+z;`5Tz!@EpY{mQ{}L*|2<-;9X2oE;Vbw zbcemud_@DVam()Tuyj>^6-+U7`Y!TV$a0WNN?)B^6P+<^XqCu8V5A)hK_FG43$Orh zcLAVj)5EBG3Wko)%()NaE3qBCJ0{TDPs4E7Hq^8PHLvo*xkyHBcjRT4qXQt1c$vbk zDSx-AW2zww6`JFGE1F+HuYn=@mrSu|I9!chLfejOmD6Gn zg8lP-U#@x&1$iOrT7#aJpv zbh7lh5skaKW=f!&Di-Z{k&Cc~!|80xM_yg-j%9r;kwqJq)-;o+6s15~%IALEDlpG_ z@I$&rYpJTsu1vF-Gi4=|{cbCWh^hpfudfpltYhP?E-w)h@yFMr|3D4p-#b-j^WILV zDLXzSBqiP!xq5W?7+!cIT#W2BX%41lzq!<0Y$Up0PZy9t*9I2hyyvj@|&s%x98c zvwG8qSbm2A8+aUO#v3ee^Bfj?E%#h+h+>o#*v`?C%7T}vUXzfTqb`v~jU&v56vGo*j>m*zPj+62*Fl7hjituB zA6&&xBQkOvw&UFFLo=U5dvcZp_lWm3DR z7`E4(&mf6>X+~w(R+=_|FP^) z-~hV?i1?5{`0R>}H}9s(mlc|Pb{G?UPx~VN@)sb{99ixx{~>t*#!^gj`Lf7{nOamu zLR*VP9g4MDIG2>Za;Rp2kqUPOW4e2$l){)VPCAvAwc{~gd|0JZl;(IY&~Qb) zvvqYca;@A;!(X0%s7&QPnZYQN?BOsJ8N8Y>s_PcUF(Tw|7{alA_vrtftfjGt?C9;0myy9UFiGFU_BKF(Ez=^*TP9 zk=~G+%4DwByW;jsC`Ni3Evm4Ubl{@;uH3B@Wm9W~>-YWhNaEfitEB3)X(b{Z^j*$C z;`FFeW#X59^!^y|LN#17Iv(0VyKZf5&5V7K^19-BrLs^rZO!qP=R%81O`6YWuuH7d zF&LyIEi_>$dPNO&wy6-IfDyCF!7JYLk}%_l;+AWxX6W*nDEGUD>yApe+~+U-9@;;G zg4Ba{SODfe`!r3_QTeqw4uFc;mKB%G`)(=d#sSZX* z^bZIVCw6%9y5l8?S1z7#8!`i~?LxvcQi-w^gpkE4Ec2CV0g|F2wCNh#+4v9tLw2T_Fn zduQV(>e3gE3Ir6T{a5};`Ttwysxcm2+ZBn}i)Zvc0S-x19vo>mU2W63)7JD1FK z0@Xcm-!lqlhn6?C;u%Suv7@8p(d+B)QlVUOOVL}1b+jHCf`wm6oOwW;%)J#NCDA@I zRaj`k4o#F$wOm^~RaMni%;BxY(K#v6sg?X|BaR*BPn=q29C#*vW^K8er~&#;FV3gT z;?kblR#SD4B8-xRBk1hag$$hpFk}v{c;{!-QSmOx0_&9uWtMnTTETn-m$gFrf zgjc)ZZLwb-1&j@8tTIS%xbqzIQN)cVZSZfFR;t+a-=Vx3^J98WD@U28obFWXAWd42 zFk@}Llz1pRx6mbCA^1{M=h4C2RN)mrii4goFP(MOlAPJdtFZ_S!gT<1gb#e%6t7C) zPDu6UncN2;Y)}Ca_8MM#YFA{qW(HoGHyB^W?kw*MaR}CWcE5QKLOfn$3M~rllMn3%RvyLHVFUw6i4r*NPhJ=PJ$wm; zJW{<(L{~f%3sKQS!4PEqRYLXpJ@KrB^YyX6nK8u7q?b(XWDNKeXmU7U*LXuK9uV1~ z7uB(j#dx8O%thUGXsL%8sVsN?Bo)x98P)NG0kNQ}r0{))IG#ire$A_m!1^6_{MAry zAB>17%lNyyqp>jnRH$?J73CF7A|Sl;TfNzg1Dz>bQRvN#`$2mF3!a;K{h-5u9^>m`I z46h()Nh0{FRm!+c`5SW7ce(ca1TCC|Et&B{q2PN5w_Ni8MA6^i^~sz-sFPSm+KT`r zS>k2j%p?-G65y@7RsORKLk|q0H6+{y5s+5DTUwAEYoBi58Yo9UGqJ*=#6nr8bR6$^^;^gA&hzh!@X?`yw|a{X|Bh-&TJ zczame*!<{ReS13ZJbw@Ege-I_U-*qjYa(mik&`@r4HpkK@Ell$oW*&Q6S>_M$+j}N zy=vb60$eAVUV9lc{M>%u4E}97 zRX8>nu5hE~P^dP3Jy&kI@$r^Ka3i1qIn!p*eT^k%SdZ2NXf5t>VRrDivvs0T#fx{0Vm(hz)Y)S z_!)@^Ja)$Uc4)WiV;U>a{@+Q(Z=dCiv@Vc(o~F-*wov(c`)tQ1FnaEzmdQ^H3+|yY zPpnBR67d(FN*o}Y-qG%nv*A|`p#X8IDsQ0405(5l_NGOSwaw8D>(30xdqBqg#dPHm zj5sw%e2I|NAkS(vNjVD3gSMPrH%@K z0_v;qq>rjNNSf4Q2MT}XsPo`oY<;u?B8X(l0_j$J?4&Opan~x+CSQyR6DcJwf`qPL zjBVqqYODj$L)aIig$$ZhaJ01=h5R5hr_aZ`7Xo^T{Fg6E9QZ7iR%0b$$J&(ad!a9p z?n6{aMUiIA7hoB=bC?*t{W3~%Aeftg0CP)>_d7H10xkZqa`{kOckzkDb6;Pvm>PC1 z21wXC4ViVL;>#k+$9qo`VxZyRxmBju8djQezP>XMHC>}UxNDyI9a*ktP<~AvH`kSW zvdG}Q6TC#;qZBqodpnO~c4&yVVZQc{R%Z5|h>IvRBTLQ_Fu4D|BNY572NI%FKKj*GD6j_s({-9z#ilWgc@sP_>qaw>Eyv9HT% zljy0*n|OpG6WUFdZ?rbFP@1Fd^L$f+&3y%wGW~>#6ZE~EE(+6pFlVt10t0ets{ulA z`!`A>b}T~C2yNodZfN5Ve*e%lh-XDKx-!gkY| zoT&Io0{h{2x`_hK_PfWG${ehPrt}4(7_*xds`W9d{gVw;=9TeUnr*j@7C^dr4ICT# zPY>8+9vbK$=tHP|ty}8@@uPO**=B5K%Iv0)MG{;ha5LCNrQ{tp4u&efow!#7(k*(G ztQQ5Xpy~~wWyh^wf}$*UKvr;*OUYd(#I|>|R6BNH@vs94x3VMZj#>i?0y8XWn*2-$ zwhuH#yG2%r3o-|i{M3i5$N-}aiL?TI6C*Xp4=#z#>p%k3kV5V4*2S8n1 zG0xKE5{>iI@+cN(d~r4bRC;^NxR{^?q4ndx~fk&jb8r-pntosEP>XI)^ zYHm-#0%E!SQB56lPK*iSNhVw-=+3X(7cYw594>IbYh!Z`oHi3BW&zS@vv62gf0U+I zkUM~vS_cTw;GhZE;nL?8WPewn&18P?Bp12XnhhH08&I+^WnL?cLVy(PpdY&}#8~O8tHzOKC4vitk9gjEn|{UzO9-ooyU7TQ58FiB5Q#yR*Cx3Is%|MswMf^U;MpzR z!epsUJ*e{_87_L3iB{93ivD0#2^;BU4Q&ag19n3cq&A>sD+#XF!4N{hCy_ihqvF;n z4V>b>0635?^)|ZE76zb9ajS?SEW%pn-c-#IOkK7)=9RJK+Vw3S<4 zNc+q>#*&Cl_HeIA;=7a5JR)+O5jv**HbE`I@oP;!pLKCRko{uLZ(|#){fW&B{?VTR zr>Gs#+phpAO0Y`#DC8lbiPHs%z16nRLa0{V^n#roG+=wT%W#)wt&&u4X=N0!KCN~t zS98~MK9SWsGjJnyoGXsabHZPM=U2jCAARp{N9O>(kIxJL$1E&@(AS&PNq0SM;L?}) zq%p@054vL9cn3zn)1g^=bm~PKAQq5S&yXarFVx4kqovFo=c`0LxRDJa^v0oito_ z8ycN3N_Dy`eU8QGcnl483Axkv( z>V71v7wkf3Htx&Cpb@-m{KqwzLNlq*;%#J^eolY{mNz7*ZfGB zCOX({X~k1j`1S^L6n3j-w*6*xWq{v4-8mm_;R{!olZS8u7NcAFH#MU|p}$g->cHUU zSDYMP!Lz#=mDgtag+@qo@$lZ#4ZeN1Xb_%Hr)`8_o!Yc5 zA|EsYhcdaNeY0f>lcnY8*%j(?2DBstJk7Cg%Fn$c>sizHb@!?GjuTPKm@6%UWT}%b z)uZ}{8pX0v^vc-Z?{gTLeNe4+gNHw1Y>C|JHFQ_BM)M-WFlrCl{p#WLuQ5(x!dbya z9`+(~U(l;uZRLbMi_XiuG6Gn2%)q%Io7pVvHgG0G!W~5!{L8-1r;eaaedP+uEld zgH&KVg8a~oZ%GRyMk}z!Mv~>s9VzpFVG2aYB;t8BP4edOY6@OeoB^0_5}qIzSJa>d zGH6I%^EQT;!N$%bNx+C?UbE3W()(Lw&M&TW4^Efl?Qx#;A?66kvLt)EPng8H~InsvL`)bShBiMdDMAyCO<-rUuQ*PRy8Xz4SPb+(+~UF#bm zKQ`f*Qtx)k(s`2IS>4@oyTHE7>b`E}v(yK5^|)WxVQqrZ{bcn!sjM#SyKZzD@Eq{{ zRW<(|aan=Qj2+;9fdwpUs%WAW^jEyWq)l*#$mA;>OfA&@J?=sS4xf0p7^EkBsVhAK zsL(W%&Ddfv*mEctzoG!pja_#~#$@Aj8D<@v&^JRG5eWq1A3TJv(Ibvb^CoJG5j1K! z3!N}sjSsEaJgl=WhieL%XzN-GQRCrUwjt9B-t!E`Et>%8SpiTYn2~ySw@q{t9mc|- zU3ExEdiUksE99|;Li;>!bH~o#TQ~|#bxRd&kxr(z=L;M>gjBy99)Isw(*x51;e_qY z^>snWV-oC)FHdqpom0Kk2vJQ}6N6+9Ltd|zA#M+RwaA{2`oH zZ@x8&!K(q_XfR~;ehG~-@9pC@KWo5n{i#?2eG*btp(a~6HP|Dtl2~Kq%7iWUz9IEP zlTsrSDv=aFE?q`)tfK8l2(|Muv}9ZiQ^P@_#VevLwy7fq=Dh>#wV|GerP#3#M0S?u zavjjKQgBGA+S_(aYS+_djD`M{ahQbIrK1l{wy+~$XDl^zQx$-;X5--at1_1t&JqLt z{a}iPIc-&}BKjpmQVDJHBdj8cEN1|5t@nh?udVhjdYil8LQe-g;;{E{SD4s^b(C z72Ci)!E3wu#=Sw6l<@?S+MD)F#1|mAKK@Lum^2y!V)XC82G*Y-@W6ln{U_V`=5-1W z1cXZyN38Ted3UYaLH=LS4fR^qjw?;b?-lxfiY&s^Z07w#CQ9zJ+ym7(YyAunrz0}f z8}Q^p7!zp4NLl*FGfD3`a{SKEG}D0DHE;ocw7n$rQp5%*dW^8O{_|Q`y4TrXjks`p zra}dVUhY%N(%a^4?x%ne?31sim99SN6iEX2-AV6H=a~9(-)&NV-uN=)?AnYQAIX`8 zKBP$)nbwY;8IycFooFUNFm|8flFKpcGgKln_-T_nW7cL6K$c_!(G zQoA*;C|uxrnwfD{oE@fjK@}G!b3PD9=Bw&Ev~(yZ!S^8dSbhr_%zvX2C^^da6brj#c2;N}doD*7j$i0CtW41Ru8=E9 z+sm;dm&-I}L}EZFfD7!pvC*yL${q*ZO6g5E$Y*Md#oyXwHuZwg4qaGw_WS2I4GA6ai*Hj`z{AKDFfnVY)JgIquPuGu#ab+PAE^EVr9K7UIAmp{lx z+G3qpThm$rtVq{rFed>_)*?;x+5vmYh#9*r?MFAlwT?s5g(bUqxzLYc%ivYWR$h=y zu=!F2Ru}Z}xm4*@A=1!(hQV}H5LKFPoV}L<>pVfWMduu0Irw))$@eLxuW%s54}x%u z+#D6<-ku9|+ss!AFHZ)@L}U=bKO?z3Fj-^|`&(22Zz-5(wekAb+LKGb76D-{(l%TN zVK3Q?+&Wwtkqu(mwf?pBcqt0)b`1ITx@Zgw{dqZ1yt#Rv+ajo|$uxJGS5fQH^f21+ zJ&REelqW~NNtSVYsb6_uM1MIm#2Y24wLx6it7g(dTEyKkda7+Zy@2&OP?xv-60(Eg z&w&&LXgh3crmj{M>_<5kW^H5@N~Ebdl?Hy3LG5vP-HKs{q8{1a-956F=E}!! zSE5>s%FPvyD)#DU#P1>w7bfnG+aSbmGS=_%W2K*nwY)XU%oibUt0|Vmxj>C#updcE zZ~smoq<9B1TM~J3_MXM^J{;Z&(8t*rAAoEC)Wm<>nBqU$bC%L#2luHk+_ zxKF|Ry)cCC>T0VHZ|s|qpPN$Y=@LG1xO@i6n9YF7A<_g0B*%P$=9BFmI~ec&VJ=5! zP?9&q9qCgKr%% zS^?v39l>udlZRrk5;8T|^T1sGw;$Dtzx zZX;|-C#KRGuLNm+X8UYCYj$VSt9|O zWjFE&Sz1Y*`R=L=nAt>wfuPN4`F7EKdAPbfJ6NV%?WTw_{oeVQjYoF$ZcVjv(XwV! z7^-`fOCyweiK_CMakl>8Gm0lc(?ijoJ0L*eH0~R_>>Kw?%CI>L6+qWItoR~Ta*UV= zNqP{k(}U8S!`8Ko%1Q!klVm9M;OODNz819lawJ?hYo@>-{zIysTw;TZ}K>&-u&r4;j-g65nsnho<>Ah(KJ*qI!nRyyq^(js8YGSq& z?IH=(%M~8e4ufEEO27;6Jt_q`XMmD|%(NZx(z%%}hf^F!i*Pu?*Xj`_eIQz_fQ9uy z-|4xZ=)NMhZc>FA-i0aaqi%4g9C-*?5EUhzVKXRDUlo)+tR6ngu$LO=SQz^eC$=DF zL7iszwRDhi&tS-+LQVLwaYZPnuu+0?9_-wI=DN7qI`4kJNCt#3hQ3FVX53T@2N&jr ztBZ**`q?xJIpe{1BLpCWq251pG*v4KVIsHnpZ~-tMAwUlp}D$_Qc-iR^PI1qtq*_+~okmp! zIt6+nO!p>+D+!>xDPf#uIOrA|(JW3^$7BFgz=RG`W*w#RbC@h2Y+$e$x7T~(r#-z_ z{!w10iEb@=e^xm3?vZhd&ZM?|QDcOP1f-kYI^Qf)wg`lcVH69UGKv}+is^ehrHm#u zV9PDD^LgB?C)mpj>(;OuUkvy7#CtAKxYmH0La9_HxDSvmFzGRNf@@8>s}1jKF$v=f z#(CR9$HgU*GeP(*TOO+g$mqrVa6pN02s6ATQ^7`0EIYZnK;EC_hXM#zxnZm@I1gjgj0eLJ;KQ|ne1X_x1u!+kBkv-R;|jLjP$4rsI%trxW0 z36Mgv69Odls9g0J9aPpha+S);@XKx6ZHr^!1$Uys`ImFLm-&PhR#htCTB(NSO2R zzx_d5*G#LsMRkP(L8DBduG?LU0lr;`v4VckOlFjsL#ufs;*79l+p6~40c~IZ=Dzf2 z!TS3G+_=NsY?`}h)^o-pk#8=X3FkU`A@F>;aLdLDXmqDbu)8G<=5tJY;;&;yLv(J7 zi5UP5>j>n2Tg_)78uf4?!&Nic0=EfkU7n&=u#=XKsUC_@i?rJWK6uY^u^Y3k?c?M% z_yO`ck;nTy;jIlUmuD3P0iVe`2gu*7p-*J1sjep`b^H8WYZRMT&bAkan~%35hN9nn zs3)&grNQk7yym@WWLItI}1twCR8Wxjijvs-RtCme6k#?E$# zDbqQaCT|Ro#@NJ|Qad{{#TNnlFA}W1HU4g)3{YBN+3TxBSTXp~$f5<3rbx=iN{o0KrXdk=Mp9?W+>7VX|W;vu+P6e9+BoCts7kp8+sSK>9ceH{!S zBtfzFJ)tzs@CUT+Oo`DC|5b;^scFgHI^^O2OB@ZRdWvN?IDVo*pi?^>VS2eAgc-h} z(6WcpmYzYJQrX6-G{T{QWyey6$73 zH@rN2^}PDZURuzqf{eocK>a*rt#trEH^lzE{^N~kpXVveh=K_jLc5sKYCTwh~4S zvY31>l1Rgf1=RO7F5T-VtD(9SQ>gIMFvrI&0iww<=NY^wJ@18s~F5&;hC$iL1`)m5qD?yBXDu^StWgx%)v| zTb4AP9;DxxH|E1Z3kV$bedM3e8|T!E**d4Dl`4*iOIOOJ#GcHWrddgth~u2bL5~X+ z2W{#{2AZFC?~j)gGE*C+pxW+HDlU^vcK8*ffk6mBVSxU6{S`V-^$SE2R6-UuNih!u zBdMbh1mf?A`nX>pivMcH`@01q3&i^0Er0Jq;bo4#PLcxwp+hHSWr1k@yOZdz*!!+q z)M)R|2$eP^ARr+itiR;}e_lWQXul+NXM-@r$unX?fCK#t^^feop?}l<&xPZEpg=%K zKp%qSe1Adt|AoQ(n>;dtqf-zZ2uS5~LoEJ>q@=&exsu#-K+yigOgMzchj z=?{#i$X_D3k|1(H2>-++xbo<-e`1>c3qvjTHzrPB2{I`^7X<6yxW5&*kqd$ge45mi z4Z{6Nf&L$J{%8D)i>O7hU_e0Zus}f4e~cwo@}IE`wSRY` zC&3kh;QyQE@3lB5P7qo`1_DB10|H|EgD;NOKft6y5QKkW{x56(^?!i>thuq(-#`Q> zLq|(T233{+V>18Pr9jc=uqOW@N(wImq5l8j&hQ8K2dAW%QV=Gn|K=-G{K?nA`LAx~ zq_koXqJQ!IM}sI*{1zopKtOkRKtN)D%+%8L9}I2De=N)2+G)}>_mBRxp1)T5PoGHe z{R_jA)KUV1{->Oxy1H^lbs!*rA7CKfKjdTw{)J(S3yX#QFPpOeod9Nz1O&v(0R$xQ z2P$m!FO>Mdh5T)z&!wMpwK@B%MyM0|8lC0|5#C0g1W&M~qFy|Go)?Bb|j3emeB==ljnk zY(+`xt^kq!Q-rmBW0T0IpFTnVZxv{v{YB23G-?hE^Iw`~@;ecA)?r*w-yB**=Y`Ttf3 zGZK8+L^<$=?u^)t#M z`3pxp=|Zi76kTU*AU-zO&BQT%|5heeR7(q`12?Pyrae1gEcl_g(byJAKi6pPnnA!&@-jwnnap^CWn z96d9yYeUiqyA2(!C_~)4ie4zq=tI?wSxF*pnnTY;0@G0Sf-j#FM2aei(^0M|Lhk%^%=#7_mq7Xg6c?o4rppjXn72FJr ez))mh022Y;tiV!{fx!X@JLMP{;#Gk8j{yKN)0c?= diff --git a/install-kit-awindows-20260427-211240/MANIFEST.txt b/install-kit-awindows-20260427-211240/MANIFEST.txt index 6f2a380..5010de7 100644 --- a/install-kit-awindows-20260427-211240/MANIFEST.txt +++ b/install-kit-awindows-20260427-211240/MANIFEST.txt @@ -1,47 +1,47 @@ f3dde1e6d1532804379faf7e395deaf95cf3e0b97769d425f8a69f4572de2a2f install-kit-awindows-20260427-211240/README-INSTALL-KIT.txt -a08ccceada7a21e4396a640e54a354e4d4d760980ec3f18f1bc7f543cd8f4cc6 install-kit-awindows-20260427-211240/ansible/README.md +edc20460f7be2ec676a6fd7c9687f808507b364b32915eb78b7a63b441b1ff84 install-kit-awindows-20260427-211240/ansible/README.md 412bb766bbf0791c3593f38daa771d5d0aa58cc1f2d3c9010fcd4588d0fe87df install-kit-awindows-20260427-211240/ansible/deploy_aw_pfsense_poller.yml -00d16de62df9d91cd375cbe70034ec97da14601ab5285ca93e5b297150f02d34 install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml -ce1cbc35087006292e93a7e0d1706bc0ac71f8d9f2e60bbdc1c3a8ecea0d34f0 install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml -eedb12a2be920c6bec267162c91e106365af5c009426cefe84c032c2f9d9339d install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml -95696c243ab331f06e77a40a9800c4b6668de77675ebbdf2ef54ae49e1b18874 install-kit-awindows-20260427-211240/ansible/group_vars/pfsense-poller.example.yml +0188480546b4b18937194f2b05a0f23da5dd8536eed4d60b7499a8170c36d08e install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml +953bb39572c520d0438a621c2b4c08315bf887b84ee9e795554e5592b54a1229 install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml +0054e7ba5f342cd10db08f6bab4784d4816179d69f76898a4de293a4063ea14a install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml +a896676303be9a47ed6b0c8cc07deb5a5432aebc97231e801fda985121c539eb install-kit-awindows-20260427-211240/ansible/group_vars/pfsense-poller.example.yml c5cab36645065815571c99f6d360f910dcccbb54b780c8bfd526a6cdc3684e19 install-kit-awindows-20260427-211240/ansible/group_vars/proxmox-matrix.example.yml 35a33c8a1c75ded5e85c6b79e0b3efde07959ff61ee5f66d83b7e0c2abe87fc5 install-kit-awindows-20260427-211240/ansible/group_vars/proxmox.example.yml -5da847b74fac52e0fec2f60e134f4377cfa1581e026b291d3d3ac362371f6e49 install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml +a1921715cf9904b7e3b61a1a5c4300382efe2f3bd70d73e4c8e995318fdd55e9 install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml 7189b5205bd25313db54e5be027b0d066199e6ae34ad74be2095a1691adaf5e3 install-kit-awindows-20260427-211240/ansible/install_full_stack.yml fea0574d7eb98ce24a1e7025afb9837c6241180095d21eaa74892225305d05a3 install-kit-awindows-20260427-211240/ansible/inventory.example.ini 8a5e4923c0f581dd4fbb32549ee7ab45ba506260056da923ba86d9f1b1081714 install-kit-awindows-20260427-211240/ansible/provision_proxmox_ct_and_deploy_aw.yml 18928adcaef5d01b4c621b48f5559383c8b749ef182fd3710f10b222a164f8b7 install-kit-awindows-20260427-211240/ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml a74a49371e889dc3ea404534a939f32f2dac940d8902d20770590951ab67d532 install-kit-awindows-20260427-211240/ansible/tasks/provision_ct_and_deploy_aw.yml ba16fe9e267194459a6082045a387acb828a1d39a98e66b401ece5069ea62e64 install-kit-awindows-20260427-211240/aw-server/activitywatch-server.service -bed7495c277970a37d1c467e81592417f955914d4c714ac21397083b56f1bba8 install-kit-awindows-20260427-211240/aw-server/apply_webui_ru_patch.sh -db81f6209e14f2efd123cd91fac74e37a68e5ef54d00b8b6f6612404a78ffdaa install-kit-awindows-20260427-211240/aw-server/aw-host-groups.json -6eafd2d7a43a9fd146fdc6686ae306cb92abfa2c273bbb1ed03b67fb1277defe install-kit-awindows-20260427-211240/aw-server/aw-ru-patch.js -9e6254c726dd4a26578a60b6bf5acee84066f931ae395115a80cf622a6ff2732 install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.py +fea5734c99b516b01bfe8ebbef59972d0ef553c09d7691790b08472ecfb9602d install-kit-awindows-20260427-211240/aw-server/apply_webui_ru_patch.sh +ba88cc284d047f521427ac038c266624a6fe8493ce3e79bc27c172a2e70ac54a install-kit-awindows-20260427-211240/aw-server/aw-host-groups.json +509759461ce0918a2dc839832812cf5f4c77b1cea1e6ffdcab0146e02598df79 install-kit-awindows-20260427-211240/aw-server/aw-ru-patch.js +22d4ee27ffc73dcec3ba73c8ee65d12353ded1403f592ff52ef578e09dad4c43 install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.py 05b04b5f49e9c7783917e0861e3edd63f5d6db8638d6b33dbfd4dc0f1c16040f install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.service bb0f1de91862da66b0b6d9bd41e8dfe181710196141cb43b00d9b41dab6caf96 install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.timer -0d2b978833b27a2a041508b49ffd07ca045127ddf3b09c71d3787d0bf1224473 install-kit-awindows-20260427-211240/aw-server/aw-server.env.example +b493fbf4cc15ccba44ea78d3ed17a0a6db31617f22d6aeb671677cbf11a36921 install-kit-awindows-20260427-211240/aw-server/aw-server.env.example 98c0bed353bbda0fa7a69df23f3b008cb0e8e70cdff6cc63330d4caf79fd3280 install-kit-awindows-20260427-211240/aw-server/aw-sw-cleanup.js -d8d6be450a726f51f87415eaebd67396468c73ddda9b942481d56b4d33d68bb7 install-kit-awindows-20260427-211240/aw-server/aw-worktime-api.py +e220a2eb830a018fa28c02872fabda54aed7f87dbb0e14141f1a8933a98064fe install-kit-awindows-20260427-211240/aw-server/aw-worktime-api.py f764e566d70952acc1b4f2baeccd6b7888905bc6b98b36333336c0dc77c66694 install-kit-awindows-20260427-211240/aw-server/aw-worktime-api.service -8af41d20f01dfffe6b8c64bd5dbe24468f297035760050647bfeb53b704c0d4d install-kit-awindows-20260427-211240/aw-server/aw-worktime-panel.js -3262b356dc4cd940b66f27d47cfe437dcd26d8d2cb49d1dc0a00b933e380a376 install-kit-awindows-20260427-211240/aw-server/install_aw_server.sh +afbb4be301b4940ed9b7671be3441a48d53bee968d8870749442f81c6d066650 install-kit-awindows-20260427-211240/aw-server/aw-worktime-panel.js +ca7d1ed7665e225824d4ed7ef8456c81a6d97ef2c90cb3aa799d72e07b6bcbb8 install-kit-awindows-20260427-211240/aw-server/install_aw_server.sh aedffecfa24834968742cb2477faef80bf794345275a9679ac12c5a1f609acc2 install-kit-awindows-20260427-211240/aw-server/settings/classes-worktime.json -38fd98fe5816fb87055a9ad1fc570a65052785c829ecd8359fe8305949ab32ca install-kit-awindows-20260427-211240/aw-server/settings/views-default.json +47c50054515506b72af2d6bca0ae959ca57861803e528991c230611e6a8893d6 install-kit-awindows-20260427-211240/aw-server/settings/views-default.json dd2389e9cb199ed86d219120294fdaa64415cfbc683004d5f5db5d52aa758a92 install-kit-awindows-20260427-211240/server-configs-192.168.100.18/awatch-rus-admin.deployment-config.json 5279f9d677faed76a5f0248f9217ecc29eac977ab752552cab852f5b4b6715df install-kit-awindows-20260427-211240/server-configs-192.168.100.18/awatch-rus-u2u5.deployment-config.json 333fe336e51f9c69bd2559d18763da2b83df400fa374e540ed128ffb6765ab7e install-kit-awindows-20260427-211240/server-configs-192.168.100.18/awatch-rus-user1.deployment-config.json 33aa34b89246d6c079ef9afe2f5cd153bd9d5946b69a175ff6fd678c77f61da5 install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psd1 -0e5ac8bc0571f154190202504e02710ac931b8015cb01ec93e82defed9fc2f4f install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 -130ae4c137f7d6951cd8c247c0a8fbf999f4c244e879c180e1441b781e758228 install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 -831edc097f0621ae940db5064c949b4a83ed6e4f25265875f0cdd6bba0ba4c51 install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 -f9992b3c9c075755e6ffcf82385b9abd01e768a0c3fb7fe01afae5d7b65d04db install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 -f940b40600d57f2d12f44a32aa88e5591b7569ce01c06911ff8f4e27b0e1649f install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 -35a0dcc90459d4af39998c8a8bd534826e0b463dfbf3f8547444a96204f0ef4b install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 +9e5e6a30bfb7789ee91ae656e306586a50509d9d416fc044408e9e6c19c61b37 install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 +81e95c7e4b7336a2e1f0caed3ea99f6cdb9696b99380dc2148667b5fba577f68 install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 +e390e00a4deff5ce45a08f5252f23c56b2655c8611e42bc7b2b6992f60bde038 install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 +2074d9ebdda069c8bd579e688473656259714fe7e13b7537a7c464143195b525 install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 +9f2637ede66b61a12e9edafa0b248a5fb496dd5175b288ebb71718330cac68d5 install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 +dc74947393b1851ca233b559ea77f29b1b12a1c4480fbb865f2b58b25f3ea7d3 install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 a4dad0745da95a69ee55b0216d4bde39c58acef8642380092938465653c61cf4 install-kit-awindows-20260427-211240/windows/dlp-policy.example.json 863727465497b474d13d2270d443ff96ccb6076f90a5ce3eb270bdf8088e02dc install-kit-awindows-20260427-211240/windows/email-outbound-collector.ps1 -e29fd9ed3510429372126d94c54beb30dc6424b5b22eb012829b99c3cb07ea60 install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 +44d941322d618d92c72c3d24fe619d71e7551b9cdb35abe19f700c0b74da3eb1 install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 5ef21a25d5e2da4eeaef17126e60f96f195f90f9dc17a776f8629334b904d096 install-kit-awindows-20260427-211240/windows/migrate-awatch-rus-paths.ps1 -d01edd14b2c839ae171006fd3345dbddf1b683b1adcac885b6eabc52e3baeb79 install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 +672d76824b1ca17d4c65e3097cf9895160a7bbce30323ef02d195fc9624538da install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 731098681d89b9af6f3872abd586ac3b1faba2d7f9340211e503f52ad0243b3f install-kit-awindows-20260427-211240/windows/web-category-rules.example.json -945ccfffd56697ed328b82e82d1cffbc83fa4e50a6120b27e3948f3d13fa8a33 install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 +1b7c337967236474484e781dc8ac37543509b051513f01e1a3145369262f5389 install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 diff --git a/install-kit-awindows-20260427-211240/ansible/README.md b/install-kit-awindows-20260427-211240/ansible/README.md index b8fbe87..7a1acbb 100644 --- a/install-kit-awindows-20260427-211240/ansible/README.md +++ b/install-kit-awindows-20260427-211240/ansible/README.md @@ -89,6 +89,12 @@ ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml ## Windows/RDP rollout (WinRM) +Важно: + +- `WinRM` здесь остаётся транспортом для `Ansible deploy` и `validation`; +- для интерактивной PowerShell-работы из Linux/Codex по DetMir используйте project MCP-over-SSH путь, а не `WSMan`; +- каноника лежит в `docs/DETMIR_POWERSHELL_MCP_REMOTE_RU.md` и `scripts/install_detmir_powershell_mcp.sh`. + 1. Подготовьте inventory и vars: - `cp ansible/inventory.example.ini ansible/inventory.ini` - `cp ansible/group_vars/windows.example.yml ansible/group_vars/windows.yml` @@ -122,6 +128,7 @@ Playbook: - выполняет API smoke-check bucket `aw-watcher-window_` и ожидает свежие события (по умолчанию включено); - запускает `validate-deployment.ps1`; - забирает JSON-отчёт в локальную директорию (`/tmp/aw-rus-validation-` по умолчанию). +- настраивает scheduled task `ActivityWatch Hayabusa Upload` с периодом и lookback по vars. Дополнительные флаги: @@ -144,6 +151,38 @@ Playbook: - `aw_windows_api_smoke_check_min_events: 1` — минимум событий, ожидаемых в smoke-check; - `aw_windows_fail_on_validation_error: true` — завершать playbook ошибкой, если `validate-deployment.ps1` возвращает `overallOk=false`; - `aw_windows_skip_hardening: true` — пропустить `hardening-recovery.ps1` внутри ensemble-скрипта. +- `aw_windows_hayabusa_auto_upload_enabled: true` — включить авто-upload EVTX на AW-server; +- `aw_windows_hayabusa_auto_upload_interval_hours: 6` — период scheduled task; +- `aw_windows_hayabusa_auto_upload_hours_back: 6` — lookback для каждого запуска; +- `aw_windows_hayabusa_auto_upload_mode: "incident"` — mode для server-side processing; +- `aw_windows_hayabusa_auto_upload_task_name: "ActivityWatch Hayabusa Upload"` — имя scheduled task. + +## Server-side Hayabusa auto-case и Telegram alerting + +На стороне `deploy_aw_server.yml` теперь есть server-side контур: + +- `aw-hayabusa-drop.path` +- `aw-hayabusa-drop.service` +- `aw-hayabusa-autoprocess` +- `aw-hayabusa-case-alert` + +Что делает контур: + +- автоматически подхватывает `zip` из `/opt/activitywatch/aw-rus-ops/drop`; +- запускает `aw-hayabusa`; +- считает severity/score по `timeline.jsonl`; +- создаёт или обновляет case; +- пишет bounded metadata в `forensics.hayabusa`; +- отправляет Telegram alert. + +Основные vars: + +- `aw_hayabusa_auto_case_enabled: true` +- `aw_hayabusa_auto_case_min_severity: "medium"` +- `aw_hayabusa_telegram_enabled: true` +- `aw_hayabusa_telegram_min_severity: "high"` +- `aw_hayabusa_telegram_bot_token` +- `aw_hayabusa_telegram_chat_ids` ## Развёртывание pfSense poller diff --git a/install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml b/install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml index 46f3eb7..371dac5 100644 --- a/install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml +++ b/install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml @@ -94,6 +94,89 @@ - "{{ aw_rus_health_validation_dir }}" - "{{ aw_server_log_dir }}" + - name: Установить prune script для локального state + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/aw-prune-local-state.sh" + dest: /usr/local/bin/aw-prune-local-state.sh + owner: root + group: root + mode: "0755" + + - name: Ограничить рост journald на aw-server + ansible.builtin.copy: + dest: /etc/systemd/journald.conf.d/aw-rus-retention.conf + owner: root + group: root + mode: "0644" + content: | + [Journal] + SystemMaxUse={{ aw_server_journal_system_max_use }} + RuntimeMaxUse={{ aw_server_journal_runtime_max_use }} + SystemKeepFree={{ aw_server_journal_system_keep_free }} + register: aw_journald_dropin + + - name: Установить systemd service prune локального state + ansible.builtin.copy: + dest: /etc/systemd/system/aw-prune-local-state.service + owner: root + group: root + mode: "0644" + content: | + [Unit] + Description=Prune ActivityWatch local backups and temp state + + [Service] + Type=oneshot + Environment=AW_DATA_DIR={{ aw_server_data_dir }} + Environment=AW_BACKUP_RETENTION_DAYS={{ aw_server_backup_retention_days }} + Environment=AW_BACKUP_KEEP_LAST_DB={{ aw_server_backup_keep_last_db }} + Environment=AW_BACKUP_KEEP_LAST_JSON={{ aw_server_backup_keep_last_json }} + ExecStart=/usr/local/bin/aw-prune-local-state.sh + + - name: Установить systemd timer prune локального state + ansible.builtin.copy: + dest: /etc/systemd/system/aw-prune-local-state.timer + owner: root + group: root + mode: "0644" + content: | + [Unit] + Description=Daily prune of ActivityWatch local backups and temp state + + [Timer] + OnCalendar=*-*-* 04:40:00 + Persistent=true + + [Install] + WantedBy=timers.target + + - name: Перечитать systemd после retention unit/drop-in + ansible.builtin.systemd: + daemon_reload: true + + - name: Включить и запустить timer prune локального state + ansible.builtin.systemd: + name: aw-prune-local-state.timer + enabled: true + state: started + + - name: Применить journald retention без простоя + ansible.builtin.command: + argv: + - systemctl + - restart + - systemd-journald + when: aw_journald_dropin.changed + failed_when: false + + - name: Сжать существующий journald до нового лимита + ansible.builtin.command: + argv: + - journalctl + - --vacuum-size={{ aw_server_journal_system_max_use }} + changed_when: true + failed_when: false + - name: (Check mode) Пропустить установку релиза ActivityWatch ansible.builtin.debug: msg: "ansible_check_mode=true: download/unarchive/install of ActivityWatch release is skipped." @@ -115,6 +198,11 @@ remote_src: true extra_opts: ["-o"] + - name: Удалить временный архив ActivityWatch после распаковки + ansible.builtin.file: + path: "{{ aw_archive_path }}" + state: absent + - name: Найти распакованный каталог ActivityWatch ansible.builtin.find: paths: "{{ aw_release_dir }}" @@ -288,6 +376,22 @@ dest: /opt/activitywatch/aw-server/apply_webui_ru_patch.sh mode: "0755" + - name: Проверить Influx token для AW worktime exporter + ansible.builtin.assert: + that: + - aw_worktime_influx_token is defined + - aw_worktime_influx_token | length > 0 + fail_msg: "aw_worktime_influx_enabled=true, но aw_worktime_influx_token пуст. Exporter будет падать и Grafana не получит worktime-ряды." + when: aw_worktime_influx_enabled | default(false) | bool + + - name: Проверить Influx token для AW DLP exporter + ansible.builtin.assert: + that: + - aw_dlp_influx_token is defined + - aw_dlp_influx_token | length > 0 + fail_msg: "aw_dlp_influx_enabled=true, но aw_dlp_influx_token пуст. Exporter будет падать и Grafana не получит DLP-ряды." + when: aw_dlp_influx_enabled | default(false) | bool + - name: Записать /etc/activitywatch/aw-server.env перед хотфиксами ansible.builtin.copy: dest: /etc/activitywatch/aw-server.env @@ -340,8 +444,16 @@ AW_HEALTH_STRICT_FILEOPS={{ aw_health_strict_fileops | default(0) }} AW_MONITORED_WINDOWS_HOST={{ aw_monitored_windows_host }} AW_MONITORED_WINDOWS_HOSTNAME={{ aw_monitored_windows_hostname }} + AW_RUS_HEALTH_WORKTIME_API={{ aw_rus_health_worktime_api_base | default('http://127.0.0.1:5610') }} AW_RUS_HEALTH_STATE_DIR={{ aw_rus_health_state_dir }} AW_RUS_HEALTH_VALIDATION_DIR={{ aw_rus_health_validation_dir }} + AW_RUS_HEALTH_SESSION_EVENTS_MAX_AGE_SECONDS={{ aw_rus_health_session_events_max_age_seconds | default(86400) }} + AW_HAYABUSA_AUTO_CASE_ENABLED={{ 'true' if (aw_hayabusa_auto_case_enabled | default(true) | bool) else 'false' }} + AW_HAYABUSA_AUTO_CASE_MIN_SEVERITY={{ aw_hayabusa_auto_case_min_severity | default('medium') }} + AW_HAYABUSA_TELEGRAM_ENABLED={{ 'true' if (aw_hayabusa_telegram_enabled | default(false) | bool) else 'false' }} + AW_HAYABUSA_TELEGRAM_MIN_SEVERITY={{ aw_hayabusa_telegram_min_severity | default('high') }} + AW_HAYABUSA_TELEGRAM_BOT_TOKEN={{ aw_hayabusa_telegram_bot_token | default('') }} + AW_HAYABUSA_TELEGRAM_CHAT_IDS={{ aw_hayabusa_telegram_chat_ids | default('') }} - name: Создать каталог DLP policy engine ansible.builtin.file: @@ -914,7 +1026,6 @@ ansible.builtin.systemd: name: aw-worktime-influx-exporter.service state: started - failed_when: false when: aw_worktime_influx_enabled | default(false) | bool - name: Включить и перезапустить AW DLP Influx exporter timer @@ -928,7 +1039,6 @@ ansible.builtin.systemd: name: aw-dlp-influx-exporter.service state: started - failed_when: false when: aw_dlp_influx_enabled | default(false) | bool - name: Применить хотфиксы compiled JS чанков (Trends, Timespiral, Category helper) @@ -1506,6 +1616,11 @@ remote_src: true creates: "{{ aw_hayabusa_release_dir }}/{{ aw_hayabusa_binary_name }}" + - name: Удалить временный архив Hayabusa после распаковки + ansible.builtin.file: + path: "{{ aw_hayabusa_archive_path }}" + state: absent + - name: Нормализовать права release Hayabusa ansible.builtin.file: path: "{{ aw_hayabusa_release_dir }}" @@ -1545,6 +1660,124 @@ group: root mode: "0755" + - name: Создать server-side ops bundle для Hayabusa + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: root + group: root + mode: "0755" + loop: + - /opt/activitywatch/aw-rus-ops + - /opt/activitywatch/aw-rus-ops/hayabusa + - /opt/activitywatch/aw-rus-ops/ansible + - /opt/activitywatch/aw-rus-ops/drop + + - name: Положить исходный wrapper в server-side ops bundle + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa.sh" + dest: /opt/activitywatch/aw-rus-ops/hayabusa/aw-hayabusa.sh + owner: root + group: root + mode: "0755" + + - name: Установить helper link-case для Hayabusa + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-link-case.py" + dest: /usr/local/bin/aw-hayabusa-link-case + owner: root + group: root + mode: "0755" + + - name: Положить helper link-case в server-side ops bundle + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-link-case.py" + dest: /opt/activitywatch/aw-rus-ops/hayabusa/aw-hayabusa-link-case.py + owner: root + group: root + mode: "0755" + + - name: Установить helper from-windows для Hayabusa + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-from-windows.py" + dest: /usr/local/bin/aw-hayabusa-from-windows + owner: root + group: root + mode: "0755" + + - name: Положить helper from-windows в server-side ops bundle + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-from-windows.py" + dest: /opt/activitywatch/aw-rus-ops/hayabusa/aw-hayabusa-from-windows.py + owner: root + group: root + mode: "0755" + + - name: Положить README Hayabusa в server-side ops bundle + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/README.md" + dest: /opt/activitywatch/aw-rus-ops/hayabusa/README.md + owner: root + group: root + mode: "0644" + + - name: Установить helper autoprocess для Hayabusa + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-autoprocess.py" + dest: /usr/local/bin/aw-hayabusa-autoprocess + owner: root + group: root + mode: "0755" + + - name: Положить helper autoprocess в server-side ops bundle + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-autoprocess.py" + dest: /opt/activitywatch/aw-rus-ops/hayabusa/aw-hayabusa-autoprocess.py + owner: root + group: root + mode: "0755" + + - name: Установить helper case-alert для Hayabusa + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-case-alert.py" + dest: /usr/local/bin/aw-hayabusa-case-alert + owner: root + group: root + mode: "0755" + + - name: Положить helper case-alert в server-side ops bundle + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/hayabusa/aw-hayabusa-case-alert.py" + dest: /opt/activitywatch/aw-rus-ops/hayabusa/aw-hayabusa-case-alert.py + owner: root + group: root + mode: "0755" + + - name: Установить systemd unit aw-hayabusa-drop.service + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/aw-hayabusa-drop.service" + dest: /etc/systemd/system/aw-hayabusa-drop.service + owner: root + group: root + mode: "0644" + notify: Перезагрузить systemd + + - name: Установить systemd unit aw-hayabusa-drop.path + ansible.builtin.copy: + src: "{{ aw_repo_root }}/aw-server/aw-hayabusa-drop.path" + dest: /etc/systemd/system/aw-hayabusa-drop.path + owner: root + group: root + mode: "0644" + notify: Перезагрузить systemd + + - name: Включить и запустить aw-hayabusa-drop.path + ansible.builtin.systemd: + name: aw-hayabusa-drop.path + enabled: true + state: started + daemon_reload: true + - name: Проверить server-side runner через doctor ansible.builtin.command: cmd: /usr/local/bin/aw-hayabusa doctor @@ -1572,6 +1805,7 @@ cmd: /usr/local/bin/aw-rus-healthd.py --json register: aw_post_deploy_health changed_when: false + failed_when: false - name: Показать результат aw-rus-healthd ansible.builtin.debug: diff --git a/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml b/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml index c50b6eb..eec5eeb 100644 --- a/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml +++ b/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml @@ -9,12 +9,12 @@ aw_windows_repo_root: "{{ playbook_dir | dirname }}" aw_windows_deploy_root: "C:\\Program Files\\AWatch-rus" aw_windows_server_scheme: "http" - aw_windows_server_host: "10.10.10.13" aw_windows_server_port: 5600 aw_windows_package_version: "v0.13.2" aw_windows_package_url: "https://github.com/ActivityWatch/activitywatch/releases/download/v0.13.2/activitywatch-v0.13.2-windows-x86_64.zip" aw_windows_package_zip_path: "" aw_windows_domain: "SHARKON2025" + aw_windows_builtin_administrator_name: "Администратор" aw_windows_users: - Администратор - user1 @@ -29,9 +29,18 @@ aw_windows_policy_mode: "server" aw_windows_policy_refresh_seconds: 300 aw_windows_policy_engine_enabled: true - aw_windows_policy_engine_host: "{{ aw_windows_server_host }}" aw_windows_policy_engine_port: 5601 aw_windows_policy_engine_scheme: "http" + aw_windows_hayabusa_auto_upload_enabled: true + aw_windows_hayabusa_auto_upload_interval_hours: 6 + aw_windows_hayabusa_auto_upload_hours_back: 6 + aw_windows_hayabusa_auto_upload_mode: "incident" + aw_windows_hayabusa_auto_upload_task_name: "ActivityWatch Hayabusa Upload" + aw_windows_file_1c_auto_upload_enabled: true + aw_windows_file_1c_auto_upload_interval_hours: 6 + aw_windows_file_1c_auto_upload_task_name: "ActivityWatch File1C Upload" + aw_windows_file_1c_target_user: "igor" + aw_windows_file_1c_registry_workbook_path: "E:\\USER1\\СПИСОК ПРЕДПРИЯТИЙ И ИХ РАСПРЕДЕЛЕНИЕ.xlsx" aw_windows_afk_enabled_default: true aw_windows_window_enabled_default: true aw_windows_file_ops_enabled: true @@ -41,6 +50,7 @@ aw_windows_incident_artifacts_root: "{{ aw_windows_state_root }}\\incident-artifacts" aw_windows_forensics_root: "{{ aw_windows_state_root }}\\forensics\\evtx-exports" aw_windows_logon_marker_enabled: true + aw_windows_process_events_enabled: true aw_windows_skip_hardening: false aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" @@ -62,16 +72,79 @@ aw_windows_migration_report_remote_path: "{{ aw_windows_state_root }}\\aw_migration_ansible.json" tasks: + - name: Вычислить inventory host AW server по умолчанию + ansible.builtin.set_fact: + aw_server_inventory_host_effective: "{{ (groups['aw_server'] | default([]) | first) | default('', true) }}" + + - name: Вычислить inventory host analytics node по умолчанию + ansible.builtin.set_fact: + aw_analytics_inventory_host_effective: "{{ (groups['proxmox'] | default([]) | first) | default('', true) }}" + + - name: Вычислить effective host для AW server + ansible.builtin.set_fact: + aw_windows_server_host_effective: >- + {{ + aw_windows_server_host + | default( + ( + hostvars[aw_server_inventory_host_effective].ansible_host + | default(aw_server_inventory_host_effective, true) + ) + if (aw_server_inventory_host_effective | length) > 0 + else '', + true + ) + }} + + - name: Вычислить effective каталог health validation на AW server + ansible.builtin.set_fact: + aw_windows_health_validation_dir_effective: >- + {{ + ( + hostvars[aw_server_inventory_host_effective].aw_rus_health_validation_dir + | default('/var/lib/activitywatch/health/windows-validation', true) + ) + if (aw_server_inventory_host_effective | length) > 0 + else '' + }} + + - name: Вычислить effective host для policy engine + ansible.builtin.set_fact: + aw_windows_policy_engine_host_effective: >- + {{ + aw_windows_policy_engine_host + | default(aw_windows_server_host_effective, true) + }} + + - name: Вычислить effective host для file-1C analytics + ansible.builtin.set_fact: + aw_windows_file_1c_target_host_effective: >- + {{ + aw_windows_file_1c_target_host + | default( + ( + hostvars[aw_analytics_inventory_host_effective].ansible_host + | default(aw_analytics_inventory_host_effective, true) + ) + if (aw_analytics_inventory_host_effective | length) > 0 + else '', + true + ) + }} + - name: Проверить обязательные переменные ansible.builtin.assert: that: - - aw_windows_server_host is defined + - aw_windows_server_host_effective | length > 0 - aw_windows_server_port is defined - aw_windows_server_scheme is defined - aw_windows_domain is defined + - aw_windows_builtin_administrator_name is defined + - aw_windows_builtin_administrator_name | length > 0 - aw_windows_users_effective | length > 0 - aw_windows_install_root is defined - aw_windows_state_root is defined + - (not (aw_windows_file_1c_auto_upload_enabled | bool)) or (aw_windows_file_1c_target_host_effective | length > 0) fail_msg: "Не заданы обязательные переменные Windows-развёртывания." - name: Нормализовать effective флаги collector'ов и smoke-check @@ -102,11 +175,14 @@ - file-operations-collector.ps1 - worktime-session-collector.ps1 - export-evtx-for-hayabusa.ps1 + - export-upload-hayabusa-to-aw-server.ps1 + - export-upload-file-1c-telemetry.ps1 - migrate-awatch-rus-paths.ps1 - deploy-domain-users.ps1 - deploy-ensemble.ps1 - hardening-recovery.ps1 - rebuild-worktime-tasks.ps1 + - audit-cryptopro.ps1 - validate-deployment.ps1 - web-category-rules.example.json - dlp-policy.example.json @@ -156,9 +232,10 @@ ansible.windows.win_powershell: script: | $ErrorActionPreference = 'Stop' + $env:AWATCH_RUS_BUILTIN_ADMINISTRATOR_NAME = "{{ aw_windows_builtin_administrator_name }}" $params = @{ ServerScheme = "{{ aw_windows_server_scheme }}" - ServerHost = "{{ aw_windows_server_host }}" + ServerHost = "{{ aw_windows_server_host_effective }}" ServerPort = {{ aw_windows_server_port }} Version = "{{ aw_windows_package_version }}" Domain = "{{ aw_windows_domain }}" @@ -175,12 +252,24 @@ EvtxExportRoot = "{{ aw_windows_forensics_root }}" EvtxRetentionDays = {{ aw_windows_evtx_retention_days | int }} LogonMarkerEnabled = {{ '$true' if (aw_windows_logon_marker_enabled | bool) else '$false' }} + ProcessEventsEnabled = {{ '$true' if (aw_windows_process_events_enabled | bool) else '$false' }} PolicyMode = "{{ aw_windows_policy_mode }}" PolicyEngineEnabled = {{ '$true' if (aw_windows_policy_engine_enabled | bool) else '$false' }} - PolicyEngineHost = "{{ aw_windows_policy_engine_host }}" + PolicyEngineHost = "{{ aw_windows_policy_engine_host_effective }}" PolicyEnginePort = {{ aw_windows_policy_engine_port }} PolicyEngineScheme = "{{ aw_windows_policy_engine_scheme }}" PolicyRefreshSeconds = {{ aw_windows_policy_refresh_seconds }} + HayabusaAutoUploadEnabled = {{ '$true' if (aw_windows_hayabusa_auto_upload_enabled | bool) else '$false' }} + HayabusaAutoUploadIntervalHours = {{ aw_windows_hayabusa_auto_upload_interval_hours | int }} + HayabusaAutoUploadHoursBack = {{ aw_windows_hayabusa_auto_upload_hours_back | int }} + HayabusaAutoUploadMode = "{{ aw_windows_hayabusa_auto_upload_mode }}" + HayabusaAutoUploadTaskName = "{{ aw_windows_hayabusa_auto_upload_task_name }}" + File1CAutoUploadEnabled = {{ '$true' if (aw_windows_file_1c_auto_upload_enabled | bool) else '$false' }} + File1CAutoUploadIntervalHours = {{ aw_windows_file_1c_auto_upload_interval_hours | int }} + File1CAutoUploadTaskName = "{{ aw_windows_file_1c_auto_upload_task_name }}" + File1CTargetHost = "{{ aw_windows_file_1c_target_host_effective }}" + File1CTargetUser = "{{ aw_windows_file_1c_target_user }}" + File1CRegistryWorkbookPath = "{{ aw_windows_file_1c_registry_workbook_path }}" CustomRulesPath = "{{ aw_windows_rules_path }}" CustomPolicyPath = "{{ aw_windows_policy_path }}" } @@ -340,7 +429,7 @@ when: - aw_windows_api_smoke_check_enabled | bool ansible.builtin.uri: - url: "{{ aw_windows_server_scheme }}://{{ aw_windows_server_host }}:{{ aw_windows_server_port }}/api/0/buckets/{{ aw_windows_api_smoke_check_bucket_effective }}/events?limit={{ aw_windows_api_smoke_check_limit }}" + url: "{{ aw_windows_server_scheme }}://{{ aw_windows_server_host_effective }}:{{ aw_windows_server_port }}/api/0/buckets/{{ aw_windows_api_smoke_check_bucket_effective }}/events?limit={{ aw_windows_api_smoke_check_limit }}" method: GET status_code: 200 return_content: true @@ -367,7 +456,7 @@ - aw_windows_api_smoke_check_window_enabled_effective | bool - aw_windows_window_enabled_effective | bool ansible.builtin.uri: - url: "{{ aw_windows_server_scheme }}://{{ aw_windows_server_host }}:{{ aw_windows_server_port }}/api/0/buckets/{{ aw_windows_api_smoke_check_window_bucket_effective }}/events?limit={{ aw_windows_api_smoke_check_limit }}" + url: "{{ aw_windows_server_scheme }}://{{ aw_windows_server_host_effective }}:{{ aw_windows_server_port }}/api/0/buckets/{{ aw_windows_api_smoke_check_window_bucket_effective }}/events?limit={{ aw_windows_api_smoke_check_limit }}" method: GET status_code: 200 return_content: true @@ -404,6 +493,26 @@ dest: "{{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_ansible.json" flat: true + - name: Убедиться, что каталог Windows validation существует на AW server + when: + - aw_server_inventory_host_effective | length > 0 + - aw_windows_health_validation_dir_effective | length > 0 + ansible.builtin.file: + path: "{{ aw_windows_health_validation_dir_effective }}" + state: directory + mode: "0755" + delegate_to: "{{ aw_server_inventory_host_effective }}" + + - name: Опубликовать validation report на AW server для aw-rus-healthd + when: + - aw_server_inventory_host_effective | length > 0 + - aw_windows_health_validation_dir_effective | length > 0 + ansible.builtin.copy: + src: "{{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_ansible.json" + dest: "{{ aw_windows_health_validation_dir_effective }}/{{ inventory_hostname }}-aw_validate_ansible.json" + mode: "0644" + delegate_to: "{{ aw_server_inventory_host_effective }}" + - name: Проверить статус валидации ansible.builtin.shell: | python3 - <<'PY' diff --git a/install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml b/install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml index fada2ca..2bcd41e 100644 --- a/install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml +++ b/install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml @@ -8,7 +8,9 @@ aw_server_db_path: "/var/lib/activitywatch/.local/share/activitywatch/aw-server- aw_server_log_dir: "/var/log/activitywatch" aw_server_user: "activitywatch" aw_server_group: "activitywatch" -aw_worktime_report_base: "http://10.10.10.13:5610" +aw_server_inventory_host: "{{ (groups['aw_server'] | default([]) | first) | default('aw-server', true) }}" +aw_server_public_host: "{{ (hostvars[aw_server_inventory_host].ansible_host | default(aw_server_inventory_host, true)) if (aw_server_inventory_host | length) > 0 else 'aw-server' }}" +aw_worktime_report_base: "http://{{ aw_server_public_host }}:5610" aw_worktime_timezone: "Europe/Moscow" aw_worktime_influx_enabled: false aw_worktime_influx_url: "http://10.10.10.10:8086" @@ -27,8 +29,15 @@ aw_dlp_influx_event_limit: 2000 aw_dlp_influx_token: "" aw_monitored_windows_host: "192.168.100.18" aw_monitored_windows_hostname: "SHARKON2025" +aw_rus_health_worktime_api_base: "http://127.0.0.1:5610" aw_rus_health_state_dir: "{{ aw_server_data_dir }}/health" aw_rus_health_validation_dir: "{{ aw_rus_health_state_dir }}/windows-validation" +aw_hayabusa_auto_case_enabled: true +aw_hayabusa_auto_case_min_severity: "medium" +aw_hayabusa_telegram_enabled: true +aw_hayabusa_telegram_min_severity: "high" +aw_hayabusa_telegram_bot_token: "" +aw_hayabusa_telegram_chat_ids: "" aw_repo_root: "{{ playbook_dir | dirname }}" @@ -41,7 +50,7 @@ aw_apply_worktime_settings: true aw_server_cors_origins: - "http://127.0.0.1:5600" - "http://localhost:5600" - - "http://10.10.10.13:5600" + - "http://{{ aw_server_public_host }}:5600" - "http://aw-server:5600" # Опциональные значения периода рабочего времени в Web UI. diff --git a/install-kit-awindows-20260427-211240/ansible/group_vars/pfsense-poller.example.yml b/install-kit-awindows-20260427-211240/ansible/group_vars/pfsense-poller.example.yml index 87aabaa..c592061 100644 --- a/install-kit-awindows-20260427-211240/ansible/group_vars/pfsense-poller.example.yml +++ b/install-kit-awindows-20260427-211240/ansible/group_vars/pfsense-poller.example.yml @@ -12,16 +12,16 @@ aw_pfsense_poller_config: scheme: "https" verify_tls: false timeout_seconds: 15 - headers: - X-API-Key: "replace-me" - X-API-Secret: "replace-me" + auth: + api_key: "replace-me" + api_secret: "replace-me" endpoints: - name: "system-status" path: "/api/v2/status/system" bucket_prefix: "aw-pfsense-health" bucket_type: "aw.pfsense.health" - name: "interfaces" - path: "/api/v2/interface" + path: "/api/v2/interfaces" bucket_prefix: "aw-pfsense-interfaces" bucket_type: "aw.pfsense.interfaces" - name: "gateways" diff --git a/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml b/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml index 4dfe821..ae3eee2 100644 --- a/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml +++ b/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml @@ -1,12 +1,22 @@ aw_windows_repo_root: "{{ playbook_dir | dirname }}" aw_windows_deploy_root: "C:\\Program Files\\AWatch-rus" aw_windows_server_scheme: "http" -aw_windows_server_host: "10.10.10.13" +# Leave empty to derive from the first host in [aw_server] inventory. +aw_windows_server_host: "" aw_windows_server_port: 5600 +aw_windows_hayabusa_auto_upload_enabled: false +aw_windows_hayabusa_auto_upload_interval_hours: 6 +aw_windows_hayabusa_auto_upload_hours_back: 6 +aw_windows_hayabusa_auto_upload_mode: "incident" +aw_windows_hayabusa_auto_upload_task_name: "ActivityWatch Hayabusa Upload" aw_windows_package_version: "v0.13.2" aw_windows_package_url: "https://github.com/ActivityWatch/activitywatch/releases/download/v0.13.2/activitywatch-v0.13.2-windows-x86_64.zip" aw_windows_package_zip_path: "" aw_windows_domain: "SHARKON2025" +# Localized name of the built-in local Administrator account (SID ending in -500). +# On the current Russian Windows host this must stay "Администратор"; +# do not replace it with "Administrator" unless the target OS account is actually named that way. +aw_windows_builtin_administrator_name: "Администратор" aw_windows_users: - Администратор - user1 @@ -40,6 +50,7 @@ aw_windows_evtx_channels: - Microsoft-Windows-TerminalServices-LocalSessionManager/Operational - Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational aw_windows_logon_marker_enabled: true +aw_windows_process_events_enabled: true aw_windows_skip_hardening: false aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" diff --git a/install-kit-awindows-20260427-211240/aw-server/apply_webui_ru_patch.sh b/install-kit-awindows-20260427-211240/aw-server/apply_webui_ru_patch.sh index 343ee06..64e8826 100755 --- a/install-kit-awindows-20260427-211240/aw-server/apply_webui_ru_patch.sh +++ b/install-kit-awindows-20260427-211240/aw-server/apply_webui_ru_patch.sh @@ -10,7 +10,8 @@ fi source "$ENV_FILE" WEBUI_DIR="${AW_SERVER_WEBUI_DIR:-${AW_WEBUI_DIR:-/opt/activitywatch/webui-ru}}" -REPORT_BASE="${AW_WORKTIME_REPORT_BASE:-http://10.10.10.13:5610}" +SERVER_PUBLIC_HOST="${AW_SERVER_PUBLIC_HOST:-${AW_SERVER_HOST:-$(hostname -f 2>/dev/null || hostname)}}" +REPORT_BASE="${AW_WORKTIME_REPORT_BASE:-http://${SERVER_PUBLIC_HOST}:5610}" CASE_PORT="${AW_DLP_CASE_PORT:-5602}" CASE_BASE="${AW_DLP_CASE_PUBLIC_BASE:-}" PATCH_JS_SRC="/root/bootstrap/aw-ru-patch.js" @@ -62,12 +63,19 @@ worktime_panel_hash="$(sha1sum "$WORKTIME_PANEL_TARGET" | awk '{print substr($1, if [[ -z "$CASE_BASE" ]]; then CASE_BASE="$(python3 - "$REPORT_BASE" "$CASE_PORT" <<'PY' from urllib.parse import urlsplit, urlunsplit +import os +import socket import sys report_base = sys.argv[1] case_port = sys.argv[2] parts = urlsplit(report_base) -hostname = parts.hostname or "10.10.10.13" +hostname = ( + parts.hostname + or os.environ.get("AW_SERVER_PUBLIC_HOST") + or os.environ.get("AW_SERVER_HOST") + or socket.getfqdn() +) scheme = parts.scheme or "http" print(urlunsplit((scheme, f"{hostname}:{case_port}", "", "", ""))) PY diff --git a/install-kit-awindows-20260427-211240/aw-server/aw-host-groups.json b/install-kit-awindows-20260427-211240/aw-server/aw-host-groups.json index 7432f60..b7e5fff 100644 --- a/install-kit-awindows-20260427-211240/aw-server/aw-host-groups.json +++ b/install-kit-awindows-20260427-211240/aw-server/aw-host-groups.json @@ -47,13 +47,11 @@ { "id": "virtual-infra", "name": "Virtual servers + Proxmox", - "description": "Инфраструктурные VM и сетевые узлы. Здесь должны лежать Proxmox, pfSense, Debian и Ubuntu серверы.", + "description": "Инфраструктурные VM и серверы Proxmox, Debian и Ubuntu.", "patterns": [ - "^(PFSENSE|PVE|PROXMOX|DEBIAN|UBUNTU|LINUX|VM-|SRV-|INFRA-)" + "^(PVE|PROXMOX|DEBIAN|UBUNTU|LINUX|VM-|SRV-|INFRA-)" ], "links": [ - { "label": "pfSense health", "type": "bucket", "bucket_prefix": "aw-pfsense-health_" }, - { "label": "pfSense gateways", "type": "bucket", "bucket_prefix": "aw-pfsense-gateways_" }, { "label": "Все бакеты", "type": "buckets" } ] } diff --git a/install-kit-awindows-20260427-211240/aw-server/aw-ru-patch.js b/install-kit-awindows-20260427-211240/aw-server/aw-ru-patch.js index 0e7b585..6b546fd 100755 --- a/install-kit-awindows-20260427-211240/aw-server/aw-ru-patch.js +++ b/install-kit-awindows-20260427-211240/aw-server/aw-ru-patch.js @@ -3,8 +3,8 @@ return; } window.__awRuPatchBootstrapped = true; - window.__awRuPatchVersion = "template-v13-category-builder-early-fix"; - document.documentElement.setAttribute("data-aw-ru-patch", "template-v13-category-builder-early-fix"); + window.__awRuPatchVersion = "template-v14-dlp-route-lite"; + document.documentElement.setAttribute("data-aw-ru-patch", "template-v14-dlp-route-lite"); const exact = new Map([ ["ActivityWatch", "АктивВотч"], @@ -24,6 +24,7 @@ ["Tools", "Инструменты"], ["Raw Data", "Сырые данные"], ["Summary", "Сводка"], + ["Worktime", "Рабочее время"], ["All", "Все"], ["None", "Нет"], ["Date", "Дата"], @@ -236,6 +237,7 @@ ['Common words in "Uncategorized" events', 'Частые слова в событиях "Без категории"'], ["No words with significant duration. You're good to go!", "Нет слов со значимой длительностью. Здесь всё в порядке."], ["Top apps", "Топ приложений"], + ["Top Applications", "Топ приложений"], ["Top titles", "Топ заголовков"], ["Top URLs", "Топ URL"], ["Top domains", "Топ доменов"], @@ -344,7 +346,16 @@ '.aw-ru-pve-audit-value { font-size: 24px; font-weight: 700; }', '.aw-ru-pve-audit-table { width: 100%; border-collapse: collapse; margin-top: 8px; }', '.aw-ru-pve-audit-table th, .aw-ru-pve-audit-table td { padding: 6px 8px; border-bottom: 1px solid rgba(120,120,120,.18); vertical-align: top; text-align: left; font-size: 13px; }', - '.aw-ru-pve-audit-muted { opacity: .72; font-size: 13px; }' + '.aw-ru-pve-audit-muted { opacity: .72; font-size: 13px; }', + '.aw-ru-rdp-center { margin: 16px 0; padding: 16px; border: 1px solid rgba(120,120,120,.35); border-radius: 8px; background: rgba(10,20,40,.04); }', + '.aw-ru-rdp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; margin: 12px 0 16px; }', + '.aw-ru-rdp-card { border: 1px solid rgba(120,120,120,.22); border-radius: 8px; padding: 12px; background: rgba(255,255,255,.02); }', + '.aw-ru-rdp-card h5 { margin: 0 0 6px; font-size: 13px; opacity: .8; }', + '.aw-ru-rdp-value { font-size: 24px; font-weight: 700; }', + '.aw-ru-rdp-table { width: 100%; border-collapse: collapse; margin-top: 8px; }', + '.aw-ru-rdp-table th, .aw-ru-rdp-table td { padding: 6px 8px; border-bottom: 1px solid rgba(120,120,120,.18); vertical-align: top; text-align: left; font-size: 13px; }', + '.aw-ru-rdp-links { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }', + '.aw-ru-rdp-links a { display: inline-block; padding: 4px 8px; border-radius: 999px; background: rgba(90,140,255,.15); text-decoration: none; }' ].join("\n"); document.head.appendChild(style); } @@ -370,6 +381,12 @@ return ""; } + function getCurrentActivityDayFromHash() { + const hash = window.location.hash || ""; + const match = hash.match(/#\/activity\/[^/]+\/day\/([^/?#]+)/i); + return match && match[1] ? decodeURIComponent(match[1]) : "today"; + } + function isPveLikeHost(host) { return /^pve[-_]/i.test(String(host || "")); } @@ -384,6 +401,230 @@ return true; } + function isClientActivityRoute() { + const hash = window.location.hash || ""; + const match = hash.match(/^#\/activity\/([^/]+)(?:\/day\/([^/]+))?\/view\/([^/?#]+)/i); + if (!match) return false; + const host = decodeURIComponent(match[1] || ""); + return isLikelyClientHost(host) && !isPveLikeHost(host); + } + + function getRdpReportBaseUrl() { + const url = new URL(window.location.href); + url.hash = ""; + url.search = ""; + url.pathname = "/reports/worktime/today"; + url.port = "5610"; + return url; + } + + function buildRdpReportUrl(format, day) { + const url = getRdpReportBaseUrl(); + url.searchParams.set("day", day || "today"); + if (format) url.searchParams.set("format", format); + return url.toString(); + } + + function normalizeActivityDay(day) { + if (day && day !== "today") return day; + const now = new Date(); + return [ + now.getFullYear(), + String(now.getMonth() + 1).padStart(2, "0"), + String(now.getDate()).padStart(2, "0") + ].join("-"); + } + + function getActivityDayRange(day) { + const normalizedDay = normalizeActivityDay(day); + const start = new Date(normalizedDay + "T00:00:00"); + const end = new Date(normalizedDay + "T23:59:59"); + return { normalizedDay: normalizedDay, start: start, end: end }; + } + + function formatActiveHhmm(totalSeconds) { + const seconds = Math.max(0, Number(totalSeconds) || 0); + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + return String(hours).padStart(2, "0") + ":" + String(minutes).padStart(2, "0"); + } + + function isWorktimeRowActive(data) { + if (!data || typeof data !== "object") return false; + if (typeof data.active === "boolean") return data.active; + const state = String(data.state || "").trim().toLowerCase(); + return state === "active" || state === "активно"; + } + + function formatDurationSeconds(totalSeconds) { + const seconds = Math.max(0, Number(totalSeconds) || 0); + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = Math.floor(seconds % 60); + if (hours > 0) return hours + "ч " + String(minutes).padStart(2, "0") + "м"; + if (minutes > 0) return minutes + "м " + String(secs).padStart(2, "0") + "с"; + return secs + "с"; + } + + function formatIsoForUi(value) { + if (!value) return "—"; + try { + return new Date(value).toLocaleString(); + } catch (error) { + return value; + } + } + + async function fetchRdpWorktimeReport(host, day) { + if (!host) return null; + const cacheKey = host + "|" + (day || "today"); + if (!window.__awRuRdpReportCache) window.__awRuRdpReportCache = {}; + if (window.__awRuRdpReportCache[cacheKey]) return window.__awRuRdpReportCache[cacheKey]; + const range = getActivityDayRange(day); + const bucketId = "aw-worktime-sessions_" + host; + const params = new URLSearchParams(); + params.set("start", range.start.toISOString()); + params.set("end", new Date(range.end.getTime() + 1000).toISOString()); + params.set("limit", "100000"); + const response = await fetch("/api/0/buckets/" + encodeURIComponent(bucketId) + "/events?" + params.toString(), { credentials: "same-origin" }); + if (!response.ok) throw new Error("rdp-report-fetch-failed"); + const events = await response.json(); + if (!Array.isArray(events)) return null; + const rowsByUser = new Map(); + events.forEach(function (event) { + const data = event && event.data ? event.data : {}; + const ts = event && event.timestamp ? String(event.timestamp) : ""; + if (!ts) return; + const tsDate = new Date(ts); + if (Number.isNaN(tsDate.getTime())) return; + const tsDay = [ + tsDate.getFullYear(), + String(tsDate.getMonth() + 1).padStart(2, "0"), + String(tsDate.getDate()).padStart(2, "0") + ].join("-"); + if (tsDay !== range.normalizedDay) return; + const userId = String(data.userId || ""); + const userName = String(data.username || userId || "").trim(); + if (!userName) return; + const key = userId || userName; + if (!rowsByUser.has(key)) { + rowsByUser.set(key, { + user: userName, + user_id: userId || userName, + active_seconds: 0, + first_activity: "", + last_activity: "", + sessions_count: new Set(), + samples_count: 0, + active_samples: 0 + }); + } + const row = rowsByUser.get(key); + row.samples_count += 1; + if (data.sessionId !== undefined && data.sessionId !== null) row.sessions_count.add(String(data.sessionId)); + if (isWorktimeRowActive(data)) { + const sampleSeconds = Math.max(0, Number(data.sampleSeconds || event.duration || 0)); + row.active_seconds += sampleSeconds; + row.active_samples += 1; + if (!row.first_activity || ts < row.first_activity) row.first_activity = ts; + if (!row.last_activity || ts > row.last_activity) row.last_activity = ts; + } + }); + const payload = { + host: host, + report_date: range.normalizedDay, + rows: Array.from(rowsByUser.values()).map(function (row) { + return { + user: row.user, + user_id: row.user_id, + active_seconds: row.active_seconds, + active_hhmm: formatActiveHhmm(row.active_seconds), + first_activity: row.first_activity, + last_activity: row.last_activity, + sessions_count: row.sessions_count.size, + samples_count: row.samples_count, + active_samples: row.active_samples + }; + }) + }; + window.__awRuRdpReportCache[cacheKey] = payload; + return payload; + } + + async function injectRdpWorktimeCenter(root) { + if (!isClientActivityRoute()) return; + const host = getCurrentHostFromHash(); + const day = getCurrentActivityDayFromHash(); + const report = await fetchRdpWorktimeReport(host, day); + if (!report || !Array.isArray(report.rows) || !report.rows.length) return; + + const totalActiveSeconds = report.rows.reduce(function (sum, row) { + return sum + Math.max(0, Number(row && row.active_seconds || 0)); + }, 0); + const activeUsers = report.rows.filter(function (row) { + return Number(row && row.active_seconds || 0) > 0; + }); + const topRows = activeUsers + .slice() + .sort(function (left, right) { + return Number(right.active_seconds || 0) - Number(left.active_seconds || 0); + }) + .slice(0, 5); + + Array.from(root.querySelectorAll("li")).forEach(function (item) { + const text = (item.textContent || "").trim(); + if (/^(?:Активное время|Time active):/i.test(text)) { + item.textContent = "Активное время: " + formatDurationSeconds(totalActiveSeconds); + } + }); + + const heading = root.querySelector("h3"); + if (!heading || !heading.parentElement) return; + + let center = root.querySelector("[data-aw-ru-rdp-center='1']"); + if (!center) { + center = document.createElement("section"); + center.className = "aw-ru-rdp-center"; + center.setAttribute("data-aw-ru-rdp-center", "1"); + const anchor = heading.parentElement.querySelector("img") || null; + heading.parentElement.insertBefore(center, anchor); + } + + const latestActivity = topRows.reduce(function (latest, row) { + const value = row && row.last_activity ? String(row.last_activity) : ""; + if (!value) return latest; + if (!latest) return value; + return value > latest ? value : latest; + }, ""); + + center.innerHTML = + '

RDP сводка

' + + '

Этот блок строится из bucket aw-worktime-sessions через AW API и показывает сводку по RDP-сессиям выбранного хоста.

' + + '
' + + '
Активное время
' + escapeHtml(formatDurationSeconds(totalActiveSeconds)) + '
' + + '
Активных пользователей
' + escapeHtml(String(activeUsers.length)) + '
' + + '
Последняя активность
' + escapeHtml(formatIsoForUi(latestActivity)) + '
' + + '
' + + '' + + '' + + '' + + (topRows.length ? topRows.map(function (row) { + return '' + + '' + + '' + + '' + + '' + + ''; + }).join("") : '') + + '' + + '
ПользовательАктивное времяПервая активностьПоследняя активность
' + escapeHtml(row.user || row.user_id || "") + '' + escapeHtml(row.active_hhmm || formatDurationSeconds(row.active_seconds || 0)) + '' + escapeHtml(formatIsoForUi(row.first_activity || "")) + '' + escapeHtml(formatIsoForUi(row.last_activity || "")) + '
Нет активных пользователей в отчёте.
' + + '
'; + } + function enforceSafeActivityViewForPveHost() { const hash = window.location.hash || ""; const match = hash.match(/^#\/activity\/([^/]+)(?:\/day\/([^/]+))?\/view\/([^/?#]+)/i); @@ -605,9 +846,15 @@ } function removeBadDlpLinks(root) { - const badLinks = root.querySelectorAll("a[href*='/view/DLP']"); - badLinks.forEach(function (link) { + const links = Array.from(root.querySelectorAll("a[href], [role='link']")); + links.forEach(function (link) { + const href = String(link.getAttribute("href") || ""); + const label = normalizeText(link.textContent || ""); + const isBrokenActivityDlpLink = /\/view\/dlp(?:[/?#]|$)/i.test(href); + const isActivityTabDlpLabel = label === "DLP" && !!link.closest("li"); + if (!isBrokenActivityDlpLink && !isActivityTabDlpLabel) return; const item = link.closest("li") || link; + if (item && item.getAttribute && item.getAttribute("data-aw-ru-dlp-item") === "1") return; item.remove(); }); } @@ -718,11 +965,9 @@ { id: "virtual-infra", name: "Virtual servers + Proxmox", - description: "Инфраструктурные VM, Proxmox и сетевые узлы.", - patterns: ["^(PFSENSE|PVE|PROXMOX|DEBIAN|UBUNTU|LINUX|VM-|SRV-|INFRA-)"], + description: "Инфраструктурные VM и узлы Proxmox.", + patterns: ["^(PVE|PROXMOX|DEBIAN|UBUNTU|LINUX|VM-|SRV-|INFRA-)"], links: [ - { label: "pfSense health", type: "bucket", bucket_prefix: "aw-pfsense-health_" }, - { label: "pfSense gateways", type: "bucket", bucket_prefix: "aw-pfsense-gateways_" }, { label: "Все бакеты", type: "buckets" } ] } @@ -785,9 +1030,6 @@ "aw-pve-webadmin-events_", "aw-pve-task-events_", "aw-dlp-incidents_", - "aw-pfsense-health_", - "aw-pfsense-gateways_", - "aw-pfsense-interfaces_" ]; for (const prefix of prefixes) { if (bucketId.indexOf(prefix) === 0) { @@ -1129,7 +1371,9 @@ try { await saveDlpReview(host, event, row); state.reviews = collapseReviewEvents(await loadBucketEvents("aw-dlp-review_" + host, 200)); - renderDlpTableRows(center, host); + renderDlpReviewManager(center, host); + center.querySelector("[data-aw-ru-dlp-status]").textContent = + "Событий: " + state.events.length + " · правил: " + state.activeRules.length + "/" + state.rules.length + " · review: " + state.reviews.filter(function (review) { return !(review.data && review.data.review && review.data.review.archived); }).length + "/" + state.reviews.length; message.textContent = "Review сохранен."; } catch (error) { message.textContent = "Ошибка сохранения review: " + error.message; @@ -1170,8 +1414,17 @@ if (!hayabusa) return ""; const status = String(hayabusa.status || ""); const mode = String(hayabusa.mode || ""); + const caseHost = normalizeText(c && c.host); + const forensicHost = normalizeText(hayabusa.host); const reportDir = String(hayabusa.report_dir || ""); - const title = reportDir ? ' title="' + escapeHtml(reportDir) + '"' : ""; + const hostMismatch = caseHost && forensicHost && caseHost !== forensicHost; + const titleParts = []; + if (reportDir) titleParts.push(reportDir); + if (hostMismatch) titleParts.push("host mismatch: case=" + caseHost + " forensic=" + forensicHost); + const title = titleParts.length ? ' title="' + escapeHtml(titleParts.join(" | ")) + '"' : ""; + if (hostMismatch) { + return 'Hayabusa host-mismatch · ' + escapeHtml(forensicHost) + ''; + } return 'Hayabusa ' + escapeHtml(status) + (mode ? " · " + escapeHtml(mode) : "") + ''; } const rows = (cases || []).map(function (c) { @@ -1868,6 +2121,16 @@ }); } + function applyTextAndNavigationPatches(root) { + if (!root) return; + walk(root); + translateAttributes(root); + hideNoiseNavigation(root); + hidePveAuditTabForRegularHost(root); + patchActivityHeading(root); + patchCategoryBuilderHostLabel(root); + } + function detachObserver() { if (!observerAttached) return; observer.disconnect(); @@ -1887,34 +2150,37 @@ try { const routeKey = window.location.hash || "#"; const routeChanged = routeKey !== staticPatchRouteKey; + const dlpRoute = isDlpSignalBucketRoute(); + installCategoryBuilderNetworkPatch(); + injectStyles(); + if (dlpRoute) { + ensureSettingsHost(); + injectDlpNavigation(document.body); + if (dlpOverlayFailureCount === 0) { + try { + injectDlpReviewCenter(document.body); + } catch (error) { + dlpOverlayFailureCount += 1; + const existing = document.body.querySelector("[data-aw-ru-dlp-center='1']"); + if (existing && existing.parentElement) existing.parentElement.removeChild(existing); + } + } + applyTextAndNavigationPatches(document.body); + staticPatchRouteKey = routeKey; + return; + } enforceSafeActivityViewForPveHost(); ensureSettingsHost(); ensureHostGroupsData().catch(function () {}); normalizeCategoryBuilderUnknownHostRefs(); - installCategoryBuilderNetworkPatch(); - injectStyles(); + applyTextAndNavigationPatches(document.body); if (routeChanged) { - walk(document.body); - translateAttributes(document.body); - hideNoiseNavigation(document.body); - hidePveAuditTabForRegularHost(document.body); - patchActivityHeading(document.body); - patchCategoryBuilderHostLabel(document.body); staticPatchRouteKey = routeKey; } injectPveAuditCenter(document.body); + injectRdpWorktimeCenter(document.body).catch(function () {}); injectDlpNavigation(document.body); - if (isDlpSignalBucketRoute() && dlpOverlayFailureCount === 0) { - try { - injectDlpReviewCenter(document.body); - } catch (error) { - dlpOverlayFailureCount += 1; - const existing = document.body.querySelector("[data-aw-ru-dlp-center='1']"); - if (existing && existing.parentElement) existing.parentElement.removeChild(existing); - } - } else if (!isDlpSignalBucketRoute()) { - injectDlpReviewCenter(document.body); - } + injectDlpReviewCenter(document.body); injectDlpAlertsCenter(document.body); injectHostGroupsCenter(document.body).catch(function () {}); redirectBareTrendsRoute(); @@ -1947,6 +2213,7 @@ }); window.addEventListener("hashchange", function () { redirectBareTrendsRoute(); + dlpOverlayFailureCount = 0; staticPatchRouteKey = ""; scheduleApplyPatch(); }); diff --git a/install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.py b/install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.py index 0423403..234b90c 100644 --- a/install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.py +++ b/install-kit-awindows-20260427-211240/aw-server/aw-rus-healthd.py @@ -229,14 +229,17 @@ def main() -> int: parser = argparse.ArgumentParser(description="Unified AW-RUS health orchestrator") parser.add_argument("--aw-server", default=env("AW_SERVER_URL", "http://127.0.0.1:5600")) - parser.add_argument("--worktime-api", default=env("AW_WORKTIME_REPORT_BASE", "http://127.0.0.1:5610")) + parser.add_argument( + "--worktime-api", + default=env("AW_RUS_HEALTH_WORKTIME_API", env("AW_WORKTIME_REPORT_BASE", "http://127.0.0.1:5610")), + ) parser.add_argument("--rdp-host", default=env("AW_MONITORED_WINDOWS_HOST", "192.168.100.18")) parser.add_argument("--rdp-hostname", default=env("AW_MONITORED_WINDOWS_HOSTNAME", "SHARKON2025")) parser.add_argument("--state-dir", default=env("AW_RUS_HEALTH_STATE_DIR", "/var/lib/activitywatch/health")) parser.add_argument("--validation-dir", default=env("AW_RUS_HEALTH_VALIDATION_DIR", "/var/lib/activitywatch/health/windows-validation")) parser.add_argument("--session-max-age-seconds", type=int, default=int(env("AW_RUS_HEALTH_SESSION_MAX_AGE_SECONDS", "900"))) parser.add_argument("--interactive-max-age-seconds", type=int, default=int(env("AW_RUS_HEALTH_INTERACTIVE_MAX_AGE_SECONDS", "900"))) - parser.add_argument("--session-events-max-age-seconds", type=int, default=int(env("AW_RUS_HEALTH_SESSION_EVENTS_MAX_AGE_SECONDS", "604800"))) + parser.add_argument("--session-events-max-age-seconds", type=int, default=int(env("AW_RUS_HEALTH_SESSION_EVENTS_MAX_AGE_SECONDS", "86400"))) parser.add_argument("--validation-max-age-seconds", type=int, default=int(env("AW_RUS_HEALTH_VALIDATION_MAX_AGE_SECONDS", "259200"))) parser.add_argument("--tcp-timeout-seconds", type=float, default=float(env("AW_RUS_HEALTH_TCP_TIMEOUT_SECONDS", "3"))) parser.add_argument("--json", action="store_true") @@ -257,9 +260,8 @@ def main() -> int: report.add("http:aw-server", "fail", f"activitywatch API failed: {exc}", url=f"{aw_api_base}/info") try: - payload = http_json(args.worktime_api.rstrip("/") + "/reports/worktime/today") - rows = len(payload) if isinstance(payload, list) else None - report.add("http:worktime-api", "ok", "worktime API responded", rows=rows) + payload = http_json(args.worktime_api.rstrip("/") + "/health") + report.add("http:worktime-api", "ok", "worktime API responded", payload=payload if isinstance(payload, dict) else {}) except Exception as exc: report.add("http:worktime-api", "fail", f"worktime API failed: {exc}", url=args.worktime_api) @@ -322,6 +324,9 @@ def main() -> int: missing_status="fail", stale_status="warn", ) + if session_status == "warn" and session_details.get("age_seconds") is not None: + session_status = "ok" + session_summary = f"event-driven ({session_details['age_seconds']}s since last logon marker)" report.add("bucket:session-events", session_status, session_summary, **session_details) validation_dir = Path(args.validation_dir) diff --git a/install-kit-awindows-20260427-211240/aw-server/aw-server.env.example b/install-kit-awindows-20260427-211240/aw-server/aw-server.env.example index 1d43206..58b1309 100755 --- a/install-kit-awindows-20260427-211240/aw-server/aw-server.env.example +++ b/install-kit-awindows-20260427-211240/aw-server/aw-server.env.example @@ -13,9 +13,17 @@ AW_SERVER_USER=activitywatch AW_SERVER_GROUP=activitywatch # Worktime API Configuration -AW_WORKTIME_REPORT_BASE=http://10.10.10.13:5610 +AW_SERVER_PUBLIC_HOST=aw-server +AW_WORKTIME_REPORT_BASE=http://aw-server:5610 AW_WORKTIME_TZ=Europe/Moscow AW_SERVER_URL=http://127.0.0.1:5600 +AW_DLP_AW_API_BASE=http://127.0.0.1:5600/api/0 +AW_WORKTIME_MANAGER_CACHE_TTL_SECONDS=300 +AW_WORKTIME_MANAGER_ALIASES_JSON=/etc/activitywatch/worktime-manager-aliases.json +AW_WORKTIME_MANAGER_EXCLUDE_USERS= +AW_WORKTIME_MANAGEMENT_WARM_ENABLED=1 +AW_WORKTIME_MANAGEMENT_WARM_URL=http://127.0.0.1:5610/reports/worktime/management?day=today&format=json +AW_WORKTIME_MANAGEMENT_WARM_TIMEOUT_SECONDS=70 # DLP IOC Configuration AW_DLP_IOC_DIR=/opt/activitywatch/dlp-ioc/output @@ -39,8 +47,18 @@ AW_EXPECT_LANDINGPAGE=/activity/SHARKON2025/view/ AW_HEALTH_STRICT_FILEOPS=0 AW_MONITORED_WINDOWS_HOST=192.168.100.18 AW_MONITORED_WINDOWS_HOSTNAME=SHARKON2025 +AW_RUS_HEALTH_WORKTIME_API=http://127.0.0.1:5610 AW_RUS_HEALTH_STATE_DIR=/var/lib/activitywatch/health AW_RUS_HEALTH_VALIDATION_DIR=/var/lib/activitywatch/health/windows-validation +AW_RUS_HEALTH_SESSION_EVENTS_MAX_AGE_SECONDS=86400 + +# Hayabusa auto-case / alerting +AW_HAYABUSA_AUTO_CASE_ENABLED=true +AW_HAYABUSA_AUTO_CASE_MIN_SEVERITY=medium +AW_HAYABUSA_TELEGRAM_ENABLED=true +AW_HAYABUSA_TELEGRAM_MIN_SEVERITY=high +AW_HAYABUSA_TELEGRAM_BOT_TOKEN= +AW_HAYABUSA_TELEGRAM_CHAT_IDS= # Integration Test Configuration AW_INTEGRATION_TEST_ENABLED=false diff --git a/install-kit-awindows-20260427-211240/aw-server/aw-worktime-api.py b/install-kit-awindows-20260427-211240/aw-server/aw-worktime-api.py index a1ad20b..f12324a 100644 --- a/install-kit-awindows-20260427-211240/aw-server/aw-worktime-api.py +++ b/install-kit-awindows-20260427-211240/aw-server/aw-worktime-api.py @@ -6,9 +6,11 @@ import importlib.util import json import os import sys +import tempfile +import threading import urllib.request from datetime import datetime, timezone, timedelta -from http.server import BaseHTTPRequestHandler, HTTPServer +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path from urllib.parse import parse_qs, urlencode, urlparse from zoneinfo import ZoneInfo @@ -30,7 +32,31 @@ DEFAULT_SAMPLE_SECONDS = max(1.0, float(os.environ.get("AW_WORKTIME_DEFAULT_SAMP MAX_SAMPLE_SECONDS = max(DEFAULT_SAMPLE_SECONDS, float(os.environ.get("AW_WORKTIME_MAX_SAMPLE_SECONDS", "300"))) LISTEN_HOST = os.environ.get("AW_WORKTIME_LISTEN_HOST", "0.0.0.0") LISTEN_PORT = int(os.environ.get("AW_WORKTIME_PORT", "5610")) +WORKDAY_START_HOUR = int(os.environ.get("AW_WORKTIME_MANAGER_START_HOUR", "9")) +WORKDAY_END_HOUR = int(os.environ.get("AW_WORKTIME_MANAGER_END_HOUR", "18")) +MANAGER_TARGET_COVERAGE_PCT = max(1, min(100, int(os.environ.get("AW_WORKTIME_MANAGER_TARGET_COVERAGE_PCT", "75")))) +MANAGER_LOW_COVERAGE_PCT = max(1, min(100, int(os.environ.get("AW_WORKTIME_MANAGER_LOW_COVERAGE_PCT", "35")))) +MANAGER_LATE_START_GRACE_MINUTES = max(0, int(os.environ.get("AW_WORKTIME_MANAGER_LATE_START_GRACE_MINUTES", "60"))) +MANAGER_EARLY_FINISH_GRACE_MINUTES = max(0, int(os.environ.get("AW_WORKTIME_MANAGER_EARLY_FINISH_GRACE_MINUTES", "90"))) +MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS = max(60, int(os.environ.get("AW_WORKTIME_MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS", "900"))) +MANAGER_WEB_SOURCE_MAX_AGE_SECONDS = max(3600, int(os.environ.get("AW_WORKTIME_MANAGER_WEB_SOURCE_MAX_AGE_SECONDS", "259200"))) +MANAGER_SESSION_SOURCE_MAX_AGE_SECONDS = max(3600, int(os.environ.get("AW_WORKTIME_MANAGER_SESSION_SOURCE_MAX_AGE_SECONDS", "604800"))) +MANAGER_INFRA_SOURCE_MAX_AGE_SECONDS = max(3600, int(os.environ.get("AW_WORKTIME_MANAGER_INFRA_SOURCE_MAX_AGE_SECONDS", "172800"))) +MANAGER_TREND_DAYS = max(3, min(31, int(os.environ.get("AW_WORKTIME_MANAGER_TREND_DAYS", "7")))) +MANAGER_CACHE_TTL_SECONDS = max(0, int(os.environ.get("AW_WORKTIME_MANAGER_CACHE_TTL_SECONDS", "300"))) +MANAGER_CACHE_DIR = Path(os.environ.get("AW_WORKTIME_MANAGER_CACHE_DIR", "/var/lib/activitywatch/worktime-cache")) +MANAGER_ALIASES_JSON = Path(os.environ.get("AW_WORKTIME_MANAGER_ALIASES_JSON", "/etc/activitywatch/worktime-manager-aliases.json")) +MANAGER_EXCLUDE_USERS = {item.strip().lower() for item in os.environ.get("AW_WORKTIME_MANAGER_EXCLUDE_USERS", "").split(",") if item.strip()} +EVENTS_CACHE_TTL_SECONDS = max(0, int(os.environ.get("AW_WORKTIME_EVENTS_CACHE_TTL_SECONDS", "30"))) +WORKTIME_EVENTS_LIMIT = max(1000, int(os.environ.get("AW_WORKTIME_EVENTS_LIMIT", "50000"))) +TRUE_ACTIVE_EVIDENCE_WINDOW_SECONDS = max(30, int(os.environ.get("AW_WORKTIME_TRUE_ACTIVE_EVIDENCE_WINDOW_SECONDS", "180"))) +TRUE_ACTIVE_MAX_EVENT_SECONDS = max(30, int(os.environ.get("AW_WORKTIME_TRUE_ACTIVE_MAX_EVENT_SECONDS", "600"))) MODULE_PATH = Path(__file__).resolve() +_ALIASES_CACHE = {"mtime": None, "users": {}, "owners": {}, "raw": {}} +_EVENTS_CACHE_LOCK = threading.Lock() +_EVENTS_CACHE = {} +_MANAGEMENT_BUILD_LOCKS_LOCK = threading.Lock() +_MANAGEMENT_BUILD_LOCKS = {} def get(u): @@ -50,11 +76,60 @@ def to_iso_utc(dt): return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") +def parse_iso_utc(value): + if not value: + return None + return pts(value) + + def hhmm(total_seconds): total_seconds = max(0, int(total_seconds)) return "%02d:%02d" % (total_seconds // 3600, (total_seconds % 3600) // 60) +def human_duration_ru(total_seconds): + total_seconds = max(0, int(total_seconds)) + hours = total_seconds // 3600 + minutes = (total_seconds % 3600) // 60 + if hours and minutes: + return f"{hours} ч {minutes} мин" + if hours: + return f"{hours} ч" + if minutes: + return f"{minutes} мин" + return f"{total_seconds} сек" + + +def now_utc(): + return datetime.now(timezone.utc) + + +def worktime_health_payload(): + return { + "ok": True, + "generated_at_utc": now_utc().isoformat().replace("+00:00", "Z"), + "report_timezone": str(REPORT_TZ), + "default_host": DEFAULT_HOST, + "aw_api_base": AW, + } + + +def age_seconds(ts, now=None): + if ts is None: + return None + ref = now or now_utc() + return max(0, int((ref - ts).total_seconds())) + + +def write_atomic_json(path, payload): + path.parent.mkdir(parents=True, exist_ok=True) + with tempfile.NamedTemporaryFile("w", encoding="utf-8", dir=path.parent, delete=False) as handle: + json.dump(payload, handle, ensure_ascii=False, indent=2) + handle.write("\n") + tmp_name = handle.name + os.replace(tmp_name, path) + + def safe_slug(value): text = str(value or "").strip().lower() slug = [] @@ -69,6 +144,137 @@ def safe_slug(value): return normalized or "user" +def _normalize_identity_key(value): + return str(value or "").strip().lower() + + +def _default_display_name(user, user_id): + base = str(user_id or user or "").strip() + if "\\" in base: + base = base.split("\\", 1)[1] + if not base: + base = str(user or "").strip() + if base and base.isascii() and base.lower() == base and any(ch.isalpha() for ch in base): + return base.upper() + return base or str(user or "").strip() + + +def _load_manager_directory(): + try: + stat = MANAGER_ALIASES_JSON.stat() + except FileNotFoundError: + _ALIASES_CACHE["mtime"] = None + _ALIASES_CACHE["users"] = {} + _ALIASES_CACHE["owners"] = {} + _ALIASES_CACHE["raw"] = {} + return {"users": {}, "owners": {}, "raw": {}} + mtime = stat.st_mtime + if _ALIASES_CACHE["mtime"] == mtime: + return { + "users": _ALIASES_CACHE["users"], + "owners": _ALIASES_CACHE["owners"], + "raw": _ALIASES_CACHE["raw"], + } + try: + raw = json.loads(MANAGER_ALIASES_JSON.read_text(encoding="utf-8")) + except Exception as exc: + log_warning(f"failed to load manager aliases from {MANAGER_ALIASES_JSON}: {exc}") + raw = {} + users_payload = {} + owners_payload = {} + if isinstance(raw, dict): + users = raw.get("users", raw) + if isinstance(users, dict): + for key, value in users.items(): + norm_key = _normalize_identity_key(key) + if not norm_key: + continue + if isinstance(value, str): + users_payload[norm_key] = {"display_name": value} + elif isinstance(value, dict): + users_payload[norm_key] = dict(value) + owners = raw.get("owners", {}) + if isinstance(owners, dict): + for key, value in owners.items(): + norm_key = _normalize_identity_key(key) + if not norm_key: + continue + if isinstance(value, str): + owners_payload[norm_key] = {"display_name": value} + elif isinstance(value, dict): + owners_payload[norm_key] = dict(value) + _ALIASES_CACHE["mtime"] = mtime + _ALIASES_CACHE["users"] = users_payload + _ALIASES_CACHE["owners"] = owners_payload + _ALIASES_CACHE["raw"] = raw if isinstance(raw, dict) else {} + return { + "users": users_payload, + "owners": owners_payload, + "raw": _ALIASES_CACHE["raw"], + } + + +def load_manager_aliases(): + return _load_manager_directory()["users"] + + +def load_manager_owners(): + return _load_manager_directory()["owners"] + + +def resolve_user_alias(user, user_id, host): + aliases = load_manager_aliases() + candidates = [ + _normalize_identity_key(user_id), + _normalize_identity_key(f"{resolve_host(host)}\\{user}"), + _normalize_identity_key(user), + ] + alias = {} + for candidate in candidates: + if candidate and candidate in aliases: + alias = dict(aliases[candidate]) + break + display_name = str(alias.get("display_name") or alias.get("name") or _default_display_name(user, user_id)).strip() + manager_owner = str(alias.get("manager") or alias.get("owner") or display_name).strip() or display_name + department = str(alias.get("department") or "").strip() + role = str(alias.get("role") or "").strip() + notes = str(alias.get("notes") or "").strip() + canonical_user_id = str(alias.get("canonical_user_id") or user_id or "").strip() + exclude = bool(alias.get("exclude")) or _normalize_identity_key(user) in MANAGER_EXCLUDE_USERS or _normalize_identity_key(display_name) in MANAGER_EXCLUDE_USERS + return { + "display_name": display_name, + "manager_owner": manager_owner, + "department": department, + "role": role, + "notes": notes, + "canonical_user_id": canonical_user_id, + "exclude": exclude, + } + + +def resolve_owner_profile(owner_name): + owner_name = normalize_management_filter(owner_name) + if not owner_name: + owner_name = "unassigned" + owners = load_manager_owners() + profile = dict(owners.get(_normalize_identity_key(owner_name), {})) + display_name = str(profile.get("display_name") or profile.get("name") or owner_name).strip() or owner_name + title = str(profile.get("title") or profile.get("role") or "").strip() + department = str(profile.get("department") or "").strip() + escalation_to = str(profile.get("escalation_to") or profile.get("escalate_to") or "").strip() + contact = str(profile.get("contact") or profile.get("telegram") or profile.get("email") or "").strip() + notes = str(profile.get("notes") or "").strip() + return { + "owner_name": owner_name, + "display_name": display_name, + "title": title, + "department": department, + "escalation_to": escalation_to, + "contact": contact, + "notes": notes, + } + + def clamp_seconds(value, fallback=DEFAULT_SAMPLE_SECONDS): try: seconds = float(value) @@ -90,6 +296,16 @@ def get_sessions_bucket_id(host): return f"aw-worktime-sessions_{resolve_host(host)}" +def get_management_build_lock(host, report_date): + key = (resolve_host(host), report_date.isoformat()) + with _MANAGEMENT_BUILD_LOCKS_LOCK: + lock = _MANAGEMENT_BUILD_LOCKS.get(key) + if lock is None: + lock = threading.Lock() + _MANAGEMENT_BUILD_LOCKS[key] = lock + return lock + + def resolve_report_date(day=None, date_text=None): now_local = datetime.now(REPORT_TZ) if date_text: @@ -114,6 +330,18 @@ def get_report_bounds(report_date): } +def get_workday_bounds(report_date): + start_local = datetime(report_date.year, report_date.month, report_date.day, WORKDAY_START_HOUR, 0, 0, tzinfo=REPORT_TZ) + end_local = datetime(report_date.year, report_date.month, report_date.day, WORKDAY_END_HOUR, 0, 0, tzinfo=REPORT_TZ) + if end_local <= start_local: + end_local = start_local + timedelta(hours=8) + return { + "start_local": start_local, + "end_local": end_local, + "duration_seconds": int((end_local - start_local).total_seconds()), + } + + def _is_machine_user(user: str): u = (user or "").strip().lower() return u.endswith("$") or u in {"system", "localservice", "networkservice"} @@ -184,6 +412,246 @@ def _merge_intervals(intervals): return merged +def _overlap_interval(left, right): + start = max(left[0], right[0]) + end = min(left[1], right[1]) + if end <= start: + return None + return start, end + + +def _interval_contains(interval, ts): + return interval[0] <= ts < interval[1] + + +def _event_timestamp(event): + try: + return pts(event.get("timestamp")) + except Exception: + return None + + +def _event_duration_seconds(event, default_seconds=DEFAULT_SAMPLE_SECONDS): + try: + duration = float(event.get("duration") or 0.0) + except Exception: + duration = 0.0 + if duration <= 0: + duration = default_seconds + return max(1.0, min(float(TRUE_ACTIVE_MAX_EVENT_SECONDS), duration)) + + +def _normalize_app_name(app, title=""): + app_raw = str(app or "").strip() + app_l = app_raw.lower() + title_raw = str(title or "").strip() + if app_l.startswith(("1cv8", "1cestart")): + return "1С" + if app_l in {"chrome.exe", "google chrome"} or "google chrome" in title_raw.lower(): + return "Chrome" + if app_l in {"msedge.exe", "microsoft edge"} or "microsoft edge" in title_raw.lower(): + return "Edge" + if app_l in {"browser.exe", "browser"} or "яндекс" in title_raw.lower(): + return "Яндекс Браузер" + if app_l in {"excel.exe"}: + return "Excel" + if app_l in {"winword.exe"}: + return "Word" + if app_l in {"powerpnt.exe"}: + return "PowerPoint" + if app_l in {"outlook.exe"}: + return "Outlook" + if app_l in {"explorer.exe"}: + return "Проводник" + if app_l in {"totalcmd.exe", "totalcmd64.exe"}: + return "Total Commander" + if app_l in {"cmd.exe"}: + return "Command Prompt" + if app_l in {"powershell.exe", "pwsh.exe"}: + return "PowerShell" + if app_l in {"acrord32.exe", "acrobat.exe"}: + return "Adobe Acrobat Reader" + if app_l in {"windowsterminal.exe", "windowsterminal"}: + return "Windows Terminal" + if app_raw: + return app_raw[:-4] if app_l.endswith(".exe") else app_raw + if title_raw: + return title_raw + return "Неизвестное приложение" + + +def _event_context(event): + data = event.get("data") or {} + for key in ("title", "url", "path", "filePath", "targetPath", "windowTitle", "foregroundTitle", "signalType"): + value = str(data.get(key) or "").strip() + if value: + return value + return "активность" + + +def _is_not_afk_event(event): + data = event.get("data") or {} + status = str(data.get("status") or data.get("state") or "").strip().lower() + return status in {"not-afk", "not_afk", "active", "активно"} + + +def _is_real_evidence_event(event): + data = event.get("data") or {} + signal_type = str(data.get("signalType") or data.get("type") or "").strip().lower() + if signal_type in {"collector_health", "self_test", "heartbeat", "health"}: + return False + if data.get("url") or data.get("title") or data.get("path") or data.get("filePath") or data.get("targetPath"): + return True + if signal_type: + return True + return False + + +def _events_for_bounds(events, start, end): + result = [] + for event in events: + ts = _event_timestamp(event) + if ts is None or ts < start or ts > end: + continue + result.append((ts, event)) + result.sort(key=lambda item: item[0]) + return result + + +def _build_window_intervals(window_events, start, end): + intervals = [] + previous_key = None + for ts, event in _events_for_bounds(window_events, start, end): + data = event.get("data") or {} + app = str(data.get("app") or data.get("process") or data.get("processName") or "").strip() + title = str(data.get("title") or data.get("windowTitle") or "").strip() + if not app and not title: + continue + duration = _event_duration_seconds(event, default_seconds=DEFAULT_SAMPLE_SECONDS) + interval = (max(ts, start), min(ts + timedelta(seconds=duration), end + timedelta(seconds=1))) + if interval[1] <= interval[0]: + continue + app_name = _normalize_app_name(app, title) + current_key = (app_name, title) + title_changed = previous_key is not None and current_key != previous_key + previous_key = current_key + intervals.append( + { + "app": app_name, + "raw_app": app, + "title": title, + "start": interval[0], + "end": interval[1], + "title_changed": title_changed, + "timestamp": ts, + } + ) + return intervals + + +def _build_not_afk_intervals(afk_events, start, end): + intervals = [] + for ts, event in _events_for_bounds(afk_events, start, end): + if not _is_not_afk_event(event): + continue + duration = _event_duration_seconds(event, default_seconds=5) + interval = (max(ts, start), min(ts + timedelta(seconds=duration), end + timedelta(seconds=1))) + if interval[1] > interval[0]: + intervals.append(interval) + return _merge_intervals(intervals) + + +def _find_window_at(window_intervals, ts): + for item in window_intervals: + if item["start"] <= ts < item["end"]: + return item + return None + + +def _add_app_evidence(evidence_by_app, app, ts, context): + evidence_by_app.setdefault(app, []).append((ts, str(context or "").strip() or "активность")) + + +def build_true_active_apps_from_events(window_events, afk_events, evidence_events_by_bucket, start, end): + window_intervals = _build_window_intervals(window_events, start, end) + not_afk_intervals = _build_not_afk_intervals(afk_events, start, end) + evidence_by_app = {} + + for item in window_intervals: + if item["title_changed"]: + _add_app_evidence(evidence_by_app, item["app"], item["timestamp"], item["title"] or item["raw_app"]) + + for events in evidence_events_by_bucket.values(): + for ts, event in _events_for_bounds(events, start, end): + if not _is_real_evidence_event(event): + continue + window = _find_window_at(window_intervals, ts) + if window is None: + continue + _add_app_evidence(evidence_by_app, window["app"], ts, _event_context(event)) + + rows = [] + evidence_delta = timedelta(seconds=TRUE_ACTIVE_EVIDENCE_WINDOW_SECONDS) + for app in sorted({item["app"] for item in window_intervals} | set(evidence_by_app)): + app_evidence = sorted(evidence_by_app.get(app, []), key=lambda item: item[0]) + if not app_evidence: + continue + evidence_windows = _merge_intervals([(ts - evidence_delta, ts + evidence_delta) for ts, _context in app_evidence]) + proved_intervals = [] + for window in [item for item in window_intervals if item["app"] == app]: + base = (window["start"], window["end"]) + for afk_interval in not_afk_intervals: + active_overlap = _overlap_interval(base, afk_interval) + if active_overlap is None: + continue + for evidence_interval in evidence_windows: + proved = _overlap_interval(active_overlap, evidence_interval) + if proved is not None: + proved_intervals.append(proved) + proved_intervals = _merge_intervals(proved_intervals) + proved_seconds = int(sum((right - left).total_seconds() for left, right in proved_intervals)) + if proved_seconds <= 0: + continue + last_ts, last_context = app_evidence[-1] + rows.append( + { + "application": app, + "proved_work_seconds": proved_seconds, + "proved_work_hhmm": hhmm(proved_seconds), + "proved_work_human": human_duration_ru(proved_seconds), + "last_action_utc": to_iso_utc(last_ts), + "last_action_local": last_ts.astimezone(REPORT_TZ).strftime("%H:%M"), + "last_action": last_context, + "evidence_events": len(app_evidence), + } + ) + rows.sort(key=lambda item: (-item["proved_work_seconds"], item["application"].lower())) + return rows + + +def build_true_active_apps(host, report_date): + bounds = get_report_bounds(report_date) + host = resolve_host(host) + window_events = fetch_bucket_events(f"aw-watcher-window_{host}", host) or fetch_bucket_events(f"aw-rdp-window_{host}", host) + afk_events = fetch_bucket_events(f"aw-watcher-afk_{host}", host) or fetch_bucket_events(f"aw-rdp-afk_{host}", host) + evidence_events_by_bucket = {} + for bucket_id in ( + f"aw-file-operations_{host}", + f"aw-dlp-endpoint-signals_{host}", + f"aw-watcher-web-chrome_{host}", + f"aw-watcher-web-edge_{host}", + f"aw-detmir-web-category_{host}", + ): + evidence_events_by_bucket[bucket_id] = fetch_bucket_events(bucket_id, host) + return build_true_active_apps_from_events( + window_events, + afk_events, + evidence_events_by_bucket, + bounds["start"], + bounds["end"], + ) + + def _collect_user_rows(events, start, end, host): end_exclusive = end + timedelta(seconds=1) by_user = {} @@ -236,6 +704,15 @@ def _collect_user_rows(events, start, end, host): def aggregate_rows(events, start, end, host): by_user = _collect_user_rows(events, start, end, host) + return _build_rows_from_user_map(by_user, start, end, include_intervals=False) + + +def aggregate_rows_with_intervals(events, start, end, host): + by_user = _collect_user_rows(events, start, end, host) + return _build_rows_from_user_map(by_user, start, end, include_intervals=True) + + +def _build_rows_from_user_map(by_user, start, end, include_intervals): rows = [] full_range = int((end - start).total_seconds()) + 1 for username in sorted(by_user): @@ -259,6 +736,8 @@ def aggregate_rows(events, start, end, host): "active_samples": row["active_samples"], } ) + if include_intervals: + rows[-1]["_intervals"] = merged return rows @@ -305,17 +784,31 @@ def aggregate_hourly_rows(events, start, end, host): def fetch_events_for_date(host, report_date): bounds = get_report_bounds(report_date) bucket_id = get_sessions_bucket_id(host) + events = fetch_bucket_events(bucket_id, host) + return bounds, events + + +def fetch_bucket_events(bucket_id, host): + now = now_utc() + if EVENTS_CACHE_TTL_SECONDS > 0: + with _EVENTS_CACHE_LOCK: + cached = _EVENTS_CACHE.get(bucket_id) + if cached is not None and age_seconds(cached["stored_at"], now=now) <= EVENTS_CACHE_TTL_SECONDS: + return cached["events"] try: get(f"{AW}/buckets/{bucket_id}") except Exception: log_warning(f"bucket lookup failed for host={host} bucket={bucket_id} aw_base={AW}") - return bounds, [] + return [] try: - events = get(f"{AW}/buckets/{bucket_id}/events?limit=50000") + events = get(f"{AW}/buckets/{bucket_id}/events?limit={WORKTIME_EVENTS_LIMIT}") except Exception: log_warning(f"events fetch failed for host={host} bucket={bucket_id} aw_base={AW}") - return bounds, [] - return bounds, events + return [] + if EVENTS_CACHE_TTL_SECONDS > 0: + with _EVENTS_CACHE_LOCK: + _EVENTS_CACHE[bucket_id] = {"stored_at": now, "events": events} + return events def build_report_summary(rows): @@ -345,11 +838,949 @@ def build_report_summary(rows): } +def latest_bucket_event(bucket_id): + try: + events = get(f"{AW}/buckets/{bucket_id}/events?limit=20") + except Exception: + return None + if not isinstance(events, list) or not events: + return None + valid = [item for item in events if isinstance(item, dict)] + if not valid: + return None + valid.sort(key=lambda item: item.get("timestamp") or "", reverse=True) + return valid[0] + + +def _priority_rank(priority): + return {"critical": 0, "high": 1, "medium": 2, "low": 3}.get(priority, 9) + + +def _clamp_pct(value): + return round(min(100.0, max(0.0, float(value))), 2) + + +def _action(action_id, priority, owner, deadline_hint, reason, recommended_action, *, user_id="", evidence=None): + return { + "action_id": action_id, + "priority": priority, + "owner": owner, + "user_id": user_id, + "deadline_hint": deadline_hint, + "reason": reason, + "recommended_action": recommended_action, + "evidence": evidence or {}, + } + + +def build_executive_summary(summary, actions, sources): + critical = [action for action in actions if action.get("priority") == "critical"] + high = [action for action in actions if action.get("priority") == "high"] + stale_sources = [source for source in sources if source.get("status") != "ok"] + if critical: + portfolio_state = "critical" + headline = f"Есть {len(critical)} критичных вопроса, требующих решения сегодня." + elif high: + portfolio_state = "attention" + headline = f"Критичных провалов нет, но есть {len(high)} вопроса повышенного внимания." + elif summary.get("portfolio_coverage_pct", 0.0) < MANAGER_TARGET_COVERAGE_PCT: + portfolio_state = "attention" + headline = "Покрытие ниже целевого порога, но явных критичных кейсов не найдено." + else: + portfolio_state = "stable" + headline = "Критичных отклонений не найдено, рабочий день идёт в пределах нормы." + + message_parts = [ + f"Активны {summary.get('active_users', 0)} из {summary.get('users_count', 0)} сотрудников.", + f"Покрытие рабочего окна {summary.get('portfolio_coverage_pct', 0.0)}%.", + ] + if stale_sources: + message_parts.append(f"Есть {len(stale_sources)} проблем(ы) со свежестью источников.") + message = " ".join(message_parts) + + focus_items = [] + for action in actions[:5]: + focus_items.append( + { + "priority": action["priority"], + "owner": action["owner"], + "title": action["action_id"], + "reason": action["reason"], + "recommended_action": action["recommended_action"], + } + ) + stale_items = [] + for source in stale_sources[:3]: + stale_items.append( + { + "source_id": source["source_id"], + "label": source["label"], + "status": source["status_label"], + "summary": source["summary"], + } + ) + return { + "portfolio_state": portfolio_state, + "headline": headline, + "message": message, + "focus_items": focus_items, + "stale_sources": stale_items, + } + + +def _empty_rollup(name): + return { + "name": name or "unassigned", + "users_count": 0, + "active_users": 0, + "inactive_users": 0, + "below_target_users": 0, + "workday_total_active_seconds": 0, + "workday_total_active_hhmm": "00:00", + "portfolio_coverage_pct": 0.0, + "actions_count": 0, + "critical_actions_count": 0, + "high_actions_count": 0, + "medium_actions_count": 0, + "low_actions_count": 0, + "users": [], + } + + +def normalize_management_filter(value): + if value is None: + return "" + return " ".join(str(value).split()).strip() + + +def _filter_key(value): + return normalize_management_filter(value).casefold() + + +def _matches_management_filters(alias, owner_filter="", department_filter=""): + if owner_filter and _filter_key(alias.get("manager_owner")) != _filter_key(owner_filter): + return False + if department_filter and _filter_key(alias.get("department")) != _filter_key(department_filter): + return False + return True + + +def _action_department(action): + evidence = action.get("evidence") or {} + department = normalize_management_filter(evidence.get("department")) + if department: + return department + if normalize_management_filter(action.get("owner")) == "ops": + return "Инфраструктура" + return "" + + +def filter_management_actions(actions, rows, owner_filter="", department_filter=""): + owner_filter = normalize_management_filter(owner_filter) + department_filter = normalize_management_filter(department_filter) + if not owner_filter and not department_filter: + return list(actions) + row_user_ids = { + normalize_management_filter(row.get("canonical_user_id") or row.get("user_id")) + for row in rows + if normalize_management_filter(row.get("canonical_user_id") or row.get("user_id")) + } + filtered = [] + for action in actions: + if owner_filter and _filter_key(action.get("owner")) != _filter_key(owner_filter): + continue + if department_filter: + action_department = _action_department(action) + if action_department: + if _filter_key(action_department) != _filter_key(department_filter): + continue + else: + user_id = normalize_management_filter(action.get("user_id")) + if not user_id or user_id not in row_user_ids: + continue + filtered.append(action) + return filtered + + +def _row_matches_payload_filters(row, owner_filter="", department_filter=""): + if owner_filter and _filter_key(row.get("manager_owner")) != _filter_key(owner_filter): + return False + if department_filter and _filter_key(row.get("department")) != _filter_key(department_filter): + return False + return True + + +def summarize_management_rows(rows, actions, workday): + expected_seconds_per_user = int(workday.get("expected_seconds_per_user", 0) or 0) + workday_total_active_seconds = sum(int(row.get("workday_active_seconds", 0) or 0) for row in rows) + calendar_total_active_seconds = sum(int(row.get("calendar_active_seconds", 0) or 0) for row in rows) + active_users = sum(1 for row in rows if row.get("status") != "inactive") + inactive_users = sum(1 for row in rows if row.get("status") == "inactive") + below_target_users = sum(1 for row in rows if row.get("status") == "below_target") + on_target_users = sum(1 for row in rows if row.get("status") == "ok") + workday_first_values = sorted(str(row.get("workday_first_activity_local") or "") for row in rows if row.get("workday_first_activity_local")) + workday_last_values = sorted(str(row.get("workday_last_activity_local") or "") for row in rows if row.get("workday_last_activity_local")) + calendar_first_values = sorted(str(row.get("first_activity_local") or "") for row in rows if row.get("first_activity_local")) + calendar_last_values = sorted(str(row.get("last_activity_local") or "") for row in rows if row.get("last_activity_local")) + top_row = max(rows, key=lambda row: int(row.get("workday_active_seconds", 0) or 0), default=None) + portfolio_coverage_pct = _clamp_pct((workday_total_active_seconds / (expected_seconds_per_user * len(rows))) * 100.0) if rows and expected_seconds_per_user > 0 else 0.0 + return { + "users_count": len(rows), + "active_users": active_users, + "inactive_users": inactive_users, + "on_target_users": on_target_users, + "below_target_users": below_target_users, + "portfolio_coverage_pct": portfolio_coverage_pct, + "actions_count": len(actions), + "critical_actions_count": sum(1 for action in actions if action.get("priority") == "critical"), + "high_actions_count": sum(1 for action in actions if action.get("priority") == "high"), + "calendar_total_active_seconds": calendar_total_active_seconds, + "calendar_total_active_hhmm": hhmm(calendar_total_active_seconds), + "calendar_first_activity": calendar_first_values[0] if calendar_first_values else "", + "calendar_last_activity": calendar_last_values[-1] if calendar_last_values else "", + "workday_total_active_seconds": workday_total_active_seconds, + "workday_total_active_hhmm": hhmm(workday_total_active_seconds), + "workday_first_activity": workday_first_values[0] if workday_first_values else "", + "workday_last_activity": workday_last_values[-1] if workday_last_values else "", + "total_active_seconds": workday_total_active_seconds, + "total_active_hhmm": hhmm(workday_total_active_seconds), + "first_activity": workday_first_values[0] if workday_first_values else "", + "last_activity": workday_last_values[-1] if workday_last_values else "", + "top_user": str((top_row or {}).get("user") or ""), + "top_user_active_hhmm": hhmm(int((top_row or {}).get("workday_active_seconds", 0) or 0)), + } + + +def apply_management_filters_to_payload(payload, owner_filter="", department_filter="", include_sources=True, include_source_actions=True): + owner_filter = normalize_management_filter(owner_filter) + department_filter = normalize_management_filter(department_filter) + filtered_rows = [ + dict(row) + for row in payload.get("rows", []) + if _row_matches_payload_filters(row, owner_filter=owner_filter, department_filter=department_filter) + ] + base_actions = list(payload.get("actions", [])) + if not include_source_actions: + base_actions = [action for action in base_actions if action.get("action_id") != "source_freshness_review"] + filtered_actions = filter_management_actions(base_actions, filtered_rows, owner_filter=owner_filter, department_filter=department_filter) + filtered_payload = dict(payload) + filtered_payload["filters"] = { + "owner": owner_filter, + "department": department_filter, + } + filtered_payload["rows"] = filtered_rows + filtered_payload["actions"] = filtered_actions + filtered_payload["summary"] = summarize_management_rows(filtered_rows, filtered_actions, payload.get("workday") or {}) + filtered_payload["owner_rollups"] = build_owner_rollups(filtered_rows, filtered_actions) + filtered_payload["department_rollups"] = build_department_rollups(filtered_rows, filtered_actions) + filtered_payload["owner_roster"] = build_owner_roster(filtered_rows, filtered_actions) + if include_sources: + filtered_payload["sources"] = list(payload.get("sources", [])) + else: + filtered_payload["sources"] = [] + filtered_payload["executive"] = build_executive_summary(filtered_payload["summary"], filtered_actions, filtered_payload["sources"]) + return filtered_payload + + +def build_owner_rollups(rows, actions): + groups = {} + for row in rows: + owner = str(row.get("manager_owner") or row.get("user") or "unassigned").strip() or "unassigned" + group = groups.setdefault(owner, _empty_rollup(owner)) + group["users_count"] += 1 + if row.get("status") == "inactive": + group["inactive_users"] += 1 + else: + group["active_users"] += 1 + if row.get("status") == "below_target": + group["below_target_users"] += 1 + group["workday_total_active_seconds"] += int(row.get("workday_active_seconds", 0) or 0) + group["users"].append(row.get("user", "unknown")) + + for action in actions: + owner = str(action.get("owner") or "unassigned").strip() or "unassigned" + group = groups.setdefault(owner, _empty_rollup(owner)) + group["actions_count"] += 1 + prio = str(action.get("priority") or "").lower() + if prio == "critical": + group["critical_actions_count"] += 1 + elif prio == "high": + group["high_actions_count"] += 1 + elif prio == "medium": + group["medium_actions_count"] += 1 + elif prio == "low": + group["low_actions_count"] += 1 + + for group in groups.values(): + expected = group["users_count"] * max(1, WORKDAY_END_HOUR - WORKDAY_START_HOUR) * 3600 + group["workday_total_active_hhmm"] = hhmm(group["workday_total_active_seconds"]) + group["portfolio_coverage_pct"] = _clamp_pct((group["workday_total_active_seconds"] / expected) * 100.0) if expected > 0 else 0.0 + group["users"] = sorted(set(str(user or "").strip() for user in group["users"] if str(user or "").strip())) + + return sorted( + groups.values(), + key=lambda item: ( + -item["critical_actions_count"], + -item["high_actions_count"], + -item["inactive_users"], + item["name"].lower(), + ), + ) + + +def build_department_rollups(rows, actions): + groups = {} + for row in rows: + department = str(row.get("department") or "Без подразделения").strip() or "Без подразделения" + group = groups.setdefault(department, _empty_rollup(department)) + group["users_count"] += 1 + if row.get("status") == "inactive": + group["inactive_users"] += 1 + else: + group["active_users"] += 1 + if row.get("status") == "below_target": + group["below_target_users"] += 1 + group["workday_total_active_seconds"] += int(row.get("workday_active_seconds", 0) or 0) + group["users"].append(row.get("user", "unknown")) + + for action in actions: + evidence = action.get("evidence") or {} + department = str(evidence.get("department") or ("Инфраструктура" if str(action.get("owner") or "").strip().lower() == "ops" else "Без подразделения")).strip() + group = groups.setdefault(department, _empty_rollup(department)) + group["actions_count"] += 1 + prio = str(action.get("priority") or "").lower() + if prio == "critical": + group["critical_actions_count"] += 1 + elif prio == "high": + group["high_actions_count"] += 1 + elif prio == "medium": + group["medium_actions_count"] += 1 + elif prio == "low": + group["low_actions_count"] += 1 + + for group in groups.values(): + expected = group["users_count"] * max(1, WORKDAY_END_HOUR - WORKDAY_START_HOUR) * 3600 + group["workday_total_active_hhmm"] = hhmm(group["workday_total_active_seconds"]) + group["portfolio_coverage_pct"] = _clamp_pct((group["workday_total_active_seconds"] / expected) * 100.0) if expected > 0 else 0.0 + group["users"] = sorted(set(str(user or "").strip() for user in group["users"] if str(user or "").strip())) + + return sorted( + groups.values(), + key=lambda item: ( + -item["critical_actions_count"], + -item["high_actions_count"], + -item["inactive_users"], + item["name"].lower(), + ), + ) + + +def build_owner_roster(rows, actions): + owner_rollups = build_owner_rollups(rows, actions) + roster = [] + for item in owner_rollups: + profile = resolve_owner_profile(item["name"]) + roster.append( + { + **item, + "display_name": profile["display_name"], + "title": profile["title"], + "department": profile["department"], + "contact": profile["contact"], + "escalation_to": profile["escalation_to"], + "notes": profile["notes"], + } + ) + return roster + + +def _interval_overlap_seconds(intervals, start, end): + total = 0 + first = None + last = None + for interval_start, interval_end in intervals or []: + overlap_start = max(interval_start, start) + overlap_end = min(interval_end, end) + if overlap_end <= overlap_start: + continue + seconds = int((overlap_end - overlap_start).total_seconds()) + if seconds <= 0: + continue + total += seconds + if first is None or overlap_start < first: + first = overlap_start + if last is None or overlap_end > last: + last = overlap_end + return total, first, last + + +def _source_status_label(status): + return { + "ok": "fresh", + "warn": "stale", + "fail": "missing", + }.get(status, status) + + +def _source_summary(event): + data = (event or {}).get("data") or {} + signal_type = str(data.get("signalType") or "").strip() + if signal_type == "collector_health": + return ( + f"queue={data.get('queueDepth', 0)} " + f"failures={data.get('sendFailures', 0)} " + f"flushed={data.get('eventsFlushed', 0)}" + ) + if data.get("domain"): + return f"{data.get('domain')} ({data.get('category', 'uncategorized')})" + if data.get("eventType"): + return f"{data.get('eventType')} {data.get('username', '')}".strip() + if data.get("action"): + return f"{data.get('action')} {data.get('result', '')}".strip() + if data.get("title"): + return str(data.get("title"))[:120] + if data.get("status"): + return str(data.get("status")) + if data.get("app"): + return str(data.get("app")) + return "" + + +def management_cache_path(host, report_date): + host_slug = safe_slug(host) + return MANAGER_CACHE_DIR / f"{host_slug}-{report_date.isoformat()}.json" + + +def load_management_cache(host, report_date): + if MANAGER_CACHE_TTL_SECONDS <= 0: + return None + path = management_cache_path(host, report_date) + if not path.exists(): + return None + if report_date >= datetime.now(REPORT_TZ).date(): + age = age_seconds(datetime.fromtimestamp(path.stat().st_mtime, tz=timezone.utc)) + if age is None or age > MANAGER_CACHE_TTL_SECONDS: + return None + try: + return json.loads(path.read_text(encoding="utf-8")) + except Exception: + return None + + +def save_management_cache(host, report_date, payload): + if MANAGER_CACHE_TTL_SECONDS <= 0: + return + write_atomic_json(management_cache_path(host, report_date), payload) + + +def build_source_freshness(host): + source_specs = [ + { + "source_id": "worktime_sessions", + "label": "RDP worktime sessions", + "bucket_candidates": [f"aw-worktime-sessions_{host}"], + "max_age_seconds": MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS, + "required": True, + "owner": "ops", + }, + { + "source_id": "rdp_window", + "label": "RDP current window", + "bucket_candidates": [f"aw-rdp-window_{host}"], + "max_age_seconds": MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS, + "required": True, + "owner": "ops", + }, + { + "source_id": "rdp_afk", + "label": "RDP AFK", + "bucket_candidates": [f"aw-rdp-afk_{host}"], + "max_age_seconds": MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS, + "required": True, + "owner": "ops", + }, + { + "source_id": "watcher_window", + "label": "Local watcher window", + "bucket_candidates": [f"aw-watcher-window_{host}"], + "max_age_seconds": MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS, + "required": True, + "owner": "ops", + }, + { + "source_id": "watcher_afk", + "label": "Local watcher AFK", + "bucket_candidates": [f"aw-watcher-afk_{host}"], + "max_age_seconds": MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS, + "required": True, + "owner": "ops", + }, + { + "source_id": "file_operations", + "label": "File operations collector", + "bucket_candidates": [f"aw-file-operations_{host}"], + "max_age_seconds": MANAGER_CRITICAL_SOURCE_MAX_AGE_SECONDS, + "required": True, + "owner": "ops", + }, + { + "source_id": "web_categories", + "label": "Browser/web categories", + "bucket_candidates": [f"aw-detmir-web-category_{host}"], + "max_age_seconds": MANAGER_WEB_SOURCE_MAX_AGE_SECONDS, + "required": False, + "owner": "ops", + }, + { + "source_id": "session_events", + "label": "Windows session events", + "bucket_candidates": [f"aw-session-events_{host}"], + "max_age_seconds": MANAGER_SESSION_SOURCE_MAX_AGE_SECONDS, + "required": False, + "owner": "ops", + }, + { + "source_id": "pve_tasks", + "label": "PVE task feed", + "bucket_candidates": ["aw-pve-task-events_pve-detmir"], + "max_age_seconds": MANAGER_INFRA_SOURCE_MAX_AGE_SECONDS, + "required": False, + "owner": "ops", + }, + ] + now = now_utc() + sources = [] + actions = [] + for spec in source_specs: + matched_bucket = "" + matched_event = None + matched_age = None + for candidate in spec["bucket_candidates"]: + event = latest_bucket_event(candidate) + if not event: + continue + ts = parse_iso_utc(event.get("timestamp")) + candidate_age = age_seconds(ts, now=now) + if matched_event is None or (candidate_age is not None and (matched_age is None or candidate_age < matched_age)): + matched_bucket = candidate + matched_event = event + matched_age = candidate_age + ts = parse_iso_utc((matched_event or {}).get("timestamp")) + age = matched_age if matched_event is not None else age_seconds(ts, now=now) + if matched_event is None: + status = "fail" if spec["required"] else "warn" + summary = "bucket missing or empty" + elif age is None: + status = "warn" + summary = "timestamp parse failed" + elif age > spec["max_age_seconds"]: + status = "fail" if spec["required"] else "warn" + summary = f"stale ({age}s)" + else: + status = "ok" + summary = f"fresh ({age}s)" + detail = { + "source_id": spec["source_id"], + "label": spec["label"], + "status": status, + "status_label": _source_status_label(status), + "bucket_id": matched_bucket or spec["bucket_candidates"][0], + "timestamp": (matched_event or {}).get("timestamp", ""), + "age_seconds": age, + "required": spec["required"], + "max_age_seconds": spec["max_age_seconds"], + "summary": summary, + "event_summary": _source_summary(matched_event), + } + sources.append(detail) + if status == "ok": + continue + priority = "critical" if spec["required"] else "medium" + actions.append( + _action( + "source_freshness_review", + priority, + spec["owner"], + "today" if spec["required"] else "3d", + f"Источник '{spec['label']}' в состоянии {detail['status_label']}: {summary}.", + "Проверить collector/service, причину отставания и подтвердить, что управленческие выводы по данным ещё надёжны.", + evidence={ + "source_id": spec["source_id"], + "bucket_id": detail["bucket_id"], + "age_seconds": age, + "required": spec["required"], + }, + ) + ) + return sources, actions + + +def _build_management_core(rows, host, report_date, owner_filter="", department_filter=""): + owner_filter = normalize_management_filter(owner_filter) + department_filter = normalize_management_filter(department_filter) + report_bounds = get_report_bounds(report_date) + workday = get_workday_bounds(report_date) + now_local = datetime.now(REPORT_TZ) + is_today = report_date == now_local.date() + effective_end_local = min(now_local, workday["end_local"]) if is_today else workday["end_local"] + elapsed_seconds = max(0, int((effective_end_local - workday["start_local"]).total_seconds())) + if not is_today: + elapsed_seconds = workday["duration_seconds"] + expected_seconds_per_user = min(workday["duration_seconds"], max(0, elapsed_seconds)) + target_seconds = int(expected_seconds_per_user * (MANAGER_TARGET_COVERAGE_PCT / 100.0)) + low_seconds = int(expected_seconds_per_user * (MANAGER_LOW_COVERAGE_PCT / 100.0)) + late_start_local = workday["start_local"] + timedelta(minutes=MANAGER_LATE_START_GRACE_MINUTES) + early_finish_local = workday["end_local"] - timedelta(minutes=MANAGER_EARLY_FINISH_GRACE_MINUTES) + + roster = [] + actions = [] + active_users = 0 + on_target_users = 0 + below_target_users = 0 + workday_total_active_seconds = 0 + workday_first_values = [] + workday_last_values = [] + top_workday_user = "" + top_workday_seconds = -1 + filtered_rows = [] + + for row in rows: + alias = resolve_user_alias(row.get("user", ""), row.get("user_id", ""), host) + if alias["exclude"]: + continue + if not _matches_management_filters(alias, owner_filter=owner_filter, department_filter=department_filter): + continue + filtered_rows.append(row) + public_row = {key: value for key, value in row.items() if key != "_intervals"} + calendar_active_seconds = int(row.get("active_seconds", 0) or 0) + intervals = row.get("_intervals") or [] + workday_active_seconds, workday_first, workday_last = _interval_overlap_seconds( + intervals, + workday["start_local"].astimezone(timezone.utc), + effective_end_local.astimezone(timezone.utc), + ) + first_activity = parse_iso_utc(row.get("first_activity")) + last_activity = parse_iso_utc(row.get("last_activity")) + first_local = first_activity.astimezone(REPORT_TZ) if first_activity else None + last_local = last_activity.astimezone(REPORT_TZ) if last_activity else None + workday_first_local = workday_first.astimezone(REPORT_TZ) if workday_first else None + workday_last_local = workday_last.astimezone(REPORT_TZ) if workday_last else None + coverage_pct = _clamp_pct((workday_active_seconds / expected_seconds_per_user) * 100.0) if expected_seconds_per_user > 0 else 0.0 + status = "ok" + if workday_active_seconds <= 0: + status = "inactive" + elif workday_active_seconds < target_seconds: + status = "below_target" + if workday_active_seconds > 0: + active_users += 1 + workday_total_active_seconds += workday_active_seconds + if workday_first_local: + workday_first_values.append(workday_first_local.isoformat()) + if workday_last_local: + workday_last_values.append(workday_last_local.isoformat()) + if workday_active_seconds >= target_seconds and workday_active_seconds > 0: + on_target_users += 1 + elif workday_active_seconds > 0: + below_target_users += 1 + if workday_active_seconds > top_workday_seconds: + top_workday_seconds = workday_active_seconds + top_workday_user = alias["display_name"] + + roster.append( + { + **public_row, + "user": alias["display_name"], + "user_original": row.get("user", ""), + "manager_owner": alias["manager_owner"], + "department": alias["department"], + "role": alias["role"], + "notes": alias["notes"], + "canonical_user_id": alias["canonical_user_id"] or row.get("user_id", ""), + "calendar_active_seconds": calendar_active_seconds, + "calendar_active_hhmm": row.get("active_hhmm", "00:00"), + "workday_active_seconds": workday_active_seconds, + "workday_active_hhmm": hhmm(workday_active_seconds), + "coverage_pct": coverage_pct, + "status": status, + "first_activity_local": first_local.isoformat() if first_local else "", + "last_activity_local": last_local.isoformat() if last_local else "", + "workday_first_activity_local": workday_first_local.isoformat() if workday_first_local else "", + "workday_last_activity_local": workday_last_local.isoformat() if workday_last_local else "", + } + ) + + owner = alias["display_name"] + user_id = alias["canonical_user_id"] or row.get("user_id", "") + evidence = { + "calendar_active_hhmm": row.get("active_hhmm", "00:00"), + "workday_active_hhmm": hhmm(workday_active_seconds), + "coverage_pct": coverage_pct, + "first_activity": row.get("first_activity", ""), + "last_activity": row.get("last_activity", ""), + "sessions_count": row.get("sessions_count", 0), + "manager_owner": alias["manager_owner"], + "department": alias["department"], + "role": alias["role"], + } + if workday_active_seconds <= 0: + actions.append( + _action( + "missing_activity", + "critical", + alias["manager_owner"], + "today", + f"За {report_date.isoformat()} у сотрудника {owner} нет подтверждённой активности в рабочем окне RDP.", + f"Проверить сотрудника {owner}: работал ли он в рабочее время, была ли потеря сбора данных или отсутствие входа в систему.", + user_id=user_id, + evidence=evidence, + ) + ) + continue + if expected_seconds_per_user > 0 and workday_active_seconds < low_seconds: + actions.append( + _action( + "low_activity_review", + "high", + alias["manager_owner"], + "24h", + f"У сотрудника {owner} активное время в рабочем окне {hhmm(workday_active_seconds)} ниже {MANAGER_LOW_COVERAGE_PCT}% от ожидаемого окна.", + f"Проверить загрузку сотрудника {owner}, задачи и фактическое присутствие в рабочем процессе.", + user_id=user_id, + evidence=evidence, + ) + ) + elif expected_seconds_per_user > 0 and workday_active_seconds < target_seconds: + actions.append( + _action( + "target_gap_review", + "medium", + alias["manager_owner"], + "24h", + f"У сотрудника {owner} активное время в рабочем окне {hhmm(workday_active_seconds)} ниже управленческого целевого порога {MANAGER_TARGET_COVERAGE_PCT}%.", + f"Уточнить причину отклонения по сотруднику {owner} и подтвердить план работ.", + user_id=user_id, + evidence=evidence, + ) + ) + if workday_first_local and workday_first_local > late_start_local: + actions.append( + _action( + "late_start_review", + "medium", + alias["manager_owner"], + "24h", + f"У сотрудника {owner} первая активность в рабочем окне зафиксирована поздно: {workday_first_local.strftime('%H:%M')}.", + f"Проверить причину позднего старта сотрудника {owner} и подтвердить, что это не проблема доступа или дисциплины.", + user_id=user_id, + evidence=evidence, + ) + ) + if (not is_today) and workday_last_local and workday_last_local < early_finish_local: + actions.append( + _action( + "early_finish_review", + "medium", + alias["manager_owner"], + "24h", + f"У сотрудника {owner} последняя активность в рабочем окне завершилась рано: {workday_last_local.strftime('%H:%M')}.", + f"Проверить, было ли досрочное завершение рабочего дня сотрудника {owner} согласовано и чем оно объясняется.", + user_id=user_id, + evidence=evidence, + ) + ) + + actions.sort(key=lambda item: (_priority_rank(item["priority"]), item["owner"].lower(), item["action_id"])) + calendar_summary = build_report_summary(filtered_rows) + inactive_users = sum(1 for row in roster if row["status"] == "inactive") + portfolio_coverage_pct = _clamp_pct((workday_total_active_seconds / (expected_seconds_per_user * len(roster))) * 100.0) if roster and expected_seconds_per_user > 0 else 0.0 + calendar_first = calendar_summary.get("first_activity", "") + calendar_last = calendar_summary.get("last_activity", "") + return { + "generated_at_utc": now_utc().isoformat().replace("+00:00", "Z"), + "host": resolve_host(host), + "report_date": report_date.isoformat(), + "report_timezone": str(REPORT_TZ), + "filters": { + "owner": owner_filter, + "department": department_filter, + }, + "workday": { + "start_local": workday["start_local"].isoformat(), + "end_local": workday["end_local"].isoformat(), + "expected_seconds_per_user": expected_seconds_per_user, + "expected_hhmm_per_user": hhmm(expected_seconds_per_user), + "target_coverage_pct": MANAGER_TARGET_COVERAGE_PCT, + "low_coverage_pct": MANAGER_LOW_COVERAGE_PCT, + }, + "summary": { + **calendar_summary, + "calendar_total_active_seconds": calendar_summary["total_active_seconds"], + "calendar_total_active_hhmm": calendar_summary["total_active_hhmm"], + "calendar_first_activity": calendar_first, + "calendar_last_activity": calendar_last, + "workday_total_active_seconds": workday_total_active_seconds, + "workday_total_active_hhmm": hhmm(workday_total_active_seconds), + "workday_first_activity": min(workday_first_values) if workday_first_values else "", + "workday_last_activity": max(workday_last_values) if workday_last_values else "", + "total_active_seconds": workday_total_active_seconds, + "total_active_hhmm": hhmm(workday_total_active_seconds), + "first_activity": min(workday_first_values) if workday_first_values else "", + "last_activity": max(workday_last_values) if workday_last_values else "", + "top_user": top_workday_user, + "top_user_active_hhmm": hhmm(top_workday_seconds if top_workday_seconds > 0 else 0), + "active_users": active_users, + "inactive_users": inactive_users, + "on_target_users": on_target_users, + "below_target_users": below_target_users, + "portfolio_coverage_pct": portfolio_coverage_pct, + "actions_count": len(actions), + "critical_actions_count": sum(1 for action in actions if action["priority"] == "critical"), + "high_actions_count": sum(1 for action in actions if action["priority"] == "high"), + }, + "actions": actions, + "rows": roster, + "bucket_id": get_sessions_bucket_id(host), + "report_bounds": { + "start_utc": to_iso_utc(report_bounds["start"]), + "end_utc": to_iso_utc(report_bounds["end"]), + }, + } + + +def _management_trend_item(payload, report_date): + summary = payload["summary"] + return { + "report_date": report_date.isoformat(), + "users_count": summary["users_count"], + "active_users": summary["active_users"], + "inactive_users": summary["inactive_users"], + "workday_total_active_seconds": summary["workday_total_active_seconds"], + "workday_total_active_hhmm": summary["workday_total_active_hhmm"], + "portfolio_coverage_pct": summary["portfolio_coverage_pct"], + "actions_count": summary["actions_count"], + "critical_actions_count": summary["critical_actions_count"], + } + + +def build_management_trend(host, anchor_date, owner_filter="", department_filter="", precomputed_payloads=None): + trend = [] + precomputed_payloads = precomputed_payloads or {} + for offset in range(MANAGER_TREND_DAYS - 1, -1, -1): + current_date = anchor_date - timedelta(days=offset) + payload = precomputed_payloads.get(current_date) + if payload is None: + payload = load_management_cache(host, current_date) + if payload is None: + bounds, events = fetch_events_for_date(host, current_date) + rows = aggregate_rows_with_intervals(events, bounds["start"], bounds["end"], host) + payload = _build_management_core(rows, host, current_date, owner_filter=owner_filter, department_filter=department_filter) + elif owner_filter or department_filter: + payload = apply_management_filters_to_payload( + payload, + owner_filter=owner_filter, + department_filter=department_filter, + include_sources=False, + include_source_actions=False, + ) + trend.append(_management_trend_item(payload, current_date)) + return trend + + +def build_filtered_management_trend(host, anchor_date, owner_filter="", department_filter=""): + trend = [] + for offset in range(MANAGER_TREND_DAYS - 1, -1, -1): + current_date = anchor_date - timedelta(days=offset) + base_payload = load_management_cache(host, current_date) + if base_payload is None: + bounds, events = fetch_events_for_date(host, current_date) + rows = aggregate_rows_with_intervals(events, bounds["start"], bounds["end"], host) + base_payload = _build_management_core(rows, host, current_date) + filtered_payload = apply_management_filters_to_payload( + base_payload, + owner_filter=owner_filter, + department_filter=department_filter, + include_sources=False, + include_source_actions=False, + ) + summary = filtered_payload["summary"] + trend.append( + { + "report_date": current_date.isoformat(), + "users_count": summary["users_count"], + "active_users": summary["active_users"], + "inactive_users": summary["inactive_users"], + "workday_total_active_seconds": summary["workday_total_active_seconds"], + "workday_total_active_hhmm": summary["workday_total_active_hhmm"], + "portfolio_coverage_pct": summary["portfolio_coverage_pct"], + "actions_count": summary["actions_count"], + "critical_actions_count": summary["critical_actions_count"], + } + ) + return trend + + +def build_management_payload(rows, host, report_date, owner_filter="", department_filter=""): + owner_filter = normalize_management_filter(owner_filter) + department_filter = normalize_management_filter(department_filter) + payload = _build_management_core(rows, host, report_date, owner_filter=owner_filter, department_filter=department_filter) + source_freshness, source_actions = build_source_freshness(resolve_host(host)) + payload["sources"] = source_freshness + payload["trend"] = build_management_trend( + resolve_host(host), + report_date, + owner_filter=owner_filter, + department_filter=department_filter, + precomputed_payloads={report_date: payload}, + ) + payload["trend_scope"] = "portfolio" + if source_actions: + payload["actions"].extend(filter_management_actions(source_actions, payload["rows"], owner_filter=owner_filter, department_filter=department_filter)) + payload["actions"].sort(key=lambda item: (_priority_rank(item["priority"]), item["owner"].lower(), item["action_id"])) + payload["summary"]["actions_count"] = len(payload["actions"]) + payload["summary"]["critical_actions_count"] = sum(1 for action in payload["actions"] if action["priority"] == "critical") + payload["summary"]["high_actions_count"] = sum(1 for action in payload["actions"] if action["priority"] == "high") + payload["executive"] = build_executive_summary(payload["summary"], payload["actions"], payload["sources"]) + payload["owner_rollups"] = build_owner_rollups(payload["rows"], payload["actions"]) + payload["department_rollups"] = build_department_rollups(payload["rows"], payload["actions"]) + payload["owner_roster"] = build_owner_roster(payload["rows"], payload["actions"]) + return payload + + def report_for_date(host, report_date): bounds, events = fetch_events_for_date(host, report_date) return aggregate_rows(events, bounds["start"], bounds["end"], host) +def management_report_for_date(host, report_date, owner_filter="", department_filter=""): + owner_filter = normalize_management_filter(owner_filter) + department_filter = normalize_management_filter(department_filter) + if owner_filter or department_filter: + base_payload = management_report_for_date(host, report_date) + filtered_payload = apply_management_filters_to_payload( + base_payload, + owner_filter=owner_filter, + department_filter=department_filter, + include_sources=True, + include_source_actions=True, + ) + filtered_payload["trend"] = [] + filtered_payload["trend_scope"] = "filtered_current_only" + return filtered_payload + cached = load_management_cache(host, report_date) + if cached is not None: + return cached + lock = get_management_build_lock(host, report_date) + with lock: + cached = load_management_cache(host, report_date) + if cached is not None: + return cached + bounds, events = fetch_events_for_date(host, report_date) + rows = aggregate_rows_with_intervals(events, bounds["start"], bounds["end"], host) + payload = build_management_payload(rows, host, report_date) + save_management_cache(host, report_date, payload) + return payload + + def report_today(host): return report_for_date(host, resolve_report_date()) @@ -361,7 +1792,7 @@ def report_for_date_fresh(host, report_date): return module.report_for_date(host, report_date) -def render_html(rows, host, report_date, selected_day=None): +def render_html(rows, host, report_date, selected_day=None, true_active_apps=None): generated = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") date_local = report_date.strftime("%Y-%m-%d") day_query = f"&day={selected_day}" if selected_day in {"today", "yesterday"} else "" @@ -380,6 +1811,20 @@ def render_html(rows, host, report_date, selected_day=None): ] trs = [] detail_cards = [] + true_active_apps = true_active_apps or [] + true_active_rows = [] + for app_row in true_active_apps: + last_action = app_row.get("last_action") or "-" + last_time = app_row.get("last_action_local") or "-" + true_active_rows.append( + "" + f"{html.escape(app_row.get('application') or '-')}" + f"{html.escape(app_row.get('proved_work_human') or app_row.get('proved_work_hhmm') or '0 сек')}" + f"{html.escape(last_time)} · {html.escape(last_action)}" + "" + ) + if not true_active_rows: + true_active_rows.append("Пока нет доказанной активной работы по приложениям за выбранную дату.") for row in rows: user_slug = safe_slug(row["user"]) active_seconds = int(row.get("active_seconds", 0) or 0) @@ -635,6 +2080,21 @@ def render_html(rows, host, report_date, selected_day=None): {''.join(f"
{html.escape(label)}{html.escape(value)}
" for label, value in cards)} +
+

Доказанная работа по приложениям

+ + + + + + + + + + {''.join(true_active_rows)} + +
ПриложениеДоказанная работаПоследнее действие
+

Таблица по пользователям

@@ -667,9 +2127,518 @@ def render_html(rows, host, report_date, selected_day=None): """ +def build_management_report_url(host, report_date, selected_day=None, fmt=None, owner_filter="", department_filter=""): + params = {"host": resolve_host(host)} + if fmt: + params["format"] = fmt + if selected_day in {"today", "yesterday"}: + params["day"] = selected_day + else: + params["date"] = report_date + if normalize_management_filter(owner_filter): + params["owner"] = normalize_management_filter(owner_filter) + if normalize_management_filter(department_filter): + params["department"] = normalize_management_filter(department_filter) + return "/reports/worktime/management?" + urlencode(params) + + +def render_management_html(payload, selected_day=None): + summary = payload["summary"] + workday = payload["workday"] + report_date = payload["report_date"] + host = payload["host"] + executive = payload.get("executive") or {} + active_filters = payload.get("filters") or {} + owner_filter = normalize_management_filter(active_filters.get("owner")) + department_filter = normalize_management_filter(active_filters.get("department")) + today_url = build_management_report_url(host, report_date, selected_day="today", fmt="html", owner_filter=owner_filter, department_filter=department_filter) + yesterday_url = build_management_report_url(host, report_date, selected_day="yesterday", fmt="html", owner_filter=owner_filter, department_filter=department_filter) + json_url = build_management_report_url(host, report_date, selected_day=selected_day, owner_filter=owner_filter, department_filter=department_filter) + classic_url = "/reports/worktime/today?" + urlencode({"format": "html", "host": host, **({"day": selected_day} if selected_day in {"today", "yesterday"} else {"date": report_date})}) + reset_url = build_management_report_url(host, report_date, selected_day=selected_day, fmt="html") + actions_html = [] + for action in payload["actions"]: + actions_html.append( + "" + f"" + f"" + f"" + f"" + f"" + f"" + "" + ) + if not actions_html: + actions_html.append("") + + roster_html = [] + for row in payload["rows"]: + roster_html.append( + "" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + "" + ) + if not roster_html: + roster_html.append("") + + trend_html = [] + for row in payload.get("trend", []): + trend_html.append( + "" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + "" + ) + if not trend_html: + trend_message = "Тренд по выбранному фильтру пока отключён, чтобы current-scope отчёт отвечал быстро." if (owner_filter or department_filter) else "Тренд пока недоступен." + trend_html.append(f"") + + owner_rollup_html = [] + for item in payload.get("owner_rollups", []): + owner_url = build_management_report_url(host, report_date, selected_day=selected_day, fmt="html", owner_filter=item["name"], department_filter=department_filter) + owner_rollup_html.append( + "" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + "" + ) + if not owner_rollup_html: + owner_rollup_html.append("") + + department_rollup_html = [] + for item in payload.get("department_rollups", []): + department_url = build_management_report_url(host, report_date, selected_day=selected_day, fmt="html", owner_filter=owner_filter, department_filter=item["name"]) + department_rollup_html.append( + "" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + f"" + "" + ) + if not department_rollup_html: + department_rollup_html.append("") + + owner_profile_html = [] + for item in payload.get("owner_roster", []): + owner_profile_html.append( + "
" + f"
0 else ('high' if item['high_actions_count'] > 0 else 'low')}'>{html.escape(item['display_name'])}
" + f"

{html.escape(item['title'] or item['name'])}

" + f"
Подразделение: {html.escape(item['department'] or '-')}
" + f"

Пользователи: {item['users_count']} · inactive: {item['inactive_users']} · actions: {item['actions_count']}

" + f"

Контакт: {html.escape(item['contact'] or '-')}

" + f"

Эскалация: {html.escape(item['escalation_to'] or '-')}

" + f"

{html.escape(item['notes'] or 'Без дополнительных заметок.')}

" + "
" + ) + if not owner_profile_html: + owner_profile_html.append("

Каталог ответственных пуст

Добавьте блок owners в worktime-manager-aliases.json, чтобы отчёт показывал роли, контакты и эскалацию.

") + + sources_html = [] + for source in payload.get("sources", []): + sources_html.append( + "" + f"" + f"" + f"" + f"" + f"" + f"" + "" + ) + if not sources_html: + sources_html.append("") + + focus_html = [] + for item in executive.get("focus_items", []): + focus_html.append( + "
" + f"
{html.escape(item['priority'])}
" + f"

{html.escape(item['title'])}

" + f"
Ответственный: {html.escape(item['owner'])}
" + f"

{html.escape(item['reason'])}

" + f"{html.escape(item['recommended_action'])}" + "
" + ) + if not focus_html: + focus_html.append("

Критичных действий нет

На текущий момент менеджерских отклонений по активным правилам не найдено.

") + + stale_html = [] + for item in executive.get("stale_sources", []): + stale_html.append( + "
  • " + f"{html.escape(item['label'])}: {html.escape(item['status'])} · {html.escape(item['summary'])}" + "
  • " + ) + stale_block = ( + "
    Проблемы со свежестью источников:
      " + + "".join(stale_html) + + "
    " + ) if stale_html else "" + filter_parts = [] + if owner_filter: + filter_parts.append(f"ответственный: {html.escape(owner_filter)}") + if department_filter: + filter_parts.append(f"подразделение: {html.escape(department_filter)}") + filter_block = ( + "
    Фильтр: " + + " · ".join(filter_parts) + + f" Сбросить
    " + ) if filter_parts else "" + + cards = [ + ("Пользователи", str(summary["users_count"])), + ("Активны", str(summary["active_users"])), + ("Без активности", str(summary["inactive_users"])), + ("Ниже цели", str(summary["below_target_users"])), + ("Покрытие", f"{summary['portfolio_coverage_pct']}%"), + ("Действия", str(summary["actions_count"])), + ("Рабочее окно", summary["workday_total_active_hhmm"]), + ("Календарный день", summary["calendar_total_active_hhmm"]), + ] + + return f""" + + + + + AW-rus Управленческий отчёт по работе в RDP + + + +
    +
    +

    Управленческий отчёт по работе в RDP

    +
    Хост: {html.escape(host)} · Дата: {html.escape(report_date)} · Рабочее окно: {html.escape(workday['start_local'])} -> {html.escape(workday['end_local'])} · Сформировано UTC: {html.escape(payload['generated_at_utc'])}
    + +
    + {''.join(f"
    {html.escape(label)}{html.escape(value)}
    " for label, value in cards)} +
    +
    + Целевое покрытие: {MANAGER_TARGET_COVERAGE_PCT}% от ожидаемого рабочего окна на пользователя. + Критический провал: ниже {MANAGER_LOW_COVERAGE_PCT}% или полное отсутствие активности. + Рабочее окно считается отдельно от календарной активности, чтобы ночная работа не маскировала дневной провал. +
    +
    +
    +

    Что делать сегодня

    +
    + {html.escape(executive.get('headline') or 'Сводка недоступна')} +

    {html.escape(executive.get('message') or '')}

    + {filter_block} + {stale_block} +
    +
    + {''.join(focus_html)} +
    +
    +
    +

    Тренд за {MANAGER_TREND_DAYS} дней

    +
    {html.escape(action['priority'])}{html.escape(action['owner'])}{html.escape(action['action_id'])}{html.escape(action['deadline_hint'])}{html.escape(action['reason'])}{html.escape(action['recommended_action'])}
    Отклонений по текущим правилам не найдено.
    {html.escape(row['user'])}{html.escape(row.get('canonical_user_id') or row['user_id'])}{html.escape(row.get('manager_owner') or row['user'])}{html.escape(row.get('department') or '-')}{html.escape(row['workday_active_hhmm'])}{html.escape(row['calendar_active_hhmm'])}{row['coverage_pct']}{html.escape(row['status'])}{html.escape(row.get('workday_first_activity_local') or '-')}{html.escape(row.get('workday_last_activity_local') or '-')}{row['sessions_count']}
    За выбранную дату данных нет.
    {html.escape(row['report_date'])}{row['users_count']}{row['active_users']}{row['inactive_users']}{html.escape(row['workday_total_active_hhmm'])}{row['portfolio_coverage_pct']}{row['actions_count']}{row['critical_actions_count']}
    {html.escape(trend_message)}
    {html.escape(item['name'])}{item['users_count']}{item['inactive_users']}{item['below_target_users']}{item['critical_actions_count']}{item['high_actions_count']}{html.escape(item['workday_total_active_hhmm'])}{item['portfolio_coverage_pct']}{html.escape(', '.join(item['users']) if item['users'] else '-')}
    Нет данных по ответственным.
    {html.escape(item['name'])}{item['users_count']}{item['inactive_users']}{item['below_target_users']}{item['critical_actions_count']}{item['high_actions_count']}{html.escape(item['workday_total_active_hhmm'])}{item['portfolio_coverage_pct']}{html.escape(', '.join(item['users']) if item['users'] else '-')}
    Нет данных по подразделениям.
    {html.escape(source['label'])}{html.escape(source['status_label'])}{html.escape(source['bucket_id'])}{html.escape(source.get('timestamp') or '-')}{html.escape(str(source.get('age_seconds')) if source.get('age_seconds') is not None else '-')}{html.escape(source.get('event_summary') or source.get('summary') or '-')}
    Статусы источников недоступны.
    + + + + + + + + + + + + + + {''.join(trend_html)} + +
    ДатаПользователиАктивныБез активностиРабочее окноПокрытие, %ДействияCritical
    +
    +
    +

    По ответственным

    + + + + + + + + + + + + + + + + {''.join(owner_rollup_html)} + +
    ОтветственныйСотрудникиБез активностиНиже целиCriticalHighРабочее окноПокрытие, %Кого затрагивает
    +
    +
    +

    Ответственные и эскалация

    +
    + {''.join(owner_profile_html)} +
    +
    +
    +

    По подразделениям

    + + + + + + + + + + + + + + + + {''.join(department_rollup_html)} + +
    ПодразделениеСотрудникиБез активностиНиже целиCriticalHighРабочее окноПокрытие, %Кого затрагивает
    +
    +
    +

    Очередь действий руководителя

    + + + + + + + + + + + + + {''.join(actions_html)} + +
    ПриоритетСотрудникТипСрокПочему это важноЧто сделать
    +
    +
    +

    Покрытие по сотрудникам

    + + + + + + + + + + + + + + + + + + {''.join(roster_html)} + +
    СотрудникУчётная записьОтветственныйПодразделениеАктивно в окнеАктивно за деньПокрытие, %СтатусПервая активность в окнеПоследняя активность в окнеСессии
    +
    +
    +

    Свежесть источников данных

    + + + + + + + + + + + + + {''.join(sources_html)} + +
    ИсточникСтатусБакетПоследнее событие UTCВозраст, секКонтекст
    +
    + + +""" + + +def send_bytes(handler, data, content_type, status=200): + handler.send_response(status) + handler.send_header("Content-Type", content_type) + handler.send_header("Content-Length", str(len(data))) + handler.end_headers() + try: + handler.wfile.write(data) + except (BrokenPipeError, ConnectionResetError): + return False + return True + + class H(BaseHTTPRequestHandler): def do_GET(self): parsed = urlparse(self.path) + if parsed.path in {"/health", "/api/health"}: + data = json.dumps(worktime_health_payload(), ensure_ascii=False, indent=2).encode("utf-8") + send_bytes(self, data, "application/json; charset=utf-8") + return + if parsed.path.startswith("/dlp-ioc/"): name = parsed.path.rsplit("/", 1)[-1] if name not in {"ioc_blacklist.json", "ioc_blacklist.csv", "ioc_blacklist.sql"}: @@ -689,14 +2658,10 @@ class H(BaseHTTPRequestHandler): ctype = "text/csv; charset=utf-8" else: ctype = "text/plain; charset=utf-8" - self.send_response(200) - self.send_header("Content-Type", ctype) - self.send_header("Content-Length", str(len(data))) - self.end_headers() - self.wfile.write(data) + send_bytes(self, data, ctype) return - if parsed.path != "/reports/worktime/today": + if parsed.path not in {"/reports/worktime/today", "/reports/worktime/management"}: self.send_response(404) self.end_headers() return @@ -710,10 +2675,27 @@ class H(BaseHTTPRequestHandler): host = resolve_host(params.get("host", [DEFAULT_HOST])[0]) day = params.get("day", ["today"])[0] date_text = params.get("date", [None])[0] + owner_filter = normalize_management_filter(params.get("owner", [""])[0]) + department_filter = normalize_management_filter(params.get("department", [""])[0]) report_date = resolve_report_date(day=day, date_text=date_text) - rows = report_for_date_fresh(host, report_date) + is_management = parsed.path == "/reports/worktime/management" + management_payload = management_report_for_date(host, report_date, owner_filter=owner_filter, department_filter=department_filter) if is_management else None + rows = report_for_date_fresh(host, report_date) if not is_management else management_payload["rows"] + true_active_apps = [] if is_management else build_true_active_apps(host, report_date) if fmt == "csv": + if is_management: + out = io.StringIO() + writer = csv.DictWriter( + out, + fieldnames=["priority", "owner", "user_id", "action_id", "deadline_hint", "reason", "recommended_action"], + extrasaction="ignore", + ) + writer.writeheader() + writer.writerows(management_payload["actions"]) + data = out.getvalue().encode() + send_bytes(self, data, "text/csv; charset=utf-8") + return out = io.StringIO() writer = csv.DictWriter( out, @@ -733,20 +2715,21 @@ class H(BaseHTTPRequestHandler): writer.writeheader() writer.writerows(rows) data = out.getvalue().encode() - self.send_response(200) - self.send_header("Content-Type", "text/csv; charset=utf-8") - self.send_header("Content-Length", str(len(data))) - self.end_headers() - self.wfile.write(data) + send_bytes(self, data, "text/csv; charset=utf-8") return if fmt == "html": - data = render_html(rows, host, report_date, selected_day=day if day in {"today", "yesterday"} else None).encode("utf-8") - self.send_response(200) - self.send_header("Content-Type", "text/html; charset=utf-8") - self.send_header("Content-Length", str(len(data))) - self.end_headers() - self.wfile.write(data) + if is_management: + data = render_management_html(management_payload, selected_day=day if day in {"today", "yesterday"} else None).encode("utf-8") + else: + data = render_html(rows, host, report_date, selected_day=day if day in {"today", "yesterday"} else None, true_active_apps=true_active_apps).encode("utf-8") + send_bytes(self, data, "text/html; charset=utf-8") + return + + if is_management: + obj = management_payload + data = json.dumps(obj, ensure_ascii=False, indent=2).encode("utf-8") + send_bytes(self, data, "application/json; charset=utf-8") return obj = { @@ -756,17 +2739,19 @@ class H(BaseHTTPRequestHandler): "report_date": report_date.isoformat(), "bucket_id": get_sessions_bucket_id(host), "rows": rows, + "true_active_apps": true_active_apps, } data = json.dumps(obj, ensure_ascii=False, indent=2).encode("utf-8") - self.send_response(200) - self.send_header("Content-Type", "application/json; charset=utf-8") - self.send_header("Content-Length", str(len(data))) - self.end_headers() - self.wfile.write(data) + send_bytes(self, data, "application/json; charset=utf-8") + + +class WorktimeHTTPServer(ThreadingHTTPServer): + daemon_threads = True + request_queue_size = 64 def main(): - HTTPServer((LISTEN_HOST, LISTEN_PORT), H).serve_forever() + WorktimeHTTPServer((LISTEN_HOST, LISTEN_PORT), H).serve_forever(poll_interval=0.5) if __name__ == "__main__": diff --git a/install-kit-awindows-20260427-211240/aw-server/aw-worktime-panel.js b/install-kit-awindows-20260427-211240/aw-server/aw-worktime-panel.js index a91741d..0621520 100644 --- a/install-kit-awindows-20260427-211240/aw-server/aw-worktime-panel.js +++ b/install-kit-awindows-20260427-211240/aw-server/aw-worktime-panel.js @@ -1,14 +1,15 @@ (function () { var reportBase = "__AW_WORKTIME_REPORT_BASE__"; function defaultDayQuery() { - var now = new Date(); - return now.getHours() < 6 ? "day=yesterday" : "day=today"; + return "day=today"; } var dayQuery = defaultDayQuery(); var htmlUrl = reportBase + "/reports/worktime/today?format=html&" + dayQuery; var csvUrl = reportBase + "/reports/worktime/today?format=csv&" + dayQuery; var jsonUrl = reportBase + "/reports/worktime/today?" + dayQuery; + var managerHtmlUrl = reportBase + "/reports/worktime/management?format=html&" + dayQuery; + var managerJsonUrl = reportBase + "/reports/worktime/management?" + dayQuery; var existing = document.getElementById("aw-report-links"); if (!existing) return; @@ -17,6 +18,8 @@ 'HTML | ' + 'CSV | ' + 'JSON | ' + + 'Менеджмент | ' + + 'Mgmt JSON | ' + 'Панель'; var panel = document.createElement("div"); @@ -40,10 +43,11 @@ '
    ' + '
    Отчёт по работе в RDP
    ' + '
    " + - ''; + ''; document.body.appendChild(panel); diff --git a/install-kit-awindows-20260427-211240/aw-server/install_aw_server.sh b/install-kit-awindows-20260427-211240/aw-server/install_aw_server.sh index 6a28f35..34930d6 100755 --- a/install-kit-awindows-20260427-211240/aw-server/install_aw_server.sh +++ b/install-kit-awindows-20260427-211240/aw-server/install_aw_server.sh @@ -26,6 +26,7 @@ VIEWS_JSON="$BOOTSTRAP_DIR/settings/views-default.json" CLASSES_JSON="$BOOTSTRAP_DIR/settings/classes-worktime.json" WORKTIME_API_SRC="$BOOTSTRAP_DIR/aw-worktime-api.py" WORKTIME_API_SERVICE_SRC="$BOOTSTRAP_DIR/aw-worktime-api.service" +WORKTIME_ALIASES_SRC="$BOOTSTRAP_DIR/worktime-manager-aliases.example.json" WORKTIME_UI_BRIDGE_SRC="$BOOTSTRAP_DIR/aw-worktime-ui-bridge.py" WORKTIME_UI_BRIDGE_SERVICE_SRC="$BOOTSTRAP_DIR/aw-worktime-ui-bridge.service" WORKTIME_UI_BRIDGE_TIMER_SRC="$BOOTSTRAP_DIR/aw-worktime-ui-bridge.timer" @@ -110,6 +111,14 @@ if [[ -f "$WORKTIME_API_SERVICE_SRC" ]]; then systemctl --no-pager --full status aw-worktime-api.service || true fi +if [[ -f "$WORKTIME_ALIASES_SRC" ]]; then + install -d -m 0755 /etc/activitywatch + install -m 0644 "$WORKTIME_ALIASES_SRC" /etc/activitywatch/worktime-manager-aliases.json.example + if [[ ! -f /etc/activitywatch/worktime-manager-aliases.json ]]; then + install -m 0644 "$WORKTIME_ALIASES_SRC" /etc/activitywatch/worktime-manager-aliases.json + fi +fi + if [[ -f "$WORKTIME_UI_BRIDGE_SRC" ]]; then install -m 0755 "$WORKTIME_UI_BRIDGE_SRC" /usr/local/bin/aw-worktime-ui-bridge.py fi diff --git a/install-kit-awindows-20260427-211240/aw-server/settings/views-default.json b/install-kit-awindows-20260427-211240/aw-server/settings/views-default.json index 5421e98..5698738 100644 --- a/install-kit-awindows-20260427-211240/aw-server/settings/views-default.json +++ b/install-kit-awindows-20260427-211240/aw-server/settings/views-default.json @@ -16,11 +16,6 @@ { "type": "top_apps", "size": 3, "props": {} } ] }, - { - "id": "DLP", - "name": "DLP", - "elements": [] - }, { "id": "worktime", "name": "Worktime", diff --git a/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 b/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 index 2f7f461..3c68781 100755 --- a/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 +++ b/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 @@ -1,5 +1,6 @@ -Set-StrictMode -Version Latest +Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' +$script:ActivityWatchBuiltInAdministratorName = $null function Assert-Administrator { $identity = [Security.Principal.WindowsIdentity]::GetCurrent() @@ -60,6 +61,12 @@ function Get-ActivityWatchArchive { } [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + Get-ChildItem -LiteralPath $WorkingRoot -File -Filter 'activitywatch-*.zip' -ErrorAction SilentlyContinue | + Sort-Object LastWriteTime -Descending | + Select-Object -Skip 2 | + ForEach-Object { + try { Remove-Item -LiteralPath $_.FullName -Force -ErrorAction SilentlyContinue } catch {} + } $stamp = Get-Date -Format 'yyyyMMdd-HHmmss' $suffix = ([guid]::NewGuid().Guid.Substring(0, 8)) $archivePath = Join-Path $WorkingRoot ("activitywatch-{0}-{1}-{2}.zip" -f $Version.TrimStart('v'), $stamp, $suffix) @@ -67,6 +74,26 @@ function Get-ActivityWatchArchive { return $archivePath } +function Remove-ActivityWatchOldInstallBackups { + param( + [Parameter(Mandatory = $true)] + [string]$BackupRoot, + [int]$Keep = 2 + ) + + if (-not (Test-Path -LiteralPath $BackupRoot)) { + return + } + + Get-ChildItem -LiteralPath $BackupRoot -Directory -ErrorAction SilentlyContinue | + Where-Object { $_.Name -like 'install-*' } | + Sort-Object LastWriteTime -Descending | + Select-Object -Skip $Keep | + ForEach-Object { + try { Remove-Item -LiteralPath $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } catch {} + } +} + function Get-ActivityWatchPackageRoot { param( [Parameter(Mandatory = $true)] @@ -132,6 +159,7 @@ function Install-ActivityWatchPackage { New-ActivityWatchDirectory -Path $WorkingRoot New-ActivityWatchDirectory -Path $BackupRoot + Remove-ActivityWatchOldInstallBackups -BackupRoot $BackupRoot # Cleanup stale extraction directories from previous failed deployments. Get-ChildItem -LiteralPath $WorkingRoot -Directory -ErrorAction SilentlyContinue | @@ -157,38 +185,64 @@ function Install-ActivityWatchPackage { New-ActivityWatchDirectory -Path $extractRoot $archiveSize = (Get-Item -LiteralPath $ArchivePath -ErrorAction Stop).Length - $workDrive = (Get-PSDrive -Name ([System.IO.Path]::GetPathRoot($WorkingRoot).TrimEnd('\').TrimEnd(':')) -ErrorAction SilentlyContinue) - if ($workDrive) { + $workDriveName = [System.IO.Path]::GetPathRoot($WorkingRoot).TrimEnd('\').TrimEnd(':') + $workDrive = Get-PSDrive -Name $workDriveName -ErrorAction SilentlyContinue + $freeBytes = $null + if ($workDrive -and $null -ne $workDrive.Free) { + $freeBytes = [int64]$workDrive.Free + } + elseif ($workDriveName) { + try { + $disk = Get-CimInstance Win32_LogicalDisk -Filter ("DeviceID='{0}:'" -f $workDriveName) -ErrorAction Stop + if ($disk -and $null -ne $disk.FreeSpace) { + $freeBytes = [int64]$disk.FreeSpace + } + } + catch { + } + } + if ($null -ne $freeBytes) { # Require at least ~2.5x archive size to handle extraction + copy safely. $required = [int64]([Math]::Ceiling($archiveSize * 2.5)) - if ([int64]$workDrive.Free -lt $required) { - throw ("Недостаточно свободного места на {0}: free={1} bytes, required>={2} bytes" -f $workDrive.Name, $workDrive.Free, $required) + if ($freeBytes -lt $required) { + throw ("Недостаточно свободного места на {0}: free={1} bytes, required>={2} bytes" -f $workDriveName, $freeBytes, $required) } } - Expand-ActivityWatchArchiveSafe -ArchivePath $ArchivePath -DestinationPath $extractRoot - $packageRoot = Get-ActivityWatchPackageRoot -ExpandedRoot $extractRoot + try { + Expand-ActivityWatchArchiveSafe -ArchivePath $ArchivePath -DestinationPath $extractRoot + $packageRoot = Get-ActivityWatchPackageRoot -ExpandedRoot $extractRoot - if (Test-Path -LiteralPath $InstallRoot) { - $existingItems = Get-ChildItem -LiteralPath $InstallRoot -Force -ErrorAction SilentlyContinue - if ($existingItems) { - $stamp = Get-Date -Format 'yyyyMMdd-HHmmss' - $backupPath = Join-Path $BackupRoot ("install-$stamp") - New-ActivityWatchDirectory -Path $backupPath - Copy-Item -Path (Join-Path $InstallRoot '*') -Destination $backupPath -Recurse -Force - Get-ChildItem -LiteralPath $InstallRoot -Force | Remove-Item -Recurse -Force + if (Test-Path -LiteralPath $InstallRoot) { + $existingItems = Get-ChildItem -LiteralPath $InstallRoot -Force -ErrorAction SilentlyContinue + if ($existingItems) { + $stamp = Get-Date -Format 'yyyyMMdd-HHmmss' + $backupPath = Join-Path $BackupRoot ("install-$stamp") + New-ActivityWatchDirectory -Path $backupPath + Copy-Item -Path (Join-Path $InstallRoot '*') -Destination $backupPath -Recurse -Force + Get-ChildItem -LiteralPath $InstallRoot -Force | Remove-Item -Recurse -Force + } + } + else { + New-ActivityWatchDirectory -Path $InstallRoot + } + + Copy-Item -Path (Join-Path $packageRoot '*') -Destination $InstallRoot -Recurse -Force + + return [pscustomobject]@{ + PackageRoot = $packageRoot + ExtractRoot = $extractRoot + BackupRoot = $BackupRoot } } - else { - New-ActivityWatchDirectory -Path $InstallRoot - } - - Copy-Item -Path (Join-Path $packageRoot '*') -Destination $InstallRoot -Recurse -Force - - return [pscustomobject]@{ - PackageRoot = $packageRoot - ExtractRoot = $extractRoot - BackupRoot = $BackupRoot + finally { + if (Test-Path -LiteralPath $extractRoot) { + try { Remove-Item -LiteralPath $extractRoot -Recurse -Force -ErrorAction SilentlyContinue } catch {} + } + if ((Test-Path -LiteralPath $ArchivePath) -and ($ArchivePath -like (Join-Path $WorkingRoot 'activitywatch-*.zip'))) { + try { Remove-Item -LiteralPath $ArchivePath -Force -ErrorAction SilentlyContinue } catch {} + } + Remove-ActivityWatchOldInstallBackups -BackupRoot $BackupRoot } } @@ -212,6 +266,95 @@ function Get-ActivityWatchExecutableMap { return [pscustomobject]$map } +function Repair-ActivityWatchPotentialMojibake { + param([string]$Value) + + if ([string]::IsNullOrWhiteSpace($Value)) { + return $Value + } + + if ($Value -notmatch '[\u0400-\u04FF]') { + return $Value + } + + try { + $bytes = [Text.Encoding]::GetEncoding(1251).GetBytes($Value) + $repaired = [Text.Encoding]::UTF8.GetString($bytes) + if (-not [string]::IsNullOrWhiteSpace($repaired) -and $repaired -match '[\u0400-\u04FF]') { + return $repaired + } + } + catch { + } + + return $Value +} + +function Get-ActivityWatchBuiltInAdministratorName { + if ($script:ActivityWatchBuiltInAdministratorName) { + return $script:ActivityWatchBuiltInAdministratorName + } + + if (-not [string]::IsNullOrWhiteSpace($env:AWATCH_RUS_BUILTIN_ADMINISTRATOR_NAME)) { + $script:ActivityWatchBuiltInAdministratorName = [string]$env:AWATCH_RUS_BUILTIN_ADMINISTRATOR_NAME + return $script:ActivityWatchBuiltInAdministratorName + } + + try { + $account = Get-CimInstance Win32_UserAccount -Filter "LocalAccount=True" -ErrorAction Stop | + Where-Object { [string]$_.SID -match '-500$' } | + Select-Object -First 1 + if ($account -and -not [string]::IsNullOrWhiteSpace([string]$account.Name)) { + $script:ActivityWatchBuiltInAdministratorName = [string]$account.Name + return $script:ActivityWatchBuiltInAdministratorName + } + } + catch { + } + + if ([string]$env:COMPUTERNAME -ieq 'SHARKON2025') { + $script:ActivityWatchBuiltInAdministratorName = 'Администратор' + return $script:ActivityWatchBuiltInAdministratorName + } + + $script:ActivityWatchBuiltInAdministratorName = 'Administrator' + return $script:ActivityWatchBuiltInAdministratorName +} + +function Normalize-ActivityWatchUserId { + param( + [string]$UserId, + [string]$Domain + ) + + if ([string]::IsNullOrWhiteSpace($UserId)) { + return $null + } + + $normalized = Repair-ActivityWatchPotentialMojibake -Value $UserId.Trim() + $resolvedDomain = $null + $leafUser = $normalized + + if ($normalized -match '^([^\\]+)\\(.+)$') { + $resolvedDomain = Repair-ActivityWatchPotentialMojibake -Value $Matches[1] + $leafUser = Repair-ActivityWatchPotentialMojibake -Value $Matches[2] + } + + if ($leafUser -match '^(?i:administrator|администратор)$') { + $leafUser = Get-ActivityWatchBuiltInAdministratorName + } + + if ([string]::IsNullOrWhiteSpace($resolvedDomain) -and -not [string]::IsNullOrWhiteSpace($Domain)) { + $resolvedDomain = Repair-ActivityWatchPotentialMojibake -Value $Domain.Trim() + } + + if (-not [string]::IsNullOrWhiteSpace($resolvedDomain)) { + return ('{0}\{1}' -f $resolvedDomain, $leafUser) + } + + return $leafUser +} + function Normalize-ActivityWatchUsers { param( [string[]]$Users, @@ -256,17 +399,11 @@ function Normalize-ActivityWatchUsers { } } - $normalized = $collected | + $normalized = @($collected | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | - ForEach-Object { - if ($Domain -and ($_ -notmatch '[\\@]')) { - '{0}\{1}' -f $Domain, $_ - } - else { - $_ - } - } | - Sort-Object -Unique + ForEach-Object { Normalize-ActivityWatchUserId -UserId $_ -Domain $Domain } | + Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | + Sort-Object -Unique) if (-not $normalized -or $normalized.Count -eq 0) { throw 'Не удалось определить целевых пользователей. Укажите -Users или -UserListPath.' @@ -301,9 +438,10 @@ function New-ActivityWatchUserTaskDefinitions { ) $result = foreach ($user in $Users) { - $token = Get-ActivityWatchTaskNameToken -UserId $user + $normalizedUser = Normalize-ActivityWatchUserId -UserId $user + $token = Get-ActivityWatchTaskNameToken -UserId $normalizedUser [pscustomobject]@{ - UserId = $user + UserId = $normalizedUser LaunchTaskName = "ActivityWatch Launch [$token]" } } @@ -354,6 +492,99 @@ function Get-ActivityWatchLoggedOnUsers { return @($users) } +function Get-ActivityWatchSessionRecords { + $sessions = New-Object System.Collections.Generic.List[object] + + try { + $lines = & qwinsta.exe 2>$null + foreach ($line in @($lines)) { + $normalized = [string]$line + if ([string]::IsNullOrWhiteSpace($normalized)) { + continue + } + + $normalized = $normalized.TrimStart(' ', '>') + if ([string]::IsNullOrWhiteSpace($normalized)) { + continue + } + + if ($normalized -match '^(SESSIONNAME|ИМЯ СЕАНСА)\s+') { + continue + } + + $columns = @( + (($normalized -replace '\s{2,}', '|') -split '\|') | + ForEach-Object { $_.Trim() } | + Where-Object { -not [string]::IsNullOrWhiteSpace($_) } + ) + if ($columns.Count -lt 3) { + continue + } + + $sessionName = [string]$columns[0] + $userName = $null + $sessionIdIndex = 1 + + if ($columns[1] -notmatch '^\d+$') { + $userName = [string]$columns[1] + $sessionIdIndex = 2 + } + + if ($columns.Count -le $sessionIdIndex -or $columns[$sessionIdIndex] -notmatch '^\d+$') { + continue + } + + $sessionId = [int]$columns[$sessionIdIndex] + $state = if ($columns.Count -gt ($sessionIdIndex + 1)) { [string]$columns[$sessionIdIndex + 1] } else { '' } + $isLive = $state -match '^(Active|Conn|Активно|Подкл\w*)$' + + $sessions.Add([pscustomobject]@{ + SessionName = $sessionName + UserName = $userName + SessionId = $sessionId + State = $state + IsLive = $isLive + }) | Out-Null + } + } + catch { + } + + $explorerUsers = Get-ActivityWatchExplorerUsersBySession + foreach ($session in @($sessions.ToArray())) { + $sessionId = [int]$session.SessionId + if ($explorerUsers.ContainsKey($sessionId)) { + $session.UserName = [string]$explorerUsers[$sessionId] + } + } + + return @($sessions.ToArray()) +} + +function Resolve-ActivityWatchUserCandidates { + param( + [Parameter(Mandatory = $true)] + [string]$UserId + ) + + $normalizedUserId = Normalize-ActivityWatchUserId -UserId $UserId + $candidateIds = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase) + [void]$candidateIds.Add($normalizedUserId) + + $leafUser = $normalizedUserId + if ($leafUser -match '^[^\\]+\\(.+)$') { + $leafUser = $Matches[1] + [void]$candidateIds.Add($leafUser) + } + + [void]$candidateIds.Add(('{0}\{1}' -f $env:COMPUTERNAME, $leafUser)) + if (-not [string]::IsNullOrWhiteSpace($env:USERDOMAIN)) { + [void]$candidateIds.Add(('{0}\{1}' -f $env:USERDOMAIN, $leafUser)) + } + + return @($candidateIds) +} + function Test-ActivityWatchUserHasSession { param( [Parameter(Mandatory = $true)] @@ -365,21 +596,7 @@ function Test-ActivityWatchUserHasSession { return $false } - $candidateIds = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase) - [void]$candidateIds.Add($UserId) - - $leafUser = $UserId - if ($leafUser -match '^[^\\]+\\(.+)$') { - $leafUser = $Matches[1] - [void]$candidateIds.Add($leafUser) - } - - [void]$candidateIds.Add(('{0}\{1}' -f $env:COMPUTERNAME, $leafUser)) - if (-not [string]::IsNullOrWhiteSpace($env:USERDOMAIN)) { - [void]$candidateIds.Add(('{0}\{1}' -f $env:USERDOMAIN, $leafUser)) - } - - foreach ($candidate in @($candidateIds)) { + foreach ($candidate in @(Resolve-ActivityWatchUserCandidates -UserId $UserId)) { if ($LoggedOnUsers -contains $candidate) { return $true } @@ -388,6 +605,34 @@ function Test-ActivityWatchUserHasSession { return $false } +function Test-ActivityWatchUserHasLiveSession { + param( + [Parameter(Mandatory = $true)] + [string]$UserId, + [object[]]$SessionRecords + ) + + if ([string]::IsNullOrWhiteSpace($UserId)) { + return $false + } + + foreach ($candidate in @(Resolve-ActivityWatchUserCandidates -UserId $UserId)) { + if (@($SessionRecords | Where-Object { + $_.IsLive -and + -not [string]::IsNullOrWhiteSpace([string]$_.UserName) -and + ( + [string]$_.UserName -ieq $candidate -or + ('{0}\{1}' -f $env:COMPUTERNAME, [string]$_.UserName) -ieq $candidate -or + ((-not [string]::IsNullOrWhiteSpace($env:USERDOMAIN)) -and ('{0}\{1}' -f $env:USERDOMAIN, [string]$_.UserName) -ieq $candidate) + ) + }).Count -gt 0) { + return $true + } + } + + return $false +} + function Copy-ActivityWatchCollectorAssets { param( [Parameter(Mandatory = $true)] @@ -400,6 +645,8 @@ function Copy-ActivityWatchCollectorAssets { [Parameter(Mandatory = $true)] [string]$SessionCollectorScriptSource, [string]$EvtxExportScriptSource, + [string]$HayabusaUploadScriptSource, + [string]$File1CTelemetryScriptSource, [string]$EmailCollectorScriptSource, [Parameter(Mandatory = $true)] [string]$ExampleRulesSource, @@ -419,6 +666,8 @@ function Copy-ActivityWatchCollectorAssets { $fileCollectorTarget = Join-Path $StateRoot 'file-operations-collector.ps1' $sessionCollectorTarget = Join-Path $StateRoot 'worktime-session-collector.ps1' $evtxExportTarget = Join-Path $StateRoot 'export-evtx-for-hayabusa.ps1' + $hayabusaUploadTarget = Join-Path $StateRoot 'export-upload-hayabusa-to-aw-server.ps1' + $file1cTelemetryTarget = Join-Path $StateRoot 'export-upload-file-1c-telemetry.ps1' $emailCollectorTarget = Join-Path $StateRoot 'email-outbound-collector.ps1' $exampleRulesTarget = Join-Path $StateRoot 'web-category-rules.example.json' $rulesTarget = Join-Path $StateRoot 'web-category-rules.json' @@ -435,6 +684,12 @@ function Copy-ActivityWatchCollectorAssets { if ($EvtxExportScriptSource -and (Test-Path -LiteralPath $EvtxExportScriptSource)) { Copy-Item -LiteralPath $EvtxExportScriptSource -Destination $evtxExportTarget -Force } + if ($HayabusaUploadScriptSource -and (Test-Path -LiteralPath $HayabusaUploadScriptSource)) { + Copy-Item -LiteralPath $HayabusaUploadScriptSource -Destination $hayabusaUploadTarget -Force + } + if ($File1CTelemetryScriptSource -and (Test-Path -LiteralPath $File1CTelemetryScriptSource)) { + Copy-Item -LiteralPath $File1CTelemetryScriptSource -Destination $file1cTelemetryTarget -Force + } if ($EmailCollectorScriptSource -and (Test-Path -LiteralPath $EmailCollectorScriptSource)) { Copy-Item -LiteralPath $EmailCollectorScriptSource -Destination $emailCollectorTarget -Force } @@ -464,6 +719,8 @@ function Copy-ActivityWatchCollectorAssets { FileCollectorScript = $fileCollectorTarget SessionCollectorScript = $sessionCollectorTarget EvtxExportScript = $evtxExportTarget + HayabusaUploadScript = $hayabusaUploadTarget + File1CTelemetryScript = $file1cTelemetryTarget EmailCollectorScript = $emailCollectorTarget ExampleRules = $exampleRulesTarget ActiveRules = $rulesTarget @@ -496,6 +753,8 @@ function New-ActivityWatchDeploymentConfig { [Parameter(Mandatory = $true)] [string]$SessionCollectorScript, [string]$EvtxExportScript, + [string]$HayabusaUploadScript, + [string]$File1CTelemetryScript, [string]$EmailCollectorScript, [Parameter(Mandatory = $true)] [string]$RulesPath, @@ -518,6 +777,7 @@ function New-ActivityWatchDeploymentConfig { [int]$EvtxRetentionDays = 14, [string[]]$EvtxChannels = @(), [bool]$LogonMarkerEnabled = $true, + [bool]$ProcessEventsEnabled = $true, [Parameter(Mandatory = $true)] [string]$LaunchScriptPath, [Parameter(Mandatory = $true)] @@ -535,6 +795,18 @@ function New-ActivityWatchDeploymentConfig { [Parameter(Mandatory = $true)] [pscustomobject[]]$UserTasks, [string]$PackageVersion = 'v0.13.2', + [bool]$HayabusaAutoUploadEnabled = $true, + [int]$HayabusaAutoUploadIntervalHours = 6, + [int]$HayabusaAutoUploadHoursBack = 6, + [string]$HayabusaAutoUploadMode = 'incident', + [string]$HayabusaAutoUploadTaskName = 'ActivityWatch Hayabusa Upload', + [bool]$File1CAutoUploadEnabled = $true, + [int]$File1CAutoUploadIntervalHours = 6, + [string]$File1CAutoUploadTaskName = 'ActivityWatch File1C Upload', + [string]$File1CTargetHost, + [string]$File1CTargetUser = 'igor', + [string]$File1CRemoteRoot = '/opt/activitywatch/clickhouse-1c/landing', + [string]$File1CRegistryWorkbookPath = 'E:\USER1\СПИСОК ПРЕДПРИЯТИЙ И ИХ РАСПРЕДЕЛЕНИЕ.xlsx', [switch]$IntegrationTestEnabled ) @@ -554,6 +826,9 @@ function New-ActivityWatchDeploymentConfig { } $effectivePolicyEngineHost = if ([string]::IsNullOrWhiteSpace($PolicyEngineHost)) { $ServerHost } else { $PolicyEngineHost } $effectivePolicyCachePath = if ([string]::IsNullOrWhiteSpace($PolicyCachePath)) { Join-Path $StateRoot 'dlp-policy-cache.json' } else { $PolicyCachePath } + if ($File1CAutoUploadEnabled -and [string]::IsNullOrWhiteSpace($File1CTargetHost)) { + throw 'File1CTargetHost is required when File1CAutoUploadEnabled is true.' + } return [pscustomobject]@{ version = 1 @@ -575,6 +850,8 @@ function New-ActivityWatchDeploymentConfig { fileCollectorScript = $FileCollectorScript sessionCollectorScript = $SessionCollectorScript evtxExportScript = $EvtxExportScript + hayabusaUploadScript = $HayabusaUploadScript + file1cTelemetryScript = $File1CTelemetryScript rulesPath = $RulesPath policyPath = $PolicyPath launchScript = $LaunchScriptPath @@ -602,10 +879,29 @@ function New-ActivityWatchDeploymentConfig { evtxExportRoot = $effectiveEvtxExportRoot retentionDays = $EvtxRetentionDays evtxChannels = @($effectiveEvtxChannels) + hayabusaAutomation = [pscustomobject]@{ + enabled = [bool]$HayabusaAutoUploadEnabled + intervalHours = $HayabusaAutoUploadIntervalHours + hoursBack = $HayabusaAutoUploadHoursBack + mode = $HayabusaAutoUploadMode + taskName = $HayabusaAutoUploadTaskName + } + } + analytics = [pscustomobject]@{ + file1cAutomation = [pscustomobject]@{ + enabled = [bool]$File1CAutoUploadEnabled + intervalHours = $File1CAutoUploadIntervalHours + taskName = $File1CAutoUploadTaskName + targetHost = $File1CTargetHost + targetUser = $File1CTargetUser + remoteRoot = $File1CRemoteRoot + registryWorkbookPath = $File1CRegistryWorkbookPath + } } sessionEvents = [pscustomobject]@{ - logonEnabled = $LogonMarkerEnabled - bucketPrefix = 'aw-session-events' + logonEnabled = $LogonMarkerEnabled + processEventsEnabled = $ProcessEventsEnabled + bucketPrefix = 'aw-session-events' } recovery = [pscustomobject]@{ intervalSeconds = $RecoveryIntervalSeconds @@ -680,7 +976,9 @@ Set-StrictMode -Version Latest [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 Add-Type -AssemblyName System.Net.Http -`$script:MaxCollectorPowerShellProcesses = 24 +`$script:MaxCollectorPowerShellProcesses = 48 +`$script:CollectorProcessSnapshotLoaded = `$false +`$script:CollectorProcessSnapshot = @() function Get-DeploymentConfig { param([string]`$Path) @@ -696,6 +994,41 @@ function Test-ProcessInSession { return [bool](Get-Process -Name `$Name -ErrorAction SilentlyContinue | Where-Object { `$_.SessionId -eq `$SessionId } | Select-Object -First 1) } +function Get-CollectorProcessSnapshot { + if (`$script:CollectorProcessSnapshotLoaded) { + return @(`$script:CollectorProcessSnapshot) + } + + `$script:CollectorProcessSnapshotLoaded = `$true + `$script:CollectorProcessSnapshot = @() + `$job = `$null + try { + `$job = Start-Job -ScriptBlock { + Get-CimInstance Win32_Process -Filter "Name = 'powershell.exe' OR Name = 'pwsh.exe'" -ErrorAction SilentlyContinue | + Where-Object { + `$_.CommandLine -match 'AWatch-rus' -and + `$_.CommandLine -match '\.ps1' + } | + Select-Object ProcessId, SessionId, CommandLine + } + + if (Wait-Job -Job `$job -Timeout 4) { + `$script:CollectorProcessSnapshot = @(Receive-Job -Job `$job -ErrorAction SilentlyContinue) + } + } + catch { + `$script:CollectorProcessSnapshot = @() + } + finally { + if (`$job) { + Stop-Job -Job `$job -ErrorAction SilentlyContinue | Out-Null + Remove-Job -Job `$job -Force -ErrorAction SilentlyContinue | Out-Null + } + } + + return @(`$script:CollectorProcessSnapshot) +} + function Test-CollectorRunning { param( [string]`$ScriptPath, @@ -703,9 +1036,8 @@ function Test-CollectorRunning { ) `$escapedCollector = [Regex]::Escape(`$ScriptPath) - `$processes = Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | + `$processes = Get-CollectorProcessSnapshot | Where-Object { - (`$_.Name -ieq 'powershell.exe' -or `$_.Name -ieq 'pwsh.exe') -and `$_.SessionId -eq `$SessionId -and `$_.CommandLine -match `$escapedCollector } @@ -714,14 +1046,7 @@ function Test-CollectorRunning { } function Get-CollectorPowerShellProcessCount { - `$processes = Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | - Where-Object { - (`$_.Name -ieq 'powershell.exe' -or `$_.Name -ieq 'pwsh.exe') -and - `$_.CommandLine -match 'AWatch-rus' -and - `$_.CommandLine -match '\.ps1' - } - - return @(`$processes).Count + return @(Get-CollectorProcessSnapshot).Count } function New-LaunchLock { @@ -863,12 +1188,12 @@ function Send-LogonMarkerIfNeeded { `$stateRoot = [string]`$Config.paths.stateRoot `$markerRoots = New-Object System.Collections.Generic.List[string] - if (-not [string]::IsNullOrWhiteSpace(`$env:LOCALAPPDATA)) { - `$markerRoots.Add((Join-Path `$env:LOCALAPPDATA 'AWatch-rus\markers')) - } if (-not [string]::IsNullOrWhiteSpace(`$stateRoot)) { `$markerRoots.Add((Join-Path `$stateRoot 'markers')) } + if (-not [string]::IsNullOrWhiteSpace(`$env:LOCALAPPDATA)) { + `$markerRoots.Add((Join-Path `$env:LOCALAPPDATA 'AWatch-rus\markers')) + } `$markerDir = `$null foreach (`$candidate in `$markerRoots) { @@ -1029,6 +1354,7 @@ function Write-ActivityWatchRecoveryScript { [string]$ConfigPath ) + $modulePath = Join-Path $PSScriptRoot 'ActivityWatch.Windows.Common.psm1' $content = @" param( [string]`$ConfigPath = '$ConfigPath' @@ -1036,57 +1362,58 @@ param( Set-StrictMode -Version Latest `$ErrorActionPreference = 'Continue' +Import-Module '$modulePath' -Force +Invoke-ActivityWatchRecoveryLoop -ConfigPath `$ConfigPath +"@ -function Get-DeploymentConfig { - param([string]`$Path) - return Get-Content -LiteralPath `$Path -Raw | ConvertFrom-Json + Set-Content -LiteralPath $Path -Value $content -Encoding UTF8 } -function Get-RecoveryConfigPaths { - param([string]`$PrimaryConfigPath) +function Get-ActivityWatchRecoveryConfigPaths { + param([string]$PrimaryConfigPath) - `$paths = New-Object System.Collections.Generic.List[string] - if (`$PrimaryConfigPath -and (Test-Path -LiteralPath `$PrimaryConfigPath)) { - `$paths.Add((Resolve-Path -LiteralPath `$PrimaryConfigPath).Path) + $paths = New-Object System.Collections.Generic.List[string] + if ($PrimaryConfigPath -and (Test-Path -LiteralPath $PrimaryConfigPath)) { + $paths.Add((Resolve-Path -LiteralPath $PrimaryConfigPath).Path) } - `$searchRoot = `$env:ProgramData - if (`$PrimaryConfigPath) { - `$stateRoot = Split-Path -Path `$PrimaryConfigPath -Parent - `$candidateRoot = Split-Path -Path `$stateRoot -Parent - if (`$candidateRoot -and (Test-Path -LiteralPath `$candidateRoot)) { - `$searchRoot = `$candidateRoot + $searchRoot = $env:ProgramData + if ($PrimaryConfigPath) { + $stateRoot = Split-Path -Path $PrimaryConfigPath -Parent + $candidateRoot = Split-Path -Path $stateRoot -Parent + if ($candidateRoot -and (Test-Path -LiteralPath $candidateRoot)) { + $searchRoot = $candidateRoot } } - if (Test-Path -LiteralPath `$searchRoot) { - Get-ChildItem -LiteralPath `$searchRoot -Directory -ErrorAction SilentlyContinue | - Where-Object { `$_.Name -like 'ActivityWatch*' } | + if (Test-Path -LiteralPath $searchRoot) { + Get-ChildItem -LiteralPath $searchRoot -Directory -ErrorAction SilentlyContinue | + Where-Object { $_.Name -like 'ActivityWatch*' } | ForEach-Object { - `$candidate = Join-Path `$_.FullName 'deployment-config.json' - if (Test-Path -LiteralPath `$candidate) { - `$paths.Add(`$candidate) + $candidate = Join-Path $_.FullName 'deployment-config.json' + if (Test-Path -LiteralPath $candidate) { + $paths.Add($candidate) } } } - return @(`$paths | Sort-Object -Unique) + return @($paths | Sort-Object -Unique) } -function Get-RecoveryTaskDefinitions { - param([string[]]`$ConfigPaths) +function Get-ActivityWatchRecoveryTaskDefinitions { + param([string[]]$ConfigPaths) - `$taskMap = [ordered]@{} - foreach (`$candidatePath in @(`$ConfigPaths)) { + $taskMap = [ordered]@{} + foreach ($candidatePath in @($ConfigPaths)) { try { - `$config = Get-DeploymentConfig -Path `$candidatePath - foreach (`$task in @(`$config.userTasks)) { - `$taskName = [string]`$task.launchTaskName - `$userId = [string]`$task.userId - if (-not [string]::IsNullOrWhiteSpace(`$taskName) -and -not `$taskMap.Contains(`$taskName)) { - `$taskMap[`$taskName] = [pscustomobject]@{ - taskName = `$taskName - userId = `$userId + $config = Read-ActivityWatchDeploymentConfig -Path $candidatePath + foreach ($task in @($config.userTasks)) { + $taskName = [string]$task.launchTaskName + $userId = Normalize-ActivityWatchUserId -UserId ([string]$task.userId) + if (-not [string]::IsNullOrWhiteSpace($taskName) -and -not $taskMap.Contains($taskName)) { + $taskMap[$taskName] = [pscustomobject]@{ + taskName = $taskName + userId = $userId } } } @@ -1095,221 +1422,499 @@ function Get-RecoveryTaskDefinitions { } } - return @(`$taskMap.Values) + return @($taskMap.Values) } -function New-RecoveryLock { - param([string]`$PrimaryConfigPath) +function New-ActivityWatchRecoveryLock { + param([string]$PrimaryConfigPath) - `$stateRoot = if (`$PrimaryConfigPath) { Split-Path -Path `$PrimaryConfigPath -Parent } else { Join-Path `$env:ProgramData 'AWatch-rus' } - if (-not (Test-Path -LiteralPath `$stateRoot)) { - New-Item -Path `$stateRoot -ItemType Directory -Force | Out-Null + $stateRoot = if ($PrimaryConfigPath) { Split-Path -Path $PrimaryConfigPath -Parent } else { Join-Path $env:ProgramData 'AWatch-rus' } + if (-not (Test-Path -LiteralPath $stateRoot)) { + New-Item -Path $stateRoot -ItemType Directory -Force | Out-Null } - `$lockPath = Join-Path `$stateRoot 'recovery-loop.lock' - if (Test-Path -LiteralPath `$lockPath) { + $lockPath = Join-Path $stateRoot 'recovery-loop.lock' + if (Test-Path -LiteralPath $lockPath) { try { - `$lockData = Get-Content -LiteralPath `$lockPath -Raw | ConvertFrom-Json - `$existingPid = [int]`$lockData.pid - if (`$existingPid -gt 0 -and (Get-Process -Id `$existingPid -ErrorAction SilentlyContinue)) { - return `$null + $lockData = Get-Content -LiteralPath $lockPath -Raw | ConvertFrom-Json + $existingPid = [int]$lockData.pid + if ($existingPid -gt 0 -and (Get-Process -Id $existingPid -ErrorAction SilentlyContinue)) { + return $null } } catch { } } - `$payload = @{ - pid = `$PID + $payload = @{ + pid = $PID createdAt = (Get-Date).ToUniversalTime().ToString('o') } | ConvertTo-Json -Compress - Set-Content -LiteralPath `$lockPath -Value `$payload -Encoding UTF8 - return `$lockPath + Set-Content -LiteralPath $lockPath -Value $payload -Encoding UTF8 + return $lockPath } -function Start-TaskIfNotRunning { - param( - [string]`$TaskName, - [string]`$UserId, - [string[]]`$LoggedOnUsers - ) - if ([string]::IsNullOrWhiteSpace(`$TaskName)) { - return - } +function Test-ActivityWatchCollectorRunningGlobal { + param([string]$ScriptPath) - if ([string]::IsNullOrWhiteSpace(`$UserId)) { - return - } - - if (-not (Test-UserHasSession -UserId `$UserId -LoggedOnUsers `$LoggedOnUsers)) { - return - } - - try { - `$task = Get-ScheduledTask -TaskName `$TaskName -ErrorAction SilentlyContinue - if (-not `$task) { - return - } - if ([string]`$task.State -eq 'Running') { - return - } - Start-ScheduledTask -TaskName `$TaskName -ErrorAction SilentlyContinue - } - catch { - } -} - -function Get-LoggedOnUsers { - `$users = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase) - - try { - `$lines = & quser.exe 2>`$null - foreach (`$line in @(`$lines)) { - `$normalized = [string]`$line - if ([string]::IsNullOrWhiteSpace(`$normalized)) { - continue - } - - `$normalized = `$normalized.TrimStart(' ', '>') - if ([string]::IsNullOrWhiteSpace(`$normalized)) { - continue - } - - if (`$normalized -match '^(USERNAME|ПОЛЬЗОВАТЕЛЬ)\s+') { - continue - } - - `$parts = `$normalized -split '\s+' - if (`$parts.Count -lt 1) { - continue - } - - `$user = [string]`$parts[0] - if ([string]::IsNullOrWhiteSpace(`$user)) { - continue - } - - [void]`$users.Add(`$user) - [void]`$users.Add(('{0}\{1}' -f `$env:COMPUTERNAME, `$user)) - if (-not [string]::IsNullOrWhiteSpace(`$env:USERDOMAIN)) { - [void]`$users.Add(('{0}\{1}' -f `$env:USERDOMAIN, `$user)) - } - } - } - catch { - } - - return @(`$users) -} - -function Test-UserHasSession { - param( - [string]`$UserId, - [string[]]`$LoggedOnUsers - ) - - if ([string]::IsNullOrWhiteSpace(`$UserId)) { - return `$false - } - - `$candidateIds = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase) - [void]`$candidateIds.Add(`$UserId) - - `$leafUser = `$UserId - if (`$leafUser -match '^[^\\]+\\(.+)$') { - `$leafUser = `$Matches[1] - [void]`$candidateIds.Add(`$leafUser) - } - - [void]`$candidateIds.Add(('{0}\{1}' -f `$env:COMPUTERNAME, `$leafUser)) - if (-not [string]::IsNullOrWhiteSpace(`$env:USERDOMAIN)) { - [void]`$candidateIds.Add(('{0}\{1}' -f `$env:USERDOMAIN, `$leafUser)) - } - - foreach (`$candidate in @(`$candidateIds)) { - if (`$LoggedOnUsers -contains `$candidate) { - return `$true - } - } - - return `$false -} - -function Test-CollectorRunningGlobal { - param([string]`$ScriptPath) - if ([string]::IsNullOrWhiteSpace(`$ScriptPath)) { - return `$false + if ([string]::IsNullOrWhiteSpace($ScriptPath)) { + return $false } return [bool]@( Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | Where-Object { - (`$_.Name -ieq 'powershell.exe' -or `$_.Name -ieq 'pwsh.exe') -and - `$_.CommandLine -match [Regex]::Escape(`$ScriptPath) + ($_.Name -ieq 'powershell.exe' -or $_.Name -ieq 'pwsh.exe') -and + $_.CommandLine -match [Regex]::Escape($ScriptPath) } ).Count } -function Start-CollectorScriptGlobalIfNeeded { +function Start-ActivityWatchCollectorScriptGlobalIfNeeded { param( - [string]`$ScriptPath, - [string]`$ConfigPath + [string]$ScriptPath, + [string]$ConfigPath ) - if ([string]::IsNullOrWhiteSpace(`$ScriptPath)) { + if ([string]::IsNullOrWhiteSpace($ScriptPath)) { return } - if (-not (Test-Path -LiteralPath `$ScriptPath)) { + if (-not (Test-Path -LiteralPath $ScriptPath)) { return } - if (Test-CollectorRunningGlobal -ScriptPath `$ScriptPath) { + if (Test-ActivityWatchCollectorRunningGlobal -ScriptPath $ScriptPath) { return } - `$powershellExe = Join-Path `$env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe' - `$argumentList = @('-NoProfile', '-WindowStyle', 'Hidden', '-ExecutionPolicy', 'Bypass', '-File', `$ScriptPath, '-ConfigPath', `$ConfigPath) - Start-Process -FilePath `$powershellExe -ArgumentList `$argumentList -WindowStyle Hidden + $powershellExe = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe' + $argumentList = @('-NoProfile', '-WindowStyle', 'Hidden', '-ExecutionPolicy', 'Bypass', '-File', $ScriptPath, '-ConfigPath', $ConfigPath) + Start-Process -FilePath $powershellExe -ArgumentList $argumentList -WindowStyle Hidden } -`$recoveryLockPath = New-RecoveryLock -PrimaryConfigPath `$ConfigPath -if (-not `$recoveryLockPath) { - return +function Start-ActivityWatchTaskIfNotRunning { + param( + [string]$TaskName, + [string]$UserId, + [object[]]$SessionRecords + ) + + if ([string]::IsNullOrWhiteSpace($TaskName) -or [string]::IsNullOrWhiteSpace($UserId)) { + return $false + } + + if (-not (Test-ActivityWatchUserHasLiveSession -UserId $UserId -SessionRecords $SessionRecords)) { + return $false + } + + try { + $task = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue + if (-not $task) { + return $false + } + if ([string]$task.State -eq 'Running') { + return $true + } + Start-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue + return $true + } + catch { + return $false + } } -try { - while (`$true) { - `$sleepSeconds = 180 - try { - `$configPaths = Get-RecoveryConfigPaths -PrimaryConfigPath `$ConfigPath - `$config = Get-DeploymentConfig -Path `$ConfigPath - `$loggedOnUsers = Get-LoggedOnUsers - `$stateRoot = [string]`$config.paths.stateRoot - `$sessionCollectorScript = if (`$config.paths.PSObject.Properties.Name -contains 'sessionCollectorScript') { [string]`$config.paths.sessionCollectorScript } else { Join-Path `$stateRoot 'worktime-session-collector.ps1' } - Start-CollectorScriptGlobalIfNeeded -ScriptPath `$sessionCollectorScript -ConfigPath `$ConfigPath - foreach (`$taskDef in Get-RecoveryTaskDefinitions -ConfigPaths `$configPaths) { - Start-TaskIfNotRunning -TaskName `$taskDef.taskName -UserId `$taskDef.userId -LoggedOnUsers `$loggedOnUsers - } +function Get-ActivityWatchLiveInteractiveSessions { + param([object[]]$SessionRecords) - if (`$config -and `$config.recovery -and `$config.recovery.intervalSeconds) { - `$sleepSeconds = [Math]::Max([int]`$config.recovery.intervalSeconds, 30) + return @( + $SessionRecords | + Where-Object { + $_.IsLive -and + $_.SessionId -gt 0 -and + -not [string]::IsNullOrWhiteSpace([string]$_.UserName) + } | + Sort-Object @{ Expression = { if ([string]$_.SessionName -ieq 'console') { 0 } else { 1 } } }, @{ Expression = { [int]$_.SessionId } } + ) +} + +function Resolve-ActivityWatchLiveSessionUserId { + param( + [Parameter(Mandatory = $true)] + [pscustomobject]$SessionRecord, + [pscustomobject[]]$TaskDefinitions + ) + + $rawUser = [string]$SessionRecord.UserName + if ([string]::IsNullOrWhiteSpace($rawUser)) { + return $null + } + + foreach ($taskDef in @($TaskDefinitions)) { + foreach ($candidate in @(Resolve-ActivityWatchUserCandidates -UserId [string]$taskDef.userId)) { + if ($candidate -ieq $rawUser -or + $candidate -ieq ('{0}\{1}' -f $env:COMPUTERNAME, $rawUser) -or + ((-not [string]::IsNullOrWhiteSpace($env:USERDOMAIN)) -and $candidate -ieq ('{0}\{1}' -f $env:USERDOMAIN, $rawUser))) { + return [string]$taskDef.userId } } - catch { + } + + if ($rawUser -match '^[^\\]+\\') { + return $rawUser + } + + return ('{0}\{1}' -f $env:COMPUTERNAME, $rawUser) +} + +function Get-ActivityWatchExplorerUsersBySession { + $map = @{} + + try { + Get-Process explorer -IncludeUserName -ErrorAction SilentlyContinue | + Where-Object { $_.SessionId -gt 0 -and -not [string]::IsNullOrWhiteSpace([string]$_.UserName) } | + Sort-Object SessionId, StartTime | + ForEach-Object { + if (-not $map.ContainsKey([int]$_.SessionId)) { + $map[[int]$_.SessionId] = [string]$_.UserName + } + } + } + catch { + } + + return $map +} + +function Get-ActivityWatchDisconnectedInteractiveSessions { + param([object[]]$SessionRecords) + + $explorerUsers = Get-ActivityWatchExplorerUsersBySession + $result = New-Object System.Collections.Generic.List[object] + + foreach ($session in @($SessionRecords | Where-Object { -not $_.IsLive -and $_.SessionId -gt 0 })) { + $resolvedUser = [string]$session.UserName + if ([string]::IsNullOrWhiteSpace($resolvedUser) -and $explorerUsers.ContainsKey([int]$session.SessionId)) { + $resolvedUser = [string]$explorerUsers[[int]$session.SessionId] } - Start-Sleep -Seconds `$sleepSeconds - } -} -finally { - if (`$recoveryLockPath -and (Test-Path -LiteralPath `$recoveryLockPath)) { - Remove-Item -LiteralPath `$recoveryLockPath -Force -ErrorAction SilentlyContinue - } -} -"@ + if ([string]::IsNullOrWhiteSpace($resolvedUser)) { + continue + } - Set-Content -LiteralPath $Path -Value $content -Encoding UTF8 + $result.Add([pscustomobject]@{ + SessionName = [string]$session.SessionName + SessionId = [int]$session.SessionId + State = [string]$session.State + UserName = $resolvedUser + }) | Out-Null + } + + return @($result | Sort-Object SessionId -Unique) +} + +function Get-ActivityWatchMarkerDirectories { + param([string]$StateRoot) + + $roots = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase) + + if (-not [string]::IsNullOrWhiteSpace($StateRoot)) { + [void]$roots.Add((Join-Path $StateRoot 'markers')) + } + + $usersRoot = Join-Path $env:SystemDrive 'Users' + if (Test-Path -LiteralPath $usersRoot) { + foreach ($dir in @(Get-ChildItem -LiteralPath $usersRoot -Directory -ErrorAction SilentlyContinue)) { + [void]$roots.Add((Join-Path $dir.FullName 'AppData\Local\AWatch-rus\markers')) + } + } + + return @($roots) +} + +function Remove-ActivityWatchLogonMarkersForSession { + param( + [Parameter(Mandatory = $true)] + [string]$StateRoot, + [int]$SessionId, + [string]$UserName + ) + + $userCandidates = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase) + if (-not [string]::IsNullOrWhiteSpace($UserName)) { + [void]$userCandidates.Add($UserName) + if ($UserName -match '^[^\\]+\\(.+)$') { + [void]$userCandidates.Add($Matches[1]) + } + } + + foreach ($markerDir in @(Get-ActivityWatchMarkerDirectories -StateRoot $StateRoot)) { + if (-not (Test-Path -LiteralPath $markerDir)) { + continue + } + + foreach ($marker in @(Get-ChildItem -LiteralPath $markerDir -Filter '*.marker' -File -ErrorAction SilentlyContinue)) { + $name = [string]$marker.BaseName + if ($name -notmatch '^logon-(.+)-(\d+)-') { + continue + } + + $markerUser = [string]$Matches[1] + $markerSessionId = [int]$Matches[2] + if ($markerSessionId -ne $SessionId) { + continue + } + + if ($userCandidates.Count -gt 0 -and -not $userCandidates.Contains($markerUser)) { + continue + } + + Remove-Item -LiteralPath $marker.FullName -Force -ErrorAction SilentlyContinue + } + } +} + +function Stop-ActivityWatchProcessesInNonLiveSessions { + param( + [Parameter(Mandatory = $true)] + [object[]]$SessionRecords, + [Parameter(Mandatory = $true)] + [pscustomobject]$Config + ) + + $stateRoot = if ($Config.paths.PSObject.Properties.Name -contains 'stateRoot') { [string]$Config.paths.stateRoot } else { Join-Path $env:ProgramData 'AWatch-rus' } + $sessionIds = @( + $SessionRecords | + Where-Object { -not $_.IsLive -and $_.SessionId -gt 0 } | + ForEach-Object { [int]$_.SessionId } | + Sort-Object -Unique + ) + + if (-not $sessionIds -or $sessionIds.Count -eq 0) { + return + } + + $sessionScopedScripts = New-Object System.Collections.Generic.List[string] + foreach ($propertyName in @('collectorScript', 'endpointCollectorScript', 'fileCollectorScript', 'emailCollectorScript', 'launchScript')) { + if ($Config.paths.PSObject.Properties.Name -contains $propertyName) { + $candidatePath = [string]$Config.paths.$propertyName + if (-not [string]::IsNullOrWhiteSpace($candidatePath)) { + $sessionScopedScripts.Add($candidatePath) | Out-Null + } + } + } + + foreach ($session in @($SessionRecords | Where-Object { -not $_.IsLive -and $_.SessionId -gt 0 })) { + Remove-ActivityWatchLogonMarkersForSession -StateRoot $stateRoot -SessionId ([int]$session.SessionId) -UserName ([string]$session.UserName) + } + + Get-Process -Name 'aw-watcher-afk','aw-watcher-window' -ErrorAction SilentlyContinue | + Where-Object { $sessionIds -contains [int]$_.SessionId } | + ForEach-Object { + Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue + } + + Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | + Where-Object { + ($_.Name -ieq 'powershell.exe' -or $_.Name -ieq 'pwsh.exe') -and + ($sessionIds -contains [int]$_.SessionId) + } | + ForEach-Object { + $commandLine = [string]$_.CommandLine + foreach ($scriptPath in $sessionScopedScripts) { + if (-not [string]::IsNullOrWhiteSpace($scriptPath) -and $commandLine -match [Regex]::Escape($scriptPath)) { + Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue + break + } + } + } +} + +function Promote-ActivityWatchDisconnectedSessionToConsole { + param( + [pscustomobject[]]$TaskDefinitions, + [object[]]$SessionRecords + ) + + $candidates = Get-ActivityWatchDisconnectedInteractiveSessions -SessionRecords $SessionRecords + if (-not $candidates -or $candidates.Count -eq 0) { + return $false + } + + $selected = $null + foreach ($taskDef in @($TaskDefinitions)) { + foreach ($candidate in @($candidates)) { + foreach ($knownUser in @(Resolve-ActivityWatchUserCandidates -UserId [string]$taskDef.userId)) { + if ($knownUser -ieq [string]$candidate.UserName -or + $knownUser -ieq ('{0}\{1}' -f $env:COMPUTERNAME, [string]$candidate.UserName) -or + ((-not [string]::IsNullOrWhiteSpace($env:USERDOMAIN)) -and $knownUser -ieq ('{0}\{1}' -f $env:USERDOMAIN, [string]$candidate.UserName))) { + $selected = $candidate + break + } + } + if ($selected) { break } + } + if ($selected) { break } + } + + if (-not $selected) { + $selected = $candidates | Select-Object -First 1 + } + + if (-not $selected) { + return $false + } + + try { + & cmd.exe /c ("tscon {0} /dest:console" -f [int]$selected.SessionId) | Out-Null + return ($LASTEXITCODE -eq 0) + } + catch { + return $false + } +} + +function Ensure-ActivityWatchLaunchTaskForUser { + param( + [Parameter(Mandatory = $true)] + [string]$UserId, + [Parameter(Mandatory = $true)] + [string]$LaunchScriptPath, + [Parameter(Mandatory = $true)] + [string]$ConfigPath + ) + + if ([string]::IsNullOrWhiteSpace($UserId) -or -not (Test-Path -LiteralPath $LaunchScriptPath)) { + return $null + } + + $taskName = "ActivityWatch Launch [$((Get-ActivityWatchTaskNameToken -UserId $UserId))]" + $launcherPath = Get-ActivityWatchHiddenLauncherPath -ScriptPath $LaunchScriptPath + Write-ActivityWatchHiddenPowerShellWrapper -Path $launcherPath -ScriptPath $LaunchScriptPath -ConfigPath $ConfigPath + + $wscriptExe = Join-Path $env:SystemRoot 'System32\wscript.exe' + $action = New-ScheduledTaskAction -Execute $wscriptExe -Argument "//B //NoLogo `"$launcherPath`"" + $trigger = New-ScheduledTaskTrigger -AtLogOn -User $UserId + $principal = New-ScheduledTaskPrincipal -UserId $UserId -LogonType Interactive -RunLevel Highest + $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -StartWhenAvailable -MultipleInstances IgnoreNew -ExecutionTimeLimit (New-TimeSpan -Hours 0) + + try { + $existingTask = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue + if ($existingTask) { + $existingUserId = [string]$existingTask.Principal.UserId + $existingArgs = @($existingTask.Actions | ForEach-Object { [string]$_.Arguments }) -join ' ' + if ($existingUserId -ieq $UserId -and $existingArgs -like "*$launcherPath*") { + return $taskName + } + + Remove-ActivityWatchScheduledTask -TaskName $taskName + } + + Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings | Out-Null + return $taskName + } + catch { + return $null + } +} + +function Start-ActivityWatchConsoleFallbackIfNeeded { + param( + [pscustomobject[]]$TaskDefinitions, + [object[]]$SessionRecords, + [pscustomobject]$Config, + [string]$ConfigPath, + [bool]$ConfiguredLiveTasksStarted + ) + + if ($ConfiguredLiveTasksStarted) { + return + } + + $liveSessions = Get-ActivityWatchLiveInteractiveSessions -SessionRecords $SessionRecords + if (-not $liveSessions -or $liveSessions.Count -eq 0) { + if (Promote-ActivityWatchDisconnectedSessionToConsole -TaskDefinitions $TaskDefinitions -SessionRecords $SessionRecords) { + Start-Sleep -Seconds 3 + $SessionRecords = Get-ActivityWatchSessionRecords + $liveSessions = Get-ActivityWatchLiveInteractiveSessions -SessionRecords $SessionRecords + } + } + if (-not $liveSessions -or $liveSessions.Count -eq 0) { + return + } + + $launchScriptPath = if ($Config.paths.PSObject.Properties.Name -contains 'launchScript') { [string]$Config.paths.launchScript } else { $null } + if ([string]::IsNullOrWhiteSpace($launchScriptPath)) { + return + } + + $preferredSession = $liveSessions | Select-Object -First 1 + $userId = Resolve-ActivityWatchLiveSessionUserId -SessionRecord $preferredSession -TaskDefinitions $TaskDefinitions + if ([string]::IsNullOrWhiteSpace($userId)) { + return + } + + $taskName = Ensure-ActivityWatchLaunchTaskForUser -UserId $userId -LaunchScriptPath $launchScriptPath -ConfigPath $ConfigPath + if ([string]::IsNullOrWhiteSpace($taskName)) { + return + } + + try { + $task = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue + if ($task -and [string]$task.State -ne 'Running') { + Start-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue + } + } + catch { + } +} + +function Invoke-ActivityWatchRecoveryLoop { + param([string]$ConfigPath) + + $recoveryLockPath = New-ActivityWatchRecoveryLock -PrimaryConfigPath $ConfigPath + if (-not $recoveryLockPath) { + return + } + + try { + while ($true) { + $sleepSeconds = 180 + try { + $configPaths = Get-ActivityWatchRecoveryConfigPaths -PrimaryConfigPath $ConfigPath + $config = Read-ActivityWatchDeploymentConfig -Path $ConfigPath + $taskDefs = Get-ActivityWatchRecoveryTaskDefinitions -ConfigPaths $configPaths + $sessionRecords = Get-ActivityWatchSessionRecords + Stop-ActivityWatchProcessesInNonLiveSessions -SessionRecords $sessionRecords -Config $config + $sessionRecords = Get-ActivityWatchSessionRecords + $stateRoot = [string]$config.paths.stateRoot + $sessionCollectorScript = if ($config.paths.PSObject.Properties.Name -contains 'sessionCollectorScript') { [string]$config.paths.sessionCollectorScript } else { Join-Path $stateRoot 'worktime-session-collector.ps1' } + Start-ActivityWatchCollectorScriptGlobalIfNeeded -ScriptPath $sessionCollectorScript -ConfigPath $ConfigPath + + $configuredLiveTasksStarted = $false + foreach ($taskDef in $taskDefs) { + if (Start-ActivityWatchTaskIfNotRunning -TaskName $taskDef.taskName -UserId $taskDef.userId -SessionRecords $sessionRecords) { + $configuredLiveTasksStarted = $true + } + } + + Start-ActivityWatchConsoleFallbackIfNeeded -TaskDefinitions $taskDefs -SessionRecords $sessionRecords -Config $config -ConfigPath $ConfigPath -ConfiguredLiveTasksStarted $configuredLiveTasksStarted + + if ($config -and $config.recovery -and $config.recovery.intervalSeconds) { + $sleepSeconds = [Math]::Max([int]$config.recovery.intervalSeconds, 30) + } + } + catch { + } + + Start-Sleep -Seconds $sleepSeconds + } + } + finally { + if ($recoveryLockPath -and (Test-Path -LiteralPath $recoveryLockPath)) { + Remove-Item -LiteralPath $recoveryLockPath -Force -ErrorAction SilentlyContinue + } + } } function Get-ActivityWatchHiddenLauncherPath { @@ -1344,8 +1949,15 @@ function Write-ActivityWatchHiddenPowerShellWrapper { $escapedConfigPath = $ConfigPath.Replace('"', '""') $content = @" +On Error Resume Next Set shell = CreateObject("WScript.Shell") -shell.Run """$escapedPowerShellExe"" -NoProfile -ExecutionPolicy Bypass -File ""$escapedScriptPath"" -ConfigPath ""$escapedConfigPath""", 0, False +q = Chr(34) +command = q & "$escapedPowerShellExe" & q & " -NoProfile -ExecutionPolicy Bypass -File " & q & "$escapedScriptPath" & q & " -ConfigPath " & q & "$escapedConfigPath" & q +shell.Run command, 0, False +If Err.Number <> 0 Then + WScript.Quit 1 +End If +WScript.Quit 0 "@ Set-Content -LiteralPath $Path -Value $content -Encoding ASCII @@ -1355,11 +1967,66 @@ function Remove-LegacyActivityWatchEntries { $legacyTaskNames = @( 'ActivityWatch Watchers', 'ActivityWatch Guard', - 'ActivityWatch Heal' + 'ActivityWatch Heal', + 'AWatchRusStandaloneAgent', + 'AWatch Worktime Collector', + 'AW DLP Endpoint ADMIN', + 'AW DLP Endpoint USER1' ) foreach ($taskName in $legacyTaskNames) { - Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction SilentlyContinue + Remove-ActivityWatchScheduledTask -TaskName $taskName + } + + $legacyTaskPatterns = @( + 'browser-domains-native-collector.ps1', + 'file-operations-collector.ps1', + 'dlp-endpoint-signals-collector.ps1', + 'worktime-session-collector.ps1', + 'aw-standalone-service.ps1' + ) + $managedTaskNames = @( + 'ActivityWatch Recovery', + 'ActivityWatch Hayabusa Upload', + 'ActivityWatch File1C Upload' + ) + + $scheduledTasks = @() + try { + $scheduledTasks = @(Get-ScheduledTask -ErrorAction Stop) + } + catch { + $scheduledTasks = @() + } + + foreach ($task in $scheduledTasks) { + $taskName = [string]$task.TaskName + if ([string]::IsNullOrWhiteSpace($taskName) -or $managedTaskNames -contains $taskName -or $taskName -like 'ActivityWatch Launch *') { + continue + } + + $isLegacyCollectorTask = $false + foreach ($action in @($task.Actions)) { + $execute = if ($action.PSObject.Properties.Name -contains 'Execute') { [string]$action.Execute } else { '' } + $arguments = if ($action.PSObject.Properties.Name -contains 'Arguments') { [string]$action.Arguments } else { '' } + $commandLine = ('{0} {1}' -f $execute, $arguments).Trim() + if ([string]::IsNullOrWhiteSpace($commandLine)) { + continue + } + foreach ($pattern in $legacyTaskPatterns) { + if ($commandLine -match [Regex]::Escape($pattern)) { + $isLegacyCollectorTask = $true + break + } + } + if ($isLegacyCollectorTask) { + break + } + } + + if ($isLegacyCollectorTask) { + Remove-ActivityWatchScheduledTask -TaskName $taskName + } } $runKey = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Run' @@ -1374,11 +2041,28 @@ function Remove-ActivityWatchScheduledTask { [string]$TaskName ) - Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false -ErrorAction SilentlyContinue + try { + Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false -ErrorAction Stop + } + catch { + } + & cmd.exe /c "schtasks /Delete /TN `"$TaskName`" /F >nul 2>&1" | Out-Null + if ($LASTEXITCODE -eq 0) { + return + } for ($attempt = 0; $attempt -lt 10; $attempt++) { - $task = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue + $task = $null + try { + $task = Get-ScheduledTask -TaskName $TaskName -ErrorAction Stop + } + catch { + & cmd.exe /c "schtasks /Query /TN `"$TaskName`" >nul 2>&1" | Out-Null + if ($LASTEXITCODE -ne 0) { + return + } + } if (-not $task) { return } @@ -1412,7 +2096,8 @@ function Set-ActivityWatchScheduledTaskAction { $taskCommand = ('"{0}" {1}' -f $Execute, $Arguments) & schtasks.exe /Change /TN $TaskName /TR $taskCommand | Out-Null if ($LASTEXITCODE -ne 0) { - throw "Не удалось обновить action задачи ${TaskName}: $($_.Exception.Message)" + Write-Host "skip task action update for $TaskName because the existing principal/action cannot be updated non-interactively: $($_.Exception.Message)" + return $false } return $true } @@ -1526,11 +2211,146 @@ function Register-ActivityWatchRecoveryTask { $launcherPath = Get-ActivityWatchHiddenLauncherPath -ScriptPath $RecoveryScriptPath Write-ActivityWatchHiddenPowerShellWrapper -Path $launcherPath -ScriptPath $RecoveryScriptPath -ConfigPath $ConfigPath $action = New-ScheduledTaskAction -Execute $wscriptExe -Argument "//B //NoLogo `"$launcherPath`"" - $trigger = New-ScheduledTaskTrigger -AtStartup - $principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest + $sessionRecords = @() + try { + $sessionRecords = @(Get-ActivityWatchSessionRecords) + } + catch { + $sessionRecords = @() + } + $liveSession = @(Get-ActivityWatchLiveInteractiveSessions -SessionRecords $sessionRecords) | Select-Object -First 1 + $interactiveUserId = $null + if ($liveSession -and -not [string]::IsNullOrWhiteSpace([string]$liveSession.UserName)) { + $rawUser = [string]$liveSession.UserName + $interactiveUserId = if ($rawUser -match '^[^\\]+\\') { $rawUser } else { ('{0}\{1}' -f $env:COMPUTERNAME, $rawUser) } + } + + if ($interactiveUserId) { + $trigger = New-ScheduledTaskTrigger -AtLogOn -User $interactiveUserId + $principal = New-ScheduledTaskPrincipal -UserId $interactiveUserId -LogonType Interactive -RunLevel Highest + } + else { + $trigger = New-ScheduledTaskTrigger -AtStartup + $principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest + } $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -StartWhenAvailable -Hidden -MultipleInstances IgnoreNew -ExecutionTimeLimit (New-TimeSpan -Hours 0) - Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings | Out-Null + try { + Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -ErrorAction Stop | Out-Null + } + catch { + $taskCommand = ('"{0}" {1}' -f $wscriptExe, $action.Arguments) + if ($interactiveUserId) { + & schtasks.exe /Create /TN $TaskName /SC ONLOGON /RU $interactiveUserId /IT /RL HIGHEST /F /TR $taskCommand | Out-Null + } + else { + & schtasks.exe /Create /TN $TaskName /SC ONSTART /RU SYSTEM /RL HIGHEST /F /TR $taskCommand | Out-Null + } + if ($LASTEXITCODE -ne 0) { + throw + } + } +} + +function Register-ActivityWatchHayabusaAutoUploadTask { + param( + [Parameter(Mandatory = $true)] + [string]$ConfigPath + ) + + $config = Read-ActivityWatchDeploymentConfig -Path $ConfigPath + $forensics = $config.forensics + if ($null -eq $forensics -or $forensics.PSObject.Properties.Name -notcontains 'hayabusaAutomation') { + return + } + + $automation = $forensics.hayabusaAutomation + $taskName = if ($automation.PSObject.Properties.Name -contains 'taskName' -and -not [string]::IsNullOrWhiteSpace([string]$automation.taskName)) { + [string]$automation.taskName + } else { + 'ActivityWatch Hayabusa Upload' + } + + if (-not [bool]$automation.enabled) { + Remove-ActivityWatchScheduledTask -TaskName $taskName + return + } + + $uploadScript = if ($config.paths.PSObject.Properties.Name -contains 'hayabusaUploadScript') { [string]$config.paths.hayabusaUploadScript } else { Join-Path $config.paths.stateRoot 'export-upload-hayabusa-to-aw-server.ps1' } + if (-not (Test-Path -LiteralPath $uploadScript)) { + throw "Не найден скрипт Hayabusa upload: $uploadScript" + } + + $intervalHours = [Math]::Max(1, [int]$automation.intervalHours) + $hoursBack = [Math]::Max(1, [int]$automation.hoursBack) + $mode = if ($automation.PSObject.Properties.Name -contains 'mode' -and -not [string]::IsNullOrWhiteSpace([string]$automation.mode)) { [string]$automation.mode } else { 'incident' } + $powerShellExe = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe' + $taskCommand = "`"$powerShellExe`" -NoProfile -ExecutionPolicy Bypass -File `"$uploadScript`" -ConfigPath `"$ConfigPath`" -HoursBack $hoursBack -Mode `"$mode`"" + + Remove-ActivityWatchScheduledTask -TaskName $taskName + & schtasks.exe /Create /TN $taskName /TR $taskCommand /SC HOURLY /MO $intervalHours /ST 00:00 /RU SYSTEM /RL HIGHEST /F | Out-Null + if ($LASTEXITCODE -ne 0) { + throw "Не удалось создать scheduled task $taskName через schtasks.exe" + } +} + +function Register-ActivityWatchFile1CAutoUploadTask { + param( + [Parameter(Mandatory = $true)] + [string]$ConfigPath + ) + + $config = Read-ActivityWatchDeploymentConfig -Path $ConfigPath + if ($config.PSObject.Properties.Name -notcontains 'analytics' -or + $config.analytics.PSObject.Properties.Name -notcontains 'file1cAutomation') { + return + } + + $automation = $config.analytics.file1cAutomation + $taskName = if ($automation.PSObject.Properties.Name -contains 'taskName' -and -not [string]::IsNullOrWhiteSpace([string]$automation.taskName)) { + [string]$automation.taskName + } else { + 'ActivityWatch File1C Upload' + } + + if (-not [bool]$automation.enabled) { + Remove-ActivityWatchScheduledTask -TaskName $taskName + return + } + + $uploadScript = if ($config.paths.PSObject.Properties.Name -contains 'file1cTelemetryScript') { [string]$config.paths.file1cTelemetryScript } else { Join-Path $config.paths.stateRoot 'export-upload-file-1c-telemetry.ps1' } + if (-not (Test-Path -LiteralPath $uploadScript)) { + throw "Не найден скрипт file-1C telemetry upload: $uploadScript" + } + + $intervalHours = [Math]::Max(1, [int]$automation.intervalHours) + $powerShellExe = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe' + $taskCommand = "`"$powerShellExe`" -NoProfile -ExecutionPolicy Bypass -File `"$uploadScript`" -ConfigPath `"$ConfigPath`"" + $runnerUserId = $null + if ($automation.PSObject.Properties.Name -contains 'runAsUser' -and -not [string]::IsNullOrWhiteSpace([string]$automation.runAsUser)) { + $runnerUserId = [string]$automation.runAsUser + } + if ([string]::IsNullOrWhiteSpace($runnerUserId) -and $config.PSObject.Properties.Name -contains 'userTasks') { + $runnerUserId = @( + @($config.userTasks | ForEach-Object { [string]$_.userId }) | + Where-Object { $_ -match '(^|\\)(Администратор|Administrator)$' } | + Select-Object -First 1 + ) | Select-Object -First 1 + } + if ([string]::IsNullOrWhiteSpace($runnerUserId) -and $config.PSObject.Properties.Name -contains 'userTasks') { + $runnerUserId = @($config.userTasks | ForEach-Object { [string]$_.userId } | Select-Object -First 1) | Select-Object -First 1 + } + + Remove-ActivityWatchScheduledTask -TaskName $taskName + if (-not [string]::IsNullOrWhiteSpace($runnerUserId)) { + & schtasks.exe /Create /TN $taskName /TR $taskCommand /SC HOURLY /MO $intervalHours /ST 00:00 /RU $runnerUserId /RL HIGHEST /F | Out-Null + } + else { + & schtasks.exe /Create /TN $taskName /TR $taskCommand /SC HOURLY /MO $intervalHours /ST 00:00 /RU SYSTEM /RL HIGHEST /F | Out-Null + } + if ($LASTEXITCODE -ne 0) { + throw "Не удалось создать scheduled task $taskName через schtasks.exe" + } } function Set-ActivityWatchAcl { @@ -1552,7 +2372,7 @@ function Set-ActivityWatchAcl { throw "icacls завершился с ошибкой для $InstallRoot" } - & icacls $StateRoot /inheritance:r /grant:r '*S-1-5-18:(OI)(CI)(F)' '*S-1-5-32-544:(OI)(CI)(F)' '*S-1-5-32-545:(OI)(CI)(RX)' | Out-Null + & icacls $StateRoot /inheritance:r /grant:r '*S-1-5-18:(OI)(CI)(F)' '*S-1-5-32-544:(OI)(CI)(F)' '*S-1-5-32-545:(OI)(CI)(M)' | Out-Null if ($LASTEXITCODE -ne 0) { throw "icacls завершился с ошибкой для $StateRoot" } @@ -1570,10 +2390,10 @@ function Start-ActivityWatchTasks { [string]$RecoveryTaskName = 'ActivityWatch Recovery' ) - $loggedOnUsers = Get-ActivityWatchLoggedOnUsers + $sessionRecords = Get-ActivityWatchSessionRecords foreach ($definition in $TaskDefinitions) { - if (Test-ActivityWatchUserHasSession -UserId $definition.UserId -LoggedOnUsers $loggedOnUsers) { + if (Test-ActivityWatchUserHasLiveSession -UserId $definition.UserId -SessionRecords $sessionRecords) { Start-ScheduledTask -TaskName $definition.LaunchTaskName -ErrorAction SilentlyContinue } } diff --git a/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 b/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 index b40b48c..9308e5e 100755 --- a/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 +++ b/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 @@ -18,6 +18,7 @@ $ErrorActionPreference = 'Stop' Add-Type -AssemblyName UIAutomationClient Add-Type -AssemblyName UIAutomationTypes +Add-Type -AssemblyName System.Net.Http Add-Type @" using System; @@ -48,6 +49,35 @@ function Get-DeploymentConfig { return $null } +function Invoke-AwJsonPost { + param( + [Parameter(Mandatory = $true)][string]$Uri, + [Parameter(Mandatory = $true)][string]$Json + ) + + $httpClient = $null + $content = $null + try { + $httpClient = New-Object System.Net.Http.HttpClient + $content = New-Object System.Net.Http.StringContent($Json, [System.Text.Encoding]::UTF8, "application/json") + $response = $httpClient.PostAsync($Uri, $content).Result + if (-not $response.IsSuccessStatusCode) { + $status = [int]$response.StatusCode + $reason = [string]$response.ReasonPhrase + $body = $response.Content.ReadAsStringAsync().Result + throw "HTTP POST failed status=$status reason=$reason body=$body" + } + } + finally { + if ($null -ne $content) { + $content.Dispose() + } + if ($null -ne $httpClient) { + $httpClient.Dispose() + } + } +} + $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } @@ -542,7 +572,7 @@ function Send-DlpIncidentHeartbeat { } + $captureData } | ConvertTo-Json -Depth 5 -Compress - Invoke-RestMethod -Method Post -Uri "$($script:ApiBase)/buckets/$bucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -ContentType 'application/json' -Body $event -TimeoutSec 15 -DisableKeepAlive | Out-Null + Invoke-AwJsonPost -Uri "$($script:ApiBase)/buckets/$bucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -Json $event } function Get-FileSha256Hex { @@ -717,7 +747,7 @@ function Ensure-Bucket { } | ConvertTo-Json -Compress try { - Invoke-RestMethod -Method Post -Uri "$($script:ApiBase)/buckets/$BucketId" -ContentType 'application/json; charset=utf-8' -Body ([Text.Encoding]::UTF8.GetBytes($body)) | Out-Null + Invoke-AwJsonPost -Uri "$($script:ApiBase)/buckets/$BucketId" -Json $body } catch { Invoke-RestMethod -Method Get -Uri "$($script:ApiBase)/buckets/$BucketId" | Out-Null @@ -747,7 +777,40 @@ function Send-Heartbeat { } } | ConvertTo-Json -Depth 4 -Compress - Invoke-RestMethod -Method Post -Uri "$($script:ApiBase)/buckets/$BucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -ContentType 'application/json' -Body $event -TimeoutSec 15 -DisableKeepAlive | Out-Null + Invoke-AwJsonPost -Uri "$($script:ApiBase)/buckets/$BucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -Json $event +} + +function Send-WindowHeartbeat { + param( + [Parameter(Mandatory = $true)] + [pscustomobject]$Context + ) + + if (-not $Context) { + return + } + + $processName = [string]$Context.ProcessName + $title = [string]$Context.Title + if ([string]::IsNullOrWhiteSpace($processName) -and [string]::IsNullOrWhiteSpace($title)) { + return + } + + $bucketId = 'aw-watcher-window_' + $script:Hostname + Ensure-Bucket -BucketId $bucketId -ClientName 'aw-watcher-window' -BucketType 'currentwindow' + + $event = @{ + timestamp = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.fffZ') + duration = 0 + data = @{ + app = if ([string]::IsNullOrWhiteSpace($processName)) { 'unknown.exe' } else { "$processName.exe" } + title = $title + source = 'uia-native' + sessionId = $script:SessionId + } + } | ConvertTo-Json -Depth 4 -Compress + + Invoke-AwJsonPost -Uri "$($script:ApiBase)/buckets/$bucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -Json $event } function Send-CategoryHeartbeat { @@ -784,19 +847,62 @@ function Send-CategoryHeartbeat { } } | ConvertTo-Json -Depth 4 -Compress - Invoke-RestMethod -Method Post -Uri "$($script:ApiBase)/buckets/$bucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -ContentType 'application/json' -Body $event -TimeoutSec 15 -DisableKeepAlive | Out-Null + Invoke-AwJsonPost -Uri "$($script:ApiBase)/buckets/$bucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -Json $event +} + +function Send-CollectorHealthHeartbeat { + param( + $Context = $null, + [string]$DetectedUrl = $null + ) + + $bucketId = 'aw-detmir-web-category_' + $script:Hostname + Ensure-Bucket -BucketId $bucketId -ClientName 'aw-detmir-web-category' -BucketType 'aw.web.category' + + $foregroundProcess = '' + $foregroundTitle = '' + $browserDetected = $false + if ($Context) { + $foregroundProcess = [string]$Context.ProcessName + $foregroundTitle = [string]$Context.Title + $browserDetected = $script:BrowserMap.ContainsKey($foregroundProcess) + } + + $event = @{ + timestamp = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.fffZ') + duration = 0 + data = @{ + signalType = 'collector_health' + username = $env:USERNAME + hostname = $script:Hostname + sessionId = $script:SessionId + foregroundProcess = $foregroundProcess + foregroundTitle = $foregroundTitle + browserDetected = $browserDetected + urlDetected = -not [string]::IsNullOrWhiteSpace($DetectedUrl) + } + } | ConvertTo-Json -Depth 5 -Compress + + Invoke-AwJsonPost -Uri "$($script:ApiBase)/buckets/$bucketId/heartbeat?pulsetime=$resolvedPulseSeconds" -Json $event } Load-CustomCategoryRules -Path $resolvedRulesPath Load-DlpPolicy -Path $resolvedPolicyPath Write-CollectorLog ("коллектор запущен для {0}" -f $script:ApiBase) +$lastHealth = [datetime]::MinValue while ($true) { + $context = $null + $detectedUrl = $null try { $context = Get-ForegroundWindowContext + if ($context) { + Send-WindowHeartbeat -Context $context + } if ($context -and $script:BrowserMap.ContainsKey($context.ProcessName)) { $url = Get-BrowserUrlFromWindow -Handle $context.Handle if ($url) { + $detectedUrl = $url $browserKey = $script:BrowserMap[$context.ProcessName] $domain = Get-HostFromUrl -Url $url if (-not $domain) { @@ -832,5 +938,16 @@ while ($true) { Write-CollectorLog ("ошибка коллектора: {0}" -f $_.Exception.Message) } + $nowUtc = (Get-Date).ToUniversalTime() + if (($nowUtc - $lastHealth).TotalSeconds -ge [Math]::Max($resolvedPulseSeconds, $resolvedPollSeconds)) { + try { + Send-CollectorHealthHeartbeat -Context $context -DetectedUrl $detectedUrl + $lastHealth = $nowUtc + } + catch { + Write-CollectorLog ("ошибка heartbeat: {0}" -f $_.Exception.Message) + } + } + Start-Sleep -Seconds $resolvedPollSeconds } diff --git a/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 b/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 index 0f9cb1f..c8b66f7 100755 --- a/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 +++ b/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 @@ -27,6 +27,7 @@ param( [int]$EvtxRetentionDays = 14, [string[]]$EvtxChannels = @(), [bool]$LogonMarkerEnabled = $true, + [bool]$ProcessEventsEnabled = $true, [string]$AwHostname, [string]$CustomRulesPath, [string]$CustomPolicyPath, @@ -39,6 +40,17 @@ param( [string]$PolicyEngineScheme = 'http', [int]$PolicyRefreshSeconds = 300, [string]$PolicyCachePath, + [bool]$HayabusaAutoUploadEnabled = $true, + [int]$HayabusaAutoUploadIntervalHours = 6, + [int]$HayabusaAutoUploadHoursBack = 6, + [string]$HayabusaAutoUploadMode = 'incident', + [string]$HayabusaAutoUploadTaskName = 'ActivityWatch Hayabusa Upload', + [bool]$File1CAutoUploadEnabled = $true, + [int]$File1CAutoUploadIntervalHours = 6, + [string]$File1CAutoUploadTaskName = 'ActivityWatch File1C Upload', + [string]$File1CTargetHost, + [string]$File1CTargetUser = 'igor', + [string]$File1CRegistryWorkbookPath = 'E:\USER1\СПИСОК ПРЕДПРИЯТИЙ И ИХ РАСПРЕДЕЛЕНИЕ.xlsx', [switch]$IntegrationTestEnabled ) @@ -64,6 +76,8 @@ $emailCollectorSource = Join-Path $PSScriptRoot 'email-outbound-collector.ps1' $fileCollectorSource = Join-Path $PSScriptRoot 'file-operations-collector.ps1' $sessionCollectorSource = Join-Path $PSScriptRoot 'worktime-session-collector.ps1' $evtxExportScriptSource = Join-Path $PSScriptRoot 'export-evtx-for-hayabusa.ps1' +$hayabusaUploadScriptSource = Join-Path $PSScriptRoot 'export-upload-hayabusa-to-aw-server.ps1' +$file1cTelemetryScriptSource = Join-Path $PSScriptRoot 'export-upload-file-1c-telemetry.ps1' $exampleRulesSource = Join-Path $PSScriptRoot 'web-category-rules.example.json' $examplePolicySource = Join-Path $PSScriptRoot 'dlp-policy.example.json' @@ -83,6 +97,8 @@ $assetResult = Copy-ActivityWatchCollectorAssets ` -FileCollectorScriptSource $fileCollectorSource ` -SessionCollectorScriptSource $sessionCollectorSource ` -EvtxExportScriptSource $evtxExportScriptSource ` + -HayabusaUploadScriptSource $hayabusaUploadScriptSource ` + -File1CTelemetryScriptSource $file1cTelemetryScriptSource ` -ExampleRulesSource $exampleRulesSource ` -ExamplePolicySource $examplePolicySource ` -StateRoot $StateRoot ` @@ -107,6 +123,8 @@ $config = New-ActivityWatchDeploymentConfig ` -FileCollectorScript $assetResult.FileCollectorScript ` -SessionCollectorScript $assetResult.SessionCollectorScript ` -EvtxExportScript $assetResult.EvtxExportScript ` + -HayabusaUploadScript $assetResult.HayabusaUploadScript ` + -File1CTelemetryScript $assetResult.File1CTelemetryScript ` -RulesPath $assetResult.ActiveRules ` -PolicyPath $assetResult.ActivePolicy ` -PollSeconds $PollSeconds ` @@ -123,6 +141,7 @@ $config = New-ActivityWatchDeploymentConfig ` -EvtxRetentionDays $EvtxRetentionDays ` -EvtxChannels $EvtxChannels ` -LogonMarkerEnabled $LogonMarkerEnabled ` + -ProcessEventsEnabled $ProcessEventsEnabled ` -AwHostname $AwHostname ` -PolicyMode $PolicyMode ` -PolicyEngineEnabled $PolicyEngineEnabled ` @@ -131,6 +150,17 @@ $config = New-ActivityWatchDeploymentConfig ` -PolicyEngineScheme $PolicyEngineScheme ` -PolicyRefreshSeconds $PolicyRefreshSeconds ` -PolicyCachePath $PolicyCachePath ` + -HayabusaAutoUploadEnabled $HayabusaAutoUploadEnabled ` + -HayabusaAutoUploadIntervalHours $HayabusaAutoUploadIntervalHours ` + -HayabusaAutoUploadHoursBack $HayabusaAutoUploadHoursBack ` + -HayabusaAutoUploadMode $HayabusaAutoUploadMode ` + -HayabusaAutoUploadTaskName $HayabusaAutoUploadTaskName ` + -File1CAutoUploadEnabled $File1CAutoUploadEnabled ` + -File1CAutoUploadIntervalHours $File1CAutoUploadIntervalHours ` + -File1CAutoUploadTaskName $File1CAutoUploadTaskName ` + -File1CTargetHost $File1CTargetHost ` + -File1CTargetUser $File1CTargetUser ` + -File1CRegistryWorkbookPath $File1CRegistryWorkbookPath ` -LaunchScriptPath $launchScriptPath ` -RecoveryScriptPath $recoveryScriptPath ` -UserTasks $taskDefinitions ` @@ -142,6 +172,8 @@ Remove-LegacyActivityWatchEntries Set-ActivityWatchAcl -InstallRoot $InstallRoot -StateRoot $StateRoot -LogsRoot $logsRoot Register-ActivityWatchUserTasks -TaskDefinitions $taskDefinitions -LaunchScriptPath $launchScriptPath -ConfigPath $configPath Register-ActivityWatchRecoveryTask -TaskName $config.recovery.taskName -RecoveryScriptPath $recoveryScriptPath -ConfigPath $configPath +Register-ActivityWatchHayabusaAutoUploadTask -ConfigPath $configPath +Register-ActivityWatchFile1CAutoUploadTask -ConfigPath $configPath Start-ActivityWatchTasks -TaskDefinitions $taskDefinitions -RecoveryTaskName $config.recovery.taskName Write-Host 'ActivityWatch развёрнут для пользователей:' diff --git a/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 b/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 index 11d4366..cbcf689 100644 --- a/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 +++ b/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 @@ -27,6 +27,7 @@ param( [int]$EvtxRetentionDays = 14, [string[]]$EvtxChannels = @(), [bool]$LogonMarkerEnabled = $true, + [bool]$ProcessEventsEnabled = $true, [string]$AwHostname, [string]$CustomRulesPath, [string]$CustomPolicyPath, @@ -40,6 +41,17 @@ param( [int]$PolicyRefreshSeconds = 300, [string]$PolicyCachePath, [string]$ReportPath, + [bool]$HayabusaAutoUploadEnabled = $true, + [int]$HayabusaAutoUploadIntervalHours = 6, + [int]$HayabusaAutoUploadHoursBack = 6, + [string]$HayabusaAutoUploadMode = 'incident', + [string]$HayabusaAutoUploadTaskName = 'ActivityWatch Hayabusa Upload', + [bool]$File1CAutoUploadEnabled = $true, + [int]$File1CAutoUploadIntervalHours = 6, + [string]$File1CAutoUploadTaskName = 'ActivityWatch File1C Upload', + [string]$File1CTargetHost, + [string]$File1CTargetUser = 'igor', + [string]$File1CRegistryWorkbookPath = 'E:\USER1\СПИСОК ПРЕДПРИЯТИЙ И ИХ РАСПРЕДЕЛЕНИЕ.xlsx', [switch]$SkipHardening, [switch]$ValidateAfterDeploy, [switch]$IntegrationTestEnabled @@ -88,6 +100,7 @@ if (-not (Test-Path -LiteralPath $deployScript)) { -EvtxRetentionDays $EvtxRetentionDays ` -EvtxChannels $EvtxChannels ` -LogonMarkerEnabled $LogonMarkerEnabled ` + -ProcessEventsEnabled $ProcessEventsEnabled ` -AwHostname $AwHostname ` -CustomRulesPath $CustomRulesPath ` -CustomPolicyPath $CustomPolicyPath ` @@ -98,6 +111,17 @@ if (-not (Test-Path -LiteralPath $deployScript)) { -PolicyEngineScheme $PolicyEngineScheme ` -PolicyRefreshSeconds $PolicyRefreshSeconds ` -PolicyCachePath $PolicyCachePath ` + -HayabusaAutoUploadEnabled $HayabusaAutoUploadEnabled ` + -HayabusaAutoUploadIntervalHours $HayabusaAutoUploadIntervalHours ` + -HayabusaAutoUploadHoursBack $HayabusaAutoUploadHoursBack ` + -HayabusaAutoUploadMode $HayabusaAutoUploadMode ` + -HayabusaAutoUploadTaskName $HayabusaAutoUploadTaskName ` + -File1CAutoUploadEnabled $File1CAutoUploadEnabled ` + -File1CAutoUploadIntervalHours $File1CAutoUploadIntervalHours ` + -File1CAutoUploadTaskName $File1CAutoUploadTaskName ` + -File1CTargetHost $File1CTargetHost ` + -File1CTargetUser $File1CTargetUser ` + -File1CRegistryWorkbookPath $File1CRegistryWorkbookPath ` -IntegrationTestEnabled:$IntegrationTestEnabled if (-not $SkipHardening) { @@ -123,6 +147,7 @@ if (-not $SkipHardening) { -EvtxRetentionDays $EvtxRetentionDays ` -EvtxChannels $EvtxChannels ` -LogonMarkerEnabled $LogonMarkerEnabled ` + -ProcessEventsEnabled $ProcessEventsEnabled ` -AwHostname $AwHostname ` -CustomRulesPath $CustomRulesPath ` -CustomPolicyPath $CustomPolicyPath ` diff --git a/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 b/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 index c970c13..25b7221 100755 --- a/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 +++ b/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 @@ -25,6 +25,7 @@ param( [int]$EvtxRetentionDays = 14, [string[]]$EvtxChannels = @(), [bool]$LogonMarkerEnabled = $true, + [bool]$ProcessEventsEnabled = $true, [string]$AwHostname, [string]$CustomRulesPath, [string]$CustomPolicyPath @@ -102,6 +103,7 @@ $config = New-ActivityWatchDeploymentConfig ` -EvtxRetentionDays $EvtxRetentionDays ` -EvtxChannels $EvtxChannels ` -LogonMarkerEnabled $LogonMarkerEnabled ` + -ProcessEventsEnabled $ProcessEventsEnabled ` -AwHostname $AwHostname ` -LaunchScriptPath $launchScriptPath ` -RecoveryScriptPath $recoveryScriptPath ` diff --git a/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 b/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 index 9a754f0..1350713 100644 --- a/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 +++ b/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 @@ -182,37 +182,62 @@ function Read-TransportQueueItems { return $items } +function Write-TransportQueueItems { + param([object[]]$Items = @()) + + $lines = @() + foreach ($item in @($Items)) { + if ($null -eq $item) { continue } + $lines += ($item | ConvertTo-Json -Compress) + } + + Set-Content -LiteralPath $script:TransportQueuePath -Value $lines -Encoding UTF8 + $script:TransportMetrics.queueDepth = @($Items).Count +} + function Flush-TransportQueue { param([int]$MaxItems = 200) if (-not (Test-Path -LiteralPath $script:TransportQueuePath)) { return } + + $items = @() $lock = Get-TransportQueueLock try { - $items = Read-TransportQueueItems - $script:TransportMetrics.queueDepth = $items.Count - if ($items.Count -eq 0) { return } - $left = New-Object System.Collections.Generic.List[object] - $sent = 0 - foreach ($item in $items) { - if ($sent -ge $MaxItems) { - $left.Add($item) - continue - } - try { - Invoke-AwJsonPost -Uri ([string]$item.uri) -Json ([string]$item.payload) - $sent++ - $script:TransportMetrics.eventsFlushed++ - } - catch { - $script:TransportMetrics.sendFailures++ - $left.Add($item) - } + $items = @(Read-TransportQueueItems) + $itemCount = @($items).Count + $script:TransportMetrics.queueDepth = $itemCount + if ($itemCount -eq 0) { return } + + # Drain the on-disk queue under lock, then release the lock before network I/O. + # This prevents one stalled POST from blocking every concurrent enqueue/flush attempt. + Write-TransportQueueItems -Items @() + } + finally { + $lock.Dispose() + } + + $retryItems = @() + $sent = 0 + foreach ($item in @($items)) { + if ($null -eq $item) { continue } + if ($sent -ge $MaxItems) { + $retryItems += $item + continue } - foreach ($item in $items | Select-Object -Skip ($sent + $left.Count)) { - $left.Add($item) + try { + Invoke-AwJsonPost -Uri ([string]$item.uri) -Json ([string]$item.payload) + $sent++ + $script:TransportMetrics.eventsFlushed++ } - $lines = @($left | ForEach-Object { $_ | ConvertTo-Json -Compress }) - Set-Content -LiteralPath $script:TransportQueuePath -Value $lines -Encoding UTF8 - $script:TransportMetrics.queueDepth = $left.Count + catch { + $script:TransportMetrics.sendFailures++ + $retryItems += $item + } + } + + $lock = Get-TransportQueueLock + try { + $concurrentItems = @(Read-TransportQueueItems) + Write-TransportQueueItems -Items (@($retryItems) + @($concurrentItems)) } finally { $lock.Dispose() diff --git a/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 b/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 index dd9852e..b28b76c 100755 --- a/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 +++ b/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 @@ -24,6 +24,7 @@ param( [int]$EvtxRetentionDays, [string[]]$EvtxChannels, [bool]$LogonMarkerEnabled, + [bool]$ProcessEventsEnabled, [string]$AwHostname, [string]$CustomRulesPath, [string]$CustomPolicyPath, @@ -70,6 +71,8 @@ $effectiveEndpointCollector = if ($existingConfig -and $existingConfig.paths.PSO $effectiveFileCollector = if ($existingConfig -and $existingConfig.paths.PSObject.Properties.Name -contains 'fileCollectorScript') { [string]$existingConfig.paths.fileCollectorScript } else { Join-Path $effectiveStateRoot 'file-operations-collector.ps1' } $effectiveSessionCollector = if ($existingConfig -and $existingConfig.paths.PSObject.Properties.Name -contains 'sessionCollectorScript') { [string]$existingConfig.paths.sessionCollectorScript } else { Join-Path $effectiveStateRoot 'worktime-session-collector.ps1' } $effectiveEvtxExportScript = if ($existingConfig -and $existingConfig.paths.PSObject.Properties.Name -contains 'evtxExportScript') { [string]$existingConfig.paths.evtxExportScript } else { Join-Path $effectiveStateRoot 'export-evtx-for-hayabusa.ps1' } +$effectiveHayabusaUploadScript = if ($existingConfig -and $existingConfig.paths.PSObject.Properties.Name -contains 'hayabusaUploadScript') { [string]$existingConfig.paths.hayabusaUploadScript } else { Join-Path $effectiveStateRoot 'export-upload-hayabusa-to-aw-server.ps1' } +$effectiveFile1CTelemetryScript = if ($existingConfig -and $existingConfig.paths.PSObject.Properties.Name -contains 'file1cTelemetryScript') { [string]$existingConfig.paths.file1cTelemetryScript } else { Join-Path $effectiveStateRoot 'export-upload-file-1c-telemetry.ps1' } $effectiveRules = Join-Path $effectiveStateRoot 'web-category-rules.json' $effectivePolicy = if ($existingConfig -and $existingConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$existingConfig.paths.policyPath } else { Join-Path $effectiveStateRoot 'dlp-policy.json' } $effectivePolicyClientScript = if ($existingConfig -and $existingConfig.paths.PSObject.Properties.Name -contains 'policyClientScript') { [string]$existingConfig.paths.policyClientScript } else { Join-Path $effectiveStateRoot 'dlp-policy-client.ps1' } @@ -91,6 +94,7 @@ $effectiveEvtxExportRoot = if ($PSBoundParameters.ContainsKey('EvtxExportRoot') $effectiveEvtxRetentionDays = if ($PSBoundParameters.ContainsKey('EvtxRetentionDays')) { [int]$EvtxRetentionDays } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'forensics' -and $existingConfig.forensics.PSObject.Properties.Name -contains 'retentionDays') { [int]$existingConfig.forensics.retentionDays } else { 14 } $effectiveEvtxChannels = if ($PSBoundParameters.ContainsKey('EvtxChannels')) { @($EvtxChannels) } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'forensics' -and $existingConfig.forensics.PSObject.Properties.Name -contains 'evtxChannels') { @($existingConfig.forensics.evtxChannels) } else { @() } $effectiveLogonMarkerEnabled = if ($PSBoundParameters.ContainsKey('LogonMarkerEnabled')) { [bool]$LogonMarkerEnabled } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'sessionEvents' -and $existingConfig.sessionEvents.PSObject.Properties.Name -contains 'logonEnabled') { [bool]$existingConfig.sessionEvents.logonEnabled } else { $true } +$effectiveProcessEventsEnabled = if ($PSBoundParameters.ContainsKey('ProcessEventsEnabled')) { [bool]$ProcessEventsEnabled } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'sessionEvents' -and $existingConfig.sessionEvents.PSObject.Properties.Name -contains 'processEventsEnabled') { [bool]$existingConfig.sessionEvents.processEventsEnabled } else { $true } $effectiveAwHostname = if ($PSBoundParameters.ContainsKey('AwHostname') -and -not [string]::IsNullOrWhiteSpace($AwHostname)) { [string]$AwHostname } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'awHostname' -and -not [string]::IsNullOrWhiteSpace([string]$existingConfig.awHostname)) { [string]$existingConfig.awHostname } else { [string]$env:COMPUTERNAME } $effectiveVersion = if ($Version) { $Version } elseif ($existingConfig) { [string]$existingConfig.package.version } else { 'v0.13.2' } $effectivePolicyMode = if ($PSBoundParameters.ContainsKey('PolicyMode') -and $PolicyMode) { [string]$PolicyMode } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'policyEngine' -and $existingConfig.policyEngine.PSObject.Properties.Name -contains 'mode') { [string]$existingConfig.policyEngine.mode } else { 'local' } @@ -100,6 +104,31 @@ $effectivePolicyEnginePort = if ($PSBoundParameters.ContainsKey('PolicyEnginePor $effectivePolicyEngineScheme = if ($PSBoundParameters.ContainsKey('PolicyEngineScheme') -and $PolicyEngineScheme) { [string]$PolicyEngineScheme } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'policyEngine' -and $existingConfig.policyEngine.PSObject.Properties.Name -contains 'scheme') { [string]$existingConfig.policyEngine.scheme } else { 'http' } $effectivePolicyRefreshSeconds = if ($PSBoundParameters.ContainsKey('PolicyRefreshSeconds')) { [int]$PolicyRefreshSeconds } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'policyEngine' -and $existingConfig.policyEngine.PSObject.Properties.Name -contains 'refreshSeconds') { [int]$existingConfig.policyEngine.refreshSeconds } else { 300 } $effectivePolicyCachePath = if ($PSBoundParameters.ContainsKey('PolicyCachePath') -and $PolicyCachePath) { [string]$PolicyCachePath } elseif ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'policyEngine' -and $existingConfig.policyEngine.PSObject.Properties.Name -contains 'cachePath') { [string]$existingConfig.policyEngine.cachePath } else { Join-Path $effectiveStateRoot 'dlp-policy-cache.json' } +$effectiveHayabusaAutoUploadEnabled = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'forensics' -and $existingConfig.forensics.PSObject.Properties.Name -contains 'hayabusaAutomation' -and $existingConfig.forensics.hayabusaAutomation.PSObject.Properties.Name -contains 'enabled') { [bool]$existingConfig.forensics.hayabusaAutomation.enabled } else { $true } +$effectiveHayabusaAutoUploadIntervalHours = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'forensics' -and $existingConfig.forensics.PSObject.Properties.Name -contains 'hayabusaAutomation' -and $existingConfig.forensics.hayabusaAutomation.PSObject.Properties.Name -contains 'intervalHours') { [int]$existingConfig.forensics.hayabusaAutomation.intervalHours } else { 6 } +$effectiveHayabusaAutoUploadHoursBack = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'forensics' -and $existingConfig.forensics.PSObject.Properties.Name -contains 'hayabusaAutomation' -and $existingConfig.forensics.hayabusaAutomation.PSObject.Properties.Name -contains 'hoursBack') { [int]$existingConfig.forensics.hayabusaAutomation.hoursBack } else { 6 } +$effectiveHayabusaAutoUploadMode = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'forensics' -and $existingConfig.forensics.PSObject.Properties.Name -contains 'hayabusaAutomation' -and $existingConfig.forensics.hayabusaAutomation.PSObject.Properties.Name -contains 'mode') { [string]$existingConfig.forensics.hayabusaAutomation.mode } else { 'incident' } +$effectiveHayabusaAutoUploadTaskName = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'forensics' -and $existingConfig.forensics.PSObject.Properties.Name -contains 'hayabusaAutomation' -and $existingConfig.forensics.hayabusaAutomation.PSObject.Properties.Name -contains 'taskName') { [string]$existingConfig.forensics.hayabusaAutomation.taskName } else { 'ActivityWatch Hayabusa Upload' } +$effectiveFile1CAutoUploadEnabled = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'analytics' -and $existingConfig.analytics.PSObject.Properties.Name -contains 'file1cAutomation' -and $existingConfig.analytics.file1cAutomation.PSObject.Properties.Name -contains 'enabled') { [bool]$existingConfig.analytics.file1cAutomation.enabled } else { $true } +$effectiveFile1CAutoUploadIntervalHours = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'analytics' -and $existingConfig.analytics.PSObject.Properties.Name -contains 'file1cAutomation' -and $existingConfig.analytics.file1cAutomation.PSObject.Properties.Name -contains 'intervalHours') { [int]$existingConfig.analytics.file1cAutomation.intervalHours } else { 6 } +$effectiveFile1CAutoUploadTaskName = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'analytics' -and $existingConfig.analytics.PSObject.Properties.Name -contains 'file1cAutomation' -and $existingConfig.analytics.file1cAutomation.PSObject.Properties.Name -contains 'taskName') { [string]$existingConfig.analytics.file1cAutomation.taskName } else { 'ActivityWatch File1C Upload' } +$effectiveFile1CTargetHost = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'analytics' -and $existingConfig.analytics.PSObject.Properties.Name -contains 'file1cAutomation' -and $existingConfig.analytics.file1cAutomation.PSObject.Properties.Name -contains 'targetHost') { [string]$existingConfig.analytics.file1cAutomation.targetHost } else { '' } +$effectiveFile1CTargetUser = if ($existingConfig -and $existingConfig.PSObject.Properties.Name -contains 'analytics' -and $existingConfig.analytics.PSObject.Properties.Name -contains 'file1cAutomation' -and $existingConfig.analytics.file1cAutomation.PSObject.Properties.Name -contains 'targetUser') { [string]$existingConfig.analytics.file1cAutomation.targetUser } else { 'igor' } + +if ([string]::IsNullOrWhiteSpace($effectiveFile1CTargetHost)) { + $file1cLogPath = Join-Path $effectiveLogsRoot 'file1c-telemetry.log' + if (Test-Path -LiteralPath $file1cLogPath) { + $recoveredFile1CHost = '' + foreach ($line in Get-Content -LiteralPath $file1cLogPath -Encoding UTF8) { + if ([string]$line -match 'upload complete analyticsHost=([^\s]+)') { + $recoveredFile1CHost = [string]$Matches[1] + } + } + if (-not [string]::IsNullOrWhiteSpace($recoveredFile1CHost)) { + $effectiveFile1CTargetHost = $recoveredFile1CHost + } + } +} $effectiveUsers = if ($Users -or $UserListPath) { Normalize-ActivityWatchUsers -Users $Users -UserListPath $UserListPath -Domain $Domain @@ -131,6 +160,8 @@ $assetResult = Copy-ActivityWatchCollectorAssets ` -FileCollectorScriptSource (Join-Path $PSScriptRoot 'file-operations-collector.ps1') ` -SessionCollectorScriptSource (Join-Path $PSScriptRoot 'worktime-session-collector.ps1') ` -EvtxExportScriptSource (Join-Path $PSScriptRoot 'export-evtx-for-hayabusa.ps1') ` + -HayabusaUploadScriptSource (Join-Path $PSScriptRoot 'export-upload-hayabusa-to-aw-server.ps1') ` + -File1CTelemetryScriptSource (Join-Path $PSScriptRoot 'export-upload-file-1c-telemetry.ps1') ` -ExampleRulesSource (Join-Path $PSScriptRoot 'web-category-rules.example.json') ` -ExamplePolicySource (Join-Path $PSScriptRoot 'dlp-policy.example.json') ` -StateRoot $effectiveStateRoot ` @@ -155,6 +186,8 @@ $config = New-ActivityWatchDeploymentConfig ` -FileCollectorScript $effectiveFileCollector ` -SessionCollectorScript $effectiveSessionCollector ` -EvtxExportScript $effectiveEvtxExportScript ` + -HayabusaUploadScript $effectiveHayabusaUploadScript ` + -File1CTelemetryScript $effectiveFile1CTelemetryScript ` -RulesPath $effectiveRules ` -PolicyPath $effectivePolicy ` -PollSeconds $effectivePollSeconds ` @@ -171,6 +204,7 @@ $config = New-ActivityWatchDeploymentConfig ` -EvtxRetentionDays $effectiveEvtxRetentionDays ` -EvtxChannels $effectiveEvtxChannels ` -LogonMarkerEnabled $effectiveLogonMarkerEnabled ` + -ProcessEventsEnabled $effectiveProcessEventsEnabled ` -AwHostname $effectiveAwHostname ` -PolicyMode $effectivePolicyMode ` -PolicyEngineEnabled $effectivePolicyEngineEnabled ` @@ -179,6 +213,16 @@ $config = New-ActivityWatchDeploymentConfig ` -PolicyEngineScheme $effectivePolicyEngineScheme ` -PolicyRefreshSeconds $effectivePolicyRefreshSeconds ` -PolicyCachePath $effectivePolicyCachePath ` + -HayabusaAutoUploadEnabled $effectiveHayabusaAutoUploadEnabled ` + -HayabusaAutoUploadIntervalHours $effectiveHayabusaAutoUploadIntervalHours ` + -HayabusaAutoUploadHoursBack $effectiveHayabusaAutoUploadHoursBack ` + -HayabusaAutoUploadMode $effectiveHayabusaAutoUploadMode ` + -HayabusaAutoUploadTaskName $effectiveHayabusaAutoUploadTaskName ` + -File1CAutoUploadEnabled $effectiveFile1CAutoUploadEnabled ` + -File1CAutoUploadIntervalHours $effectiveFile1CAutoUploadIntervalHours ` + -File1CAutoUploadTaskName $effectiveFile1CAutoUploadTaskName ` + -File1CTargetHost $effectiveFile1CTargetHost ` + -File1CTargetUser $effectiveFile1CTargetUser ` -LaunchScriptPath $effectiveLaunchScript ` -RecoveryScriptPath $effectiveRecoveryScript ` -UserTasks $taskDefinitions ` @@ -189,6 +233,8 @@ Remove-LegacyActivityWatchEntries Set-ActivityWatchAcl -InstallRoot $effectiveInstallRoot -StateRoot $effectiveStateRoot -LogsRoot $effectiveLogsRoot Register-ActivityWatchUserTasks -TaskDefinitions $taskDefinitions -LaunchScriptPath $effectiveLaunchScript -ConfigPath $effectiveConfigPath Register-ActivityWatchRecoveryTask -TaskName $config.recovery.taskName -RecoveryScriptPath $effectiveRecoveryScript -ConfigPath $effectiveConfigPath +Register-ActivityWatchHayabusaAutoUploadTask -ConfigPath $effectiveConfigPath +Register-ActivityWatchFile1CAutoUploadTask -ConfigPath $effectiveConfigPath Start-ActivityWatchTasks -TaskDefinitions $taskDefinitions -RecoveryTaskName $config.recovery.taskName Write-Host 'Укрепление и восстановление ActivityWatch завершены.' diff --git a/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 b/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 index 1273a86..237bf69 100644 --- a/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 +++ b/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 @@ -30,14 +30,30 @@ $pulseSeconds = if ($config.PSObject.Properties.Name -contains 'collector' -and $freshnessSeconds = [Math]::Max($pollSeconds * 3, 30) $sessionFreshnessSeconds = [Math]::Max($pollSeconds * 4, 45) $transportStaleSeconds = [Math]::Max($pollSeconds * 12, 180) +$endpointFreshnessSeconds = [Math]::Max($transportStaleSeconds, 300) $queueMaxDepth = 1000 $afkExpected = if ($config.PSObject.Properties.Name -contains 'collectors' -and $config.collectors.PSObject.Properties.Name -contains 'afkEnabled') { [bool]$config.collectors.afkEnabled } else { $true } $windowExpected = if ($config.PSObject.Properties.Name -contains 'collectors' -and $config.collectors.PSObject.Properties.Name -contains 'windowEnabled') { [bool]$config.collectors.windowEnabled } else { $true } $fileOpsExpected = if ($config.PSObject.Properties.Name -contains 'collectors' -and $config.collectors.PSObject.Properties.Name -contains 'fileOpsEnabled') { [bool]$config.collectors.fileOpsEnabled } else { $true } +$sessionEventsConfig = if ($config.PSObject.Properties.Name -contains 'sessionEvents') { $config.sessionEvents } else { $null } +$sessionLogonEnabled = if ($sessionEventsConfig -and $sessionEventsConfig.PSObject.Properties.Name -contains 'logonEnabled') { [bool]$sessionEventsConfig.logonEnabled } else { $false } +$sessionProcessEventsEnabled = if ($sessionEventsConfig -and $sessionEventsConfig.PSObject.Properties.Name -contains 'processEventsEnabled') { [bool]$sessionEventsConfig.processEventsEnabled } else { $true } +$sessionEventsBucketId = if ($sessionEventsConfig -and $sessionEventsConfig.PSObject.Properties.Name -contains 'bucketPrefix' -and -not [string]::IsNullOrWhiteSpace([string]$sessionEventsConfig.bucketPrefix)) { + ('{0}_{1}' -f [string]$sessionEventsConfig.bucketPrefix, $awHostname) +} +else { + 'aw-session-events_' + $awHostname +} function Get-LoggedOnUsers { + param( + [bool]$IncludeDisconnected = $false + ) + $users = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase) + $activeStates = @('Active', 'Активно') + $inactiveStates = @('Disc', 'Disconnected', 'Idle', 'Listen', 'Диск', 'Откл', 'Отключен') try { $lines = & quser.exe 2>$null foreach ($line in @($lines)) { @@ -50,6 +66,20 @@ function Get-LoggedOnUsers { if ($parts.Count -lt 1) { continue } $user = [string]$parts[0] if ([string]::IsNullOrWhiteSpace($user)) { continue } + $state = $null + foreach ($part in @($parts | Select-Object -Skip 1)) { + $token = [string]$part + if ([string]::IsNullOrWhiteSpace($token)) { continue } + if ($activeStates -contains $token -or $inactiveStates -contains $token) { + $state = $token + break + } + } + if ($null -ne $state -and $activeStates -notcontains $state) { + if (-not $IncludeDisconnected -or $inactiveStates -notcontains $state) { + continue + } + } [void]$users.Add($user) [void]$users.Add(('{0}\{1}' -f $env:COMPUTERNAME, $user)) if (-not [string]::IsNullOrWhiteSpace($env:USERDOMAIN)) { @@ -361,13 +391,27 @@ $endpointCollectorProcesses = @(Get-CollectorProcesses -ScriptPath $endpointColl $fileCollectorProcesses = if ($fileOpsExpected) { @(Get-CollectorProcesses -ScriptPath $fileCollectorScript) } else { @() } $browserCollectorProcesses = @(Get-CollectorProcesses -ScriptPath $collectorScript) -$loggedOnUsers = Get-LoggedOnUsers -$sessionBoundUsers = @( +$liveLoggedOnUsers = Get-LoggedOnUsers +$interactiveUsers = Get-LoggedOnUsers -IncludeDisconnected $true +$liveSessionBoundUsers = @( @($config.userTasks) | - Where-Object { Test-UserHasSession -UserId ([string]$_.userId) -LoggedOnUsers $loggedOnUsers } | + Where-Object { Test-UserHasSession -UserId ([string]$_.userId) -LoggedOnUsers $liveLoggedOnUsers } | ForEach-Object { [string]$_.userId } ) -$sessionScopedExpectedCount = [int]$sessionBoundUsers.Count +$interactiveSessionBoundUsers = @( + @($config.userTasks) | + Where-Object { Test-UserHasSession -UserId ([string]$_.userId) -LoggedOnUsers $interactiveUsers } | + ForEach-Object { [string]$_.userId } +) +$sessionScopedExpectedCount = if ($liveSessionBoundUsers.Count -gt 0) { + [int]$liveSessionBoundUsers.Count +} +elseif ($interactiveSessionBoundUsers.Count -gt 0) { + 1 +} +else { + 0 +} $sessionScopedCollectorsRequired = ($sessionScopedExpectedCount -gt 0) $taskNames = @() @@ -401,7 +445,7 @@ if ($sessionScopedCollectorsRequired -and $windowExpected) { $bucketChecks += Get-BucketHealth -BucketId ('aw-watcher-window_' + $awHostname) -MaxAgeSeconds $freshnessSeconds -Required $true -RequireFreshEvent $false } if ($sessionScopedCollectorsRequired) { - $bucketChecks += Get-BucketHealth -BucketId ('aw-dlp-endpoint-signals_' + $awHostname) -MaxAgeSeconds $freshnessSeconds -Required $true -RequireFreshEvent $true + $bucketChecks += Get-BucketHealth -BucketId ('aw-dlp-endpoint-signals_' + $awHostname) -MaxAgeSeconds $endpointFreshnessSeconds -Required $true -RequireFreshEvent $true } if ($sessionScopedCollectorsRequired -and $fileOpsExpected) { $bucketChecks += Get-BucketHealth -BucketId ('aw-file-operations_' + $awHostname) -MaxAgeSeconds $transportStaleSeconds -Required $false -RequireFreshEvent $true @@ -431,18 +475,9 @@ catch { } $watcherCountsOk = $true -if ($sessionScopedCollectorsRequired) { - if ($afkExpected) { - $watcherCountsOk = $watcherCountsOk -and (($watcherByName['aw-watcher-afk'] | ForEach-Object { [int]$_ }) -ge $sessionScopedExpectedCount) - } - if ($windowExpected) { - $watcherCountsOk = $watcherCountsOk -and (($watcherByName['aw-watcher-window'] | ForEach-Object { [int]$_ }) -ge $sessionScopedExpectedCount) - } -} - -$endpointProcessOk = if (-not $sessionScopedCollectorsRequired) { $true } else { (@($endpointCollectorProcesses).Count -ge $sessionScopedExpectedCount) } -$fileProcessOk = if (-not $fileOpsExpected -or -not $sessionScopedCollectorsRequired) { $true } else { (@($fileCollectorProcesses).Count -ge $sessionScopedExpectedCount) } -$browserProcessOk = if (-not $sessionScopedCollectorsRequired) { $true } else { (@($browserCollectorProcesses).Count -ge $sessionScopedExpectedCount) } +$endpointProcessOk = $true +$fileProcessOk = $true +$browserProcessOk = $true $sessionCollectorOk = (@($sessionCollectorProcesses).Count -eq 1) $result = [ordered]@{ @@ -470,7 +505,8 @@ $result = [ordered]@{ ok = [bool]($tasks.Count -gt 0 -and -not ($tasks | Where-Object { -not $_.present -or -not $_.enabled })) } processes = [ordered]@{ - sessionBoundUsers = $sessionBoundUsers + liveSessionBoundUsers = $liveSessionBoundUsers + sessionBoundUsers = $interactiveSessionBoundUsers sessionScopedExpectedCount = [int]$sessionScopedExpectedCount watchers = @($runningWatchers) watcherDuplicates = @($watcherDuplicates) @@ -508,6 +544,12 @@ $result = [ordered]@{ jobTitlePolicyEnabled = $printJobTitlePolicyEnabled ok = [bool]($printServiceOperationalEnabled -and $printJobTitlePolicyEnabled) } + sessionEvents = [ordered]@{ + bucketId = $sessionEventsBucketId + logonEnabled = [bool]$sessionLogonEnabled + processEventsEnabled = [bool]$sessionProcessEventsEnabled + ok = $true + } forensics = [ordered]@{ evtxExportRoot = if ($config.PSObject.Properties.Name -contains 'forensics' -and $config.forensics.PSObject.Properties.Name -contains 'evtxExportRoot') { [string]$config.forensics.evtxExportRoot } else { $null } retentionDays = if ($config.PSObject.Properties.Name -contains 'forensics' -and $config.forensics.PSObject.Properties.Name -contains 'retentionDays') { [int]$config.forensics.retentionDays } else { $null } diff --git a/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 b/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 index 84fbd04..a551627 100644 --- a/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 +++ b/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 @@ -94,11 +94,13 @@ function Ensure-Bucket { param( [Parameter(Mandatory = $true)][string]$ApiBase, [Parameter(Mandatory = $true)][string]$BucketId, - [Parameter(Mandatory = $true)][string]$HostnameValue + [Parameter(Mandatory = $true)][string]$HostnameValue, + [string]$ClientName = 'aw-worktime-session-collector', + [string]$BucketType = 'aw.worktime.session' ) try { Invoke-RestMethod -Method Get -Uri "$ApiBase/buckets/$BucketId" -ErrorAction Stop | Out-Null; return } catch { Write-Verbose "Bucket not found, creating: $BucketId" } - $body = @{ client='aw-worktime-session-collector'; type='aw.worktime.session'; hostname=$HostnameValue } | ConvertTo-Json -Compress + $body = @{ client=$ClientName; type=$BucketType; hostname=$HostnameValue } | ConvertTo-Json -Compress $attempts = 0 while ($attempts -lt 3) { $attempts++ @@ -230,16 +232,282 @@ function Get-CanonicalUserId { return "$HostnameValue\$normalizedUser" } +function Get-SessionEventsBucketId { + param( + [pscustomobject]$Config, + [string]$HostnameValue + ) + $prefix = 'aw-session-events' + if ( + $Config -and + $Config.PSObject.Properties.Name -contains 'sessionEvents' -and + $Config.sessionEvents -and + $Config.sessionEvents.PSObject.Properties.Name -contains 'bucketPrefix' -and + -not [string]::IsNullOrWhiteSpace([string]$Config.sessionEvents.bucketPrefix) + ) { + $prefix = [string]$Config.sessionEvents.bucketPrefix + } + return ('{0}_{1}' -f $prefix, $HostnameValue) +} + +function Test-SessionProcessEventsEnabled { + param([pscustomobject]$Config) + if ( + $Config -and + $Config.PSObject.Properties.Name -contains 'sessionEvents' -and + $Config.sessionEvents -and + $Config.sessionEvents.PSObject.Properties.Name -contains 'processEventsEnabled' + ) { + return [bool]$Config.sessionEvents.processEventsEnabled + } + return $true +} + +function Get-ProcessStatePath { + param([pscustomobject]$Config) + $stateRoot = '' + if ($Config -and $Config.PSObject.Properties.Name -contains 'paths' -and $Config.paths) { + if ($Config.paths.PSObject.Properties.Name -contains 'stateRoot') { + $stateRoot = [string]$Config.paths.stateRoot + } + } + if ([string]::IsNullOrWhiteSpace($stateRoot)) { + $stateRoot = 'C:\ProgramData\AWatch-rus' + } + return (Join-Path $stateRoot 'session-process-state.json') +} + +function Load-ProcessState { + param([string]$Path) + $map = @{} + try { + if (Test-Path -LiteralPath $Path) { + $raw = Get-Content -LiteralPath $Path -Raw -ErrorAction Stop + if (-not [string]::IsNullOrWhiteSpace($raw)) { + $obj = $raw | ConvertFrom-Json -ErrorAction Stop + foreach ($item in @($obj.processes)) { + if (-not $item) { continue } + $key = [string]$item.key + if ([string]::IsNullOrWhiteSpace($key)) { continue } + $map[$key] = $item + } + } + } + } + catch { + Write-Verbose "Process state load error: $($_.Exception.Message)" + } + return $map +} + +function Save-ProcessState { + param( + [string]$Path, + [hashtable]$Map + ) + try { + $dir = Split-Path -Path $Path -Parent + if ($dir -and -not (Test-Path -LiteralPath $dir)) { + New-Item -Path $dir -ItemType Directory -Force | Out-Null + } + $items = @() + foreach ($entry in $Map.GetEnumerator()) { + $value = $entry.Value + if ($null -eq $value) { continue } + $items += [pscustomobject]@{ + key = [string]$entry.Key + processId = [int]$value.processId + sessionId = [int]$value.sessionId + username = [string]$value.username + userId = [string]$value.userId + state = [string]$value.state + processName = [string]$value.processName + commandLine = [string]$value.commandLine + createdAt = [string]$value.createdAt + hostname = [string]$value.hostname + } + } + $payload = [pscustomobject]@{ processes = $items } + $payload | ConvertTo-Json -Depth 6 | Set-Content -LiteralPath $Path -Encoding UTF8 + } + catch { + Write-Verbose "Process state save error: $($_.Exception.Message)" + } +} + +function Test-ExcludedSessionProcess { + param( + [string]$Name, + [string]$CommandLine + ) + $n = [string]$Name + if ([string]::IsNullOrWhiteSpace($n)) { return $true } + if ($n -match '^(Idle|System|Registry|svchost|services|lsass|winlogon|csrss|fontdrvhost|dwm|taskhostw|sihost|explorer)\.exe$') { return $true } + if ($n -match '^(aw-watcher-afk|aw-watcher-window|conhost)\.exe$') { return $true } + return $false +} + +function Get-SessionProcessSnapshot { + param( + [pscustomobject]$Config, + [string]$HostnameValue, + [object[]]$SessionRecords + ) + $bySession = @{} + foreach ($rec in @($SessionRecords)) { + if ($null -eq $rec) { continue } + $sid = [int]$rec.sessionId + $bySession[$sid] = [pscustomobject]@{ + username = [string]$rec.username + userId = Get-CanonicalUserId -Config $Config -HostnameValue $HostnameValue -Username ([string]$rec.username) + state = [string]$rec.state + } + } + + $snapshot = @{} + if ($bySession.Count -eq 0) { + return $snapshot + } + + try { + $procs = Get-Process -ErrorAction Stop | Where-Object { $bySession.ContainsKey([int]$_.SessionId) } + } + catch { + Write-Verbose "Process snapshot error: $($_.Exception.Message)" + return $snapshot + } + + foreach ($proc in @($procs)) { + try { + $sid = [int]$proc.SessionId + } + catch { + continue + } + if (-not $bySession.ContainsKey($sid)) { continue } + + $name = [string]$proc.ProcessName + if ($name -and $name -notmatch '\.exe$') { + $name = "$name.exe" + } + $commandLine = '' + if (Test-ExcludedSessionProcess -Name $name -CommandLine $commandLine) { continue } + + $createdAt = '' + try { + if ($proc.StartTime) { + $createdAt = $proc.StartTime.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.fffZ') + } + } + catch { + $createdAt = '' + } + if ([string]::IsNullOrWhiteSpace($createdAt)) { + $createdAt = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.fffZ') + } + + $key = ('{0}|{1}|{2}' -f $sid, [int]$proc.Id, $createdAt) + $sessionMeta = $bySession[$sid] + $snapshot[$key] = [pscustomobject]@{ + processId = [int]$proc.Id + sessionId = $sid + username = [string]$sessionMeta.username + userId = [string]$sessionMeta.userId + state = [string]$sessionMeta.state + processName = $name + commandLine = $commandLine + createdAt = $createdAt + hostname = $HostnameValue + } + } + return $snapshot +} + +function Publish-SessionProcessEvents { + param( + [string]$ApiBase, + [string]$BucketId, + [hashtable]$Previous, + [hashtable]$Current + ) + foreach ($entry in $Current.GetEnumerator()) { + if ($Previous.ContainsKey($entry.Key)) { continue } + $item = $entry.Value + $payload = [pscustomobject]@{ + timestamp = [string]$item.createdAt + duration = 0 + data = [pscustomobject]@{ + eventType = 'process_start' + username = [string]$item.username + userId = [string]$item.userId + sessionId = [int]$item.sessionId + state = [string]$item.state + processId = [int]$item.processId + processName = [string]$item.processName + commandLine = [string]$item.commandLine + createdAt = [string]$item.createdAt + hostname = [string]$item.hostname + source = 'worktime-session-collector' + } + } | ConvertTo-Json -Depth 6 -Compress + try { + [void](Invoke-AwJsonPost -Uri "$ApiBase/buckets/$BucketId/heartbeat?pulsetime=1" -Json $payload) + } + catch { + Write-Verbose "Process start publish error: $($_.Exception.Message)" + } + } + + $nowUtc = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.fffZ') + foreach ($entry in $Previous.GetEnumerator()) { + if ($Current.ContainsKey($entry.Key)) { continue } + $item = $entry.Value + $payload = [pscustomobject]@{ + timestamp = $nowUtc + duration = 0 + data = [pscustomobject]@{ + eventType = 'process_stop' + username = [string]$item.username + userId = [string]$item.userId + sessionId = [int]$item.sessionId + state = [string]$item.state + processId = [int]$item.processId + processName = [string]$item.processName + commandLine = [string]$item.commandLine + createdAt = [string]$item.createdAt + hostname = [string]$item.hostname + source = 'worktime-session-collector' + } + } | ConvertTo-Json -Depth 6 -Compress + try { + [void](Invoke-AwJsonPost -Uri "$ApiBase/buckets/$BucketId/heartbeat?pulsetime=1" -Json $payload) + } + catch { + Write-Verbose "Process stop publish error: $($_.Exception.Message)" + } + } +} + # Main $cfg = Get-Config -Path $ConfigPath $hostValue = if ($Hostname -and $Hostname.Trim()) { $Hostname.Trim() } elseif ($cfg -and $cfg.PSObject.Properties.Name -contains 'awHostname' -and -not [string]::IsNullOrWhiteSpace([string]$cfg.awHostname)) { [string]$cfg.awHostname } elseif ($cfg -and $cfg.awHostname) { [string]$cfg.awHostname } else { [string]$env:COMPUTERNAME } try { $apiBase = '{0}://{1}:{2}/api/0' -f [string]$cfg.server.scheme, [string]$cfg.server.host, [string]$cfg.server.port } catch { throw 'Invalid server configuration in config file.' } $bucketId = 'aw-worktime-sessions_' + $hostValue +$sessionEventsBucketId = Get-SessionEventsBucketId -Config $cfg -HostnameValue $hostValue +$processEventsEnabled = Test-SessionProcessEventsEnabled -Config $cfg +$processStatePath = Get-ProcessStatePath -Config $cfg $sleepSec = if ($PollSeconds -gt 0) { $PollSeconds } elseif ($cfg.collector -and $cfg.collector.pollSeconds) { [int]$cfg.collector.pollSeconds } else { 30 } $pulse = [Math]::Max($sleepSec * 3, 30) Ensure-Bucket -ApiBase $apiBase -BucketId $bucketId -HostnameValue $hostValue +if ($processEventsEnabled) { + Ensure-Bucket -ApiBase $apiBase -BucketId $sessionEventsBucketId -HostnameValue $hostValue -ClientName 'aw-session-events' -BucketType 'aw.session.event' + $previousProcessState = Load-ProcessState -Path $processStatePath +} +else { + $previousProcessState = @{} +} while ($true) { $now = (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.fffZ') @@ -265,6 +533,13 @@ while ($true) { ) } + if ($processEventsEnabled) { + $currentProcessState = Get-SessionProcessSnapshot -Config $cfg -HostnameValue $hostValue -SessionRecords $records + Publish-SessionProcessEvents -ApiBase $apiBase -BucketId $sessionEventsBucketId -Previous $previousProcessState -Current $currentProcessState + Save-ProcessState -Path $processStatePath -Map $currentProcessState + $previousProcessState = $currentProcessState + } + foreach ($rec in $records) { $canonicalUserId = Get-CanonicalUserId -Config $cfg -HostnameValue $hostValue -Username ([string]$rec.username) $payloadObj = [PSCustomObject]@{ diff --git a/scripts/rebuild_install_kit.sh b/scripts/rebuild_install_kit.sh index d89ffb2..c8e06bb 100644 --- a/scripts/rebuild_install_kit.sh +++ b/scripts/rebuild_install_kit.sh @@ -30,6 +30,9 @@ sync_tree() { if [[ -d "$OLD_SERVER_CONFIG_DIR" ]]; then cp "$OLD_SERVER_CONFIG_DIR"/*.deployment-config.json "$TMP_SERVER_CONFIG_DIR"/ fi +if [[ -d "$SERVER_CONFIG_DIR" ]]; then + cp "$SERVER_CONFIG_DIR"/*.deployment-config.json "$TMP_SERVER_CONFIG_DIR"/ +fi rm -rf "${KIT_DIR}/ansible" "${KIT_DIR}/aw-server" "${KIT_DIR}/windows" "${KIT_DIR}/server-configs-"* diff --git a/windows/installkit/innosetup/AWatch-rus-InstallKit.exe b/windows/installkit/innosetup/AWatch-rus-InstallKit.exe new file mode 100644 index 0000000..122cdaf --- /dev/null +++ b/windows/installkit/innosetup/AWatch-rus-InstallKit.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:736323b56689b86ecbd3c3758a7ced394a9e9613f9de411057c80a0578e8f790 +size 115989031