Ручная смена состояния объекта

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

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

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

Запрос

HTTP Запрос

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

Права

objectPermissions & (modify-objects | manage-objects)

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

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

id

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

ID или discovery 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=<...>
object_id=<...>
url=https://$saymon_hostname/node/api/objects/$object_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 objectId = <...>
let path = "/node/api/objects/" + objectId + "/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 objectId = <...>
let path = "/node/api/objects/" + objectId + "/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 = <...>
object_id = <...>
url = "https://" + saymon_hostname + "/node/api/objects/" + \
    object_id + "/manual-state";

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

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

Ответ

{
    "id": "5e21b85b308c3c66d64e07d2",
    "name": "CPU",
    "discovery_id": "example-CPU",
    "object_groups": [],
    "geoposition": [],
    "child_ref_ids": [],
    "child_link_ids": [],
    "child_ids": [],
    "parent_id": "5e21b85b308c3c66d64e07bc",
    "weight": 1,
    "tags": [],
    "last_state_update": 1585047151777,
    "updated": 1585047151770,
    "created": 1579268187099,
    "state_id": 7,
    "class_id": 4,
    "_stateConditionRefs": [],
    "operations": [],
    "properties": [],
    "client_data": "{...}",
    "manual_state": {
        "stateId": 3,
        "reason": "Testing",
        "by": "62c2f3ce80c8654892764d56"
    },
    "owner_id": "5e21b752308c3c66d64e072c"
}

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

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

Запрос

  • Bash

  • JavaScript

  • NodeJS

  • Python

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

curl -X PUT $url -u $login:$password \
    -H "Content-Type: application/json" \
    -d @- <<EOF
{
    "clear": true
}
EOF
let login = <...>
let password = <...>
let saymonHostname = <...>
let objectId = <...>
let path = "/node/api/objects/" + objectId + "/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 objectId = <...>
let path = "/node/api/objects/" + objectId + "/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
import json

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

body = {
    "clear": True
}

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

Ответ

{
    "id": "5e21b85b308c3c66d64e07d2",
    "name": "CPU",
    "discovery_id": "example-CPU",
    "object_groups": [],
    "geoposition": [],
    "child_ref_ids": [],
    "child_link_ids": [],
    "child_ids": [],
    "parent_id": "5e21b85b308c3c66d64e07bc",
    "weight": 1,
    "tags": [],
    "last_state_update": 1585047151777,
    "updated": 1585047151770,
    "created": 1579268187099,
    "state_id": 7,
    "class_id": 4,
    "_stateConditionRefs": [],
    "operations": [],
    "properties": [],
    "client_data": "{...}",
    "manual_state": null,
    "owner_id": "5e21b752308c3c66d64e072c"
}

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

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

Запрос

  • Bash

  • JavaScript

  • NodeJS

  • Python

login=<...>
password=<...>
saymon_hostname=<...>
object_id=<...>
url=https://$saymon_hostname/node/api/objects/$object_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 objectId = <...>
let path = "/node/api/objects/" + objectId + "/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 objectId = <...>
let path = "/node/api/objects/" + objectId + "/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
import json

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

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

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

Ответ

{
    "id": "5e21b85b308c3c66d64e07d2",
    "name": "CPU",
    "discovery_id": "example-CPU",
    "object_groups": [],
    "geoposition": [],
    "child_ref_ids": [],
    "child_link_ids": [],
    "child_ids": [],
    "parent_id": "5e21b85b308c3c66d64e07bc",
    "weight": 1,
    "tags": [],
    "last_state_update": 1585047151777,
    "updated": 1585047151770,
    "created": 1579268187099,
    "state_id": 7,
    "class_id": 4,
    "_stateConditionRefs": [],
    "operations": [],
    "properties": [],
    "client_data": "{...}",
    "manual_state": {
        "stateId": 4,
        "reason": "Остановить сбор данных для этого объекта",
        "unmanaged": true
    },
    "owner_id": "5e21b752308c3c66d64e072c"
}