Easy linux management over twitter

    Доброго времени суток, дорогие Хабраюзеры.

    Этот пост навеян появлением статьи про 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.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 12

      0
      «Да вы, батюшка, бывалый извращенец» (с)
      Давайте ещё будем шифровать сообщения, чтобы никто не догадался, чем вы там занимаетесь.
        +2
        Следующий лот — vkzadrot. Будет считать топ 10 задротов из друзей vk с подробной статистикой. =) Нужно с xmpp немного подразобраться.
          0
          xmpp не обязательно, можно же просто по API дергать друзей и смотреть, кто онлайн.
            0
            Вменяемый мануал по API+python в студию. Где не надо никаких танцев, чтобы апишка вела себя, как простой пользователь, а не как приложение для vk.
        +3
        Как пример работы с API полезно, для работы бредово.
        0
        Почему выбран именно твиттер? В чём профит?
          0
          1. хороший api
          2. доступность везде и всегда (удобно с twee клиента с мобилы)
          3. опыт программирования
          4. главный аргумент — по приколу =)
          +4
          jabber-бот выглядит более правильным решением
            0
            Есть xmpp-ssh, его банально нужно под последний gcc допилить — он не компилируется, у меня не хватает знания c++ поправить.
            +2
            — У твоего сервера сколько фолловеров?
            — Сто семь.
            — Ого! У меня только двадцать. А у тебя какие демоны постят?
            • UFO just landed and posted this here

            Only users with full accounts can post comments. Log in, please.