⏱ O‘qish vaqti: 3 daqiqa
Qisqacha
- Queue sonini aniqlab, kerakli fayl sonini hisoblaydi.
- Har bir faylga maksimal 10 ta queue yoziladi.
- Fayllar stats$i.txt nomida yaratiladi.
- Eski stats fayllari avtomatik o‘chiriladi.
- Target-address va total-bytes ma’lumotlari faylga yoziladi.
RouterOS’da ko‘p miqdordagi simple queue’lar statistikalarini bir faylga jamlash qiyin bo‘lishi mumkin. Ushbu skript har bir queue’ning manzili va uzatish hajmini alohida fayllarga bo‘lib, tahlil qilishni osonlashtiradi. Fayllar avtomatik yaratiladi va eski stats fayllari tozalanadi.
Talablar
- RouterOS terminaliga admin huquqi
- Oddiy queue’lar nomlari .raqam bilan tugashi (masalan, «some text.1»)
- Skriptni qo‘shish va bajarish imkoniyati
Sozlash bosqichlari
1. Queue nomlarini .raqam bilan belgilash
Skript queue nomining oxirida nuqta va raqam bo‘lishini kutadi. Masalan, «video.1», «voip.2» kabi nomlar bilan simple queue yaratib, keyingi bosqichga o‘tish mumkin.
2. Skriptni RouterOS terminaliga qo‘shish
Quyidagi kod blokini RouterOS terminaliga nusxa ko‘chiring. Skript entriesPerFile o‘zgaruvchisi orqali har bir faylga maksimal yozuvlar sonini belgilaydi.
Write simple queue stats in multiple files
Write simple queue stats in multiple files
Lets consider queue namings are "some text.1" so we can search queues by last number right after the dot.
:local entriesPerFile 10;
:local currentQueue 0;
:local queuesInFile 0;
:local fileContent "";
# determine needed file count
:local numQueues [/queue simple print count-only] ;
:local fileCount ($numQueues / $entriesPerFile);
:if ( ($fileCount * $entriesPerFile) != $numQueues) do={
:set fileCount ($fileCount + 1);
}
# remove old files
/file remove [find name~"stats"];
:put "fileCount=$fileCount";
:for i from=1 to=$fileCount do={
#create file
/file print file="stats$i.txt";
#clear content
/file set [find name="stats$i.txt"] contents="";
:while ($queuesInFile < $entriesPerFile) do={
:if ($currentQueue < $numQueues) do={
:set currentQueue ($currentQueue +1);
:put $currentQueue ;
/queue simple
:local internalID [find name~"\\.$currentQueue\$"];
:put "internalID=$internalID";
:set fileContent ($fileContent . [get $internalID target-address] . \
" " . [get $internalID total-bytes] . "\r\n");
}
:set queuesInFile ($queuesInFile +1);
}
/file set "stats$i.txt" contents=$fileContent;
:set fileContent "";
:set queuesInFile 0;
}
Credit: https://wiki.mikrotik.com
3. Skriptni bajarish
Skriptni qo‘shgandan so‘ng, terminalda to‘g‘ridan‑to‘g‘ri bajarish orqali ishga tushiring. Skript queue sonini hisoblab, kerakli fayl sonini aniqlaydi va ma’lumotlarni fayllarga yozadi.
4. Natijaviy fayllarni tekshirish
/file print buyrug‘i bilan yaratilgan stats fayllarini ko‘ring. Har bir fayl ichida target-address va total-bytes qiymatlari bo‘lishi kerak.
Tekshirish
Skript ishga tushganda fileCount qiymati konsolga chiqariladi; yaratilgan stats fayllarini /file print buyrug‘i bilan tasdiqlang.
Write simple queue stats in multiple files
Lets consider queue namings are "some text.1" so we can search queues by last number right after the dot.
:local entriesPerFile 10;
:local currentQueue 0;
:local queuesInFile 0;
:local fileContent "";
# determine needed file count
:local numQueues [/queue simple print count-only] ;
:local fileCount ($numQueues / $entriesPerFile);
:if ( ($fileCount * $entriesPerFile) != $numQueues) do={
:set fileCount ($fileCount + 1);
}
# remove old files
/file remove [find name~"stats"];
:put "fileCount=$fileCount";
:for i from=1 to=$fileCount do={
#create file
/file print file="stats$i.txt";
#clear content
/file set [find name="stats$i.txt"] contents="";
:while ($queuesInFile < $entriesPerFile) do={
:if ($currentQueue < $numQueues) do={
:set currentQueue ($currentQueue +1);
:put $currentQueue ;
/queue simple
:local internalID [find name~"\\.$currentQueue\$"];
:put "internalID=$internalID";
:set fileContent ($fileContent . [get $internalID target-address] . \
" " . [get $internalID total-bytes] . "\r\n");
}
:set queuesInFile ($queuesInFile +1);
}
/file set "stats$i.txt" contents=$fileContent;
:set fileContent "";
:set queuesInFile 0;
}
Credit: https://wiki.mikrotik.com
Diqqat:
- Skript
statsnomli barcha eski fayllarni o‘chiradi, shuning uchun boshqa muhim fayllaringizga ta’sir qilmasligini tekshiring. - Queue nomlari .raqam bilan tugashi shart, aks holda skript ularni topa olmaydi.
entriesPerFileqiymatini o‘zgartirish orqali har bir faylga yoziladigan queue sonini sozlashingiz mumkin.- Fayl nomi
stats$i.txtformatida bo‘lgani sababli, mavjudstatsprefiksli fayllar bilan nom to‘qnashuvi bo‘lishi mumkin.
Xulosa
Ushbu skript oddiy queue’larning statistik ma’lumotlarini bir nechta fayllarga bo‘lib, tahlil va monitoringni soddalashtiradi. Fayl soni va har bir fayldagi yozuvlar sonini o‘zingizga moslab sozlashingiz mumkin.
Manba: Write simple queue stats in multiple files — mikrotiktool.github.io