Ручная смена состояния сущности

Устанавливает вручную состояние связи или объекта. Возвращает изменённую сущность в формате JSON.

Сущность будет находиться в заданном состоянии, пока его не снимут вручную флагом clear.

Также, с помощью этого запроса можно приостановить сбор данных для указанной сущности до сброса ручного состояния. Для это, в теле запроса нужно установить параметру unmanaged значение true.

Запрос

HTTP Запрос

PUT /node/api/entities/:id/manual-state

Права

entityPermissions

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

Параметр Тип Описание

id

String
обязательный

ID сущности, которой нужно выставить состояние.

Параметры тела запроса

Параметр Тип Описание

stateId

String
обязательный

ID нового состояния.

clear

String

Сбросить ли предыдущее состояние. Если этот параметр выставлен в true, то параметр stateId не используется и не требуется.

since

Integer

Время установки состояния.

until

Integer

Время сброса состояния.

reason

String

Причина установки состояния.

clearedByStateId

Array

Список состояний, которые сбрасывают заданное состояние.

unmanaged

Boolean

Остановить сбор данных в сущности до сброса ручного состояния.

Тело запроса

{
    "stateId": 3,
    "clear": false,
    "reason": "Testing"
}

Можно установить время, когда сущность перейдёт в заданное состояние параметром since. Во время, указанное в поле until, сущность автоматически вернётся в состояние, в котором оно находилось до смены состояния вручную.

Параметры since и until можно использовать вместе или независимо друг от друга.

{
    "stateId": 4,
    "reason": "Setting the timed state",
    "since": 1666281549581,
    "until": 1666282447355
}

Также, можно остановить сбор данных на данной сущности. В этом случае сущность перестанет получать данные от агентов и будет игнорировать попытки записать данные через REST API с помощью запросов Установить данные мониторинга для сущности, Установить данные мониторинга связи или Установить данные мониторинга объекта. Для этого, в теле запроса нужно установить параметру unmanaged значение true:

{
    "stateId": 4,
    "reason": "Остановить сбор данных для этой сущности",
    "unmanaged": true
}
Для остановки сбора данных можно использовать любое состояние.

Ответ

Возвращает сущность, состояние которой было задано вручную. Подробная информация о модели доступна в статье Связь и Объект.

Если состояние было установлено, параметр сущности manual_state будет содержать ID состояния, причину перехода состояния и ID пользователя, который установил состояние. Если состояние, установленное вручную было очищено, значение переменной manual_state будет равно null (даже если ручное состояние не было установлено ранее).

Подробная информация о модели доступна в статье Ручное состояние.

Пример

Установить состояние вручную

Запрос

В этом примере показана установка состояния объекта вручную:

  • Bash

  • JavaScript

  • NodeJS

  • Python

login=<...>
password=<...>
saymon_hostname=<...>
entity_id=<...>
url=https://$saymon_hostname/node/api/entities/$entity_id/manual-state

curl -X PUT $url -u $login:$password \
    -H "Content-Type: application/json" \
    -d @- <<EOF
{
    "stateId": 3,
    "clear": false,
    "reason": "Testing"
}
EOF
let login = <...>
let password = <...>
let saymonHostname = <...>
let entityId = <...>
let path = "/node/api/entities/" + entityId + "/manual-state";
let auth = "Basic " + btoa(login + ":" + password);

let headers = new Headers();
headers.append("Authorization", auth);
headers.append("Content-Type", "application/json");

let data = JSON.stringify({
    "stateId": 3,
    "clear": false,
    "reason": "Testing"
});

let requestOptions = {
    method: "PUT",
    headers: headers,
    body: data
};

fetch(saymonHostname + path, requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log("error", error));
const http = require("http");

let login = <...>
let password = <...>
let saymonHostname = <...>
let entityId = <...>
let path = "/node/api/entities/" + entityId + "/manual-state";
let auth = "Basic " + Buffer.from(login + ":" + password).toString("base64");

let options = {
    "method": "PUT",
    "hostname": saymonHostname,
    "headers": {
        "Authorization": auth,
        "Content-Type": "application/json"
    },
    "path": path
};

let req = http.request(options, function (res) {
    let chunks = [];

    res.on("data", function (chunk) {
        chunks.push(chunk);
    });

    res.on("end", function (chunk) {
        let body = Buffer.concat(chunks);
        console.log(body.toString());
    });

    res.on("error", function (error) {
        console.error(error);
    });
});

let data = JSON.stringify({
    "stateId": 3,
    "clear": false,
    "reason": "Testing"
});

req.write(data);
req.end();
import requests

login = <...>
password = <...>
saymon_hostname = <...>
entity_id = <...>
url = "https://" + saymon_hostname + "/node/api/entities/" + \
    entity_id + "/manual-state";

body = {
    "stateId": 3,
    "clear": false,
    "reason": "Testing"
}

response = requests.request("PUT", url, json=body, auth=(login, password))
print(response.text)

Ответ

{
    "id": "5e79fddb6ec5ea28e5105f65",
    "source": "5e79baae6ec5ea28e5105caa",
    "target": "5e79bbe86ec5ea28e5105d04",
    "owner_id": "5e21b752308c3c66d64e072c",
    "weight": 42,
    "tags": [],
    "last_state_update": 1585124964884,
    "updated": 1585124964878,
    "created": 1585053147047,
    "state_id": 9,
    "class_id": 35,
    "_stateConditionRefs": [],
    "operations": [],
    "properties": [
        {
            "name": "Bus_(computing).pdf",
            "value": "upload_a81d451eeebde3da52f7f83a6b83f78f",
            "type_id": 7,
            "id": "5e7a04dc6ec5ea28e5105f7e"
        }
    ],
    "manual_state": {
        "stateId": 3,
        "reason": "Testing",
        "by": "62c2f3ce80c8654892764d56"
    }
}

Сброс состояния вручную

В этом примере показано как можно сбросить состояние вручную:

Запрос

  • Bash

  • JavaScript

  • NodeJS

  • Python

login=<...>
password=<...>
saymon_hostname=<...>
entity_id=<...>
url=https://$saymon_hostname/node/api/entities/$entity_id/manual-state

curl -X PUT $url -u $login:$password \
    -H "Content-Type: application/json" \
    --data '{"clear": true}'
let login = <...>
let password = <...>
let saymonHostname = <...>
let entityId = <...>
let path = "/node/api/entities/" + entityId + "/manual-state";
let auth = "Basic " + btoa(login + ":" + password);

let headers = new Headers();
headers.append("Authorization", auth);
headers.append("Content-Type", "application/json");

let data = JSON.stringify({
    "clear": true
});

let requestOptions = {
    method: "PUT",
    headers: headers,
    body: data
};

fetch(saymonHostname + path, requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log("error", error));
const http = require("http");

let login = <...>
let password = <...>
let saymonHostname = <...>
let entityId = <...>
let path = "/node/api/entities/" + entityId + "/manual-state";
let auth = "Basic " + Buffer.from(login + ":" + password).toString("base64");

let options = {
    "method": "PUT",
    "hostname": saymonHostname,
    "headers": {
        "Authorization": auth,
        "Content-Type": "application/json"
    },
    "path": path
};

let req = http.request(options, function (res) {
    let chunks = [];

    res.on("data", function (chunk) {
        chunks.push(chunk);
    });

    res.on("end", function (chunk) {
        let body = Buffer.concat(chunks);
        console.log(body.toString());
    });

    res.on("error", function (error) {
        console.error(error);
    });
});

let data = JSON.stringify({
    "clear": true,
});

req.write(data);
req.end();
import requests

login = <...>
password = <...>
saymon_hostname = <...>
entity_id = <...>
url = "https://" + saymon_hostname + "/node/api/entities/" + \
    entity_id + "/manual-state";

body = {
    "clear": True
}

response = requests.request("PUT", url, json=body, auth=(login, password))
print(response.text)

Ответ

{
    "id": "5e79fddb6ec5ea28e5105f65",
    "source": "5e79baae6ec5ea28e5105caa",
    "target": "5e79bbe86ec5ea28e5105d04",
    "owner_id": "5e21b752308c3c66d64e072c",
    "weight": 42,
    "tags": [],
    "last_state_update": 1585124964884,
    "updated": 1585124964878,
    "created": 1585053147047,
    "state_id": 9,
    "class_id": 35,
    "_stateConditionRefs": [],
    "operations": [],
    "properties": [
        {
            "name": "Bus_(computing).pdf",
            "value": "upload_a81d451eeebde3da52f7f83a6b83f78f",
            "type_id": 7,
            "id": "5e7a04dc6ec5ea28e5105f7e"
        }
    ],
    "manual_state": null
}

Остановка сбора данных

Этот пример показывает как остановить сбор данных до сброса ручного состояния.

Запрос

  • Bash

  • JavaScript

  • NodeJS

  • Python

login=<...>
password=<...>
saymon_hostname=<...>
entity_id=<...>
url=https://$saymon_hostname/node/api/entities/$entity_id/manual-state

curl -X PUT $url -u $login:$password \
    -H "Content-Type: application/json" \
    -d @- <<EOF
{
    "stateId": 4,
    "reason": "Остановить сбор данных для этой сущности",
    "unmanaged": true
}
EOF
let login = <...>
let password = <...>
let saymonHostname = <...>
let entityId = <...>
let path = "/node/api/entities/" + entityId + "/manual-state";
let auth = "Basic " + btoa(login + ":" + password);

let headers = new Headers();
headers.append("Authorization", auth);
headers.append("Content-Type", "application/json");

let data = JSON.stringify({
    "stateId": 4,
    "reason": "Остановить сбор данных для этой сущности",
    "unmanaged": true
});

let requestOptions = {
    method: "PUT",
    headers: headers,
    body: data
};

fetch(saymonHostname + path, requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log("error", error));
const http = require("http");

let login = <...>
let password = <...>
let saymonHostname = <...>
let entityId = <...>
let path = "/node/api/entities/" + entityId + "/manual-state";
let auth = "Basic " + Buffer.from(login + ":" + password).toString("base64");

let options = {
    "method": "PUT",
    "hostname": saymonHostname,
    "headers": {
        "Authorization": auth,
        "Content-Type": "application/json"
    },
    "path": path
};

let req = http.request(options, function (res) {
    let chunks = [];

    res.on("data", function (chunk) {
        chunks.push(chunk);
    });

    res.on("end", function (chunk) {
        let body = Buffer.concat(chunks);
        console.log(body.toString());
    });

    res.on("error", function (error) {
        console.error(error);
    });
});

let data = JSON.stringify({
    "stateId": 4,
    "reason": "Остановить сбор данных для этой сущности",
    "unmanaged": true
});

req.write(data);
req.end();
import requests

login = <...>
password = <...>
saymon_hostname = <...>
entity_id = <...>
url = "https://" + saymon_hostname + "/node/api/entities/" + \
    entity_id + "/manual-state";

body = {
    "stateId": 4,
    "reason": "Остановить сбор данных для этой сущности",
    "unmanaged": true
}

response = requests.request("PUT", url, json=body, auth=(login, password))
print(response.text)

Ответ

{
    "id": "5e79fddb6ec5ea28e5105f65",
    "source": "5e79baae6ec5ea28e5105caa",
    "target": "5e79bbe86ec5ea28e5105d04",
    "owner_id": "5e21b752308c3c66d64e072c",
    "weight": 42,
    "tags": [],
    "last_state_update": 1585124964884,
    "updated": 1585124964878,
    "created": 1585053147047,
    "state_id": 9,
    "class_id": 35,
    "_stateConditionRefs": [],
    "operations": [],
    "properties": [
        {
            "name": "Bus_(computing).pdf",
            "value": "upload_a81d451eeebde3da52f7f83a6b83f78f",
            "type_id": 7,
            "id": "5e7a04dc6ec5ea28e5105f7e"
        }
    ],
    "manual_state": {
        "stateId": 4,
        "reason": "Остановить сбор данных для этой сущности",
        "unmanaged": true
    }
}