Доброго времени суток, дорогие Хабраюзеры.
Этот пост навеян появлением статьи про Twitter бота и всяких свистелок-плясалок для него. Представляю вам свое видение api Твиттера. Добро пожаловать под кат.
Необходимо учесть, что данный топик был опубликован мною в песочницу, когда я был еще незарегистрированным. И тут неожиданно мне пришел еще один инвайт, так что топик публикую как есть, без изменений, а о появлении второго аккаунта пренепременно сообщу в суппорт.
Итак, как гласит заголовок, приложение-бот будет использовать api твитера для управления машины с линуксом на борту.
В качестве языка разработки был избран python и, как следствие, библиотека tweepy. Хауту по начальной настройке данной библиотеки можно найти по ссылке, указанной выше.
Конфигурация
Перейдем непосредственно к сабжу. Код оформлен как полноценный линукс-демон, имеет файл конфигурации и работает с плагинами.
Рассмотрим файл конфигурации:
Все прозрачно. Чтобы начать работать необходимо лишь заполнить поля consumer_key, consumer_secret, пользовательские ключи — access_key и access_secret, полученные ранее. Также необходимо добавить ники людей, которым разрешено управлять системой в AUTHORIZED_ACCOUNTS.
Плагины
Перейдем к плагинам. Весь функционал предоставляется только с их помощью. Шаблон плагина выглядит следующим образом:
где name — название плагина, keyword — его уникальный идентификатор, по которому происходит обращение к нему.
Action — необходимое действие, то есть плагин может молчать, ответить Вам в личку, либо написать в свой таймлайн.
Поле controlled говорит плагину, будет ли он интерактивным — принимать и обрабатывать сообщения клиента. Если плагин интерактивен — то он слушает сообщения, приходящие в личку боту и, если сообщение адресовано ему, вызывает метод execute, в котором можно реализовать что-угодно. Если же плагин «молчалив», он запускает код из метода run() в отдельном потоке.
Как этим пользоваться
Просто отправляем боту личное сообщение вида «keyword command args». Бот распарсит сообщение и передаст его на обработку плагину с соответствующим keyword. Для примера рассмотрим плагин uptime. Он получает лишь один параметр — keyword и сообщает в свой таймлайн uptime машины, на которой работает.
Реализованные плагины
conntest — постоянная проверка линка с удаленным хостом (хостами). О проблемах пишет в таймлайн.
removetweets — удаляет n твитов из таймлайна бота (пример «removetweets 5»).
sshmonitor — мониторинг ssh сервера на основе парсинга auth.log. Пишет в таймлайн об ошибках аутентификации.
uptime — выводит аптайм машины.
Вот и все, можно реализовать любой плагин на свой вкус и мониторить что угодно (или рестартить службы например) через твиттер.
Спасибо за внимание, жду ваших комментариев.
P.S. Код на github.
P.P.S. Для старта демона необходимо использовать линк в директории bin.
Этот пост навеян появлением статьи про Twitter бота и всяких свистелок-плясалок для него. Представляю вам свое видение api Твиттера. Добро пожаловать под кат.
Итак, как гласит заголовок, приложение-бот будет использовать api твитера для управления машины с линуксом на борту.
В качестве языка разработки был избран python и, как следствие, библиотека tweepy. Хауту по начальной настройке данной библиотеки можно найти по ссылке, указанной выше.
Конфигурация
Перейдем непосредственно к сабжу. Код оформлен как полноценный линукс-демон, имеет файл конфигурации и работает с плагинами.
Рассмотрим файл конфигурации:
# Twitter credentials CONSUMER_KEY = '' CONSUMER_SECRET = '' ACCESS_KEY = '' ACCESS_SECRET = '' # base path BASE_PATH = os.path.dirname(__file__) # pid path PID_PATH = BASE_PATH+'/elmot.pid' # people nicknames who can manage system AUTHORIZED_ACCOUNTS = [] # logfile LOG_PATH = BASE_PATH+'/log/elmot.log' ERROR_LOG_PATH = BASE_PATH+'/log/elmot.err' # type None to disable incoming message log INCOMING_MESSAGE_LOG = BASE_PATH+'/log/incoming.log' # run elmot as user (do not use root) RUN_UID = pwd.getpwnam("root").pw_uid
Все прозрачно. Чтобы начать работать необходимо лишь заполнить поля consumer_key, consumer_secret, пользовательские ключи — access_key и access_secret, полученные ранее. Также необходимо добавить ники людей, которым разрешено управлять системой в AUTHORIZED_ACCOUNTS.
Плагины
Перейдем к плагинам. Весь функционал предоставляется только с их помощью. Шаблон плагина выглядит следующим образом:
class Plugin(object): name = 'undefined' keyword = 'undefined' # actions: # 0 - silent # 1 - private message # 2 - tweet to timeline action = 2 controlled = True def __init__(self): print '*', self.name, 'loaded' def execute(self, message): pass # run method only for non controlled plugins # for threading support with python Threads def run(): pass
где name — название плагина, keyword — его уникальный идентификатор, по которому происходит обращение к нему.
Action — необходимое действие, то есть плагин может молчать, ответить Вам в личку, либо написать в свой таймлайн.
Поле controlled говорит плагину, будет ли он интерактивным — принимать и обрабатывать сообщения клиента. Если плагин интерактивен — то он слушает сообщения, приходящие в личку боту и, если сообщение адресовано ему, вызывает метод execute, в котором можно реализовать что-угодно. Если же плагин «молчалив», он запускает код из метода run() в отдельном потоке.
Как этим пользоваться
Просто отправляем боту личное сообщение вида «keyword command args». Бот распарсит сообщение и передаст его на обработку плагину с соответствующим keyword. Для примера рассмотрим плагин uptime. Он получает лишь один параметр — keyword и сообщает в свой таймлайн uptime машины, на которой работает.
Реализованные плагины
conntest — постоянная проверка линка с удаленным хостом (хостами). О проблемах пишет в таймлайн.
removetweets — удаляет n твитов из таймлайна бота (пример «removetweets 5»).
sshmonitor — мониторинг ssh сервера на основе парсинга auth.log. Пишет в таймлайн об ошибках аутентификации.
uptime — выводит аптайм машины.
Вот и все, можно реализовать любой плагин на свой вкус и мониторить что угодно (или рестартить службы например) через твиттер.
Спасибо за внимание, жду ваших комментариев.
P.S. Код на github.
P.P.S. Для старта демона необходимо использовать линк в директории bin.
