W dniu 18 czerwca 2012 20:49 użytkownik Marcin marcin@nicram.net napisał:
witam. do tej pory zmiany prędkości wiązały się z ręczną edycją pliku z prędkościami. plik ten ma postać: IP:DOWNMIN:DOWNMAX:UPMIN:UPMAX spłodziłem zapytanie pobierające prędkości z bazy i zapisujące je do pliku. SELECT lower(nn.name) as Nazwa,inet_ntoa(nn.ipaddr) as adres, z.downrate AS downloadmin, z.downceil AS downloadmax, z.uprate AS uploadmin, z.upceil AS uploadmax FROM nodes nn LEFT JOIN ( SELECT n.id, MIN(n.name) AS name,SUM(t.downrate) AS downrate, SUM(t.downceil) AS downceil, SUM(t.uprate) AS uprate, SUM(t.upceil) AS upceil FROM nodeassignments na JOIN assignments a ON (na.assignmentid = a.id) JOIN tariffs t ON (a.tariffid = t.id) JOIN nodes n ON (na.nodeid = n.id) JOIN ( SELECT assignmentid, COUNT(*) AS cnt FROM nodeassignments GROUP BY assignmentid ) o ON (o.assignmentid = na.assignmentid) WHERE (a.datefrom <= unix_timestamp() OR a.datefrom = 0) AND (a.dateto > unix_timestamp() OR a.dateto = 0) AND a.suspended = 0 GROUP BY n.id ) z ON z.name = nn.name WHERE (nn.ipaddr BETWEEN inet_aton('x.x.x.x) and inet_aton('x.x.x.y') ORDER BY ipaddr
prędkości ładnie mi lądują do pliku. z tym, że mam pewien problem. jeden z klientów, firma ma przydzielone 5 adresów x/29. jak to pisałem ręcznie to poprostu w pliku miałem wpis: x.x.x.112/29 gdzie skrypt tc rozpoznawał mi adres z maską, robił jedną klasę dla tej sieci i adresy z tej sieci wrzucał do tej klasy. w sumie ta sieć miała jedną, współdzieloną prędkość. w tej chwili pobierając w ten sposób prędkości z bazy nie wyszczególniam tej sieci i klient ma na każdy host prędkość gdzie w sumie jest to 5xpredkość.
jak rozwiązać ten problem, że jeśli klient ma x komputerów należących do "jednej" sieci to w wyniku było /29? z góry dzięki za sugestie.
Dorzuć na końcu linii pole assignments.id danego klienta (lub nodeassignments.assignmentid danego komputera jeśli istnieje) i ustawiaj taki numer klasy w skrypcie generującym reguły tc. W przypadku kiedy klient ma jedno zobowiązanie wystarczy assignments.id, w przypadku kiedy ma wiele taryf i kilka komputerów przypisanych do różnych taryf będziesz mógł sobie to wyłuskać z pomocą nodeassignments. Ponadto ip komputerów danego klienta nie będą musiały być obok siebie, żeby łapać się do jednej kolejki. A po trzecie jak zaczniesz używać tablic haszujących to i tak będą Ci potrzebne pojedyncze adresy a nie adresy sieci.
Mi to działa w ten sposób i jestem zadowolony. Jakbyś miał jeszcze jakieś pytania to pisz.
ps. jeśli numer zobowiązania pokrywa Ci się z jakąś istniejącą ważną klasą, musisz albo ją przenieść, albo dodać np 100 do assignments.id.
Pozdro.