Pull to refresh

Easy Linux Management Over Twitter

Reading time 2 min
Views 491
Доброго времени суток, дорогие Хабраюзеры.

Этот пост навеян появлением статьи про 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.
Tags:
Hubs:
+2
Comments 0
Comments Leave a comment

Articles