Jump to content

PHP API - /log/print


Самуил Арсов

Recommended Posts

  • Администратор

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

<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" и увиснах до тук :)

Адрес на коментара
Сподели в други сайтове

  • Администратор

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

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

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


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

Адрес на коментара
Сподели в други сайтове

  • Администратор

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

 

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

 

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

 

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

Адрес на коментара
Сподели в други сайтове

  • Администратор

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

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

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

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


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

Адрес на коментара
Сподели в други сайтове

  • Администратор

Да, знам какво е :) Друго имах впредвид под неразбирам а именно какво общо има с 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 и мисля да се придържам към нея иначе благодаря за вниманието :)

Редактирано от samyil
Адрес на коментара
Сподели в други сайтове

  • Администратор

Не знам дали ще ти е от полза 
/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 ǝɥʇ

Адрес на коментара
Сподели в други сайтове

В 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"
}
Редактирано от boen_robot
  • Харесай 1
Адрес на коментара
Сподели в други сайтове

  • Администратор
<?php
        $Entries = $client->sendSync(
        new RouterOSRequest('/log/print', RouterOSQuery::where('topics', 'dhcp,info'))
        )->getAllOfType(RouterOSResponse::TYPE_DATA);

        foreach ($Entries as $entry)
{

?>

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

Адрес на коментара
Сподели в други сайтове

Създайте нов акаунт или се впишете, за да коментирате

За да коментирате, трябва да имате регистрация

Създайте акаунт

Присъединете се към нашата общност. Регистрацията става бързо!

Регистрация на нов акаунт

Вход

Имате акаунт? Впишете се оттук.

Вписване
  • Потребители разглеждащи страницата   0 потребители

    • No registered users viewing this page.
×
×
  • Създай нов...

Important Information

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