Ich brauche für meinen Radius-Server (freeradius) eine Abfrage.
Im moment ist es :
sqlcounter noresetcounter {
counter-name = Max-All-Session-Time
check-name = Max-All-Session
sqlmod-inst = sql
key = User-Name
reset = never
query = "SELECT IFNULL(SUM(AcctSessionTime),0) FROM radacct WHERE UserName='%{%k}'"
}
Das ganze wird für einen WLAN-Hotspot benötigt, der z.B. auch Monatszugänge verwalten soll. Die Abfrage macht Probleme... wenn ich mich einlogge nimmt er immer nur die Zeit von der aktuellen Session, also hätte man einen ganzen Monat in Sekunden zum Surfen (Hier in dem Beispiel sind es 3600 Sekunden). Ich bin leider nicht der MySQL Guru. Ich hoffe es kann mir jemand helfen.
Accstarttime(Bild2) + Value 3600(Bild1) = Zugang Ende ! Wäre sowas mögliche?
Also wirklich verstanden habe ich das Problem nicht. Wenn ich mir Bild 1+2 betrachte, dann wechselt der UserName bei jeder Session. Verstehe ich nicht.
Hier wird nur ein UserName abgefragt
Code:
SELECT IFNULL(SUM(AcctSessionTime),0) FROM radacct WHERE UserName='%{%k}
Eventuell wäre es eine Lösung mehrere UserName (hier drei) abzufragen und deren Summe zusammen zu zählen.
Code:
SELECT IFNULL(SUM(AcctSessionTime),0) FROM radacct
WHERE UserName IN ( 'Fritz', 'Kurt', 'Emil' );
Grüße
Thomas
__________________ Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Ein Account besteht immer aus 2 Einträgen
1. Nutzer und Passwort
2. Nutzer und Länge der Nutzung (3600)
Bild2 :
Ist das Logging...
Das Problem ist das er bei dem beispiel query "acctseesiontime" zusammenzählt und wenn da die 3600 erreicht sind ist der Acc ix7dh68v5cyu(3600sekunden) abgelaufen.
Ich möchte aber das er nicht die sessions zählt, sondern acctstarttime+3600 und dann soll er abgelaufen sein. Ich hoffe das ist verständlich.
//// Edit
acctstarttime ist das erste mal Anmelden an den Hotspot
a) die Tabellenstrukturen der beteiligten Tabelle liefert (CREATE TABLE ...)
b) und ein paar sinnvolle Testdaten zu liefern (INSERT INTO ... )
Dann reden wir alle nachvollziehbar vom Gleichen. Es ist leider mühselig, die Daten von den Bilder abzuschreiben, insbesondere weil ein JOIN zwischen den beiden Tabellen notwendig ist, um beendete SESSIONs pro User zu erkennen.
Nur soviel zu Berechnung des Sessionende (acctstarttime + 3600 Sekunden)
Code:
/* 1 Stunde = 3600 Sekunden */
SELECT ADDTIME('2011-01-03 10:27:31','01:00:00') AS session_ende;
+---------------------+
| session_ende |
+---------------------+
| 2011-01-03 11:27:31 |
+---------------------+
1 row in set (0.00 sec)
mysql>
/* 1 Stunde = 3600 Sekunden */
SELECT ADDTIME(acctstarttime,'01:00:00') FROM radacct
WHERE UserName='%{%k}'
Das Problem ist aber jetzt, die noch nicht beendete Session zu finden.
Grüße
Thomas
__________________ Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Okay, ich habe mal die Tabellen erzeugt (CREATE) und den einen Datensatz eingefügt (INSERT).
Hat funktioniert, aber hast Du nicht mehr Testdaten (so jeweils 10 sinnvolle Datensätze pro Tabelle). So einen Dump kannst Du aus phpMyAdmin erzeugen (soweit ich weiß).
Anhand der Testdaten kann Du dann nochmal erklären, was das gewünschte Ergebnis sein soll.
Grüße
Thomas
__________________ Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Das Ergebnis müsste "Session-Timeout" bei acctterminatecause! In dem Link stehen einige Variablen die man nutzen kann, aber ich denke das ist erstmal nicht wichtig!