ifstat — простенький подсчёт трафика

Написал для собственных нужд подсчёт трафика на сетевом интерфейсе. Реализован в виде двух простейших shell-скриптов, парсящих вывод ifconfig. Имя интерфейса и файл для сохранения статистики можно задать в конфиге /etc/ifstat/ifstat.conf. По умолчанию это ppp0 и /etc/ifstat/stat.log соответственно.

Статистика пишется по одной строке на день, строки такого вида:
2010-08-16 1221863 100455 1322318
первое число — входящий трафик (в байтах), второе — исходящий, третье — суммарный. Запись лога производится в момент отключения соединения.

Версия 0.1; пожелания и замечания приветствуются, как и сторонние доработки. В частности, не делал статистику по неделям, месяцам или подключениям — только по дням. Кроме того, нет анализа смены даты: если поднято соединение вчера, а опущено сегодня, весь трафик запишется за сегодня (мне оно не нужно, т.к. ночами в инете не сижу).

Актуальная версия ifstat: ifstat_0.2.3_all.deb
пишет что не совместимый пакет на n810
В консоли:


sudo gainroot
dpkg -i ifstat_0.1_armel.deb
Только что обнаружил баг (не знаю, у себя ли, или в запуске скриптов из /etc/network/if-*): если не отключать сеть на таблетке, а вырубить телефон, сегодняшняя строка удаляется. Поужинаю, буду тестировать.
Собственно, тестировать и не пришлось: пока садился за стол, сам всё понял. Это вообще не баг, скорее неучтённый вариант развития событий. При обрыве связи скрипты из if-down.d не отрабатывают. Это не удивительно: ведь для их запуска об отключении интерфейса нужно знать немного заранее.

Соответственно, устойчивый к обрывам связи вариант можно сделать только сохраняя вывод ifconfig каждые несколько секунд в надёжное место. Как будет готово, выложу новую версию.
можно vnstat использовать....
S_Paul:можно vnstat использовать....
Откуда его можно поставить?
apt-cache policy vnstat
vnstat:
Установлен: (отсутствует)
Кандидат: 1.6-1
Таблица версий:
1.10-1 0
500 http://mirror.yandex.ru squeeze/main Packages
1.6-1 0
700 http://ports.ubuntu.com karmic/universe Packages
Xlab:
apt-cache policy vnstat
vnstat:
Установлен: (отсутствует)
Кандидат: 1.6-1
Таблица версий:
1.10-1 0
500 http://mirror.yandex.ru squeeze/main Packages
1.6-1 0
700 http://ports.ubuntu.com karmic/universe Packages

Как минимум два «но».

Первое. Вот пакет из squeeze:
$ apt-cache show vnstat | grep ^Depends:
Depends: libc6 (>= 2.7-1), libgcc1 (>= 1:4.3)

А вот maemo 4:
$ dpkg -l | egrep 'lib(c6|gcc1)'
ii libc6 2.5.0-1osso10
ii libgcc1 1:3.4.4cs2005q3.2-5.osso8


Второе:
$ apt-file list vnstat | head -1
vnstat: /etc/cron.d/vnstat

Предлагаете крон на таблетку ставить?
Снова понадобился подсчёт трафика, решил переписать с учётом обрыва соединения.

Возник один вопрос. Добавил принудительный разрыв связи при достижении заданного суммарного трафика за день. Хотелось бы, чтобы при этом хильдон выдавал сообщение как при любом другом обрыве связи. Как это сделать? На ifconfig ppp0 down он не реагирует.
Выкладываю пока как есть, но если кто-то подскажет по взаимодействию с хильдоном, буду благодарен.

Теперь счётчик состоит из одного скрипта, который стартует при поднятии соединения и снимает данные с заданной в конфиге периодичностью (по умолчанию пять секунд). Скрипт автоматически завершает работу при обрыве соединения.

Промежуточные данные хранятся в памяти (чтобы не дёргать накопитель каждые пять секунд) и сбрасываются в лог при завершении работы. Если кому-то интересно видеть статистику вместе с текущим соединением, могу дописать простенький скрипт, который будет складывать её с данными из лога и выводить в консоль.

В конфиге теперь четыре параметра: имя мониторящегося интерфейса (по умолчанию ppp0), путь к логу, промежуток (в секундах) между опросами статистики и максимальный трафик за день (в байтах). При превышении максимального трафика соединение автоматически разрывается. Если максимум не задан или равен нулю, разрыв соединения производиться не будет.
Ах да, ещё одно существенное изменение: статистика берётся не из вывода ifconfig, а из /proc/net/dev. По идее это должно быть быстрее.
Багфикс-релиз: добавлена защита от параллельного запуска двух копий скрипта. Такое может возникать при быстром поднятии интерфейса сразу после обрыва связи (предыдущий экземпляр не успел отвалиться по таймауту) либо при поднятии другого сетевого интерфейса при работе ppp0 (чисто гипотетически). Поскольку обе копии парсили бы и писали один и тот же лог, это могло привести к его порче. Заодно исправлена техническая ошибка в имени и метаинформации пакета: заменена архитектура armel на all.
Версия 0.2.3. Изменения:
* проверка на повторный запуск работала некорректно (ifstat вообще не запускался) — переписана «как надо», через PID-файл;
* файл лога теперь не входит в состав пакета, а создаётся скриптом автоматизации установки (postinst, для тех кто в курсе) — это устраняет перезапись существующего лога пустым при обновлении пакета.