Wikipedia Diskussion:WikiProjekt Begrüßung von Neulingen/Technik
Statistik-Dashboard
Bearbeiten@FNDE: Ein immer aktuelles Statistik-Dashboard wäre echt super. Ich könnte dir die Listen der Begrüßten und die Kontrollgruppe im Redis auf der Toolforge bereitstellen. Dann wäre das Statistik-Dashboard ansonsten von der Botprogrammierung unabhängig. Was hältst du davon?
Wir können uns auch im IRC oder im Wikimedia Community Discord absprechen.
Maintainer des Toolaccounts dewikigreetbot bist du jetzt auch. --Count Count (Diskussion) 16:34, 22. Nov. 2019 (CET)
- Cool! Habe vorher noch nicht mit Redis gearbeitet, ist das easy mit der Connection? Die Python Library sieht ja erstmal simpel aus, da koennte man also was mit Flask oder so machen. --FNDE 19:26, 22. Nov. 2019 (CET)
Redis ist eine ganz einfache Schlüssel-Werte-Datenbank. Hier ist der ganze Code der Einbindung schon inklusive Funktionen um die Liste der begrüßten Benutzer und die Kontrollgruppe wieder herauszuholen:
class RedisDb:
def __init__(self, secret: str) -> None:
self.secret = secret
self.redis = Redis(host="tools-redis" if os.name != "nt" else "localhost", decode_responses=True)
def getKey(self, greetedUser: str) -> str:
return f"{self.secret}:greetedUser:{greetedUser}"
def addGreetedUser(self, greeter: str, user: str) -> None:
key = self.getKey(user)
p = self.redis.pipeline() # type: ignore
p.set(key, greeter)
p.sadd(f"{self.secret}:greetedUsers", user)
p.expire(key, timedelta(days=30))
p.execute()
def addControlGroupUser(self, user: str) -> None:
self.redis.sadd(f"{self.secret}:controlGroup", user) # type: ignore
def getAndRemoveGreetedUserFromRedis(self, user: str) -> Optional[str]:
key = self.getKey(user)
greeter = self.redis.get(key)
if greeter:
self.redis.delete(key) # type: ignore
return cast(Optional[str], greeter)
def getAllGreetedUsers(self) -> List[str]:
return cast(List[str], self.redis.smembers(f"{self.secret}:greetedUsers")) # type: ignore
def getAllControlGroupUsers(self) -> List[str]:
return cast(List[str], self.redis.smembers(f"{self.secret}:controlGroup")) # type: ignore
Das secret
ist notwendig, da es nur eine Redis-Instanz für allen Tools gibt, sich also alle den Namensraum teilen. --Count Count (Diskussion) 21:04, 22. Nov. 2019 (CET)
- Ja cool. Wenn wir eine zeitbasierte Auswertung machen, brauchen wir aber noch einen Key mit Timestamp - oder ist der bereits vorhanden? --FNDE 14:19, 25. Nov. 2019 (CET)
- Im Moment nicht, kann ich aber leicht einbauen. --Count Count (Diskussion) 13:03, 26. Nov. 2019 (CET)