RSS Feed

Posts Tagged ‘parser’

  1. LMS i parser.so #2

    Marzec 25, 2011 by 0verlord

    A jednak da się w, nazwijmy to, LMS WAY (TM). Parser.so, jak donosi dokumentacja, ma kilka stałych, dla których nie potrzeba generować zapytania. Są to odpowiednio tablice CUSTOMERS, NODES i NETWORKS ze zdefiniowaną listą pól.
    Czyli zamiast
    { result = zapytanie }
    Można od razu przejść do właściwego efektu zapytania, np. zapytanie z poprzedniej notki może wyglądać tak:
    {for (r=0; r<number(NODES); r++)}\
    # {NODES[r].owner}:{NODES[r].ownerid}
    {NODES[r].mac}-{NODES[r].ip}
    {/for}\

    Tylko w wersji 1.11.11 nie wiedzieć czemu, predefiniowane zapytanie jest generowane błędnie, trzeba czekać na deweloperów, albo poprawić sobie samemu w pliku:
    modules/parser/extensions/sql.h

    i przekompilować demona. W 1.11.12 to też nie działa, ale na forum już jest zgłoszony bug, może w cvsie nafixują.

    Jeżeli ktokolwiek ma wątpliwości, dlaczego lepiej stosować rozwiązania natywne a nie swoje własne zapytania, odpowiedź nasuwa się sama – w przypadku fuckupa przy upgrade do kolejnej wersji, będzie można na forum obsobaczyć developerów 😉 A tak, przy próbie zgłoszenia buga ojebią nas, bo komu by się chciało ogarniać cudze selecty.

    A tak bardziej serio, przy usunięciu wszystkich nienatywnych rozwiązań z LMSa, przed aktualizacją trzeba tylko czytać changeloga, a nie czekać na kogoś, kto nam poprawi zamotkę w zapytaniach. Przejęcie po kimś rozwiązania natywnego jest dużo prostsze w ogarnięciu, bo chociażby można poczytać dokumentację żeby skumać jak to działa, a nie się habilitować z zawartości cudzych zakrętów w mózgu.

    Po to ludzie piszą narzędzia, żeby inni mogli a nich korzystać, a nie – psia mać – koło od nowa wymyślać. Dość jęczenia [:


  2. LMS i parser.so

    Marzec 25, 2011 by 0verlord

    Dzisiaj będzie o LMSie i jednej ciekawostce, którą trafiłem ostatnio.

    Demon LMSa (lmsd) ma taki ciekawy moduł, nazywa się parser.so. Przy odrobinie samozaparcia i przeczytania dokumentacji, da się generować z bazy różności przy wykorzystaniu czegoś, co się nazywa Tscript. Język jak język, trzeba się nauczyć.

    No i przy okazji upgrade z 1.10 do 1.11, odziedziczyłem generatory adresów mac z bazy. Wyglądały mrocznie, joiny, left joiny, inner joiny, ograniczenia do networków zaszyte w selectach, ogólnie porażka. Nie wiem, czy w 1.10 nie działały takie rzeczy jak lms-makemacs, ale jeżeli tak, to ten, kto klikał LMSa wtedy ewidentnie chciał się popisać umiejętnością składania nikomu do niczego nie potrzebnych zapytań SQLa. Cóż, można i tak.

    Chwilowo musiałem wykorzystać tamte skrypty, więc trzeba było wygenerować listę maców do skryptu odpalającego regułki filtrów.
    Ostatecznie zapytanie wyglądało tak:

    SELECT INET_NTOA(ipaddr) AS ip, mac, name FROM macs LEFT JOIN nodes ON nodeid = nodes.id

    LMSd generował pusty plik, a debug mówił, że się wydupca na linijce z zapytaniem. Usuwając ‚AS ip’ pomagał o tyle, że zapytanie nie pluło błędem, natomiast kolumna nie nazywała się IP, więc dalsza część skryptu jej nie łapała.

    Szybki debug innych LMsów pokazał, że mam podobne zapytania z klauzulami AS cośtam, tyle, że nie są one na pierwszej pozycji zaraz za selectem. No to zmieniłem zapytanie na
    SELECT mac, INET_NTOA(ipaddr) AS ip

    i wygenerowało mi przepiękny plik.
    Parser.so ty wuju ;->