Робота з Сервісами
Для роботи з сервісами всередині Fledge є кілька точок входу в API, пов'язаних з роботою з сервісами.
Статус Сервісу
Для того, щоб дізнатися, які сервіси зареєстровані в екземплярі Fledge і в якому стані вони перебувають, можна скористатися викликом API /fledge/service. Це GET-виклик, і він поверне набір сервісів разом з різною інформацією про сервіс. Зареєстрований сервіс - це сервіс, який або запущений в даний момент, або налаштований, але вимкнений.
$ curl http://localhost:8081/fledge/service | jq
{
"services": [
{
"name": "Fledge Storage",
"type": "Storage",
"address": "localhost",
"management_port": 39773,
"service_port": 46391,
"protocol": "http",
"status": "running"
},
{
"name": "Fledge Core",
"type": "Core",
"address": "0.0.0.0",
"management_port": 41547,
"service_port": 8081,
"protocol": "http",
"status": "running"
},
{
"name": "Notification",
"type": "Notification",
"address": "localhost",
"management_port": 40605,
"service_port": 40779,
"protocol": "http",
"status": "shutdown"
},
{
"name": "dispatcher",
"type": "Dispatcher",
"address": "localhost",
"management_port": 46353,
"service_port": 35605,
"protocol": "http",
"status": "shutdown"
},
{
"name": "lathe1004",
"type": "Southbound",
"address": "localhost",
"management_port": 45113,
"service_port": 34403,
"protocol": "http",
"status": "running"
},
{
"name": "OPCUA",
"type": "Northbound",
"address": "localhost",
"management_port": 42783,
"service_port": null,
"protocol": "http",
"status": "shutdown"
},
{
"name": "sine2",
"type": "Southbound",
"address": "localhost",
"management_port": 38679,
"service_port": 33433,
"protocol": "http",
"status": "running"
}
]
}
Дані, що повертаються для кожного сервісу, включають
| Ключ | Опис |
|---|---|
| name | Назва сервісу. |
| type | Тип сервісу. Це може бути один з типів: Північний, Південний, Основний, Сховище, Сповіщення або Диспетчер. Крім того, для розширення функціональності Fledge можна встановити інші типи сховищ. |
| address | Адреса, за якою можна зв'язатися зі сервісом. Зазвичай localhost або 0.0.0.0, якщо сервіс запущено на тій самій машині, що й основний сервіс екземпляра Fledge. |
| management_port | Порт керування, який сервіс використовує для зв'язку з ядром. |
| service_port | Порт, який використовується сервісом для виклику API сервісу. |
| protocol | Протокол, який сервіс використовує для свого API управління. |
| status | Статус сервісу. Він може бути запущений, вимкнений, не відповідає або не працює. |
Параметри
Ви можете обмежити сервіси, що повертаються цим викликом, певним типом, використовуючи параметр type= в URL-адресі.
$ curl -sX GET http://localhost:8081/fledge/service?type=Southbound | jq
{
"services": [
{
"name": "lathe1004",
"type": "Southbound",
"address": "localhost",
"management_port": 45113,
"service_port": 34403,
"protocol": "http",
"status": "running"
},
{
"name": "sine2",
"type": "Southbound",
"address": "localhost",
"management_port": 38679,
"service_port": 33433,
"protocol": "http",
"status": "running"
}
]
}
Південні та Північні Сервіси
Для двох обов'язкових типів сервісів, що найчастіше використовуються, південного та північного, існують спеціальні виклики API. Вони надають додаткову інформацію і в основному використовуються для визначення статусу всіх південних або північних сервісів у системі.
Примітка
У випадку з північною точкою входу API повертається інформація як для сервісів, так і для завдань
Південні Сервіси
Виклик /fledge/south перерахує всі сервіси півдня з інформацією вище, а також список
- активи, які поглинаються сервісом,
- підрахунок для кожного активу, скільки зчитувань було отримано, це стосується лише тих випадків, коли плагін отримує кілька активів
- назву та версію використовуваного південного плагіна
- та поточний увімкнений стан південного сервісу.
$ curl -s http://localhost:8081/fledge/south |jq
{
"services": [
{
"name": "lathe1004",
"address": "localhost",
"management_port": 45113,
"service_port": 34403,
"protocol": "http",
"status": "running",
"assets": [
{
"count": 520774,
"asset": "lathe1004"
},
{
"count": 520774,
"asset": "lathe1004Current"
},
{
"count": 520239,
"asset": "lathe1004IR"
},
{
"count": 260379,
"asset": "lathe1004Vibration"
}
],
"plugin": {
"name": "lathesim",
"version": "1.9.2"
},
"schedule_enabled": true
},
{
"name": "sine2",
"address": "localhost",
"management_port": 38679,
"service_port": 33433,
"protocol": "http",
"status": "running",
"assets": [
{
"count": 734,
"asset": "sine2"
},
{
"count": 373008,
"asset": "sine250"
}
],
"plugin": {
"name": "sinusoid",
"version": "1.9.2"
},
"schedule_enabled": true
},
{
"name": "test1",
"address": "",
"management_port": "",
"service_port": "",
"protocol": "",
"status": "",
"assets": [
{
"count": 76892,
"asset": "sinusoid"
},
{
"count": 125681,
"asset": "sinusoid2"
}
],
"plugin": {
"name": "sinusoid",
"version": "1.9.2"
},
"schedule_enabled": false
},
{
"name": "testacl",
"address": "",
"management_port": "",
"service_port": "",
"protocol": "",
"status": "",
"assets": [
{
"count": 76892,
"asset": "sinusoid"
}
],
"plugin": {
"name": "testing",
"version": "1.9.2"
},
"schedule_enabled": false
},
{
"name": "dsds",
"address": "",
"management_port": "",
"service_port": "",
"protocol": "",
"status": "",
"assets": [],
"plugin": {
"name": "Expression",
"version": "1.9.2"
},
"schedule_enabled": false
}
]
}
.
## Типи Сервіса
Fledge підтримує ряд різних типів сервісів, деякі з яких включені в
базову інсталяцію Fledge, а інші повинні бути встановлені окремо, якщо
це необхідно.
>Примітка
>Точки входу до API у цьому розділі вимагають, щоб інсталяція Fledge була
налаштована з доступом до сховища пакетів Fledge.
### Встановлення Типів Сервісу
Щоб дізнатися, які типи сервісів встановлено в системі, можна
скористатися викликом */fledge/service/installed*.
``` console
$ curl http://localhost:8081/fledge/service/installed
{"services": ["storage", "north", "dispatcher", "notification", "south"]}
Примітка
Всі екземпляри Fledge мають сервіси сховища, південні та північні, встановлені за замовчуванням під час інсталяції ядра Fledge.
Доступні типи сервісів
Щоб дізнатися, які сервіси доступні для встановлення з репозиторію, налаштованого для вашого екземпляра Fledge, скористайтеся API /fledge/service/available.
$ curl -q http://localhost:8081/fledge/service/available |jq
{
"services": [
"fledge-service-notification"
],
"link": "logs/220831-13-26-25-list.log"
}
link у повернутому JSON - це посилання на файл журналу, який показує взаємодію зі сховищем пакетів.
Установка Сервісу
Для встановлення нового типу сервісу можна використовувати метод POST у виклику API /fledge/service з параметром action=install.
$ curl -X POST http://localhost:8081/fledge/service?action=install -d'{"format":"repository", "name": "fledge-service-notification"}'
Це призведе до встановлення названого сервіса з репозиторію пакетів.
Примітка
Для того, щоб встановити пакет, репозиторій пакетів має бути налаштований і доступний.
Створення Сервісу
Новий сервіс можна створити за допомогою методу POST у виклику API /fledge/service. Корисне навантаження, передане цьому запиту, визначатиме щонайменше тип сервісу та ім'я нового сервісу, однак воно може також містити подальшу конфігурацію, яка залежить від типу сервісу.
Мінімальний вміст корисного навантаження, який повинен міститися у кожному виклику створення сервісу, - це назва нового сервісу, тип сервісу та увімкнений стан сервісу. Це може бути використано, наприклад, для створення сервісу сповіщення або диспетчерського сервісу, які не потребують подальшої конфігурації.
$ curl -X POST http://localhost:8081/fledge/service -d'{ "name" : "Notifier", "type" : "notification", "enabled" : "true" }'
Або для диспетчера управління
$ curl -X POST http://localhost:8081/fledge/service -d'{ "name" : "Control", "type" : "dispatcher", "enabled" : "true" }'
Північний чи південний сервіси потребують додаткової конфігурації корисного навантаження. Ці типи сервісів завжди повинні мати плагін і, за бажанням, можна передати конфігурацію для цього плагіна. Якщо конфігурацію плагіна не вказано, будуть використані значення конфігурації плагіна за замовчуванням.
Щоб створити південний сервіс, використовуючи значення за замовчуванням плагіна sinusoid.
$ curl -X POST http://localhost:8081/fledge/service -d'{ "name" : "Sine", "type" : "south", "enabled" : "true", "plugin" : "sinusoid" }'
У наступному прикладі ми створимо північний плагін, який надсилатиме дані до іншого екземпляра Fledge за допомогою плагіна HTTPC. Ми встановлюємо значення конфігураційного елемента URL у плагіні як URL-адресу екземпляра Fledge-концентратора.
$ curl -sX POST http://localhost:8081/fledge/service -d '{"name": "HTTP", "plugin": "httpc", "type": "north", "enabled": true, "config": {"URL": {"value": "http://concentrator.local:6683/buildingA"}}}'
Зупинка і запуск Сервісів
Сервіси у Fledge запускаються і зупиняються за допомогою планувальника, зазвичай сервіс запускається за розкладом, який визначає, який сервіс буде запущено під час запуску Fledge. Це гарантує, що сервіс буде запущено під час запуску Fledge і він буде працювати доти, доки Fledge не буде зупинен о. Щоб неявно зупинити сервіс, розклад має бути вимкнений.
Вимкнення розкладу, пов'язаного зі сервісом, також призведе до зупинки сервісу. Після цього сервіс не буде перезапущено, навіть якщо Fledge буде перезапущено, доки розклад не буде знову увімкнено.
Щоб вимкнути розклад, ви можете викликати API-виклик
/fledge/schedule/{schedule_id}/disable, однак для цього вам потрібно
знати ідентифікатор розкладу, пов'язаного з сервісом. Його можна знайти
для даного сервісу, оскільки назва розкладу співпадає з назвою сервісу,
але простіше використовувати виклик API /fledge/schedule/disable,
оскільки йому можна передати назву розкладу, а не ідентифікатор
розкладу. Оскільки назва розкладу і назва сервісу збігаються, ми
фактично передаємо назву сервісу, який хочемо вимкнути.
Для вимкнення виклику сервісу Sine ми скористаємося наступною командою curl.
$ curl -X PUT http://localhost:8081/fledge/schedule/disable -d '{"schedule_name": "Sine"}'
Щоб знову увімкнути сервіс, ми можемо скористатися викликом API /fledge/schedule/enable, який має ідентичне корисне навантаження, що й виклик API для вимкнення.
$ curl -X PUT http://localhost:8081/fledge/schedule/enable -d '{"schedule_name": "Sine"}'
Видалення Сервісу
Сервіси можуть бути видалені з системи за допомогою виклику API /fledge/service з методом DELETE. При видаленні сервісу його буде зупинено, а сам сервіс, конфігурація сервісу та пов'язаний з ним розклад буде видалено. Однак будь-які дані, які були прочитані сервісом, залишаться в базі даних зчитування.
Щоб видалити сервіс з назвою Sine
$ curl -X DELETE http://localhost:8081/fledge/service/Sine