Системные уведомления в группу Telegram

Сегодня я расскажу, как сделать небольшой комплекс по приему и отправки сообщений от различных сервисов (nagios, zabbix и пр.) в группу Телеграма.

В двух словах. На пограничном сервере живет маленький скрипт — бот телеграмма. Он умеет принимать данные тремя способами

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

Изначально планировалось писать полнофункционального бота, но нам нужен лишь метод SendMessage, поэтому решено было обойтись одной строкой которая делает POST, и шлет наше сообщение в JSON, все согласно API .

Бот добавлен в нашу группу, как администратор. И радует нас своими сообщениями.

Читать далее

Назад в прошлое, или ntp сервер неточного времени

Всем известно, что для получения точного времени в ОС, необходимо, чтобы она синхронизировалась хотя бы с одним ntp сервером. А что делать, если точное время нужно, но не совсем. К примеру, отличающееся от текущего на какую-то дельту. В любую сторону. К примеру, на 10 лет назад, или вперед…

Ну и договоримся, что под точным временем не будем понимать не доли микросекунд,а хотя бы до секунды. Поехали!
Читать далее

Пишем бота для Telegram на Perl

В начале лет telegram.org запустил API для создания ботов. И на данный момент их появилось великое множество, полезных и бесполезных.

Для тех, кто хочет серьезно освоить API советую добавить ссылку https://core.telegram.org/bots в избранное и медленно, на несколько раз, прочитать все. Это старт.

А теперь к делу. В конце августа некто Roberto Frenna, сделал модуль для Perl, реализующий работу с API. Я попробовал его, и выяснил, что на perl 5.8.8 (да, иногда бывает и такое старье в продакшене), он работает некорректно. Один запрос в багтрекер и через 2 дня все работает изумительно.

Модуль есть на https://github.com/Robertof/perl-www-telegram-botapi, либо в CPAN.

Для начала работы, вам необходимо создать бота и получить токен авторизации. Это делается с помощью @BotFather — другого бота, который управляет всеми ботами.
Читать далее

Перенос почты из TheBat на сервер Cyrus-IMAP

Так исторически сложилось, что у нас много лет используется корпоративная версия почтового клиента TheBat 3.x!
Все пользователи очень привыкли к ней, накоплена огромная адресная книга в нем. Но куча ограничений (TBB файл не более 2Гб, проблемы с TLS, заточенность под Windows) вновь и вновь поднимает вопрос о переходе на что-то иное.
Читать далее

Кастомизация веб-интерфейса CUPS

У нас на производстве — N различных печатающих устройств. Те которые печатают на листах A4, A3 — не тема сегодняшнего разговора. А вот те, что печатают на рулонах от А1 до А0 интересуют куда больше. Часто, пользователи не знают\забывают в каком плоттере, какой размерности загружена бумага. Отсюда брак и излишние траты. И начальник озадачил меня, реализовать возможность смотреть какая бумага загружена, сколько ее осталось. Делать отдельный раздел на корпоративном интранет портале — смысла нет, мало кто будет туда смотреть. В то же время у многих открыт веб-интерфейс очередей печати принт-сервера на базе CUPS. Раньше я писал backend для него, для преобразования заданий в pdf и мне понравилась его гибкость. Решено было добавить необходимую информацию прямо туда. И сейчас я расскажу, о некоторых его плюшках, которые мало кто использует.
Читать далее

Perl, великий и могучий

Заметка на правах шпаргалки.

Попытался я намедни из массива внести в хеш несколько элементов слеив их в строку с разделителем. Первоначально написал вот так

my %add=(); my @items=();
...
open my $ADDFILE, '<', $addon || croak $!;
while (<$ADDFILE>) {
    chomp;
    my @items = split /;/x;
    $add{ $items[1] } = join ';', $items[$_] for ( 4, 7, 10 );
}
close $ADDFILE;
...

Все как обычно, но кроме перечисления элементов @items, решил завернуть это в for, указав их индексы. Почти, но не сработало 🙂

И тут я обнаружил (да для меня это, как ни странно, было ново), что можно подступится к элементам не через скалярное обращение $items[n], а через списочное и можно указать несколько индексов. Т.е. вышло вот так

my %add=(); my @items=();
....
open my $ADDFILE, '<', $addon || croak $!;
while (<$ADDFILE>) {
    chomp;
    my @items = split /;/x;
    $add{ $items[1] } = join ';', @items[ 4, 7, 10 ];
}
close $ADDFILE;
...

p.s. Кстати, весьма советую поставить perl-support плагин для vim. Очень удобно приводить код в порядок, и отдатвать на съедение perl critique.

Perl 5.14. для CentOS 6 x86_64

Конец света прошёл, с чем вас и поздравляю. Ну а у меня тем временем возникла одна задача, для ее реализации нужен был Perl не ниже 5.12. Печально то, что на машине под CentOS 6, штатно идет лишь perl 5.10 (а под CentOS 5.x лишь perl 5.8.x).
Разрешить эту проблему можно тремя способами

  • Perlbrew. Это позволит иметь хоть все версии перла на машине, и переключаться между ними по мере необходимости. Удобно, но не всегда.
  • Установить непосредственно из исходников. Универсально и для всех, но еще менее удобно, особенно в будущем
  • Придумать, что-то свое. Желательно в rpm

Читать далее