W dniu 9 grudnia 2015 14:27 użytkownik Tomasz Chiliński <tomasz.chilinski@chilan.com> napisał:
W dniu 09.12.2015 14:23, Marcin napisał(a):
Witam

Cześć,

Męczę się by ożenić freeradiusa z lms, sesje i statystyki.

Lepiej na żywo rekordów w bazie danych sql nie aktualizować przy żądaniach nadchodzących
do serwera radius.

Tych żądań nie ma tak dużo więc zdecydowałem na bezpośrednie zmiany do bazy
 
nodes.lastonline i nodesession aktualizować wsadowo co jakiś czas odrębnym skryptem, który załatwi
hurtowe przetworzenie logów accountingu trzymanych w sensownym pliku tekstowym.
Tabelę stats rozważyć zastąpieniem przez rra.

rra?
 

jak na razie mam coś takiego:
#v+
accounting {
        reference =
"%{tolower:type.%{%{Acct-Status-Type}:-none}.query}"

        type {
                start {
                        query = "UPDATE nodes SET lastonline =
EXTRACT(EPOCH FROM now()) WHERE name='%{SQL-User-Name}'; \
                        INSERT INTO nodesessions
(customerid,nodeid,ipaddr,mac,start,stop,tag,type) VALUES \
                                ((SELECT ownerid FROM nodes WHERE
name='%{SQL-User-Name}'),\
                                (SELECT id FROM nodes WHERE
name='%{SQL-User-Name}'),\
                                INET_ATON('%{Framed-IP-Address}'),\
                                '%{Calling-Station-Id}',\
                                '%{integer:Event-Timestamp}',\
                                '%{integer:Event-Timestamp}',\
                                '%{Acct-Session-Id}',\
                                '1')"
                }

                interim-update {
                        query = "UPDATE nodes SET lastonline =
EXTRACT(EPOCH FROM now()) WHERE name='%{User-Name}';\
                                UPDATE nodesessions \
                                SET     \
                                        download =
(('%{%{Acct-Output-Gigawords}:-0}'::bigint << 32) +
'%{%{Acct-Output-Octets}:-0}'::bigint), \
                                        upload =
(('%{%{Acct-Input-Gigawords}:-0}'::bigint << 32) +
'%{%{Acct-Input-Octets}:-0}'::bigint), \
                                        stop =
'%{integer:Event-Timestamp}' \
                                WHERE tag = '%{Acct-Session-Id}'"
                }

                stop {
                        query = "UPDATE nodes SET lastonline =
EXTRACT(EPOCH FROM now()) WHERE name='%{User-Name}';\
                                UPDATE nodesessions \
                                SET     \
                                        download =
(('%{%{Acct-Output-Gigawords}:-0}'::bigint << 32) +
'%{%{Acct-Output-Octets}:-0}'::bigint), \
                                        upload =
(('%{%{Acct-Input-Gigawords}:-0}'::bigint << 32) +
'%{%{Acct-Input-Octets}:-0}'::bigint), \
                                        stop =
'%{integer:Event-Timestamp}', \
                                        terminatecause =
'%{Acct-Terminate-Cause}' \
                                WHERE tag = '%{Acct-Session-Id}'"
                }
 #
                #  No Acct-Status-Type == ignore the packet
                #
                none {
                     query = "SELECT true"
                }
        }
}

#v-

niestety musiałem użyć 2x INSERT/UPDATE w query, bo freeradius
wykonuje tylko pierwsze jeśli się uda.

do tego momentu jest ok,

problem pojawił mi się kiedy muszę dodać dane do tabeli stats a
raczej je updateować.

podpowie ktoś?

przy update mam takie dane:

#v+
(3)   Service-Type = Framed-User
(3)   Framed-Protocol = PPP
(3)   NAS-Port = 52
(3)   NAS-Port-Type = Ethernet
(3)   User-Name = "Wioletta_W
(3)   Calling-Station-Id = "E4:88:88:CC:0A:1A"
(3)   Called-Station-Id = "pppoe_server"
(3)   NAS-Port-Id = "bridge1"
(3)   Acct-Session-Id = "8160002f"
(3)   Framed-IP-Address = 192.168.3.206
(3)   Acct-Authentic = RADIUS
(3)   Event-Timestamp = "Dec  9 2015 14:20:32 CET"
(3)   Acct-Session-Time = 600
(3)   Acct-Input-Octets = 15262
(3)   Acct-Input-Gigawords = 0
(3)   Acct-Input-Packets = 160
(3)   Acct-Output-Octets = 106
(3)   Acct-Output-Gigawords = 0
(3)   Acct-Output-Packets = 11
(3)   Acct-Status-Type = Interim-Update
(3)   NAS-Identifier = "MikroTik"
(3)   Acct-Delay-Time = 0
(3)   NAS-IP-Address = 172.21.7.202

#v-

z góry dzięki

--

Pozdrawiam
Marcin / nicraM

_______________________________________________
lms mailing list
lms@lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms

--
Pozdrawiam
Tomasz Chiliński, Chilan
_______________________________________________
lms mailing list
lms@lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms



--
Pozdrawiam
Marcin / nicraM