The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Facebook представил Watchman, открытый инструмент для отслеживания изменения файлов

05.06.2013 13:44

Инженеры из компании Facebook анонсировали новый открытый инструмент Watchman, в рамках которого создан сервис для отслеживания изменения и поиска файлов в заданных иерархиях директорий. При обнаружении факта изменения содержимого файла Watchman позволяет выполнить определённое пользователем событие, привязанное к типу файла и характеру изменений.

Несмотря на то, что подобные возможности могут найти достаточно широкую область применения, основной целью разработки является ускорение работы системы сборки больших проектов, в которых Watchman может быть использован для автоматизации пересборки ресурсов, связанных с файлом для которого зафиксировано изменение. В частности, Watchman используется в Facebook для ускорения многоступенчатой системы сборки компонентов на языке PHP - вместо пересборки всего проекта применяется тактика инкрементальной пересборки только изменённого кода. В результате время пересборки удалось сократить на 60%.

Код проекта написан на языке Си и распространяется под лицензией Apache 2.0. Программой поддерживается широкий спектр средств отслеживания изменений в файловой системе: inotify в Linux, kqueue в Mac OS X, FreeBSD 9.1 и OpenBSD, port_create в Illumos и Solaris.

Watchman поддерживает рекурсивный мониторинг изменений в произвольном числе директорий, отслеживая всю иерархию от текущей директории до конечных ветвей дерева. Перед инициированием действия и запуском связанной с ним команды система дожидается завершения изменения и закрытия файла. Серверный и клиентский интерфейс реализован в рамках единого исполняемого файла watchman, поддерживающего как управление из командной строки так и работу в виде сервиса, обрабатывающего запросы в формате JSON.

Допускается создание достаточно сложных фильтров, определяющих правила выбора файлов для привязки к действиям. Возможно определение исключений, учёт времени изменения, использование регулярных выражений PCRE и логических операторов, задание таймаута перед запуском команды, создание многоступенчатых правил (например, запуск действия когда файл А изменён после изменения файла Б). Watchman также поддерживает большинство возможностей утилиты find, но отличается тем, что осуществляет выборку по предварительно сформированному индексу, без перебора содержимого всей иерархии директорий на каждый запрос. Также поддерживается работа в режиме накопления лога изменений содержимого файловой системы. Кроме запуска приложений для выполнения действий поддерживается организация взаимодействия через систему подписки на изменения, при котором внешняя программа открывает сокет и ждёт поступления сигналов о наличии изменений.

Простейший пример использования сервиса выглядит следующим образом:

Запускаем мониторинг директории ~/src:


   $ watchman watch ~/src

Указываем о необходимости запуска программы buildme при изменении CSS-файлов (путь к файлу передаётся в качестве аргумента при запуске buildme):


   $ watchman -- trigger ~/src buildme '*.css' -- minify-css


  1. Главная ссылка к новости (https://www.facebook.com/notes...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/37101-watchman
Ключевые слова: watchman, monitoring, inotify, find
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (53) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 14:15, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Чем он лучше связки крон + %система версионирования%?
     
     
  • 2.3, Аноним (-), 14:21, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +18 +/
    Тем, что не костыль на баше, а специально заточенная под задачу софтина.
     
     
  • 3.6, Аноним (-), 14:28, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Тем, что не костыль на баше

    Не костыль - значит, не юниксвейно. Можно закaпывать.

     
     
  • 4.8, Аноним (-), 14:30, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > Не костыль - значит, не юниксвейно. Можно закaпывать.

    Ждем когда вы перепишете на баше кернел. Чтобы стало совсем уж юниксвэйно.

     
     
  • 5.9, Аноним (-), 14:33, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Мы работаем над этим. Столкнулись с проблемой: наше ядро нуждается в интерпретаторе. Совать для этого сишный блоб баша - поттерингизм в терминальной стадии. Должно быть все на чистых скриптах, включая прошивку биоса. Но вот кто их будет интерпретировать - пока непонятно.
     
     
  • 6.13, Аноним (-), 15:00, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > кто их будет интерпретировать - пока непонятно.

    Барон Мюнхаузен, разумеется. Он специалист по решению таких задач :). В честь его умения вытаскивать самого себя за шнурки ботинок из болота это прямо так и называется - bootstrap.

     
     
  • 7.14, anonymous (??), 15:07, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    глубокоуважаемый барон вытаскивал себя за волосы, но суть та же.
     
     
  • 8.16, Аноним (-), 15:13, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Кэп, кстати, намекает, что процессор - это такой аппаратный интерпретатор машинн... текст свёрнут, показать
     
     
  • 9.30, Аноним (-), 18:02, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    А не будет ли использование аппаратного CPU нарушением принципов UNIX Ведь крис... текст свёрнут, показать
     
     
  • 10.46, Аноним (-), 06:28, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    С учетом того что исходники современных чипов как правило пишут на языках формал... текст свёрнут, показать
     
  • 7.26, Аноним (-), 17:39, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Bootstrap - это не шнурок, а такая небольшая лямка на пятке ботинка, чтобы за нее можно было тянуть при надевании ботинка на ногу.
    Сам термин "bootstrapping" произошел от американской поговорки, но многие считают, что именно от истории про барона Мюнхгаузена из-за схожести принципа.
     
  • 4.18, cmp (??), 15:39, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • –4 +/
    От чего же не юниксвейно-то нафиг цсс, мониторить каталог расшаренный по tftp д... большой текст свёрнут, показать
     
     
  • 5.37, Аноним (-), 21:35, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > что может быть удобнее и проще.

    Нормальные системы управления конфигурацией, типа puppet. Гораздо удобнее и проще ваших костылей. И давно реализованы.

     
     
  • 6.45, cmp (??), 05:57, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Нормальные системы управления конфигурацией, типа puppet. Гораздо удобнее и проще ваших
    > костылей. И давно реализованы.

    Puppet (англ. марионетка) — кроссплатформенное клиент-серверное приложение, которое позволяет централизованно управлять конфигурацией операционных систем и программ, установленных на нескольких компьютерах. Puppet написан на языке программирования Ruby.

    Да идите вы с вашим руби куда-нибудь, реализуйте его поддержку для всех встраиваевых платформ, задолбали со своими перлами и питонами, есть система, а есть узерспейс тулс, и нехрен пихать второе в первое.

     
     
  • 7.53, Аноним (-), 12:22, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Да идите вы с вашим руби куда-нибудь, реализуйте его поддержку для всех
    > встраиваевых платформ, задолбали со своими перлами и питонами, есть система, а
    > есть узерспейс тулс, и нехрен пихать второе в первое.

    Точно! Система управления конфигурацией должна быть реализована непосредственно в ядре, безо всякого юзерспейса! Дадим достойный ответ поттеринговской блоатвари!

     
  • 6.47, Аноним (-), 06:31, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> что может быть удобнее и проще.
    > Нормальные системы управления конфигурацией, типа puppet.

    Ололо, указанная штукенция - это монитор изменения файлов. Казалось бы, при чем здесь puppet, который средство группового администрирования прежде всего?

     
     
  • 7.52, Аноним (-), 12:20, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    При том, что некий адепт культа костыля предлагает на базе монитора изменения файлов сделать велосипед для группового администрирования (см. выше).
     
     
  • 8.54, cmp (??), 15:08, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Какого черта, причем тут групповое администрирование, я предложил вариант при ко... текст свёрнут, показать
     
     
  • 9.55, Аноним (-), 16:22, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    А реагировать на изменения в каталоге cfg кто будет Ядро ... текст свёрнут, показать
     
  • 3.36, Kroz (??), 21:14, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Тем, что не костыль на баше, а специально заточенная под задачу софтина.

    bash и не-bash - это все лишь инструменты. И на bash и на C можно написать как полное убожество, так и нормальную вещь.

    Повторю вопрос: чем лучше других (inotify, например) с точки зрения результата?

     
     
  • 4.38, Аноним (-), 21:37, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Повторю вопрос: чем лучше других (inotify, например) с точки зрения результата?

    inotify - это технология. watchman - это решение, использующее данную технологии. Полноценное и универсальное, в отличие от PoC типа inotifywatch.

     
  • 2.7, Аноним (-), 14:30, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +6 +/
    >  Чем он лучше связки крон + %система версионирования%?

    Тем что пользует средства современных операционок вместо тупого и ресурсожоркого поллинга по крону. Не, если ресурсы девать некуда, ждать между запусками скрипта не в облом, а тупняки при обходе иерархии не напрягают - можно и по крону. А можно вот и лучше сделать, что актуально когда задача не "одноразовая".

     

  • 1.4, username (??), 14:25, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    О  боги, я представляю с помощью каких костылей работает fb если им нужны такие тулзы!
     
     
  • 2.49, Аноним (-), 08:02, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > О  боги, я представляю с помощью каких костылей работает fb если
    > им нужны такие тулзы!

    Вся вебня так работает. Тоже мне, открытие века....

     

  • 1.12, fi (ok), 14:52, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Думал в нашем проекте написать что-то подобное, а тут уже готовое решение. Попробуем, если будет как заявлено, включим в нашу систему.
     
     
  • 2.22, hshhhhh (ok), 17:22, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    http://www.opennet.me/openforum/vsluhforumID3/90323.html#17
     

  • 1.15, StreSS.t (ok), 15:10, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Либо пере изобрели либо еще сильно курили (там первый коммит от 2010 года)

    https://github.com/greggoryhz/Watcher

    Пользую уже 2 года.

     
  • 1.17, fa (??), 15:18, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    все уже давно написано

    while inotifywait -e modify ~/src; do
        buildme '*.css' -- minify-css
    done

     
     
  • 2.28, имя (?), 17:59, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    У вас слишком простые исходники. man inotifywait, /-r
     

  • 1.19, Аноним (-), 16:03, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    dtrace такое тоже умеет
     
     
  • 2.48, Аноним (-), 06:35, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > dtrace такое тоже умеет

    Система отладки - для мониторинга проекта и пересборки? Спору нет, холодильником тоже можно гвозди забивать при сильном желании. Просто очень неудобно.

     

  • 1.20, FedeX (?), 16:23, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >вместо пересборки всего проекта применяется тактика инкрементальной пересборки только изменённого кода.

    мне кажется, или все нормальные компиляторы нормальных языков программирования и так так поступали уже десятки лет назад? Компиляторы Паскаля например..

     
     
  • 2.21, Crazy Alex (ok), 16:34, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Если компилатор какой-то подобной глупостью занимается - в топку его. Мало ли в каких условиях его запускали и почему надо перебилдить. Это дело внешней тулзы. Но я как-то не припомню таких идиотских компиляторов. А паскалевские (особенно для какого-нибудь простенького BP7) просто очень шустры, там время компиляции не всегда и заметно.
     
     
  • 3.23, hshhhhh (ok), 17:25, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Возможно, под "компилятор" он имел в виду что-нибудь типа "эклипс"
     
  • 3.27, www2 (ok), 17:40, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    make
     
  • 3.33, FedeX (?), 18:26, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    да пожалуй я имел ввиду билдер, а не компилер - взять к примеру Delphi, там просто это все было интегрировано. Помню что он создавал dcu-файлы - скомпилированные модули, и при следующей компиляции пересобирал только измененные pas-модули. Это было более двадцати лет назад
     
     
  • 4.39, Аноним (-), 21:40, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > да пожалуй я имел ввиду билдер, а не компилер - взять к
    > примеру Delphi, там просто это все было интегрировано. Помню что он
    > создавал dcu-файлы - скомпилированные модули, и при следующей компиляции пересобирал только
    > измененные pas-модули. Это было более двадцати лет назад

    Последние 20 (а то и больше) лет утилита make работает именно так. И ее можно использовать при сборке не только из пасквиля, но и практически любого компилируемого языка.

     
     
  • 5.56, FedeX (?), 18:07, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    ну make вообще ущербный инструмент и на самом деле не умеет того что умеет любой билдер для паскаля так что сравнение не уместно. В С/С++ для которых в основном используется make для сборки вообще нет понятия модуля, а то что есть - костыли препроцессора лишь имитирующие модульность.
     

  • 1.24, DJa (?), 17:38, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Теперь изменения ваших файлов в вашей хронике на ФБ :)
     
  • 1.25, anonymous (??), 17:38, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    фейсбук написал свой велосипед, хотя уже давным-давно есть известный lsyncd

    ну хотя это их стайл. скоро свой язык напишут)

     
     
  • 2.31, Аноним (-), 18:05, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > фейсбук написал свой велосипед, хотя уже давным-давно есть известный lsyncd

    А чего не dropbox сразу? Или ubuntuone?

     
     
  • 3.34, anonymous (??), 18:34, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    а что нет?
     
     
  • 4.40, Аноним (-), 21:41, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а что нет?

    А еще можно резиновым х*ем гвозди заколачивать.

     

  • 1.32, ip1981 (ok), 18:11, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Программа сливает всё в FBI^W  Facebook?
     
     
  • 2.35, Аноним (-), 18:35, 05/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А Linux сливает все твои данные на kernel.org, ага.
     

  • 1.41, wolfovich (?), 23:34, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не совсем понятно как его запустить как службу и общаться с помощью json
     
  • 1.42, Sokoloff (?), 23:42, 05/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Странно вспомнили про inotify, но не упомянули incron, а это прямой аналог.

     
  • 1.43, Аноним (-), 01:27, 06/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    как это инжИнеры фб не запилили код на руби,
    видимо там еще кто то остался кто знает С
    лол
     
  • 1.44, pavlinux (ok), 01:29, 06/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Пля, баян великий...

    1. В лине уже стотыщь мильонов лет есть inotify/dnotify/fanotify и куча софта для управления ими.
    2. Из IRIX 6.0 (1994 год) мигрировал fam (File Alteration Monitor), бинарь http://oss.sgi.com/projects/fam/,
    и перловый фреймворк к нему http://search.cpan.org/~jglick/SGI-FAM-1.002/lib/SGI/FAM.pm

     
     
  • 2.50, Аноним (-), 08:04, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Пля, баян великий...
    > 1. В лине уже стотыщь мильонов лет есть inotify/dnotify/fanotify и куча софта
    > для управления ими.
    > 2. Из IRIX 6.0 (1994 год) мигрировал fam (File Alteration Monitor), бинарь
    > http://oss.sgi.com/projects/fam/,
    > и перловый фреймворк к нему http://search.cpan.org/~jglick/SGI-FAM-1.002/lib/SGI/FAM.pm

    Весь СПО такой же. Слышал звон - не знаю, где он - а, напишу новый велик!

     

  • 1.51, тигар (ok), 10:46, 06/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >kqueue в Mac OS X, FreeBSD 9.1

    не знаю, когда оно там появилось в мокос, но во фре оно с 4.1 есть, интересно, чего это про 9.1 написано:\

     
  • 1.57, Аноним (-), 19:02, 08/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    еще одни пыходети не осилили http://pythonhosted.org/watchdog/
     
  • 1.58, Аноним (58), 03:35, 21/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    От вы тупни старообрядные, пишу из будущего и уверяю, что данная утилита нашла широкое применение в прикладном программировании, без неё совершенно не обойтись!!!
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру