Разработчики Ruby привыкли находить невероятно полезные проекты с открытым исходным кодом, упакованные в виде гемов. В этом руководстве мы рассмотрим BitBar, проект с открытым исходным кодом, который не построен на Ruby, но в сочетании с небольшим количеством Ruby может быть невероятно мощным.
Хотя первоначальный проект больше не поддерживается, обновленную ветку проекта можно найти здесь: https://github.com/kamenevn/bitbar
BitBar предоставляет пользователям Mac OS X простой способ создать элемент строки меню из стандартного вывода скрипта. Я покажу вам, как создать простой монитор проверки связи с сайтом, а затем мы создадим счетчик подписчиков в Твиттере.
Установка BitBar
Чтобы установить BitBar, посетите репозиторий GitHub по адресу https://github.com/kamenevn/bitbar . Загрузите zip-файл (кнопка для загрузки находится на правой боковой панели). Внутри архивной папки вы найдете папку «Releases», в которой находится файл BitBar.app
Поместите это в свой каталог приложений. Открытие этого приложения запускает BitBar.
Как работает BitBar: структура файла
BitBar — это простое приложение, которое запускает все сценарии оболочки в заданном каталоге с интервалом, который определяется именем файла. Конечно, вы должны быть очень осторожны при добавлении сценариев в BitBar, особенно если вы добавляете небольшой интервал времени.
Чтобы запускать данный файл каждые 5 минут, структура имен будет выглядеть примерно так:
my_script.5m.sh
Конечно, вы также захотите сделать ваши скрипты исполняемыми. Обратите внимание, что в своей документации BitBar называет эти скрипты «плагинами».
Как работает BitBar: вывод скрипта
Чтобы добавить видимый текст в ваш плагин BitBar, вам нужно будет отправить вывод в STDOUT
В Ruby это просто вывод puts
По умолчанию BitBar будет циклически проходить по каждой строке вывода, если вы не выводите конкретную строку «-»; все, что находится после этой строки, будет отображаться в раскрывающемся списке после того, как вы щелкнете элемент BitBar в строке меню.
BitBar также позволяет изменять цвет текста и реагировать на клики. Клики могут открывать URL-адрес или запускать другой сценарий оболочки, и его можно настроить в фоновом режиме.
Вот простой скрипт на Ruby, который создает ссылку на StackOverflow в BitBar:
url = "https://stackoverflow.com"
puts "Go to StackOverflow | href=#{url}"
Обратите внимание на |
разделение выводимого текста и параметров для нажатия. Параметр href
Вот более сложный пример, показывающий некоторый красный текст, который запускает другой исполняемый скрипт:
puts "Run My Script | color=#ff0000 bash=/path/to/your/script.sh"
Конечно, еще раз, вы захотите, чтобы этот скрипт был настроен на выполнение с помощью chmod
Наконец, если скрипт принимает параметры, вы можете добавить их, используя param1
param2
param3
Если вы хотите выполнить скрипт bash в фоновом режиме при нажатии, установите для параметра terminal=
false
Например, вы можете использовать текущее время в качестве параметра для сценария, который выполняется в фоновом режиме:
current_time = Time.now.to_i
puts "Run My Script | color=#ff0000 bash=/path/to/your/background_script.sh terminal=false param1=#{current_time}"
Создание монитора сайта
Теперь, когда мы знаем, как работает BitBar, давайте создадим монитор сайта в Ruby, который мы затем сможем использовать с BitBar. Как заявление об отказе от ответственности, вы должны знать, что только проверка статуса сайта с вашего собственного компьютера может не дать вам полную картину. Чтобы действительно знать, не работают ли ваши сайты, используйте службы мониторинга и такие сайты, как uptimerobot.com . Но этот маленький виджет обеспечит быстрый взгляд и сигнализирует о потенциальных проблемах по мере их возникновения.
Требуемым поведением является точка маркера, красная или зеленая, в зависимости от состояния списка сайтов. Я хочу иметь возможность сохранить этот список сайтов в легко обновляемом файле YAML. Когда один из сайтов выходит из строя, я хочу иметь возможность щелкнуть пункт маркера в моей строке меню и увидеть сбойный сайт. Я также хочу иметь возможность щелкнуть этот пункт меню, чтобы посетить сайт в моем браузере.
Давайте начнем с некоторого Ruby!
Класс проверки сайта
Сначала мы создадим простой класс с именем SiteChecker
# /path/to/bitbar_plugins/site_checker/site_checker.rb
require 'yaml'
require 'net/http'
class SiteChecker
def initialize(sites)
@sites = sites
end
def up?(server, port=80)
http = Net::HTTP.start(server, port, {open_timeout: 5, read_timeout: 5})
response = http.head("/")
response.code == "200"
rescue Timeout::Error, SocketError
false
end
def run
results = {}
@sites.map {|s| results[s] = up?(s) }
results
end
end
Большой! Теперь у нас есть простой класс Ruby, который может проверять любой данный сайт, может быть инициализирован списком проверяемых сайтов и возвращает хэш результатов.
Далее, давайте напишем фактический плагин BitBar, который будет использовать класс SiteChecker
Добавьте папку в папку плагинов BitBar с именем site_checker
там файл site_checker.rb . Затем создайте файл с именем site_checker.3m.sh и поместите его в каталог плагинов BitBar. Вот как выглядит этот файл:
#!/usr/bin/env ruby
# Note: the ruby path above should point to your Ruby installation.
# You can verify this by checking `which ruby`
$:.unshift File.dirname(__FILE__)
require 'site_checker/site_checker.rb'
require 'yaml'
def run
sites = YAML.load_file(File.join(__dir__, 'site_checker/sites.yml'))["sites"]
site_checker = SiteChecker.new(sites)
results = site_checker.run
if results.values.include? false
puts "• | color=#ff0000"
puts "---"
results.select {|key, val| val == false }.keys.each do |site|
puts "#{site} down | href=http://#{site}"
end
else
puts "• | color=#82B021"
end
end
run
Этот простой скрипт форматирует выходные данные нашего класса SiteChecker для использования BitBar. Наконец, нам нужно убедиться, что мы добавили наш файл sites.yml в наш каталог site_checker :
SiteChecker
Убедитесь, что ваш сайт использует только свое доменное имя (без каких-либо протоколов).
Последний шаг — сделать скрипт исполняемым. Вы можете сделать это, запустив sites:
Полученная файловая структура должна выглядеть следующим образом:
- "google.com"
- "twitter.com"
- "yoursite.com"
chmod +x site_checker.3m.sh
Счетчик Твиттера
Далее, давайте сделаем что-то более сложное. Мы покажем, сколько пользователей мы подписываемся и сколько пользователей подписались на нас в Twitter.
Первым шагом является регистрация приложения в Twitter . После того, как вы выполнили все шаги и успешно создали свой проект, вам нужно будет найти ключи API и токены доступа для приложения.
Затем создайте папку в каталоге плагинов BitBar с именем twitter_counter и соответствующий файл плагина с именем twitter_counter.10m.sh .
Внутри только что созданной папки twitter_counter создайте файл account_detail.rb . Мы будем использовать это для создания простого класса, который будет возвращать информацию о количестве подписок для учетной записи Twitter.
Класс ├── site_checker
│ ├── site_checker.rb
│ └── sites.yml
├── site_checker.3m.sh
AccountDetail
Убедитесь, что вы запустили require 'twitter'
class AccountDetail
attr_accessor :user
def initialize(username)
@client = create_client
@user = @client.user(username)
end
def followers
user.followers_count
end
def followings
user.friends_count
end
private
def create_client
Twitter::REST::Client.new do |config|
config.consumer_key = "YOUR CONSUMER KEY"
config.consumer_secret = "YOUR CONSUMER SECRET"
config.access_token = "YOUR ACCESS TOKEN"
config.access_token_secret = "YOUR ACCESS TOKEN SECRET"
end
end
end В предыдущем примере мы использовали встроенные библиотеки. Твиттер — это сторонний гем, который должен быть установлен до того, как этот класс заработает.
Класс gem install twitter
AccountDetail
Затем отредактируйте файл twitter_counter.10m.sh, чтобы он выглядел так:
#!/usr/bin/env
$:.unshift File.dirname(__FILE__)
require 'twitter_counter/account_detail'
def run
@account_detail = AccountDetail.new('your_twitter_name')
puts "#{@account_detail.followers} followers"
puts "#{@account_detail.followings} following"
end
run
Наконец, отредактируйте разрешения для скрипта, чтобы сделать его исполняемым. Пока все настроено правильно, в меню вы должны увидеть простой виджет, который переключается между вашим счетом «подписчиков» и счетчиком «подписчиков». Конечно, мы могли бы использовать гораздо больше API Twitter, чтобы делать еще более интересные вещи!
Вывод
Хотя этот инструмент нельзя использовать в проекте, который вы собираетесь отправить своим клиентам, он, безусловно, может быть полезным и интересным инструментом для создания ваших собственных нативных приложений. Вот несколько идей для других проектов, использующих BitBar:
- Индикатор состояния сборки (интеграция с чем-то вроде CircleCI или Codeship)
- Полоса продажи тикер
- Простой простой в доступе список действий для выполнения распространенных задач или макрофункций
- Визуальное отображение вещей с чем-то вроде (Spark) [https://github.com/holman/spark]
Поделитесь своими идеями с нами здесь! Счастливого взлома!