Отправка информации в RSS канал

From DD-WRT Wiki

Jump to: navigation, search

Эта инструкция покажет, как сделать следующее:

  • Создать сценарий командной строки, который будет сохранять основную информацию о состоянии маршрутизатора в легко редактируемом формате в место, доступное для скачивания с компьютера.
  • Преобразовать данные в формат RSS, готовый для чтения программами-агрегаторами.


Contents

[edit] Настройка маршрутизатора

Поместите следующий скрипт в автозагрузку (как это сделать узнайте в статье Startup Scripts):

mkdir -p /tmp/www
while [ 1 ];
do
sed -n 's%.* src=\(192.168.[0-9.]*\).*%\1%p' /proc/net/ip_conntrack | sort | uniq -c | awk '{t++; print "Connection",t":",$2,"has",$1,"connections open.";}' | tee /tmp/www/stat.html
awk '/MemTotal:/ {mt = $2} /MemFree:/ {mf = $2} /Buffers:/ {mb = $2} /^Cached:/ {mc = $2} END { printf( "Free: %2d%%\n",(mf/mt)*100); printf( "Used: %2d%%\n",((mt-mf)/mt)*100); printf( "Buffers: %2d%%\n",(mb/(mt-mf))*100); printf( "Cached: %2d%%\n",(mc/(mt-mf))*100); }' /proc/meminfo | tee -a /tmp/www/stat.html
awk '{ printf( "Load: %3d%%\n",$1*100); }' /proc/loadavg | tee -a /tmp/www/stat.html
awk '{ printf( "Uptime: %2.2f Hours\n", $2/3600); }' /proc/uptime | tee -a /tmp/www/stat.html
sleep 30;
done;

Этот скрипт будет анализировать различные фрагменты информации о состоянии маршрутизатора из файлов, расположенных в маршрутизаторе. Если вам нужно больше или меньше информации или другое форматирование, вы можете отредактировать скрипт так, как нужно вам.

Другой скрипт, который будет читать эту информацию, является независимым, поэтому он может принимать больше или меньше строк информации по мере необходимости. Единственное требование к синтаксису для правильного чтения заключается в том, что каждое состояние должно полностью содержаться в отдельной строке (но даже это не обязательно). Вывод сохраняется в файле:

/tmp/www/stat.html

И доступен по адресу:

http://routerip/user/stat.html

Это пример того, что этот файл будет содержать:

Connection 1: 192.168.1.1 has 476 connections open.
Connection 2: 192.168.1.143 has 267 connections open.
Free:  9%
Used: 90%
Buffers: 12%
Cached: 35%
Load:  45%
Uptime: 1.30 Hours

[edit] Настройка компьютера

Эти настройки предполагают, что вы используйте операционную систему Linux (я использую Kubuntu). Это, вероятно, также может быть сделано в Windows, но немного по-другому, я попытаюсь объяснить процесс так, чтобы, если кто-то захочет, они могли легко понять, что происходит, и воспроизвести это в Windows. Мы будем использовать сценарий командной строки:

#!/bin/bash
rm /tmp/rssfeed.xml;
echo '<?xml version="1.0" ?><rss version="2.0"><channel><title>Router Connection Status</title><link>http://192.168.1.1</link><description>WRT54G</description>' | tee -a /tmp/rssfeed.xml;
wget -q -O - http://192.168.1.1/user/stat.html | awk '{print "<item><title>"$0"</title><link>http://192.168.1.1/</link><description></description></item>"}' | tee -a /tmp/rssfeed.xml;
echo '</channel></rss>' | tee -a /tmp/rssfeed.xml;

Я запускаю скрипт каждую минуту, используя планировщик Cron. По сути, он загружает файл stat.html, который вы разместили на своем маршрутизаторе, и использует его для создания файла /tmp/rssfeed.xml. Созданный файл /tmp/rssfeed.xml, соответствующий стандартам разметки RSS, можно затем ввести в программу-агрегатор RSS по вашему выбору. Сначала он добавляет заголовок RSS в начало файла:

<?xml version="1.0" ?>
<rss version="2.0">
<channel>
<title>Router Connection Status</title>
<link>http://192.168.1.1</link>
<description>WRT54G</description>

Затем он добавит разметку RSS вокруг каждой строки состояния так, что это:

Connection 1: 192.168.1.1 has 476 connections open.

превращается в:

<item>
<title>Connection 1: 192.168.1.1 has 476 connections open.</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>

А затем добавляет нижний колонтитул в конец файла:

</channel></rss>

После завершения работы сценария будет создан файл /tmp/rssfeed.xml, который выглядит примерно так:

<?xml version="1.0" ?>
<rss version="2.0">
<channel><title>Router Connection Status</title><link>http://192.168.1.1</link><description>WRT54G</description>
<item>
<title>Connection 1: 192.168.1.1 has 71 connections open.</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
<item>
<title>Connection 2: 192.168.1.143 has 65 connections open.</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
<item><title>Free: 11%</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
<item>
<title>Used: 88%</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
<item>
<title>Buffers: 12%</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
<item>
<title>Cached: 36%</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
<item>
<title>Load:  30%</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
<item><title>Uptime: 0.29 Hours</title>
<link>http://192.168.1.1/</link>
<description></description>
</item>
</channel>
</rss>

По сути, это универсальный сценарий, который преобразует любой входной файл в формат, который может видеть программа-агрегатор RSS. Наилучшие результаты видны, когда входной файл содержит каждое состояние в отдельной строке. Технически вы можете объединить скрипты маршрутизатора и компьютера в один (оба сценария оболочки), расположенный на маршрутизаторе, но вы не можете разместить не-html файлы в /tmp/www и получить к ним доступ без Telnet или SSH. Без дополнительных настроек (Samba, MMC и другие) не так много мест, куда можно разместить файл. Также возможно настроить сценарий для подключния к маршрутизатору по Telnet или SSH, чтобы собрать необходимую информацию прямо с компьютера, что может быть интересной альтернативой, которая не будет часто перезаписывать флэш-память маршрутизатора (количество циклов перезаписи которой ограничено).