From 21336a8a490840da153cc59de85690bc95308546 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 3 Jul 2024 11:43:12 +0200 Subject: [PATCH] Added more debug to statisics, changed behavior of error handling for wikis, updated error handling, more fail-safes for IRC connection --- extensions/base/discussions.py | 2 +- locale/de/LC_MESSAGES/misc.mo | Bin 1230 -> 1186 bytes locale/de/LC_MESSAGES/misc.po | 47 +++++++++++----------- locale/hi/LC_MESSAGES/misc.mo | Bin 1316 -> 1263 bytes locale/hi/LC_MESSAGES/misc.po | 51 ++++++++++++------------ locale/pl/LC_MESSAGES/misc.mo | Bin 1155 -> 1107 bytes locale/pl/LC_MESSAGES/misc.po | 47 +++++++++++----------- locale/pt-br/LC_MESSAGES/misc.mo | Bin 1175 -> 1157 bytes locale/pt-br/LC_MESSAGES/misc.po | 47 +++++++++++----------- locale/ru/LC_MESSAGES/misc.mo | Bin 1643 -> 1598 bytes locale/ru/LC_MESSAGES/misc.po | 47 +++++++++++----------- locale/zh-hans/LC_MESSAGES/misc.mo | Bin 546 -> 1143 bytes locale/zh-hans/LC_MESSAGES/misc.po | 47 +++++++++++----------- locale/zh-hant/LC_MESSAGES/misc.mo | Bin 1166 -> 1118 bytes locale/zh-hant/LC_MESSAGES/misc.po | 47 +++++++++++----------- src/bot.py | 20 +++++++++- src/domain.py | 60 ++++++++++++++++++++++------- src/irc_feed.py | 8 +++- src/statistics.py | 6 +-- src/wiki.py | 7 +++- 20 files changed, 243 insertions(+), 193 deletions(-) diff --git a/extensions/base/discussions.py b/extensions/base/discussions.py index 474a008..0bb1bd5 100644 --- a/extensions/base/discussions.py +++ b/extensions/base/discussions.py @@ -103,7 +103,7 @@ class DiscussionsFromHellParser: for mark in marks: if mark["type"] == "mention": prefix += "[" - suffix = "]({wiki}f/u/{userid}){suffix}".format(wiki=self.ctx.settings["fandom_discussions"]["wiki_url"], + suffix = "]({wiki}f/u/{userid}){suffix}".format(wiki=self.ctx.settings.WIKI_SCRIPT_PATH, userid=mark["attrs"]["userId"], suffix=suffix) elif mark["type"] == "strong": prefix += "**" diff --git a/locale/de/LC_MESSAGES/misc.mo b/locale/de/LC_MESSAGES/misc.mo index b3af6e6363e264e84eea9b68d2b2331af560fe46..5f31ff6c0f86db352b81fcbbe5597ae651a2ebea 100644 GIT binary patch delta 397 zcmXw#F>b;@5Jd+t7?Xev4N*ivodZxJQE>qJ6f{UQR0yan(xpz2kf4GSAZlokD3b$3 zN`-QOTmas;moJUq%;~!Xli(Dtv<#_zBB!3m@PP z>fFKc?AE_wiS-{>|G`JFQhYHOphHUw*V z023N)eE>VZ|FTT--?uZf`|s>MMqg2~tcJHnY@;3YjB02&~!P{?B)yuq>vt2FX;piA{jt?1m*@T@tw9QB-gyUtt$WlCL@di{}eH>>Q&KUCZ$ AbpQYW diff --git a/locale/de/LC_MESSAGES/misc.po b/locale/de/LC_MESSAGES/misc.po index 5a7dd58..fb16ff1 100644 --- a/locale/de/LC_MESSAGES/misc.po +++ b/locale/de/LC_MESSAGES/misc.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-16 23:56+0200\n" +"POT-Creation-Date: 2024-02-24 17:51+0100\n" "PO-Revision-Date: 2020-08-03 13:44+0000\n" "Last-Translator: MarkusRost <>\n" "Language-Team: German ZjS`{4}0)mKA2}MMMgF-=&PU`03H7-KiNSace3LRamF1qRF zBo0nG3NH2s2a%z9YghFQED`X(H~p9S>>2b0Lg2Phk#L;nW(f6y(d zN)kPUtQEcYU(suzIHSCh{70?sy0zB1aTnik)|^7UwG){s=B<1_ zXD#uW)`C61IBTI)QCI!kmZvM#lJ;HCHaB(6E9=UhE}6^K|9s`ZbA7i`*88P7$1S&> LB0sn9(Sq>@Jj6bk delta 538 zcmXxgze~eF6bJCvHd-6C)>;v1g@6e4M^=X-Y9P@Tk``JW)FG7Cp`b0a1>HJ{brWiF zbvPHNqJs`12yPDk0fOA%Dh^KK;`ieD;N^4g-Cel5&k$2vZ&9U7h*4w$$&eGs1s^_$ zHXMd0Z~&e|vGxLn;kBH9goCJGpjh`ReV6?YsG|QZYsF7AMAV`P20=_rNoSz=fiCMs zc!W*MFpmCHfM^$;so-+ee;sg^5RGGAIRnFq6-lz(nz%QEu1lhaK@OXpHfW_~-DwN$&2ZEe%GwXES-+LGlM8GF?*&Ae48bb9`uxXRfXXFZLxE@y3U$JqlK{POtb IDq#730p!b0G5`Po diff --git a/locale/hi/LC_MESSAGES/misc.po b/locale/hi/LC_MESSAGES/misc.po index 6c9f5aa..8a6fdbd 100644 --- a/locale/hi/LC_MESSAGES/misc.po +++ b/locale/hi/LC_MESSAGES/misc.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-16 23:56+0200\n" +"POT-Creation-Date: 2024-02-24 17:51+0100\n" "PO-Revision-Date: 2022-09-09 06:48+0000\n" "Last-Translator: Saurmandal \n" -"Language-Team: Hindi " -"\n" +"Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,70 +19,69 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.12.1\n" -#: src/misc.py:45 +#: src/misc.py:115 msgid "Location" msgstr "स्थान" -#: src/misc.py:45 +#: src/misc.py:115 msgid "About me" msgstr "मेरे बारे में" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Google link" msgstr "Google कड़ी" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Facebook link" msgstr "Facebook कड़ी" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Twitter link" msgstr "Twitter कड़ी" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Reddit link" msgstr "Reddit कड़ी" -#: src/misc.py:45 +#: src/misc.py:118 msgid "Twitch link" msgstr "Twitch कड़ी" -#: src/misc.py:45 +#: src/misc.py:118 msgid "PSN link" msgstr "PSN कड़ी" -#: src/misc.py:45 +#: src/misc.py:119 msgid "VK link" msgstr "VK कड़ी" -#: src/misc.py:45 +#: src/misc.py:119 msgid "XBL link" msgstr "XBL कड़ी" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Steam link" msgstr "Steam कड़ी" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Discord handle" msgstr "डिस्कॉर्ड खाता" -#: src/misc.py:45 +#: src/misc.py:121 msgid "Battle.net handle" msgstr "Battle.net खाता" -#: src/misc.py:140 -msgid "" -"\n" -"__And more__" -msgstr "" -"\n" -"और कई सारे" - -#: src/misc.py:330 +#: src/misc.py:127 msgid "Unknown" msgstr "अज्ञात" -#: src/misc.py:332 +#: src/misc.py:129 msgid "unknown" msgstr "अनजान" + +#~ msgid "" +#~ "\n" +#~ "__And more__" +#~ msgstr "" +#~ "\n" +#~ "और कई सारे" diff --git a/locale/pl/LC_MESSAGES/misc.mo b/locale/pl/LC_MESSAGES/misc.mo index 4155b4416eaf34b8b200a2d8ee708dd7b41b4d2e..b3cf25b16e65fe8dc00e3db3249aa37d00dcb871 100644 GIT binary patch delta 397 zcmXw#txf|`5QS&|y1OlH7fdTwU`bsij`U6X0;ncbZBj%Zpj3gYAwiG^O@cyFfgyn) z39`YV;5&Qoo@Dl$nfo(m?`8g)Ri8)k+E781#0@b}9`HdIFoSb=2p6yiuV5E$UA(B>3m#Daz|^d=KbKezNC>S-8rn$bHAIrRMtUjy Z8y;%uM`TW~ZD-T-*~4`(3RiE@-9LPe9$Nqa delta 441 zcmXw#ze@u_5QQhX)BIEu8x0t^CWWAoCMkpVg0{#i z2x4ntBM7mv6>M$9@15(w+_y73`}XaWoXaWJ-9%91o4qvHUlLh zBQl|ohC;K_(Paw#rT^d!hCf3piA)9LNWIMR&TSsHql5mS+8*o\n" "Language-Team: \n" @@ -19,70 +19,69 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: src/misc.py:45 +#: src/misc.py:115 msgid "Location" msgstr "Lokacja" -#: src/misc.py:45 +#: src/misc.py:115 msgid "About me" msgstr "O mnie" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Google link" msgstr "link Google" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Facebook link" msgstr "link Facebook" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Twitter link" msgstr "link Twitter" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Reddit link" msgstr "link Reddit" -#: src/misc.py:45 +#: src/misc.py:118 msgid "Twitch link" msgstr "link Twitch" -#: src/misc.py:45 +#: src/misc.py:118 msgid "PSN link" msgstr "link PSN" -#: src/misc.py:45 +#: src/misc.py:119 msgid "VK link" msgstr "link VK" -#: src/misc.py:45 +#: src/misc.py:119 msgid "XBL link" msgstr "link XBL" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Steam link" msgstr "link Steam" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Discord handle" msgstr "konto Discord" -#: src/misc.py:45 +#: src/misc.py:121 msgid "Battle.net handle" msgstr "konto Battle.net" -#: src/misc.py:140 -msgid "" -"\n" -"__And more__" -msgstr "" -"\n" -"__Oraz więcej__" - -#: src/misc.py:330 +#: src/misc.py:127 msgid "Unknown" msgstr "Nieznana" -#: src/misc.py:332 +#: src/misc.py:129 msgid "unknown" msgstr "nieznana sekcja" + +#~ msgid "" +#~ "\n" +#~ "__And more__" +#~ msgstr "" +#~ "\n" +#~ "__Oraz więcej__" diff --git a/locale/pt-br/LC_MESSAGES/misc.mo b/locale/pt-br/LC_MESSAGES/misc.mo index 50302893addf4cdd3b1cb9ef37ca79940eef7bea..7d84af62493fec71407f5fbac6be01ca3a035892 100644 GIT binary patch delta 562 zcmX|-Jxjwt9LBFET2rghE_QIp<{(Y_f)t8F1rdbeV!y!Ug%aEJN)o9~1;Jg2;-H(W z4xPnONBsao$F71O!20}?)CcZ<|F^q)k~`%}8BGfEErZsvwy++sHYv_vgU-Qa@B-Wb zFTpkN23!Rn!4+@}(%fsx_q6^A=1~7i^C_4|{sU$i8?jjuug=raMUV*j!``{uw;QTEb3$iHx&-Q=CQjnQ609DOKxQrPe6dcgj$% z#e=Za_IW?(@lf~;&GySRpL-(E_Wr|W$K!5Kw}clxFX%>?jyw9$?YgE2b=xrpzBqNP zFfe?pW7$K)a|6p5geB9D6zNH>>XlsdCh2O+?RPa>XouW#Od+C~)Ks~45<1*tNsmXz G^3fmtJ5`GS delta 557 zcmXw#KS;w+5XN7dXl+_;>{0}kEG}Y`7F4VhQK5?9q~IFTB$e1EDM_S)U?)Kx4boN6 z(Lo&DTwHY*Ty&F8PHuizpC4R)@9y2dm(z4F-F?rCR}315O~P(r1=w5yALtAm1<%0| zum@7^H8=)7@cSn)1OEl2yf@BI9`Az^;y>IMlZ<5<>oOUK6fUMXXFzID3oA^!O?NOjX7#bNf>e0I z;};swL6Tf8h-b`!Tc{C^Z4lYv`9UN!QmrOL6_c*7f)( z@s%kp6-)C9FlP_rATtNVUaX*pip7glq=vK!fk%eEb_ LsaSqo6}Nr?19417 diff --git a/locale/pt-br/LC_MESSAGES/misc.po b/locale/pt-br/LC_MESSAGES/misc.po index cd36524..488853d 100644 --- a/locale/pt-br/LC_MESSAGES/misc.po +++ b/locale/pt-br/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-16 23:56+0200\n" +"POT-Creation-Date: 2024-02-24 17:51+0100\n" "PO-Revision-Date: 2020-11-27 13:07+0000\n" "Last-Translator: dr03ramos \n" "Language-Team: Portuguese (Brazil) 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/misc.py:45 +#: src/misc.py:115 msgid "Location" msgstr "Localização" -#: src/misc.py:45 +#: src/misc.py:115 msgid "About me" msgstr "Sobre mim" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Google link" msgstr "Link do Google" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Facebook link" msgstr "Link do Facebook" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Twitter link" msgstr "Link do Twitter" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Reddit link" msgstr "Link do Reddit" -#: src/misc.py:45 +#: src/misc.py:118 msgid "Twitch link" msgstr "Link da Twitch" -#: src/misc.py:45 +#: src/misc.py:118 msgid "PSN link" msgstr "Link do PSN" -#: src/misc.py:45 +#: src/misc.py:119 msgid "VK link" msgstr "Link do VK" -#: src/misc.py:45 +#: src/misc.py:119 msgid "XBL link" msgstr "Link do XBL" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Steam link" msgstr "Link da Steam" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Discord handle" msgstr "Link do Discord" -#: src/misc.py:45 +#: src/misc.py:121 msgid "Battle.net handle" msgstr "Link do Battle.net" -#: src/misc.py:140 -msgid "" -"\n" -"__And more__" -msgstr "" -"\n" -"__E mais__" - -#: src/misc.py:330 +#: src/misc.py:127 msgid "Unknown" msgstr "Desconhecido" -#: src/misc.py:332 +#: src/misc.py:129 msgid "unknown" msgstr "desconhecido" + +#~ msgid "" +#~ "\n" +#~ "__And more__" +#~ msgstr "" +#~ "\n" +#~ "__E mais__" diff --git a/locale/ru/LC_MESSAGES/misc.mo b/locale/ru/LC_MESSAGES/misc.mo index 88a09289b3a8b601f8f379928ab4d3ceeeed0237..f0421374ba47c69242c313b31906a2e9c1b348da 100644 GIT binary patch delta 412 zcmXxgzfQtX6vy!&ErMVHAtn;TfTJT(2qTWZ1}ia65?mnq3St;ACWa><1UDGn2z8b? zvaq?hA>Y%Mlbn9;|9g5j-rVc`6yh%;j>!`FN}gIf#)s(OAwFOppD>Gk%-{%*aE!KY z7Wo;CFEP#dchp~_NB3}a_b%6}_=J^E9B{Cu9MOt$W=vjg4DCsqIe delta 439 zcmXxgJx>Bb5P;#~IQcvg2?;ULK!Kfv7?oK0@h51nKuRQ`Aa>VENr6&YP>|SRt~D{S zu)?Dzv4PI`1F+(qW0_>`xtZO)+ue8P*YSRG_CSbz@{k;n1@a`qgLuSU>|p|*QRlv3 z1}A3x1Jl&ssPpE=rRo1+ivG&fwk6_-c#`EM&cKoJ81(}cQ`fM|qAS!N`q9mgKJk(| zzza;;A~n3mbL^rX=oL@#%k=;8jJmp`^E{CTFZzKY=5dNQxIkT4j&1sNWFO&eFchAK zmSjl{P7}r+Pd$L%hK6o>8=OJduds(O;s=l<^-3k>y0`atrB=JsbltayNYTpB3WlY? NpY>*adQZ`@wFYu^E2{ti diff --git a/locale/ru/LC_MESSAGES/misc.po b/locale/ru/LC_MESSAGES/misc.po index 15ad40c..29d0167 100644 --- a/locale/ru/LC_MESSAGES/misc.po +++ b/locale/ru/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-16 23:56+0200\n" +"POT-Creation-Date: 2024-02-24 17:51+0100\n" "PO-Revision-Date: 2020-03-18 13:59+0100\n" "Last-Translator: BabylonAS\n" "Language-Team: \n" @@ -19,70 +19,69 @@ msgstr "" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 2.3\n" -#: src/misc.py:45 +#: src/misc.py:115 msgid "Location" msgstr "Местоположение" -#: src/misc.py:45 +#: src/misc.py:115 msgid "About me" msgstr "О себе" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Google link" msgstr "Ссылка на учётную запись Google" -#: src/misc.py:45 +#: src/misc.py:116 msgid "Facebook link" msgstr "Ссылка на учётную запись Facebook" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Twitter link" msgstr "Ссылка на учётную запись Twitter" -#: src/misc.py:45 +#: src/misc.py:117 msgid "Reddit link" msgstr "Ссылка на учётную запись Reddit" -#: src/misc.py:45 +#: src/misc.py:118 msgid "Twitch link" msgstr "Ссылка на учётную запись Twitch" -#: src/misc.py:45 +#: src/misc.py:118 msgid "PSN link" msgstr "Ссылка на учётную запись PSN" -#: src/misc.py:45 +#: src/misc.py:119 msgid "VK link" msgstr "Ссылка на учётную запись ВКонтакте" -#: src/misc.py:45 +#: src/misc.py:119 msgid "XBL link" msgstr "Ссылка на учётную запись XBL" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Steam link" msgstr "Ссылка на учётную запись Steam" -#: src/misc.py:45 +#: src/misc.py:120 msgid "Discord handle" msgstr "Ссылка на учётную запись Discord" -#: src/misc.py:45 +#: src/misc.py:121 msgid "Battle.net handle" msgstr "Ссылка на учётную запись Battle.net" -#: src/misc.py:140 -msgid "" -"\n" -"__And more__" -msgstr "" -"\n" -"__И ещё__" - -#: src/misc.py:330 +#: src/misc.py:127 msgid "Unknown" msgstr "Неизвестно" -#: src/misc.py:332 +#: src/misc.py:129 msgid "unknown" msgstr "неизвестно" + +#~ msgid "" +#~ "\n" +#~ "__And more__" +#~ msgstr "" +#~ "\n" +#~ "__И ещё__" diff --git a/locale/zh-hans/LC_MESSAGES/misc.mo b/locale/zh-hans/LC_MESSAGES/misc.mo index 9f7e8e09377c2d5965d5f50ecb6866cc492ac94c..eebc84554b7bd6a961d41fa5bd5af8424a78385b 100644 GIT binary patch literal 1143 zcmb7?ziSjh6vtPMM%N!PHd>^Z(jUz2-VsdLB%=9gFwx_3i2)0l+kM%a+}_NxJLe^q zf?#7n)GnYPX)FY>6Hc(PvG5NNt>Oj2%39Djw{x79KA8Qy@0*!@ZyxXKslKNc+DTkP zxVCYf*8V>Hplu)zBR7$Q$a}~W$S26-$QQ_?$k#}Hu4VYa#6KZzjDI$|jXZ|>C$b;; z+pvFsc7Fh=<7bf1agQL6pniWK%l{Fn^M64OAb%ir9lwx=kak~|ZxE^DLr9(PywM{_ zeSZe2&zF(<|F@93PB8HpiRn9c(e0c$h}1c?={I*x*Q@Vp(>c4Q^I-WFmew(yPxnao z+PYGa4Mpl;O){k-$O%xS%0v)>HO*6BCP7!uG9M~Z)=0!f&6<-kj3DzDq|X$W!YVFZ z&mtuV08Zn?>oU+wt{l1wa%nvhLltz66W>f}P^G|WaZk?Y_qIv>y#NK#DZ zk&-{>PdDun#4=HIF%5Y@CmUf(%hDru@dhoy9j=ekX{Nv<1-IbRe1W;;x8T27cqBc^2Hk%-k`ouyK^WISz%h;KHSD7fyhTeyt9im(MaU)C?-O%XO&2(*k3 z^vG0|3rK;SUE=jP;%gj&b7Z`#RGfN_qf7?KHF=F!q{;>0#M!G-C-Fl+XgYQ5xO2C9 z`zluB^b&Z)#O%fS#hG3M@;TR@l0t#N7i`A(LL>NdStZ1m0gS)35)2gOzNpeMBI_-M1G89?u0vLuhKaXkYsJT2^DM@kl|b* zm$$8N_uuTk-D*F0^dE!t{qei@)=qbnjM{BI+-tq+jFO3%VKOQkCnL;2{iXCs8QI=` Qx%X^G&y)%1srq;C4_DYU#{d8T delta 249 zcmey)v4|z^o)F7a1|VPpVi_RT0b*7lwgF-g2moSUAPxlL4U7y7@jzM-hy{QefLt&D z>4gKX_;|;>6ouUUqSW~K$?{BI4h9yw1{MlN23Dq)+6F+t<&#)kq8n0_m{**WSdw34 zrQlYSS)8p9l98(5T9%ok;GUmYqTpYaT9lJtl%ilWc@vYqPKSq|03GyV|BPpII-kwn@^s0p H_;>~Y3G+Ts diff --git a/locale/zh-hans/LC_MESSAGES/misc.po b/locale/zh-hans/LC_MESSAGES/misc.po index 9df172c..bf87fac 100644 --- a/locale/zh-hans/LC_MESSAGES/misc.po +++ b/locale/zh-hans/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-16 23:56+0200\n" +"POT-Creation-Date: 2024-02-24 17:51+0100\n" "PO-Revision-Date: 2020-12-06 14:17+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) 6vy#%y_YvdFIX@*cf0%tB+Yg@o6%8V)5K<>S&&AfP}PlQa|DXP;^xN2 z+~}AHZ20{>&%@cC`#I0sJ?Gx1(xTW~oF+pfDvWc+h*47>@gVN8h!0rBM?Ar2JjO8| z;S1{AdvF%kKk<)KYc_ZGXMYp delta 441 zcmXw#Jxc>Y5QZnY(@Ww{8oNC2xxO&_?9A-W%*kH-@t2d5x)%8xZ>kANMmazer&eSMg>|>7Y?Bsbf7Mt`FIyHNAepB zP&u71V3LYT8bS}yZ%C^BFWz9xX_QJ7Z2&dXODyMH^SHfzbkaF+?(sCWmo5_eKEIgW Q^`^H^li`hXSEJy04w8~8BLDyZ diff --git a/locale/zh-hant/LC_MESSAGES/misc.po b/locale/zh-hant/LC_MESSAGES/misc.po index 7c1bcc1..b67dc2e 100644 --- a/locale/zh-hant/LC_MESSAGES/misc.po +++ b/locale/zh-hant/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-06-16 23:56+0200\n" +"POT-Creation-Date: 2024-02-24 17:51+0100\n" "PO-Revision-Date: 2020-08-16 19:13+0000\n" "Last-Translator: Winston Sung <>\n" "Language-Team: Chinese (Traditional) str: return (f"") def __repr__(self): @@ -101,6 +102,33 @@ class Domain: wiki.statistics.update(Log(type=LogType.SCAN_REASON, title=str(reason))) self.wikis.move_to_end(wiki.script_url) + def failure_rate_investigation(self) -> Optional[set]: + """Function is supposed to determine if a notification should be sent regarding a wiki/domain not working properly + + Cases considered worthy of notification: + An entire farm (20% of wikis when 15+ wikis from domain) is responding with errors for the past 10 minutes + A single wiki returning connection errors either for full queue_length or for an hour + """ + if len(self) > 15: + affected = set() + for wiki_url, wiki_obj in self.wikis.items(): + failures = 0 + logs_last_10 = wiki_obj.statistics.filter_by_time(10 * 60) + for log in logs_last_10: + if log.type == LogType.CONNECTION_ERROR: + failures += 1 + if len(logs_last_10)/2 <= failures: + affected.add(wiki_url) + if len(affected) > len(self)/5: + return affected + else: + affected = set() + for wiki_url, wiki_obj in self.wikis.items(): + if all([x for x in wiki_obj.statistics.filter_by_time(60*60) if x.type in (LogType.CONNECTION_ERROR, LogType.SCAN_REASON, LogType.HTTP_ERROR)]): + affected.add(wiki_url) + if affected: + return affected + async def irc_scheduler(self): try: while True: @@ -123,12 +151,14 @@ class Domain: except Exception as e: if command_line_args.debug: logger.exception("IRC scheduler task for domain {} failed!".format(self.name)) - else: - self.failures += 1 + else: # production + if not (time.time()-172800 > self.last_failure_report): # If we haven't reported for more than 2 days or at all + return traceback.print_exc() - await self.send_exception_to_monitoring(e) - if self.failures > 5: - raise asyncio.exceptions.CancelledError + wikis = self.failure_rate_investigation() + if wikis: + await self.send_exception_to_monitoring(e, wikis) + self.last_failure_report = time.time() async def regular_scheduler(self): try: @@ -139,11 +169,13 @@ class Domain: if command_line_args.debug: logger.exception("Regular scheduler task for domain {} failed!".format(self.name)) else: - self.failures += 1 - await self.send_exception_to_monitoring(e) + if not (time.time()-172800 > self.last_failure_report): # If we haven't reported for more than 2 days or at all + return traceback.print_exc() - if self.failures > 5: - raise asyncio.exceptions.CancelledError + wikis = self.failure_rate_investigation() + if wikis: + await self.send_exception_to_monitoring(e, wikis) + self.last_failure_report = time.time() @cache def calculate_sleep_time(self, queue_length: int): @@ -170,11 +202,11 @@ class Domain: await wiki.session.close() raise - async def send_exception_to_monitoring(self, ex: Exception): + async def send_exception_to_monitoring(self, ex: Exception, wikis: set): discord_message = DiscordMessage("embed", "generic", [""]) discord_message["title"] = "Domain scheduler exception for {} (recovered)".format(self.name) - discord_message["content"] = str(ex)[0:1995] - discord_message.add_field("Failure count", str(self.failures)) + discord_message["content"] = "Affected wikis: {}".format(", ".join(wikis)) + "\n" + str(ex) + # discord_message.add_field("Failure count", str(self.failures)) discord_message.finish_embed_message() header = settings["header"] header['Content-Type'] = 'application/json' diff --git a/src/irc_feed.py b/src/irc_feed.py index 3d6db2b..b50505c 100644 --- a/src/irc_feed.py +++ b/src/irc_feed.py @@ -18,7 +18,13 @@ if TYPE_CHECKING: class AioIRCCat(irc.client_aio.AioSimpleIRCClient): def connect(self, *args, **kwargs): logger.debug("Connecting with {}...".format(args)) - super().connect(*args, **kwargs) + while True: + try: + super().connect(*args, **kwargs) + break + except ConnectionRefusedError as error: # hopefully picked up by self.activity_tester + logger.exception("Could not connect with IRC!") + pass self.connection_details = (args, kwargs) def __init__(self, targets: dict[str, str], domain_object: Domain, rc_callback: Optional[Callable], discussion_callback: Optional[Callable]): diff --git a/src/statistics.py b/src/statistics.py index b218168..01b2029 100644 --- a/src/statistics.py +++ b/src/statistics.py @@ -3,7 +3,7 @@ from datetime import datetime import aiohttp.web_request from src.config import settings -from typing import Union, Optional +from typing import Union, Optional, List from enum import Enum @@ -65,12 +65,12 @@ class Statistics: for log in args: self.logs.append(log) - def filter_by_time(self, time_ago: int, logs: list = None): # cannot have self.logs in here as this is evaluated once + def filter_by_time(self, time_ago: int, logs: list = None) -> List[Log]: # cannot have self.logs in here as this is evaluated once """Returns logs with time between time_ago seconds ago and now""" time_limit = int(time.time()) - time_ago return [x for x in (self.logs if logs is None else logs) if x.time > time_limit] - def filter_by_type(self, log_type: LogType, logs: list = None): + def filter_by_type(self, log_type: LogType, logs: list = None) -> List[Log]: """Returns logs with same type as in log_type""" return [x for x in (self.logs if logs is None else logs) if x.type == log_type] diff --git a/src/wiki.py b/src/wiki.py index 7d7f5fd..0ea079b 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -342,7 +342,7 @@ class Wiki: # If WikiServerError comes up 2 times in recent 2 minutes, this will reraise the exception, otherwise waits 2 seconds and retries self.statistics.update(Log(type=LogType.CONNECTION_ERROR, title=str(e.exception))) if self.statistics.recent_connection_errors() > 9: - raise + raise e await asyncio.sleep(2.0) continue if not self.mw_messages or self.recache_requested: @@ -360,7 +360,10 @@ class Wiki: else: self.statistics.update(last_action=0) dbmanager.add(("UPDATE rcgcdb SET rcid = 0 WHERE wiki = $1 AND ( rcid != -1 OR rcid IS NULL )", (self.script_url))) - return # TODO Add a log entry? + self.statistics.update(Log(type=LogType.VALUE_UPDATE, + title="Commited first fetch and updated rcid value from {} to {}".format( + self.rc_id, self.statistics.last_action))) + return categorize_events = {} new_events = 0 self.statistics.last_checked_rc = int(time.time())