Witam pytanie do developerów. jest skrypt, moduł w daemonie cutoff do wyłączania klientów ale niestety nie ma modułu do ponownego włączania klientów :( dało by się do daemona coś takiego na szybko zrobić?
Na jakiej podstawie miałby ich włączać ? saldo => 0 czy coś jeszcze ? 4 cze 2012 10:35, "Marcin" marcin@nicram.net napisał(a):
Witam pytanie do developerów. jest skrypt, moduł w daemonie cutoff do wyłączania klientów ale niestety nie ma modułu do ponownego włączania klientów :( dało by się do daemona coś takiego na szybko zrobić?
-- Pozdrawiam Marcin / nicraM
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
Dnia 4 czerwca 2012 13:21 milek milekz@gmail.com napisał(a):
Na jakiej podstawie miałby ich włączać ? saldo => 0 czy coś jeszcze ?
4 cze 2012 10:35, "Marcin" marcin@nicram.net napisał(a):
Witam pytanie do developerów. jest skrypt, moduł w daemonie cutoff do wyłączania klientów ale niestety nie ma modułu do ponownego włączania klientów :( dało by się do daemona coś takiego na szybko zrobić? -- Pozdrawiam Marcin / nicraM
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
zeby to mialo rece i noi to powinien pojawic sie najpierw znacznik za co klient zstal wylaczony bo bez sensu ze wylaczymy klienta bo np chce zawiesic usluge a skrypt go wlaczy bo nie ma zaleglosci ja widze to tak ze pole acces w bazie moglo by przyjmowac wartosci inne niz 0 i 1 ale kazda inna jak 1 oznaczala by wylaczony i wtedy np skrypt cutoff ustawial by wartosc np 2 wtedy cuton na tej podstawie wiedzial by kogo ma wlaczyc
_______________________________________________lms mailing listlms@lists.lms.org.plhttp://lists.lms.org.pl/mailman/listinfo/lms
W dniu 4 czerwca 2012 14:06 użytkownik Jan Ciećko jlc@tlen.pl napisał:
a skrypt go wlaczy
skrypt go nie włączy jak nie będzie miał aktywnego zobowiązania
Witam pytanie do developerów. jest skrypt, moduł w daemonie cutoff do wyłączania klientów ale niestety nie ma modułu do ponownego włączania klientów :( dało by się do daemona coś takiego na szybko zrobić?
Na jakiej podstawie miałby ich włączać ? saldo => 0 czy coś jeszcze ?
Temat był kiedyś już wałkowany i wyszło, że warunków powinno być więcej. W skrócie powinien włączać jeżeli nie ma żadnej przeterminowanej płatności.
W dniu 2012-06-04 14:11, Sarenka pisze:
Witam pytanie do developerów. jest skrypt, moduł w daemonie cutoff do wyłączania klientów ale niestety nie ma modułu do ponownego włączania klientów :( dało by się do daemona coś takiego na szybko zrobić?
Na jakiej podstawie miałby ich włączać ? saldo => 0 czy coś jeszcze ?
Temat był kiedyś już wałkowany i wyszło, że warunków powinno być więcej. W skrócie powinien włączać jeżeli nie ma żadnej przeterminowanej płatności.
A co jak klient ma ustawione "off" z innego powodu jak brak platnosci?
pozdrawiam
W dniu 4 czerwca 2012 14:21 użytkownik Andrzej Banach lms@net-komp.net.plnapisał:
A co jak klient ma ustawione "off" z innego powodu jak brak platnosci?
to akurat jest proste. jeśli ma off z innego powodu to zawiesza/wyłącza mu
się również zobowiązania.
a warunki 2 do spełnienia: 1. saldo => 0 2. aktywne zobowiązanie.
czyli jeśli klient ma wyłączony host a jego saldo => 0 i ma aktywną taryfę to go włączyć.
W dniu 2012-06-04 15:25, Marcin pisze:
W dniu 4 czerwca 2012 14:21 użytkownik Andrzej Banach lms@net-komp.net.plnapisał:
A co jak klient ma ustawione "off" z innego powodu jak brak platnosci?
to akurat jest proste. jeśli ma off z innego powodu to zawiesza/wyłącza mu
się również zobowiązania.
a warunki 2 do spełnienia:
- saldo => 0
- aktywne zobowiązanie.
czyli jeśli klient ma wyłączony host a jego saldo => 0 i ma aktywną taryfę to go włączyć.
Fakt. I taka opcja jest bardzo porzadana :)
pozdrawiam
Szybko i pewnie sprawę załatwia zapytanie psql
update nodes set warning=0, access=1 where id in ( select nodes.id from nodes left join nodeassignments on nodes.id = nodeassignments.nodeid left join macs on nodes.id = macs.nodeid left join assignments on nodeassignments.assignmentid=assignments.id where (assignments.dateto > EXTRACT(EPOCH FROM now()) or assignments.dateto='0' ) and assignments.datefrom < EXTRACT(EPOCH FROM now()) and nodes.access=0 and nodes.warning=1 and nodes.ownerid in (select customerid from cash group by customerid HAVING SUM(value) >=0 ) )
Pozdrawiam Miłosz
W dniu 4 czerwca 2012 15:38 użytkownik Andrzej Banach lms@net-komp.net.plnapisał:
W dniu 2012-06-04 15:25, Marcin pisze:
W dniu 4 czerwca 2012 14:21 użytkownik Andrzej Banach
lms@net-komp.net.plnapisał:
A co jak klient ma ustawione "off" z innego powodu jak brak platnosci?
to akurat jest proste. jeśli ma off z innego powodu to zawiesza/wyłącza mu
się również zobowiązania.
a warunki 2 do spełnienia:
- saldo => 0
- aktywne zobowiązanie.
czyli jeśli klient ma wyłączony host a jego saldo => 0 i ma aktywną taryfę to go włączyć.
Fakt. I taka opcja jest bardzo porzadana :)
pozdrawiam
Andrzej Banach net-komp.net.pl ______________________________**_________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/**mailman/listinfo/lmshttp://lists.lms.org.pl/mailman/listinfo/lms
W dniu 4 czerwca 2012 20:51 użytkownik milek milekz@gmail.com napisał:
Szybko i pewnie sprawę załatwia zapytanie psql
dzięki, ale czy szybko to bym nie powiedział. na virtualce wykonuje się to
75sekund :( a to bardzo wiele
Wykombinowałem takie zapytanie: SELECT n.id FROM nodes n LEFT JOIN nodeassignments ON n.id = nodeassignments.nodeid LEFT JOIN assignments ON nodeassignments.assignmentid=assignments.id WHERE (assignments.dateto > unix_timestamp() or assignments.dateto='0' ) AND assignments.datefrom < unix_timestamp() AND assignments.suspended = 0 AND access = '0' AND (SELECT SUM(value) FROM cash WHERE customerid = n.ownerid) >= 0
wykonuje się ładnie i szybko. ale jeśli wrzucę to do update: UPDATE nodes SET warning=0, access=1 WHERE id IN ( SELECT n.id FROM nodes n LEFT JOIN nodeassignments ON n.id = nodeassignments.nodeid LEFT JOIN assignments ON nodeassignments.assignmentid=assignments.id WHERE (assignments.dateto > unix_timestamp() or assignments.dateto='0' ) AND assignments.datefrom < unix_timestamp() AND assignments.suspended = 0 AND access = '0' AND (SELECT SUM(value) FROM cash WHERE customerid = n.ownerid) >= 0 )
to mysql krzyczy: #1093 - You can't specify target table 'nodes' for update in FROM clause
W dniu 2012-06-04 21:22, Marcin pisze:
W dniu 4 czerwca 2012 20:51 użytkownik milekmilekz@gmail.com napisał:
Szybko i pewnie sprawę załatwia zapytanie psql
dzięki, ale czy szybko to bym nie powiedział. na virtualce wykonuje się to
75sekund :( a to bardzo wiele
To zapytanie nie poda wszystkich komputerów. Dla mysql-a () lista wszystkich komputerów spełniających te warunki wygląda tak:
SELECT nodes.id FROM nodes INNER JOIN nodeassignments ON nodes.id = nodeassignments.nodeid INNER JOIN customers ON nodes.ownerid = customers.id INNER JOIN assignments ON nodeassignments.assignmentid = assignments.id WHERE ((assignments.dateto > UNIX_TIMESTAMP(NOW()) OR assignments.dateto = 0 ) AND (assignments.datefrom < UNIX_TIMESTAMP(NOW()) ) AND (nodes.access = 0) AND (nodes.warning = 1) AND nodes.ownerid in (SELECT customerid FROM cash GROUP BY customerid HAVING SUM(value) >= 0 ))
UNION
SELECT nodes.id FROM customers INNER JOIN assignments ON customers.id = assignments.customerid INNER JOIN nodes ON nodes.ownerid = customers.id WHERE ((assignments.dateto > UNIX_TIMESTAMP(NOW()) OR assignments.dateto = 0) AND (assignments.datefrom < UNIX_TIMESTAMP(NOW()) ) AND (nodes.access = 0) AND (nodes.warning = 1) AND nodes.ownerid in (SELECT customerid FROM cash GROUP BY customerid HAVING SUM(value) >= 0 ))
Niestety nie da się tego użyć w jednym zapytaniu do modyfikacji, bo nie można zmieniać tabeli do której odnosi sie zapytanie. - Sypie błędami "You can't specify target table 'nodes' for update in FROM clause" użycie np vnodes nie pomaga - mysql jest zabezpieczony przed tym.
Dodatkowo dla każdego wpisu spełniającego pierwsze 4 warunki wywyoływana jest osobna pętla "(SELECT customerid FROM cash GROUP BY customerid HAVING SUM(value) >= 0 )" która przeliccza całą tabele cash znacznie wydajniejsze było by wrzucenie wyniku zapytania do tablicy tymczasowej.
W dniu 4 czerwca 2012 22:43 użytkownik Szymon Kajewski lysysoft@o2.plnapisał:
Niestety nie da się tego użyć w jednym zapytaniu do modyfikacji, bo nie można zmieniać tabeli do której odnosi sie zapytanie. - Sypie błędami "You can't specify target table 'nodes' for update in FROM clause" użycie np vnodes nie pomaga - mysql jest zabezpieczony przed tym.
a jednak się da w jednym zapytaniu :)
UPDATE nodes n1,( SELECT n.id FROM nodes n LEFT JOIN nodeassignments ON n.id = nodeassignments.nodeid LEFT JOIN assignments ON nodeassignments.assignmentid=assignments.id WHERE (assignments.dateto > unix_timestamp() or assignments.dateto='0' ) AND assignments.datefrom < unix_timestamp() AND assignments.suspended = 0 AND access = '0' AND (SELECT SUM(value) FROM cash WHERE customerid = n.ownerid) >= 0 ) AS n2 SET n1.access=1, n1.warning=0 WHERE n1.id = n2.id
i to mi wyłapuje jak narazie dobrze :)
W dniu 04.06.2012 10:35, Marcin napisał(a):
Witam pytanie do developerów. jest skrypt, moduł w daemonie cutoff do wyłączania klientów ale niestety nie ma modułu do ponownego włączania klientów :( dało by się do daemona coś takiego na szybko zrobić?
Cześć.
Wystarczy drobna zmiana w module cutoff i masz to co trzeba ;-)
W dniu 4 czerwca 2012 23:00 użytkownik Tomasz Chiliński < tomasz.chilinski@chilan.com> napisał:
Wystarczy drobna zmiana w module cutoff i masz to co trzeba ;-)
no właśnie teraz jak po wielkich bojach stworzyłem to w jednym zapytaniu
widzę iż nie trzeba pisać kolejnego modułu :)
nie jestem mocny w c, a raczej można powiedzieć że tu raczkuję :)
W dniu 4 czerwca 2012 23:04 użytkownik Marcin marcin@nicram.net napisał:
nie jestem mocny w c, a raczej można powiedzieć że tu raczkuję :)
dopisałem do daemona opcję cuton. narazie tylko dla mysql. działa.
cutoff.c .. if(c->cuton) { n = g->db_pexec(g->conn, "UPDATE nodes n1,(SELECT n.id FROM nodes n LEFT JOIN nodeassignments ON n.id = nodeassignments.nodeid LEFT JOIN assignments ON nodeassignments.assignmentid=assignments.id WHERE (assignments.dateto > unix_timestamp() or assignments.dateto='0' ) AND assignments.datefrom < unix_timestamp() AND assignments.suspended = 0 AND access = 0 AND (SELECT SUM(value) FROM cash WHERE customerid = n.ownerid)
= 0) AS n2 SET n1.access=1, n1.warning=0 WHERE n1.id = n2.id");
execn = 1; } // debtors
cutoff.h ... int cuton;
uczestnicy (8)
-
Andrzej Banach
-
Jan Ciećko
-
JOYNET
-
Marcin
-
milek
-
Sarenka
-
Szymon Kajewski
-
Tomasz Chiliński