Newcomer1989 / TSN-Ranksystem

A PHP Bot that assigns time based server groups on TeamSpeak3.
https://ts-ranksystem.com
GNU General Public License v3.0
145 stars 60 forks source link

Rangsystem löscht vereinzelnd User #848

Closed Holt31 closed 1 year ago

Holt31 commented 3 years ago
Beschreibung unterhalb ausfüllen
Ranksystem Version 1.3.17
Nutzt du TeamSpeak oder TeaSpeak? TeamSpeak3 (3.13.6)
Link zu deiner Ranksystem Statistik Seite https://ts3ranking.nox-eagles.de/
Pastebin Link zu deiner Ranksystem Log *¹ https://dl.nox-gaming.network/ts3/ranksystem.log (Pastebin erlaubt nur 512kb Logfiles)

1) Was hast du getan?

Ich habe den Bot gestartet und ihm seine Arbeit überlassen.

2) Was war deine Erwartung?

Der Bot läuft problemlos.

3) Was ist stattdessen passiert?

Dies lief Monate lang problemlos durch. Nach einem Neustart des Bots konnten viele User nicht mehr gefunden werden und der Monatswert war negativ. Auch ein Backup der Bot-Datenbank hat dafür keine Abhilfe geschaffen. Viele User sind noch im System, andere wurden im Levelsystem nicht mehr gefunden und konnten nicht mehr zugeordnet werden. Stattdessen wurde deren Rang entfernt und sie mussten von vorne anfangen.

image image image

Der Modus "Client-Löschung" war zu Beginn aktiv, kann aber nichts mit dem Problem zu tun haben, da es auch User betroffen hat, die fast täglich auf den TS joinen. Weiterhin ist der Server in der ts3server.ini so eingestellt, dass dieser User nur alle 90 Tage aus der Datenbank entfernt, wenn diese nicht mehr verbunden waren. Um dies auszuschließen, habe ich den Modus auch wieder deaktiviert. image image

Bei der Anzahl User die wir haben, ist es unmöglich sich zu merken, welche alle einen Rang haben um den Bot ggf. neu aufsetzen zu können. Bisher konnte ich über das Log auch immer User manuell wieder ihren Rang zuweisen (zwar mit Verfälschungen, da ich nicht die genaue Zeit kannte, aber dennoch genug, dass diese wenigstens wieder ihren Rang hatten). So konnte wenigstens minimal dagegen steuern.


*¹ Ranksystem Log - HOW-TO

Newcomer1989 commented 3 years ago

Aus der Log kann ich leider keine Ursache erkennen. Die Log geht auch nur knapp 1 Std. rückwärts. Dort scheint alles in Ordnung zu sein. Das Problem muss ja hier logischerweise in der Vergangenheit liegen. Es wäre also gut die Log um den Zeitraum zu erhalten, in dem ein User eine solche falsche Gruppe erhält.

In obigen Screenshot wird bei einer Person das Level 5 entfernt und stattdessen das Level 1 gegeben. Demnach würde ich vermuten, dass die Person nicht auf dem TS gelöscht war/wurde. Die genannten 90 Tage gelten ja nur für Clients, die in keiner permanenten Servergruppe sind.

Hier wurde also die Zeit der Personen geändert. Mein erster Verdacht, hier wurde mit der Funktion im Webinterface -> Administration -> "Zeit entfernen" gearbeitet. Dadurch kann es natürlich zu herabstufungen kommen.

Gab es denn irgendwelche Änderungen seitens des TeamSpeak Server? Wurde dort mal ein backup restored (z.B. Snapshot)? Gab es dort Änderungen an den Datenbank-IDs der User? Also haben sich bei Usern diese zu irgend einem Zeitpunkt mal geändert?

Holt31 commented 3 years ago

Vorneweg, danke für die schnelle Hilfe.

Ich habe ein neues Log hochgeladen. https://dl.nox-gaming.network/ts3/2021-08-09-ranksystem.log Es ist quasi immer noch das Gleiche wie von Gestern. Dort ist wieder ein User drinnen, den es betrifft. Siehe folgender Screenshot: image

Auf die "Zeit entfernen"-Funktion habe nur ich Zugriff. Kein anderer User hat dort Nutzer und Passwort-Zugriff. Sicherheitshalber habe ich bereits das Passwort geändert.

Den TS3-Server haben wir letzten Oktober (2020) neu aufgesetzt. Das Rankingsystem haben wir erst seit April (2021). Hier gab es von uns keine Änderung. Wir haben weder ein Backup der TS3-Datenbank eingespielt (MariaDB), noch einen Snapshot eingespielt. Höchstens vereinzelte Restarts aufgrund von Serverupdates.

Ich achte leider nicht auf jede Datenbank-ID der User. Allerdings sehen die, die ich kenne, noch gut aus. Theoretisch sollte sich dort aber überhaupt nichts geändert haben.

Newcomer1989 commented 3 years ago

Die Log gibt ja schon eine wichtige Info her. Der User war dem Ranksystem unbekannt.

Auf dem TS hatte er aber schon eine höhere Level-Gruppe. Fraglich ist also, woher diese kam?!

Das Ranksystem sieht dann, dass die Person 0 online Zeit hat bzw hier 1 Minute und somit zu Level 1 gehört. Allerdings hat der User bereits Level 4, das wird in diesem Zuge durch das Ranksystem "korrigiert".

Line 267758: 2021-08-08 23:13:29.462884   DEBUG     User FirePlex (uuid: tr9K3RuUDCgNaJ/x2LIkBKgOLmg=) connected to the server.
Line 267760: 2021-08-08 23:13:29.512602   DEBUG     Userenter: INSERT INTO `tsranksystem`.`user_iphash` (`uuid`,`iphash`,`ip`) VALUES ('tr9K3RuUDCgNaJ/x2LIkBKgOLmg=','$2y$10$51b83f738ad181792fe85OXpJorE/bUxjCurPcU9OS9pMFOFaj8Tu',''); 
Line 267762: 2021-08-08 23:13:29.520646   INFO      Added new user 'FirePlex' (unique Client-ID: tr9K3RuUDCgNaJ/x2LIkBKgOLmg=; Client-database-ID 135) to the Ranksystem database.
Line 268609: 2021-08-08 23:14:29.261864   INFO      Removed servergroup 'Level -4-' (ID: 55) from user 'FirePlex' (unique Client-ID: tr9K3RuUDCgNaJ/x2LIkBKgOLmg=; Client-database-ID 135).
Line 268610: 2021-08-08 23:14:29.273327   INFO      Grant servergroup 'Level -1-' (ID: 52) to user 'FirePlex' (unique Client-ID: tr9K3RuUDCgNaJ/x2LIkBKgOLmg=; Client-database-ID 135).
Line 268693: 2021-08-08 23:14:29.283574   DEBUG     sendmessage to uuid tr9K3RuUDCgNaJ/x2LIkBKgOLmg= (connectionID ): Hey, du hast einen höheren Rang erreicht, da du bereits seit 0 Tagen, 0 Stunden und 1 Minuten auf unserem TS3-Server chillst.
Holt31 commented 3 years ago

Die Gruppe wurde zuvor vom Bot zugewiesen. Nach dem Neustart hatte der Bot oder was auch immer den Eintrag entweder aus der DB gelöscht oder die ID hat sich geändert. Dies macht allerdings keinen Sinn, da wir weder Snapshots noch DB-Backups eingespielt haben. Es ist als hätte der Bot den User selber rausgeschmissen. Ich finde auch keinen anderen Spieler mit gleichem Namen mehr im Bot.

Bei uns ist das so, dass wir Altersränge, Geschlechtsränge und Gameränge vergeben. An den Geschlechtsrängen hängt dann der Trigger für den Level-Bot. Der User war schon auf dem TS bekannt und hatte zuvor vom selbigen Bot den Rang 4 bekommen. Allerdings fehlte er dann wieder in der DB.

Ich sehe es schon kommen, dass ich den Bot leider neu aufsetzen darf, weil da vielleicht aufgrund eines Restarts des Servers etc. was in die Hose gegangen ist.

Wir können uns das ganze auch gerne gemeinsam anschauen, falls du die Zeit hast. Ich hab vollen Server, sowie Datenbankzugriff. :)

monster010 commented 3 years ago

@Newcomer1989 kannst du dich noch daran erinnern, dass ich mal das gleich Problem bzw ein sehr ähnliches hatte? Daher auch der Gedanke.

@Holt31 Du sagtest, du hast die Ränge manuell angepasst, hast du das direkt in der Datenbank getan oder übers Interface? Bzw hast du prinzipiell etwas in der Datenbank des Ranksystems geändert?

Holt31 commented 3 years ago

@monster010 ich hatte früher das Tunakills-Rankingsystem. Ich habe der Datenbank nur eine Tabelle hinzugefügt wo die alten Daten drinnen stehen. Ich wüsste zumindest nicht ob das irgend ein Problem darstellen sollte. Habe die Tabelle "tunadata" genannt. Dast Tunakills-Ranking-System ist ein Plug-In für den Sinusbot, welches statt den DB-ID's die UID's der User nutzt. Das macht das ganze theoretisch stabiler, weil das System auch funktioniert, wenn sich die DB's ändern. Allerdings hat es nicht ansatzweise so viele Features wie das Rankingsystem und basiert auf SQLite. Deswegen der Import in eine MariaDB. Ich mag das TSN-Rankingsystem einfach deutlich lieber und @Newcomer1989 hört sich wenigstens die Probleme an.

Ansonsten habe ich persönlich keine Modifikationen an der DB durchgeführt. Muss aber auch gestehen, dass damals ein Freund, weil er es mir empfohlen hatte, geholfen hat die Daten zu migrieren. Ich weiß daher nicht ob er irgendetwas an der DB rumgepfuscht hat, glaube ich aber zumindest nicht.

Das ist meine Struktur. Man merke die zusätzliche Tabelle "tunadata" an. Könnte die Einfluss auf das Ganze haben? image

monster010 commented 3 years ago

Ne, denke nicht. Also wäre komisch, aber andere Tabellen dürften das System nicht beeinflussen.

Newcomer1989 commented 3 years ago

Ich habe der Datenbank nur eine Tabelle hinzugefügt wo die alten Daten drinnen stehen.

Wenn das wirklich nur die Tabelle ist, die daneben liegt ohne jegliche Abhängigkeiten (constraints, etc.), sollte das nicht weiter stören.

Aber welchen Grund hat die Tabelle an dieser Stelle? Wie wurde denn das Ranksystem gestartet? Komplett leer oder wurden hier Daten von Tunakill migriert? Wenn ja, wie genau?

Habe die Tabelle "tunadata" genannt. Dast Tunakills-Ranking-System ist ein Plug-In für den Sinusbot, welches statt den DB-ID's die UID's der User nutzt. Das macht das ganze theoretisch stabiler, weil das System auch funktioniert, wenn sich die DB's ändern.

Das Ranksystem nutzt ja auch die unique ID, nicht die DBID! Die DBID wird nur als zusätzlicher Punkt geprüft und bei Wechsel dieser gibt es mehrere Optionen (siehe Webinterface -> Other -> Client-database-ID reset). In der Tabelle "user" ist die unique ID ja auch der primary Key.

Ich denke, es würde Sinn machen, dass wir uns das mal gemeinsam per Fernwartung anschauen. Mit dem Frage-/Antwortspiel könnte es etwas länger dauern, bis wir dahinter kommen^^ Komme gerne mal auf unserem Public TS Server (Adresse: ranksystem) vorbei und schreibe mich mal an.




@monster010

@Newcomer1989 kannst du dich noch daran erinnern, dass ich mal das gleich Problem bzw ein sehr ähnliches hatte? Daher auch der Gedanke.

Leider nur noch sehr wage.. War das nicht ein sehr individuelles Problem? Ich kann mich noch daran erinnern, dass du ja auch mehrere Änderungen (Third-Party) gemacht hattest. Hatten wir es denn damals gelöst? War war die Ursache?

monster010 commented 3 years ago

@Newcomer1989 ja hatten wir, weiß nicht mehr wirklich was... die Lösung waren SQL Abfragen, das weiß ich noch

Holt31 commented 3 years ago

@Newcomer1989 gerne können wir das ganze per Fernwartung machen. Da ist nur die Frage wann. In der Regel kann ich ab 16 Uhr. Gibt aber Tage da ist es nicht der Fall.

Alternativ kannst du auch auf den TS ("NoX") joinen und in den "Warten auf Support"-Channel gehen. Die Jungs sind da zügig wenn es um sowas geht. Ansonsten finden wir gewiss einen Termin.

Ich danke dir schon einmal, wirklich, wirklich sehr für deine Zeit und für deine Hilfe beim Lösen des Problems. Das ist nicht selbstverständlich!

@monster010 ich habe das Gefühl, dass es hier auch auf das herauslaufen wird.

Holt31 commented 3 years ago

@Newcomer1989 danke erst einmal für deine Hilfe. Diesmal konnte ich allerdings festhalten, dass das Ranksystem sofort nach dem Neuerstellen des Nutzers, diesen wieder aus der DB geschmissen hat und er beim nächsten Connect wieder neuzugewiesen wurde. Auch in dem Backup der Datenbank, welches wir gemacht haben, ist der User noch vorhanden gewesen. Ich habe noch einmal überprüft ob das Ranksystem doppelt aktiv war und dies täglich monitored. Das trifft nicht zu.

Wenn das so weiter geht, werde ich das System wohl komplett neu installieren müssen.

monster010 commented 3 years ago

@Holt31 sofern du es noch nicht neu aufgesetzt hast, würde ich es mir gern die tage mal anschauen.

Holt31 commented 3 years ago

@monster010 ich hab exakt aus diesem Grund das Ranksystem noch nicht zurückgesetzt. Klar können wir uns gerne die Tage zusammensetzen, wenn du magst.

Holt31 commented 3 years ago

Ich habe jetzt das Rangsystem neu aufgesetzt und nutze diesmal das Docker-Image von @JVMerkle anstatt meinem eigenen nginx-Server.

Bisher läuft alles Prima. Das Einzige was mir fehlt, ist das Folgende, wofür ich ein Featurerequest erstellt habe.

Die Datenbank habe ich noch gebackuped, aber werde sie wohl nicht mehr nutzen.