API

В API OneBridge используются POST-, GET-, PATCH- и DELETE-запросы. Тип запроса указан в таблице для каждого метода.

Каждый URL начинается с http://<host:port>, за этим следует название метода и параметры, при необходимости. Например, запрос для получения информации о запуске графа может быть записан так: http://127.0.0.1:3000/api/run-by-id?id=14. В таблицах с описанием методов будут указаны относительные пути URL-запросов.

Список API-методов системы OneBridge, доступных для вызова:

Auth

login

ПараметрЗначение
ОписаниеЛогин
МетодPOST
URL запроса
/api/auth/login
Параметры запросабез параметров
Тело запроса
username: string,  
password: string
Структура ответа
access_token: string,   
refresh_token: string, необязательно
Пример ответа
{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3QwMyIsInBhc3N3b3JkX2NoYW5nZV9yZXF1aXJlZCI6dHJ1ZSwicmVsb2dfcmVxdWlyZWQiOmZhbHNlLCJwcml2aWxlZ2VzIjpbXSwiZXhwIjoxNzA1NTA2MjM5fQ.Ec1gQ9fR6MN5uNDejJbHk4vnKyySrnv2ZOs3nuoYNvQ",
  "refresh_token": ""
}

logout

ПараметрЗначение
ОписаниеЛогаут
МетодPOST
URL запроса
/api/auth/logout
Параметры запросабез параметров
Структура ответаничего не возвращает

refresh

ПараметрЗначение
ОписаниеРефреш токена
МетодPOST
URL запроса
/api/auth/refresh
Параметры запросабез параметров
Структура ответа
access_token: string,    
refresh_token: string
Пример ответа
{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3Q0IiwicGFzc3dvcmRfY2hhbmdlX3JlcXVpcmVkIjpmYWxzZSwicmVsb2dfcmVxdWlyZWQiOmZhbHNlLCJwcml2aWxlZ2VzIjpbXSwiZXhwIjoxNzA1NTYzNzk5fQ.YdxxXEr-1Ur8BB5nI27OZh3Ueo7BwFwJkx2vg8t44wA",
  "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRlc3Q0IiwicGFzc3dvcmRfY2hhbmdlX3JlcXVpcmVkIjpmYWxzZSwicmVsb2dfcmVxdWlyZWQiOmZhbHNlLCJwcml2aWxlZ2VzIjpbXSwiZXhwIjoxNzA1NTYzNzk5fQ.MBJeIlWnI_BH3MT2TjfhfmoTFhTQGylhpMYu32G6tOw"
}

change password

ПараметрЗначение
ОписаниеСмена пароля
МетодPOST
URL запроса
/api/auth/change_password
Тело запроса
old_pass: string,
new_pass: string
Структура ответаничего не возвращает

Users

create user

ПараметрЗначение
ОписаниеСоздание пользователя
МетодPOST
URL запроса
/api/users
Параметры запросабез параметров
Тело запроса
username: string,     
first_name: string,     
last_name: string, необязательно    
email: string,  
Структура ответа
password: string 
Пример ответа
sNCYtII5bGcFRLJ9

toggle user status

ПараметрЗначение
ОписаниеИзменение статуса пользователя
МетодPOST
URL запроса
/api/users/username/toggle_status
Параметры запросабез параметров
Структура ответа
status: string, возможные значения: "Active", "Block"
Пример ответа
"Blocked"

reset user password

ПараметрЗначение
ОписаниеСброс пароля пользователя
МетодPOST
URL запроса
/api/users/username/reset_password
Параметры запросабез параметров
Структура ответа
password: string
Пример ответа
"B4YjaIGX8tTod6ZU"

update user

ПараметрЗначение
ОписаниеОбновление пользователя. Поменять можно first_name, last_name, email
МетодPATCH
URL запроса
/api/users/username
Параметры запросабез параметров
Тело запроса
first_name: string,    
last_name: string,    
email: string
Структура ответаничего не возвращает

view user

ПараметрЗначение
ОписаниеПросмотр пользователя
МетодGET
URL запроса
/api/users/username?type=full
Параметры запроса
type: string, возможные значения: "full", "basic"
Структура ответа
username: string, - логин пользователя,   
password: string, - пароль, всегда "null",  
first_name: string, - имя пользователя,     
last_name: string,  - фамилия пользователя, необязательно  
auth_method: string, - метод аутентификации в системе, возможные значения: "Internal", "Ldap",   
email: string, - адрес электронной почты пользователя,   
user_status: string, - статус пользователя, возможные значения: "Active", "Blocked",     
password_required: bool, - необходимость ввода пароля,   
last_login_status: string, - статус последнего входа, возможные значения: "NotSet", "Success", "Failure",   
login_attempts: integer, - количество попыток входа,   
last_login_date: date-time,  - дата последней попытки входа, необязательно
Пример ответа
auth_method: "Internal"
email: "sammi@ya.ru"
first_name: "sam"
last_login_date: "2024-01-15T09:37:37.246933528Z"
last_login_status: "Success"
last_name: "smit"
login_attempts: 0
password: null
password_required: false
user_status: "Active"
username: "samael"

list users

ПараметрЗначение
ОписаниеПросмотр списка пользователей
МетодGET
URL запроса
/api/users
Параметры запросаБез параметров
Структура ответа
username: string, - логин пользователя,   
password: string, - пароль, всегда "null",  
first_name: string, - имя пользователя,     
last_name: string,  - фамилия пользователя, необязательно  
auth_method: string, - метод аутентификации в системе, возможные значения: "Internal", "Ldap",   
email: string, - адрес электронной почты пользователя,   
user_status: string, - статус пользователя, возможные значения: "Active", "Blocked",     
password_required: bool, - необходимость ввода пароля,   
last_login_status: string, - статус последнего входа, возможные значения: "NotSet", "Success", "Failure",   
login_attempts: integer, - количество попыток входа,   
last_login_date: date-time,  - дата последней попытки входа, необязательно
Пример ответа
[
    {
        "username": "admin",
        "password": null,
        "first_name": "admin",
        "last_name": "",
        "auth_method": "Internal",
        "email": "",
        "user_status": "Active",
        "password_required": false,
        "last_login_status": "Success",
        "login_attempts": 0,
        "last_login_date": "2024-01-15T07:31:37.106209272Z"
    },
    {
        "username": "test01",
        "password": null,
        "first_name": "test",
        "last_name": "",
        "auth_method": "Internal",
        "email": "test@test.ru",
        "user_status": "Active",
        "password_required": false,
        "last_login_status": "NotSet",
        "login_attempts": 0,
        "last_login_date": "1970-01-01T00:00:00Z"
    },
    {
        "username": "test02",
        "password": null,
        "first_name": "test",
        "last_name": "",
        "auth_method": "Internal",
        "email": "test@test.ru",
        "user_status": "Active",
        "password_required": false,
        "last_login_status": "NotSet",
        "login_attempts": 0,
        "last_login_date": "1970-01-01T00:00:00Z"
    }
]

Roles

view all roles

ПараметрЗначение
ОписаниеПросмотр списка ролей
МетодGET
URL запроса
/api/roles
Параметры запросабез параметров
Структура ответа
role_id: integer,   
name: string, необязательно   
description: string, необязательно
Пример ответа
[
  {
    "role_id": 1,
    "name": "admin",
    "description": "Роль администратора"
  },
  {
    "role_id": 2,
    "name": "test-role1",
    "description": "something"
  },
  {
    "role_id": 3,
    "name": "test-role2",
    "description": "описание тестовой роли"
  },
  {
    "role_id": 4,
    "name": "testrole3",
    "description": "описание новой тестовой роли"
  }
]

view role

ПараметрЗначение
ОписаниеПросмотр конкретной роли по её id
МетодGET
URL запроса
/api/roles/id
Параметры запросабез параметров
Структура ответа
role_id: integer,   
name: string, необязательно   
description: string, необязательно
Пример ответа
[
  {
    "role_id": 1,
    "name": "admin",
    "description": "Роль администратора"
  }
]

create role

ПараметрЗначение
ОписаниеСоздание роли
МетодPOST
URL запроса
/api/roles
Параметры запросабез параметров
Тело запроса
name: string, - новое имя роли, необязательно  
description: string, - новое описание роли, необязательно
Пример ответаничего не возвращает

update role

ПараметрЗначение
ОписаниеОбновление роли
МетодPATCH
URL запроса
/api/roles/id
Параметры запросабез параметров
Тело запроса
name: string,
description: string    
Пример ответаничего не возвращает

delete role

ПараметрЗначение
ОписаниеУдаление роли
МетодDELETE
URL запроса
/api/roles/id
Параметры запросабез параметров
Структура ответаничего не возвращает

view all privileges

ПараметрЗначение
ОписаниеПросмотр списка всех существующих привилегий
МетодGET
URL запроса
/api/privileges
Параметры запросабез параметров
Структура ответа
privilege_id: integer,
name_ru: string,
name_en: string,
api_method_name: string
Пример ответа
[
  {
    "privilege_id": 1,
    "name_ru": "Создание пользователя",
    "name_en": "Create User",
    "api_method_name": "POST /users"
  },
  {
    "privilege_id": 2,
    "name_ru": "Изменение статуса пользователя",
    "name_en": "Toggle User Status",
    "api_method_name": "POST /users/:username/toggle_status"
  },
  {
    "privilege_id": 7,
    "name_ru": "Просмотр ролей",
    "name_en": "View Roles",
    "api_method_name": "GET /roles"
  },
  {
    "privilege_id": 19,
    "name_ru": "Просмотр параметров задания",
    "name_en": "View Job Parameters",
    "api_method_name": "GET /job_params"
  },
   {
    "privilege_id": 21,
    "name_ru": "Просмотр статистики запуска",
    "name_en": "View Run Stats",
    "api_method_name": "GET /runs/:id/stats"
  },
   {
    "privilege_id": 51,
    "name_ru": "Создание расписания",
    "name_en": "Create Schedule",
    "api_method_name": "POST /schedules"
  }
]

view role assigned privileges

ПараметрЗначение
ОписаниеПросмотр привилегий роли
МетодGET
URL запроса
/api/roles/privileges
Параметры запросабез параметров
Структура ответа
role_name: string,
privilege_api_method: string
Пример ответа
[
  {
    "role_name": "admin",
    "privilege_api_method": "POST /users"
  },
  {
    "role_name": "admin",
    "privilege_api_method": "POST /users/:username/toggle_status"
  },
  {
    "role_name": "admin",
    "privilege_api_method": "POST /users/:username/reset_password"
  },
  {
    "role_name": "admin",
    "privilege_api_method": "PATCH /users/:username"
  },
  {
    "role_name": "admin",
    "privilege_api_method": "GET /info"
  },
  {
    "role_name": "role03",
    "privilege_api_method": "GET /schedules"
  },
  {
    "role_name": "role03",
    "privilege_api_method": "POST /schedules"
  },
  {
    "role_name": "role03",
    "privilege_api_method": "PATCH /users/:username"
  },
  {
    "role_name": "testrole2",
    "privilege_api_method": "GET /users/:username"
  },
  {
    "role_name": "testrole2",
    "privilege_api_method": "GET /users"
  }
]

view role privileges

ПараметрЗначение
ОписаниеПросмотр привилегий роли
МетодGET
URL запроса
/api/roles/id/privileges
Параметры запросабез параметров
Структура ответа
id: privileges
Пример ответа
0: "POST /users"
1: "POST /users/:username/toggle_status"
2: "POST /users/:username/reset_password"
3: "PATCH /users/:username"
4: "GET /users/:username"
5: "GET /users"
6: "GET /roles"
7: "POST /roles"
8: "PATCH /roles/id"
9: "DELETE /roles/id"
10: "GET /roles/id/privileges"
11: "PATCH /roles/id/privileges"
12: "GET /roles/id/parent_roles"
13: "PATCH /roles/id/parent_roles"
14: "GET /users/id/roles"
15: "PATCH /users/id/roles"
16: "GET /users/id/privileges"
17: "PATCH /users/id/privileges"
18: "GET /job_params"
19: "GET /runs/id"
20: "GET /runs/id/stats"
21: "GET /runs/id/job_content"
22: "GET /runs/id/log"
23: "GET /runs/num"
24: "GET /runs/position"
25: "GET /runs"
26: "POST /runs"
27: "GET /event_listeners"
28: "POST /event_listeners"
29: "POST /event_listeners/toggle"
30: "PATCH /event_listeners/:name"
31: "POST /event_listeners/rename/:name"
32: "GET /file"
33: "POST /file"
34: "PATCH /file"
35: "POST /file/rename"
36: "DELETE /file"
37: "GET /directory"
38: "POST /directory"
39: "DELETE /directory"
40: "POST /directory/rename"
41: "GET /project"
42: "POST /project"
43: "DELETE /project"
44: "POST /project/rename"
45: "GET /tree"
46: "GET /utilization"
47: "GET /performance"
48: "GET /info"
49: "GET /schedules"
50: "POST /schedules"
51: "PATCH /schedules/:name"
52: "POST /schedules/toggle"
53: "DELETE /schedules/:name"
54: "POST /schedules/rename/:name"

update role privileges

ПараметрЗначение
ОписаниеОбновление привилегий роли
МетодPATCH
URL запроса
/api/roles/id/privileges
Параметры запросабез параметров
Тело запроса
{
  "privileges": [4,5,6]
}
Структура ответаничего не возвращает

view all assigned subroles

ПараметрЗначение
ОписаниеПросмотр всех присвоенных ролям субролей
МетодGET
URL запроса
/api/roles/subroles
Параметры запросабез параметров
Структура ответа
role_name: string,
subrole_name: string
Пример ответа
[
  {
    "role_name": "testrole1",
    "subrole_name": "admin"
  },
  {
    "role_name": "testrole1",
    "subrole_name": "testrole1"
  }
]

view role subroles

ПараметрЗначение
ОписаниеПросмотр субролей роли
МетодGET
URL запроса
/api/roles/id/subroles
Параметры запросабез параметров
Структура ответа
subrole_name: string
Пример ответа
[
  "admin",
  "testrole1"
]

update role subroles

ПараметрЗначение
ОписаниеИзменение субролей роли
МетодPATCH
URL запроса
/api/roles/id/subroles
Тело запроса
sub_roles: [список id субролей для роли, указываемой в URL-запросе]
Структура ответаничего не возвращает

view all assigned roles

ПараметрЗначение
ОписаниеПросмотр списка ролей, присвоенных каждому пользователю
МетодGET
URL запроса
/api/users/roles
Параметры запросабез параметров
Структура ответа
username: string,
role_name: string
Пример ответа
[
  {
    "username": "admin",
    "role_name": "admin"
  }
]

view user roles

ПараметрЗначение
ОписаниеПросмотр ролей конкретного пользователя
МетодGET
URL запроса
/api/users/username/roles
Параметры запросабез параметров
Структура ответа
role_name: string
Пример ответа
[
  "admin"
]

update user roles

ПараметрЗначение
ОписаниеОбновление ролей пользователя
МетодPATCH
URL запроса
/api/roles/id/roles
Тело запроса
"roles": [список id присваеваемых ролей]
Структура ответаничего не возвращает

view all privileges

ПараметрЗначение
ОписаниеПросмотр всех присвоеннных пользователям привилегий
МетодGET
URL запроса
/api/users/privileges
Параметры запросабез параметров
Структура ответа

view user assigned privileges

ПараметрЗначение
ОписаниеПросмотр привилегий пользователя
МетодGET
URL запроса
/api/users/username/privileges
Параметры запросабез параметров
Структура ответа

update user privileges

ПараметрЗначение
ОписаниеОбновление привилегий пользователя
МетодPATCH
URL запроса
/api/users/username/privileges
Тело запроса
"privileges": [список id присваемых пользователю привилегий]
Структура ответаничего не возвращает

Resources

get info

ПараметрЗначение
ОписаниеПросмотр основной информации о сервере
МетодGET
URL запроса
/api/info
Параметры запросабез параметров
Структура ответа
name: string,  
uptime: integer,  
local_time: date-time,  
utc_time: date-time.
Пример ответа

"name":"root@mironov1.fvds.ru",
"uptime":16279,
"local_time":"2023-06-13T14:17:42.919911616+00:00",
"utc_time":"2023-06-13T14:17:42.919951526Z"

get performance

ПараметрЗначение
ОписаниеВозвращает данные о работе сервера для отображения графиков работы памяти и процессора
МетодGET
URL запроса
/api/performance
Параметры запросабез параметров
Структура ответа возвращает JSON файл со структурой, которая содержит объекты, описывающие состояние памяти и процессора:

ram: объект с информацией о памяти

datetime: date-time,  
total: string, 
used: string

cpu: объект с информацией о процессоре

datetime: date-time,
usage: string
Пример ответа

"ram": {
    "system_ram": 
    [
        {
        "datetime": "2023-06-13T06:37:36Z",
        "total": "16777785344",
        "used": "1356226560"
        },
    ...],
    "worker_ram": []  },
"cpu": {
    "system_cpu": 
    [
        {
        "datetime": "2023-06-13T06:37:36Z",
        "usage": "0.21265951"
        },
    ...],
    "worker_cpu": []  }

get utilization

ПараметрЗначение
ОписаниеВозвращает данные о количеству используемой памяти сервера
МетодGET
URL запроса
/api/utilization
Параметры запросабез параметров
Структура ответа
name: string,
total: integer,
used: integer
Пример ответа

"name":"System RAM",
"total":16777785344,
"used":1351917568

Execution

get runs

ПараметрЗначение
ОписаниеВозвращает информацию об отработавшем задании
МетодGET
URL запроса
/api/runs?offset=0&limit=3
Параметры запроса
from: date-time, начало интервала работы графа, необязательно  
to: date-time, конец интервала работы графа, необязательно  
job_file: string, имя файла, необязательно  
status: string, статус выполнения, необязательно  
offset: integer, начальный индекс в актуальном списке запущенных заданий, необязательно   
limit: integer, количество записей, которые нужно прислать, необязательно   
order: string, порядок сортировки ответов, возможные значения: "Asc", "Desc", по умолчанию order = "Desc"
Структура ответа
id: string,  
parent_id: string, (необязательно)  
started: date-time,  
finished: date-time, (необязательно)  
job_file: string,  
status: string, возможные значения: "Succeeded", "Failed", "InProgress"
params: {
    JOB_FILE: string,
    SANDBOX_ROOT: string
}
Пример ответа
[
  {
    "id": "582",
    "parent_id": null,
    "started": "2024-01-19T08:10:06.071318370Z",
    "finished": "2024-01-19T08:10:06.078330903Z",
    "job_file": "/test-cases/graphs/flatFileReader05.grf",
    "status": "Failed",
    "params": {
      "JOB_FILE": "graphs/flatFileReader05.grf",
      "SANDBOX_ROOT": "../projects/test-cases"
    }
  },
  {
    "id": "581",
    "parent_id": null,
    "started": "2024-01-19T08:10:03.027899738Z",
    "finished": "2024-01-19T08:10:03.033412280Z",
    "job_file": "/test-cases/graphs/flatFileReader04.grf",
    "status": "Succeeded",
    "params": {
      "JOB_FILE": "graphs/flatFileReader04.grf",
      "SANDBOX_ROOT": "../projects/test-cases"
    }
  },
  {
    "id": "580",
    "parent_id": null,
    "started": "2024-01-19T08:09:59.364359664Z",
    "finished": "2024-01-19T08:09:59.369674486Z",
    "job_file": "/test-cases/graphs/flatFileReader03.grf",
    "status": "Failed",
    "params": {
      "JOB_FILE": "graphs/flatFileReader03.grf",
      "SANDBOX_ROOT": "../projects/test-cases"
    }
  }
]

post runs

ПараметрЗначение
Описаниезапускает задание в работу и возвращает номер запущенного задания
МетодPOST
URL запроса
/api/runs
Параметры запросабез параметров
Тело запроса
job_file: string, имя задания   
params: {        
    name: string, имя параметра  
    value: string, значение параметра  
}
Структура ответа
id: string
Пример ответа
"id":"162"

get run position

ПараметрЗначение
ОписаниеПросмотр данных о запуске задания
МетодGET
URL запроса
/api/runs/position?id=14
Параметры запроса
id: string
Структура ответа
position: integer
Пример ответа
{
  "position": 577
}

get run by id

ПараметрЗначение
ОписаниеВозвращает информацию об отработавшем задании
МетодGET
URL запроса
/api/runs/id
Параметры запросабез параметров
Структура ответа
id: string,  
parent_id: string, (необязательно)  
started: date-time,  
finished: date-time, (необязательно)  
job_file: string,  
status: string, возможные значения: "Succeeded", "Failed", "InProgress"
params: {
    JOB_FILE: string,
    SANDBOX_ROOT: string
}
Пример ответа
{
  "id": "576",
  "parent_id": null,
  "started": "2024-01-19T08:09:29.696150450Z",
  "finished": "2024-01-19T08:09:29.700902340Z",
  "job_file": "/test-cases/graphs/flatFileReader01_1.grf",
  "status": "Succeeded",
  "params": {
    "JOB_FILE": "graphs/flatFileReader01_1.grf",
    "SANDBOX_ROOT": "../projects/test-cases"
  }
}

get runs log

ПараметрЗначение
ОписаниеВозвращает журнал выполнения запуска задания
МетодGET
URL запроса
/api/runs/id/log?last_bytes=1024
Параметры запроса
last_bytes: integer, ограничение длины логов, необязательно
Структура ответаlog: string
Пример ответа
2024-01-17T18:51:13.214084Z  INFO edge started id="DataGenerator0:e-2"
2024-01-17T18:51:13.214109Z  INFO edge started id="DataGenerator1:e-1"
2024-01-17T18:51:13.214113Z  INFO edge started id="HashJoin0:e-2"
2024-01-17T18:51:13.214116Z  INFO edge started id="HashJoin0:e-3"
2024-01-17T18:51:13.274860Z  INFO node succeeded id="FlatFileWriter2" duration=0 received=2500 sent=0
2024-01-17T18:51:13.274890Z  INFO node succeeded id="FlatFileWriter3" duration=0 received=0 sent=0
2024-01-17T18:51:13.274898Z  INFO node succeeded id="HashJoin0" duration=0 received=5500 sent=2500
2024-01-17T18:51:13.274902Z  INFO node succeeded id="DataGenerator1" duration=0 received=0 sent=3000
2024-01-17T18:51:13.274906Z  INFO node succeeded id="DataGenerator0" duration=0 received=0 sent=2500
2024-01-17T18:51:13.274917Z  INFO phase finished number=0 duration=0

get runs num

ПараметрЗначение
ОписаниеВозвращает количество запусков заданий. Можно добавить фильтр по статусу, дате и имени файла
МетодGET
URL запроса
/api/runs/num?from=2023-12-31T21:00:00%2B00:00&to=2024-01-19T21:00:00%2B00:00&job_file=test-cases%2Fgraphs%2FflatFileReader05.grf&status=Failed
Параметры запроса
from: date-time, необязательный
to: date-time, необязательный
job_file: string, необязательный
status: string, необязательный, возможные значения: "Succeeded", "Failed", "InProgress"
Структура ответа
runs_num: integer, количество запусков заданий, подходящих под критерии установленных фильтров
Пример ответа
{
  "runs_num": 409
}

get run job content

ПараметрЗначение
ОписаниеВозвращает контент указанного задания, акутального на момент запуска
МетодGET
URL запроса
/api/runs/id/job_content
Параметры запроса
id: string
Структура ответа
content: string, контент файла
Пример ответа

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Graph>\n    <Global>\n        <Metadata id=\"meta\">\n            <Record>\n                <Field name=\"foo\" type=\"integer\" />\n                <Field name=\"bar\" type=\"number\" />\n            </Record>\n        </Metadata>\n    </Global>\n    <Phase number=\"0\">\n        <Node id=\"datagen\" guiX=\"50\" guiY=\"200\" guiName=\"datagen\" recordsNumber=\"100\" type=\"DATA_GENERATOR\">\n            <attr name=\"generate\">\n                <![CDATA[\n                const MAX_FOO = 10;\n                const MAX_BAR = 1;\n                \n                function generate() {\n                    $out[0].foo = Math.floor(Math.random() * MAX_FOO);\n                    $out[0].bar = Math.random() * MAX_FOO;\n\n                    $out[1].foo = Math.floor(Math.random() * MAX_FOO);\n                    $out[1].bar = Math.random() * MAX_FOO;\n\n                    return ALL;\n                }\n                ]]>\n            </attr>\n        </Node>\n        <Node id=\"trash1\" guiX=\"200\" guiY=\"100\" guiName=\"trash\"  type=\"TRASH\"/>\n        <Node id=\"copy\"   guiX=\"200\" guiY=\"300\" guiName=\"copy\"   type=\"SIMPLE_COPY\"/>\n        <Node id=\"trash2\" guiX=\"400\" guiY=\"400\" guiName=\"trash2\"  type=\"TRASH\"/>\n        <Node id=\"filter\" guiX=\"400\" guiY=\"300\" guiName=\"filter\" type=\"FILTER\">\n            <attr name=\"filterExpression\">\n                <![CDATA[ $in[0].foo < 3; ]]>\n            </attr>\n        </Node>\n        <Node id=\"sort\" guiX=\"550\" guiY=\"300\" guiName=\"sort\"  type=\"FAST_SORT\" sortKey=\"foo(a);bar(d)\" sortInMemory=\"false\" />\n        <Node id=\"trash3\"    guiX=\"700\" guiY=\"300\" guiName=\"trash\" type=\"TRASH\"/>\n\n        <Edge id=\"edge1\" fromNode=\"datagen:0\" toNode=\"trash1:0\" metadata=\"meta\" /> \n        <Edge id=\"edge2\" fromNode=\"datagen:1\" toNode=\"copy:0\"   metadata=\"meta\" />\n        <Edge id=\"edge3\" fromNode=\"copy:0\"    toNode=\"filter:0\" metadata=\"meta\" /> \n        <Edge id=\"edge4\" fromNode=\"copy:1\"    toNode=\"trash2:0\" metadata=\"meta\" />\n        <Edge id=\"edge5\" fromNode=\"filter:0\"  toNode=\"sort:0\"   metadata=\"meta\" />\n        <Edge id=\"edge6\" fromNode=\"sort:0\"    toNode=\"trash3:0\" metadata=\"meta\" />\n    </Phase>\n</Graph>"

get run stats

ПараметрЗначение
ОписаниеВозвращает статистику об указанном запуске
МетодGET
URL запроса
/api/runs/id/stats
Параметры запросабез параметров
Структура ответа
id: integer {
    duration: integer,
    nodes: {
        node_name: string : {
            status: string,
            error: string,
            in_ports: [
                {
                    records: integer,
                    rps: integer,
                    max_rps: integer
                }
            ],
            out_ports: [
                {
                    records: integer,
                    rps: integer,
                    max_rps: integer
                }   
            ]
        }
    }
}
Пример ответа
{
  "10": {
    "duration": 0,
    "nodes": {
      "reader1": {
        "status": "Succeeded",
        "error": null,
        "in_ports": [],
        "out_ports": [
          {
            "records": 1,
            "rps": 0.0,
            "max_rps": 851.6240897203012
          }
        ]
      },
      "writer1": {
        "status": "Succeeded",
        "error": null,
        "in_ports": [
          {
            "records": 1,
            "rps": 0.0,
            "max_rps": 851.6240897203012
          }
        ],
        "out_ports": []
      }
    }
  },
  "20": {
    "duration": 0,
    "nodes": {
      "reader2": {
        "status": "Succeeded",
        "error": null,
        "in_ports": [],
        "out_ports": [
          {
            "records": 1,
            "rps": 0.0,
            "max_rps": 851.6240897203012
          }
        ]
      },
      "writer2": {
        "status": "Succeeded",
        "error": null,
        "in_ports": [
          {
            "records": 1,
            "rps": 0.0,
            "max_rps": 851.6240897203012
          }
        ],
        "out_ports": []
      }
    }
  },
  "30": {
    "duration": 0,
    "nodes": {
      "reader3": {
        "status": "Failed",
        "error": "the number of fields found (1) does not match the number of fields in metadata (2)",
        "in_ports": [],
        "out_ports": []
      },
      "writer3": {
        "status": "Aborted",
        "error": null,
        "in_ports": [],
        "out_ports": []
      }
    }
  }
}

Projects

get tree

ПараметрЗначение
ОписаниеВозвращает дерево проектов
МетодGET
URL запроса
/api/tree
Параметры запросабез параметров
Структура ответа
name: string,
path: string,
type: string,
children: [string]
Пример ответа
[
    {
        "name": "folder1",
        "path": "/folder1",
        "type": "project",
        "children": [
            {
                "name": "data-in",
                "path": "/folder1/data-in",
                "type": "directory",
                "children": [
                    {
                        "name": "dev.order.csv",
                        "path": "/folder1/data-in/testData/dev.order.csv",
                        "type": "file",
                        "children": []
                    }
                ],

                "name": "data-out",
                "path": "/folder1/data-out",
                "type": "directory",
                "children": [
                    {
                        "name": "testData",
                        "path": "/folder1/data-out/testData",
                        "type": "directory",
                        "children": []
                    }
                ],
                
                "name": "graph",
                "path": "/folder1/graph",
                "type": "directory",
                "children": [
                    {
                        "name": "graph.grf",
                        "path": "/folder1/graph/graph.grf",
                        "type": "file",
                        "children": []
                    }
                ]
            }
        ]
    }
]

get directory

ПараметрЗначение
ОписаниеВозвращает информацию об указанной папке
МетодGET
URL запроса
/api/directory?path="PATH"
Параметры запроса
path: string
Структура ответа
name: string,
path: string
Пример ответа
"name":"data-in",
"path":"/JobsForTests/data-in"

get project

ПараметрЗначение
ОписаниеВозвращает информацию об указанном проекте
МетодGET
URL запроса
/api/project?path="PATH"
Параметры запроса
path: string
Структура ответа
name: string,
path: string
Пример ответа
{
  "name": "test-cases",
  "path": "/test-cases"
}

get file

ПараметрЗначение
ОписаниеВозвращает информацию об выбранному файлу
МетодGET
URL запроса
/api/file?path="PATH"
Параметры запроса
path: string, путь к файлу
content: bool (необязательно, по умолчанию равен false, +"content=true" вернёт содержимое выбранного файла)
Структура ответа
name: string,
path: string,
size: integer,
modified: date-time
Пример ответа
"name":"concat.grf",
"path":"/JobsForTests/graph/others/concat.grf",
"size":1278,
"modified":"2023-04-17T12:47:39.073986214Z"

post project

ПараметрЗначение
ОписаниеСоздать проект
МетодPOST
URL запроса
/api/project?path="PATH"
Параметры запроса
path: string, путь к создаваемому проекту
template: bool, флаг создания проекта по шаблону, необязательно
Структура ответа
name: string,
path: string
Пример ответа
"name":"test2",
"path":"/test2"

post project rename

ПараметрЗначение
ОписаниеПереименовать проект
МетодPOST
URL запроса
/api/project/rename?path="PATH"&to="PROJECT"
Параметры запроса
path: string, путь к проекту, который переименовываем
to: string, новое имя проекта
Структура ответа
name: string,
path: string
Пример ответа
"name":"test44",
"path":"/test44"

post directory

ПараметрЗначение
ОписаниеСоздать директорию
МетодPOST
URL запроса
/api/directory?path="PATH"
Параметры запроса
path: string, путь к директории, которую создаём
Структура ответа
name: string,
path: string
Пример ответа
"name":"infolder",
"path":"/test-project/folder1"

post directory rename

ПараметрЗначение
ОписаниеИзменить название директории
МетодPOST
URL запроса
/api/directory/rename?path="PATH"&to="DIRECTORY"
Параметры запроса
path: string, путь к директории, которую переименовываем
to: string новое имя директории
Структура ответа
name: string,
path: string
Пример ответа
"name":" folder10",
"path":"/test22/folder10"

post file

ПараметрЗначение
ОписаниеСоздать файл
МетодPOST
URL запроса
/api/file?path="PATH"
Параметры запроса
path: string, путь к новому файлу
Структура ответа
name: string,
path: string,
size: integer,
modified: date-time
Пример ответа
"name": "kudo.grf",
"path": "/test44/tururu/lalala/kuku/oshshshs/kudo.grf",
"size": 0,
"modified": "2023-06-15T08:10:21.261541736Z"

post file rename

ПараметрЗначение
ОписаниеПереименовать файл
МетодPOST
URL запроса
/api/file/rename?path="PATH"&to="FILE"
Параметры запроса
path: string, директория файла, который переименовывается
to: string, новое имя файла
Структура ответа
name: string,
path: string,
size: integer,
modified: date-time
Пример ответа
"name": "fileNEW",
"path": "/test44/tururu/lalala/kuku/bip/fileNEW",
"size": 0,
"modified": "2023-06-14T14:04:37.625674537Z"

patch file

ПараметрЗначение
ОписаниеЗаменить контент файла
МетодPATCH
URL запроса
/api/file?path="PATH"
Параметры запроса
path: string, путь к изменяемому файлу  
sent_file: string, текст изменённого файла
Структура ответа
name: string,
path: string,
size: integer,
modified: date-time
Пример ответа
{
    "name": "dg02_out.txt",
    "path": "/test-cases/data-out/dg02_out.txt",
    "size": 13,
    "modified": "2024-01-18T08:37:47.819450853Z"
}

delete directory

ПараметрЗначение
ОписаниеУдалить директорию
МетодDELETE
URL запроса
/api/directory?path="PATH"
Параметры запроса
path: string, путь к удаляемой папке
Структура ответаничего не возвращает

delete file

ПараметрЗначение
ОписаниеУдалить файл
МетодDELETE
URL запроса
/api/file?path="PATH"
Параметры запроса
path: string, путь к удаляемому файлу
Структура ответаничего не возвращает

delete project

ПараметрЗначение
ОписаниеУдалить проект
МетодDELETE
URL запроса
/api/project?path="PATH"
Параметры запроса
path: string, путь к удаляемому проекту
Структура ответаничего не возвращает

Schedules

get schedules

ПараметрЗначение
ОписаниеПросмотреть список расписаний
МетодGET
URL запроса
/api/schedules?name_contains=test
Параметры запроса
name_contains: string, необязательно
Структура ответа
name: string,  
enabled: bool,  
trigger:    "Once": date-time или   
            "Interval": integer или   
            "Cron": string,  
active_from: date-time, (необязательно)  
active_to: date-time, (необязательно)  
job_file: string,  
params: {
    name: string, 
    value: string 
} 
last_run: date-time, (необязательно)  
next_run: date-time, (необязательно)  
Пример ответа
[
  {
    "name": "test1",
    "enabled": true,
    "once": "2024-01-18T09:03:03Z",
    "active_from": null,
    "active_to": null,
    "job_file": "/JobsForTests/graph/others/copy_01.grf",
    "params": [],
    "last_run": null,
    "next_run": "2024-01-18T09:03:03Z"
  }
]

post schedules

ПараметрЗначение
ОписаниеСоздать расписание
МетодPOST
URL запроса
/api/schedules
Параметры запросабез параметров
Тело запроса
name: string,  
enabled: bool,  
trigger: {
    возможные значения:
    "Once": date-time или   
    "Interval": integer или   
    "Cron": string, 
}        
active_from: date-time, необязательно  
active_to: date-time, необязательно  
job_file: string,  
params: {  
    name: string,   
    value: string  
} 
Структура ответа
last_run: date-time, необязательно  
next_run: date-time, необязательно
Пример ответа
"last_run":null,
"next_run":"2023-06-15T11:07:21Z"

post schedules toggle

ПараметрЗначение
ОписаниеИзменить состояние расписания (вкл/выкл)
МетодPOST
URL запроса
/api/schedules/toggle?name=schedule_name
Параметры запроса
name: string
Структура ответа
enabled: bool,
next_run: date-time, необязательно
Пример ответа
"enabled":false,
"next_run":null

post schedules rename

ПараметрЗначение
ОписаниеИзменить название расписания
МетодPOST
URL запроса
/api/schedules/rename/old_name?to=new_name
Параметры запроса
to: string
Структура ответа
name: string,
enabled: bool,
trigger:    "Once": date-time или 
            "Interval": integer или 
            "Cron": string,
active_from: date-time,
active_to: date-time,
job_file: string,
params: {
    name: string,
    value: string,
    },
last_run: date-time,
Пример ответа
{
  "name": "new_name",
  "enabled": true,
  "once": "2024-01-24T21:10:05Z",
  "active_from": null,
  "active_to": null,
  "job_file": "/JobsForTests/graph/BH-T-281/BHT281_map2.grf",
  "params": [],
  "last_run": null
}

delete schedule

ПараметрЗначение
ОписаниеУдалить расписание
МетодDELETE
URL запроса
/api/schedules/schedule_name
Параметры запросабез параметров
Структура ответаничего не возвращает

patch schedules

ПараметрЗначение
ОписаниеИзменить атрибуты расписания
МетодPATCH
URL запроса
/api/schedules/schedule_name
Параметры запросабез параметров
Тело запроса
enabled: bool,  (не обязательно)
trigger:        (не обязательно)
         "Once": date-time или
         "Interval": integer или
         "Cron": string,
active_from: date-time, (не обязательно)
active_to: date-time,   (не обязательно)
job_file: string,       (не обязательно)
params: vec[],          (не обязательно)
Структура ответа
name: string,
enabled: bool,
trigger: "Once": date-time или
         "Interval": integer или 
         "Cron": string,
active_from: date-time, 
active_to: date-time, 
job_file: string,
params: {
    name: string,
    value: string,
},
last_run: date-time,
Пример ответа
"name": "test6",
"enabled": true,
"cron": "*/5 * * * * *",
"active_from": "2023-04-13T11:08:22.381473400Z",
"active_to": "2023-09-07T11:08:22.381473400Z",
"job_file": "/proj1/job1.grf",
"params": [
{
    "name": "parname",
    "value": "parvalue"
}
],
"last_run": "2023-09-07T10:43:50Z"

Event listeners

get event listeners

ПараметрЗначение
ОписаниеВозвращает список обработчиков событий
МетодGET
URL запроса
/api/event_listeners
Параметры запроса
name_contains: string, необязательно
Структура ответа
name: string,
enabled: bool,
event: {
    Job{
        Finished { 
            job_file: string 
        }
    },
или
    File {
        filesystem: string (Local), 
        path: string, 
        check: string (Added/Removed), 
        interval: integer, 
    }
},
action: {
    Command {
        program: string,
        args: string,
    },
или
    StartJob {
        job_file: string,
        params: {
            name: string,
            value: string
        },
    }
},
last_run: date-time
Пример ответа

"name":"stub abc",
"enabled":true,
"event":{
    "job":{
        "finished":{
            "job_file":"/proj1/alice_bob.xml"}}},
"action":{
    "command":{
        "program":"bash",
        "args":["-c","ls"]}},
"last_run":null

post event listeners

ПараметрЗначение
ОписаниеСоздает обработчик событий
МетодPOST
URL запроса
/api/event_listeners
Параметры запросабез параметров
Тело запроса
name: string,   имя слушателя событий  
enabled: bool,  переключатель  
event:          отслеживаемое событие  
{  
    Job{  
        Finished {   
            job_file: string   
        }  
    },  
    File {  
        filesystem: Local,   
        path: string,   
        check: string ("Added"/"Removed"),   
        interval: integer,   
    }  
},  
action:         действие, которое необходимо выполнить, когда event завершится  
{  
    Command {  
        program: string,  
        args: string  
    },  
    StartJob {  
        job_file: string,  
        params: {  
            name: string,  
            value: string  
        }  
    }  
}   
Структура ответаничего не возвращает

post event listeners toggle

ПараметрЗначение
ОписаниеИзменить состояние обработчика событий (вкл/выкл)
МетодPOST
URL запроса
/api/event_listeners/toggle?name=listener_name
Параметры запроса
name: string
Структура ответа
enabled: bool
Пример ответа
{
  "enabled": true
}

post event listeners rename

ПараметрЗначение
ОписаниеИзменить название обработчика событий
МетодPOST
URL запроса
/api/event_listeners/rename/old_name?to=new_name
Параметры запроса
to: string
Структура ответаничего не возвращает

delete event listeners

ПараметрЗначение
ОписаниеУдалить обработчик событий
МетодDELETE
URL запроса
/api/event_listeners/listener_name
Параметры запросабез параметров
Структура ответаничего не возвращает

patch event listeners

ПараметрЗначение
ОписаниеИзменить значения атрибутов обработчика событий
МетодPATCH
URL запроса
/api/event_listeners/listener_name
Тело запроса Все поля опциональные. Но при смене типа события event с "job" на "file" и наоборот, а так же при смене действия action с "Command" на "StartJob" и наоборот - нужно заполнить все сопутствующие атрибуты. Например, если обработчик был настроен на event "job", и нужно заменить его на event "file", то нужно будет задать значение и для атрибутов filesystem, check, path, interval.
name: string,
enabled: bool,  (не обязательно)
event:          (не обязательно)
        "job": Finished { 
            job_file: string 
        }
        "file": { 
            filesystem: "Local",
            path: string,
            check: "Added" или "Removed",
            interval: int,
        }
action:         (не обязательно)
        Command {
            program: string,
            args: string
        },
        StartJob {
            job_file: string,
            params: [
                name: String,
                value: String,
            ]
        } 
Структура ответа
name: string,   (имя остаётся прежним при использовании API patch event_listeners, меняется с помощью API post event_listeners_rename)
enabled: bool,  (новое состоние)
event:  Job     (новое задание или файл)
        {       
            Finished { 
                job_file: string 
            }
        }
        или
        File { 
            filesystem: Local,
            path: string,
            check: {
                Added,
                или
                Removed
            },
            interval: int,
        },
action: Command (новая команда или задание)
        {   
            program: string,
            args: string,
        }
        или
        StartJob {
            job_file: string,
            params: { 
                name: string,
                value: string,
            }
        }
Пример ответа
{
    "name": "listener_name",
    "enabled": false,
    "event": {
        "job": {
            "finished": {
                "job_file": "/JobsForTests/graph/others/concat.grf"
            }
        }
    },
    "action": {
        "start_job": {
            "job_file": "/JobsForTests/graph/others/filter.grf",
            "params": []
        }
    }
}