Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›REST API ›Watcher API

API подтверждения (ack) отслеживания

Справочник по новым API

Для получения самых свежих данных об API обратитесь к Watcher API.

Подтверждение выполнения отслеживания позволяет вручную ограничить выполнение действий отслеживания.

Запрос

PUT _watcher/watch/<watch_id>/_ack

PUT _watcher/watch/<watch_id>/_ack/<action_id>

Предварительные требования

  • Для использования этого API у вас должны быть manage_watcher права на кластер. Дополнительная информация — в разделе Права доступа к безопасности.

Описание

Состояние подтверждения действия хранится в структуре status.actions.<id>.ack.state.

Если указанное отслеживание выполняется в данный момент, этот API вернёт ошибку. Это сделано для предотвращения перезаписи состояния отслеживания во время его выполнения.

Параметры пути

<action_id>
(Необязательно, список) Список идентификаторов действий для подтверждения, разделённых запятыми. Если этот параметр опущен, подтверждаются все действия отслеживания.
<watch_id>
(Обязательно, строка) Идентификатор отслеживания.

Примеры

Для демонстрации создадим новое отслеживание:

resp = client.watcher.put_watch(
    id="my_watch",
    trigger={
        "schedule": {
            "yearly": {
                "in": "february",
                "on": 29,
                "at": "noon"
            }
        }
    },
    input={
        "simple": {
            "payload": {
                "send": "yes"
            }
        }
    },
    condition={
        "always": {}
    },
    actions={
        "test_index": {
            "throttle_period": "15m",
            "index": {
                "index": "test"
            }
        }
    },
)
print(resp)
const response = await client.watcher.putWatch({
  id: "my_watch",
  trigger: {
    schedule: {
      yearly: {
        in: "february",
        on: 29,
        at: "noon",
      },
    },
  },
  input: {
    simple: {
      payload: {
        send: "yes",
      },
    },
  },
  condition: {
    always: {},
  },
  actions: {
    test_index: {
      throttle_period: "15m",
      index: {
        index: "test",
      },
    },
  },
});
console.log(response);
PUT _watcher/watch/my_watch
{
  "trigger" : {
    "schedule" : {
      "yearly" : { "in" : "february", "on" : 29, "at" : "noon" }
    }
  },
  "input": {
    "simple": {
      "payload": {
        "send": "yes"
      }
    }
  },
  "condition": {
    "always": {}
  },
  "actions": {
    "test_index": {
      "throttle_period": "15m",
      "index": {
        "index": "test"
      }
    }
  }
}

Текущее состояние отслеживания и состояние его действий возвращаются вместе с определением отслеживания при вызове API получения отслеживания:

resp = client.watcher.get_watch(
    id="my_watch",
)
print(resp)
const response = await client.watcher.getWatch({
  id: "my_watch",
});
console.log(response);
GET _watcher/watch/my_watch

Состояние действий вновь созданного отслеживания — awaits_successful_execution:

{
  "found": true,
  "_seq_no": 0,
  "_primary_term": 1,
  "_version": 1,
  "_id": "my_watch",
  "status": {
    "version": 1,
    "actions": {
      "test_index": {
        "ack": {
          "timestamp": "2015-05-26T18:04:27.723Z",
          "state": "awaits_successful_execution"
        }
      }
    },
    "state": ...
  },
  "watch": ...
}

При выполнении отслеживания и совпадении условия значение ack.state изменяется на ackable. Выполним отслеживание и получим его снова, чтобы проверить состояние:

resp = client.watcher.execute_watch(
    id="my_watch",
    record_execution=True,
)
print(resp)

resp1 = client.watcher.get_watch(
    id="my_watch",
)
print(resp1)
const response = await client.watcher.executeWatch({
  id: "my_watch",
  record_execution: true,
});
console.log(response);

const response1 = await client.watcher.getWatch({
  id: "my_watch",
});
console.log(response1);
POST _watcher/watch/my_watch/_execute
{
  "record_execution" : true
}

GET _watcher/watch/my_watch

и действие теперь находится в состоянии ackable:

{
  "found": true,
  "_id": "my_watch",
  "_seq_no": 1,
  "_primary_term": 1,
  "_version": 2,
  "status": {
    "version": 2,
    "actions": {
      "test_index": {
        "ack": {
          "timestamp": "2015-05-26T18:04:27.723Z",
          "state": "ackable"
        },
        "last_execution" : {
          "timestamp": "2015-05-25T18:04:27.723Z",
          "successful": true
        },
        "last_successful_execution" : {
          "timestamp": "2015-05-25T18:04:27.723Z",
          "successful": true
        }
      }
    },
    "state": ...,
    "execution_state": "executed",
    "last_checked": ...,
    "last_met_condition": ...
  },
  "watch": ...
}

Теперь мы можем подтвердить его:

resp = client.watcher.ack_watch(
    watch_id="my_watch",
    action_id="test_index",
)
print(resp)

resp1 = client.watcher.get_watch(
    id="my_watch",
)
print(resp1)
const response = await client.watcher.ackWatch({
  watch_id: "my_watch",
  action_id: "test_index",
});
console.log(response);

const response1 = await client.watcher.getWatch({
  id: "my_watch",
});
console.log(response1);
PUT _watcher/watch/my_watch/_ack/test_index
GET _watcher/watch/my_watch
{
  "found": true,
  "_id": "my_watch",
  "_seq_no": 2,
  "_primary_term": 1,
  "_version": 3,
  "status": {
    "version": 3,
    "actions": {
      "test_index": {
        "ack": {
          "timestamp": "2015-05-26T18:04:27.723Z",
          "state": "acked"
        },
        "last_execution" : {
          "timestamp": "2015-05-25T18:04:27.723Z",
          "successful": true
        },
        "last_successful_execution" : {
          "timestamp": "2015-05-25T18:04:27.723Z",
          "successful": true
        }
      }
    },
    "state": ...,
    "execution_state": "executed",
    "last_checked": ...,
    "last_met_condition": ...
  },
  "watch": ...
}

Подтверждение действия приостанавливает дальнейшее выполнение этого действия до тех пор, пока его ack.state не будет сброшено до awaits_successful_execution. Это происходит, когда условие отслеживания не выполняется (условие оценивается как false).

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

resp = client.watcher.ack_watch(
    watch_id="my_watch",
    action_id="action1,action2",
)
print(resp)
const response = await client.watcher.ackWatch({
  watch_id: "my_watch",
  action_id: "action1,action2",
});
console.log(response);
POST _watcher/watch/my_watch/_ack/action1,action2

Чтобы подтвердить все действия отслеживания, просто опустите параметр actions:

resp = client.watcher.ack_watch(
    watch_id="my_watch",
)
print(resp)
const response = await client.watcher.ackWatch({
  watch_id: "my_watch",
});
console.log(response);
POST _watcher/watch/my_watch/_ack

Ответ похож на ответ API получения отслеживания, но содержит только состояние:

{
  "status": {
    "state": {
      "active": true,
      "timestamp": "2015-05-26T18:04:27.723Z"
    },
    "last_checked": "2015-05-26T18:04:27.753Z",
    "last_met_condition": "2015-05-26T18:04:27.763Z",
    "actions": {
      "test_index": {
        "ack" : {
          "timestamp": "2015-05-26T18:04:27.713Z",
          "state": "acked"
        },
        "last_execution" : {
          "timestamp": "2015-05-25T18:04:27.733Z",
          "successful": true
        },
        "last_successful_execution" : {
          "timestamp": "2015-05-25T18:04:27.773Z",
          "successful": true
        }
      }
    },
    "execution_state": "executed",
    "version": 2
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/watcher-api-ack-watch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API