Jump to content

PHP API - /log/print


Самуил Арсов

Recommended Posts

  • Administrator

Безпроблемно получавам резултатите в лога по този начин както си е в уикито:

<thead>
<tr>
        <th>time</th>
        <th>topics</th>
        <th>message</th>
</tr>
</thead>
<tbody><?php
        $Entries = $client->sendSync(
        new RouterOSRequest('/log/print')
        )->getAllOfType(RouterOSResponse::TYPE_DATA);
        foreach ($Entries as $entry) { ?>
<tr>
        <td><?php echo $entry('time'); ?></td>
        <td><?php echo $entry('topics'); ?></td>
        <td><?php echo $entry('message'); ?></td>
</tr><?php } ?>
</tbody>

но искам да филтрирам резултата само от dhcp сървъра, подобно на терминала:

/log print where topics~"dhcp"

Доколкото търсих информация в API няма "where" и увиснах до тук :)

Link to comment
Share on other sites

  • Administrator

За логовете може да ползваш добрата стара лог система на отдалечена машина

Харесай поста ^^^
acer.gif htc.gifsigpic4024_2.gif

Форумът е за взаимопомощ а не за свършване на чужда работа


ɹɐǝɥ uɐɔ noʎ ǝɹoɯ ǝɥʇ 'ǝɯoɔǝq noʎ ɹǝʇǝınb ǝɥʇ

Link to comment
Share on other sites

  • Administrator

Не разбрах точно какво имаш впредвид, но имам задача на един съпорт да му направя страничка за мониторинг на dhcp сървъра.

 

Направих такава на dhcp lease, след това вкарах vlan-а на който е сървъра в bridge и листнах мак адресите на хостовете от него, сега остана да и направя и кратка история на dhcp лога кой кога е получавал адрес. По принцип тяхната система си има билинг в който ги има тези неща но от една страна не са подредени в табличка и от друга не е нужно всички да имат достъп до билинга (има си каса за това)

 

Всичко това естественно го правя с routeros api на отдалечен сървър. На мен логове не ми трябват, от години съм свикнал да работя в терминал и не си падам много по цъкане с мишката когато търся някоя опция, предпочитам TAB да ми ги изписва.

 

Мисля, че до тук страничката се получи добре, просто се запънах на dhcp лога и не намерих нищо в Интернет по въпроса с "where" което да ми реши проблема  ..  

Link to comment
Share on other sites

  • Administrator

отдалечения лог е силно терминално *nix базирано

http://wiki.mikrotik.com/wiki/Manual:System/Log

Харесай поста ^^^
acer.gif htc.gifsigpic4024_2.gif

Форумът е за взаимопомощ а не за свършване на чужда работа


ɹɐǝɥ uɐɔ noʎ ǝɹoɯ ǝɥʇ 'ǝɯoɔǝq noʎ ɹǝʇǝınb ǝɥʇ

Link to comment
Share on other sites

  • Administrator

Да, знам какво е :) Друго имах впредвид под неразбирам а именно какво общо има с api ?

 

Що се отнася до терминала имам един прост скрипт през ssh с който правя backup на рутери и сървъри с sshpass и rsync:

#!/bin/bash

DATE=$(date +"%m-%d-%Y")

echo 'R1' && sshpass -p password ssh -p 22222 admin@93.155.XX.XX 'export compact' > /var/www/html/files/R1-$DATE.txt

 
sshpass -p password rsync -avzh --delete -e ssh root@93.155.XX.XX:/ 
--exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} /backup/hosting

 

Задачата ми е да сглобя една страничка за мониторинг на php + routeros api и мисля да се придържам към нея иначе благодаря за вниманието :)

Edited by samyil
Link to comment
Share on other sites

  • Administrator

Не знам дали ще ти е от полза 
/ip dhcp-server lease print detail 
там има

Flags: X - disabled, R - radius, D - dynamic, B - blocked
0   address=172.16.28.5 mac-address=E0:хх:хх:хх:54:3C client-id="1:e0:хх:хх:хх:54:3c" address-lists="" server=DHCP SERVER dhcp-option="" last-seen=6w1d23h34m24s host-name="хххххх"

last-seen= стойността не можеш ли да я ползваш?
в комбинация с print active и стойността EXPIRES-AFTER за да следиш активността

Харесай поста ^^^
acer.gif htc.gifsigpic4024_2.gif

Форумът е за взаимопомощ а не за свършване на чужда работа


ɹɐǝɥ uɐɔ noʎ ǝɹoɯ ǝɥʇ 'ǝɯoɔǝq noʎ ɹǝʇǝınb ǝɥʇ

Link to comment
Share on other sites

В API има еквивалент на "where", под формата на така наречените "Заявки" (Query).

Има обаче един проблем, който е проблем на протокола... Нямаш регулярни изрази, т.е. няма еквивалент на topics~"dhcp". От MikroTik не само, че са наясно с това, ами и отказват да го реализират, по глупави според мен причини.

Ако знаеш цялостната стойност на "topics", можеш да използваш "=", т.е. примерно topics="dhcp,info", или с API:

new RouterOSRequest('/log/print', RouterOSQuery::where('topics', 'dhcp,info'))
(за повече подробности, виж тук)

Ако задължително ти трябва по регулярен израз да филтрираш, това може да стане само в рамките на PHP. T.e. ти си вземаш целия лог, и имаш вътре във foreach

if (preg_match('/dhcp/', $entry('topics'))) {
//"topics" съдържа "dhcp"
}
Edited by boen_robot
  • Like 1
Link to comment
Share on other sites

  • Administrator
<?php
        $Entries = $client->sendSync(
        new RouterOSRequest('/log/print', RouterOSQuery::where('topics', 'dhcp,info'))
        )->getAllOfType(RouterOSResponse::TYPE_DATA);

        foreach ($Entries as $entry)
{

?>

Танкс, проработи но с една скоба повече :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.