Перейти к содержимому

Наблюдение за каталогом ​

Наблюдайте за каталогом, если приложение должно реагировать на создание или изменение файлов в работающей песочнице.

mjs
import { FilesystemEventType, Sandbox } from "@abox-dev/sdk";

const sandbox = await Sandbox.create();

try {
  let receiveEvent;
  const nextWrite = new Promise((resolve) => {
    receiveEvent = resolve;
  });

  const watcher = await sandbox.files.watchDir(
    "~",
    (event) => {
      if (event.type === FilesystemEventType.WRITE) receiveEvent(event);
    },
    { includeEntry: true, user: "root" },
  );

  await sandbox.files.write("~/message.txt", "Hello", { user: "root" });
  const event = await nextWrite;
  console.log(event.type, event.entry?.path);

  await watcher.stop();
} finally {
  await sandbox.kill();
}

JavaScript передаёт события в обработчик watchDir. Python накапливает их до вызова get_new_events(). Go передаёт события через канал WatchHandle.Events. Остановите наблюдение, когда оно больше не нужно.

Параметр recursive включает существующие вложенные каталоги. Чтобы получать сведения о файле вместе с событием, задайте includeEntry в JavaScript, include_entry в Python или IncludeEntry в Go. После удаления файла сведения могут отсутствовать.

Для сетевой файловой системы нужно явно включить allowNetworkMounts, allow_network_mounts или AllowNetworkMounts. Доставка таких событий не гарантируется: изменения от другого клиента не попадают в наблюдатель песочницы.

Чтобы вычислять путь наблюдаемого каталога для выбранного пользователя, задайте user в JavaScript/Python или WatchOptions.User в Go. Например, наблюдение за ~ с пользователем root выбирает домашний каталог root. Пустой пользователь в Go означает пользователя шаблона.