Публикация задачи в контексте выполнения (управления) веб-консолей

В веб-интерфейсе Apache Brooklyn мы хотели бы отобразить некоторый контент для менеджеров Sytsem. Содержание слишком длинное, чтобы служить простым значением датчика.

Наша идея состояла в том, чтобы создать задачу и записать содержимое в выходной поток задачи, а затем предложить менеджерам URL-адрес на основе REST, например: /v1/ Activities/{task}/stream/stdout (Конечно, ссылка маскирована с хорошим текстом)

Поток и задача создаются следующим образом:

LOG.info("{} Creating Activity for ClusterReport Feed", this);
activity = Tasks.builder().
    displayName("clusterReportFeed").
    description("Output for the Cluster Report Feed").
    body(new Runnable() {
        @Override
        public void run() {
            //DO NOTHING
        }
    }).
    parallel(true).
    build();

LOG.info("{} Task Created with Id: " + activity.getId(), this);
Entities.submit(server, activity).getUnchecked();

Задание, кажется, создано, и взаимодействие прекрасно работает. Однако, когда я хочу получить доступ к потоку вывода задач из моего браузера с помощью подготовленного URL-адреса, я получаю сообщение об ошибке, что задача не существует.

Наша идея состоит в том, что мы не в правильном контексте управления / исполнения. Веб-страница работает в другом контексте по сравнению с объектами и их датчиками. Как мы можем поставить задачу так, чтобы она была видимой и для контекста веб-консолей?

Можно ли записать содержимое в файл, а затем предложить его для загрузки через Jetty(веб-сервер Brooklyns)? Это было бы намного проще.

1 ответ

Решение

Многие задачи в Бруклине по умолчанию являются временными - то есть они удаляются вскоре после их завершения (такие вещи, как эффекторные вызовы, по умолчанию не являются переходными).

Вы можете пометить свою задачу как непереходную, используя приведенный ниже код при использовании компоновщика задач:

.tag(BrooklynTaskTags.NON_TRANSIENT_TASK_TAG)

Тем не менее, обратите внимание, что (начиная с Brooklyn версии 0.9.0) задачи хранятся в памяти с помощью программных ссылок. Это означает, что стандартный вывод задачи, вероятно, будет потерян в какой-то момент в будущем, когда эта память потребуется для других объектов в памяти.

Для вашего варианта использования, имеет ли смысл иметь это как результат?

Или вы могли бы вместо этого написать в хранилище объектов, таких как S3? Подход S3 показался бы мне лучшим.

Чтобы записать его в файл, необходимо соблюдать осторожность при использовании с Brooklyn высокой доступности. Вы бы написали в общий том?

Если вы делаете запись в файл, вам нужно будет предоставить веб-расширение, чтобы люди могли получить доступ к содержимому этого файла. Начиная с Brooklyn 0.9.0, вы можете добавлять свои собственные WAR-коды в код при вызове BrooklynLauncher (который вызывает BrooklynWebServer).

Другие вопросы по тегам