Рубиновая плазма. Часть 2.
Постановка
Есть такая, очень полезная программка – vnstat. Она показывает сетевой трафик по выбранным интерфейсам. Для меня, у которого дневной лимит – 150 мб жизни, очень нужная вещь.
Устанавливаем, если ее еще у вас нет, набираем в консоли vnstat -u -i ppp0 для начальной инициализации (если будете смотреть интерфейс модема ppp0, если нужен другой, можно выбрать и другой, тот же eth0 для сетевой карты)
Теперь запускаем vnstat – получаем информацию о трафике.
Только вот одна незадача, информация есть в консоли, в текстовом виде. Каждый раз запускать консоль и набирать vnstat чтоб узнать, сколько интернета осталось?
Увольте! Самое время написать красивый плазмоид!
Что говорит vnstat?
Сначала разберемся с выводом vnstat
ppp0 since 11/05/09
rx: 3.37 GiB tx: 252.77 MiB total: 3.61 GiB
monthly
rx | tx | total | avg. rate
————————+————-+————-+—————
Nov ‘09 2.63 GiB | 197.18 MiB | 2.82 GiB | 9.12 kbit/s
Dec ‘09 756.73 MiB | 55.59 MiB | 812.32 MiB | 13.79 kbit/s
————————+————-+————-+—————
estimated 4.10 GiB | 305 MiB | 4.40 GiB |
daily
rx | tx | total | avg. rate
————————+————-+————-+—————
yesterday 124.79 MiB | 15.33 MiB | 140.12 MiB | 13.29 kbit/s
today 148.93 MiB | 6.63 MiB | 155.55 MiB | 25.21 kbit/s
————————+————-+————-+—————
estimated 253 MiB | 10 MiB | 263 MiB |
Столько много нам не нужно, нам бы сегодняшний интернет… его легко получить командой vnstat | grep today
Получим строчку “today 148.94 MiB | 6.63 MiB | 155.58 MiB | 24.97 kbit/s” которую уже легко отпарсить.
Создание нового плазмоида
Теперь можно заняться созданием плазмоида. Копируем из примера предыдущей статьи структуру папок вместе с файлами, переименовываем папку plasmatest в, например, wnetstat. Создаем новый проект geany, открываем файлы metadata.desktop и main.rb и также изменяем там название plasmatest на wnstat.
Человеко-читаемое название в metadata.desktop тоже лучше изменить на что-то более осмысленное, например
Name=Трафик Интернета
Comment=Интерфейс для vnstat
Проверяем все ли сделали правильно, запускаем проект.
Все хорошо?
Теперь можно и программировать.
Получение информации от внешней программы
Напишем на ruby метод для получения информации от vnstat
def updateStat
IO.popen(”vnstat -u”).close
pipe = IO.popen(”vnstat | grep today”)
stat = pipe.gets
pipe.close
if stat!=nil then
@stat=stat.split(’ ‘)
end
end
Теперь в переменной объекта @stat лежит распарсенная строка вывода нашего vnstat.
Осталось ее вывести на экран. Для этого напишем еще один мааленький метод, он будет говорить нам суммарный трафик за день.
def view
@stat[7]+”\n”+@stat[8]
end
Если теперь заменим наш тестовый “Hello world” на вызов этой функции, не забыв предварительно вызвать updateStat, получим при выполнении количество мегабайт!
Обновление по таймеру
Сейчас у нас всего два вызываемых системой метода, куда можно вклиниться – init и paintInterface
Соответственно, если вставить туда наш updateStat, информация о трафике будет обновляться или при старте системы, или при перерисовке виджета-плазмоида. И то, и другое – не самый лучший выход, было бы правильнее обновлять информацию по таймеру, например раз в 30 секунд. И это очень просто сделать!
Достаточно в методе init инициализировать таймер
startTimer(30000)
и написать новый метод, который будет вызываться при срабатывании таймера, обновлять информацию о статистике Интернета и перерисовывать наш плазмоид.
def timerEvent(event)
updateStat
update
end
Итог
В общем-то все. Полный текст программы будет таков
require ‘plasma_applet’
module Wnetstat
class Main < PlasmaScripting::Applet
def initialize parent
super parent
end
def init
self.has_configuration_interface = false
updateStat
startTimer(30000)
end
def updateStat
IO.popen(”vnstat -u”).close
pipe = IO.popen(”vnstat | grep today”)
stat = pipe.gets
pipe.close
if stat!=nil then
@stat=stat.split(’ ‘)
end
end
def view
@stat[7]+”\n”+@stat[8]
end
def timerEvent(event)
updateStat
update
end
def paintInterface(painter, option, rect)
painter.save
painter.pen = Qt::Color.new Qt::white
painter.draw_text rect, Qt::AlignVCenter | Qt::AlignHCenter,view
painter.restore
end
end
end
Запускаем, если все нормально – инсталлируем и кидаем в системный лоток. Теперь мегабайты от нас далеко не убегут! В следующей статье нам осталось разобраться с изменением вывода в зависимости от размера, настройкой виджета и выводом напоминаний о превышенном лимите. А пока – мягкой плазмы!
Теги: kde, plasma, ruby + Рубрика: Программирование
1 отзыв
Трекбеки и пинги
-
Рубиновая плазма. Часть 1. | Келег`s homepage
[...] Пока он почти совершенно бесполезен, разве что сигнализирует нам, что все работает и уже можно делать что-то посерьезнее. Но об этом – в следующей статье. [...]