Skip to content

Commit

Permalink
feat: support for rest nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
SaintShit committed Feb 8, 2024
1 parent 68b4778 commit c8359a1
Show file tree
Hide file tree
Showing 18 changed files with 2,794 additions and 2,586 deletions.
6 changes: 3 additions & 3 deletions app/dashboard/build/404.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@
<meta name="msapplication-TileColor" content="#2b5797" />
<meta name="msapplication-config" content="/favicon/browserconfig.xml" />
<meta name="theme-color" content="#3B81F6" />
<script type="module" crossorigin src="/dashboard/assets/index.e4d0de37.js"></script>
<link rel="modulepreload" crossorigin href="/dashboard/assets/vendor.c355c8ef.js">
<link rel="stylesheet" href="/dashboard/assets/index.07af90b2.css">
<script type="module" crossorigin src="/dashboard/assets/index.6107a319.js"></script>
<link rel="modulepreload" crossorigin href="/dashboard/assets/vendor.d3666332.js">
<link rel="stylesheet" href="/dashboard/assets/index.59de2328.css">
</head>
<body>
<div id="root"></div>
Expand Down

Large diffs are not rendered by default.

6 changes: 0 additions & 6 deletions app/dashboard/build/assets/index.07af90b2.css

This file was deleted.

6 changes: 6 additions & 0 deletions app/dashboard/build/assets/index.59de2328.css

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions app/dashboard/build/assets/index.6107a319.js

Large diffs are not rendered by default.

14 changes: 0 additions & 14 deletions app/dashboard/build/assets/index.e4d0de37.js

This file was deleted.

2,528 changes: 0 additions & 2,528 deletions app/dashboard/build/assets/vendor.c355c8ef.js

This file was deleted.

2,465 changes: 2,465 additions & 0 deletions app/dashboard/build/assets/vendor.d3666332.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions app/dashboard/build/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@
<meta name="msapplication-TileColor" content="#2b5797" />
<meta name="msapplication-config" content="/favicon/browserconfig.xml" />
<meta name="theme-color" content="#3B81F6" />
<script type="module" crossorigin src="/dashboard/assets/index.e4d0de37.js"></script>
<link rel="modulepreload" crossorigin href="/dashboard/assets/vendor.c355c8ef.js">
<link rel="stylesheet" href="/dashboard/assets/index.07af90b2.css">
<script type="module" crossorigin src="/dashboard/assets/index.6107a319.js"></script>
<link rel="modulepreload" crossorigin href="/dashboard/assets/vendor.d3666332.js">
<link rel="stylesheet" href="/dashboard/assets/index.59de2328.css">
</head>
<body>
<div id="root"></div>
Expand Down
6 changes: 4 additions & 2 deletions app/dashboard/build/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,20 +78,22 @@
"hostsDialog.expireDate": "Expiry date of the user",
"hostsDialog.jalaliExpireDate": "Expiry date of the user in solar calendar",
"hostsDialog.remainingTime": "Remaining time of the user",
"hostsDialog.statusEmoji": "User status as an emoji (✅,⌛️,🪫,❌)",
"hostsDialog.statusEmoji": "User status as an emoji (✅,⌛️,🪫,❌,🔌)",
"hostsDialog.proxyProtocol": "Proxy protocol (e.g. VMess)",
"hostsDialog.proxyMethod": "Proxy transport method (e.g. ws)",
"hostsDialog.currentServer": "Current server ip address",
"hostsDialog.security": "Security Layer",
"hostsDialog.host": "Request Host",
"hostsDialog.port": "Port",
"hostsDialog.path": "Path",
"hostsDialog.sni": "SNI",
"hostsDialog.advancedOptions": "Advanced options",
"hostsDialog.addHost": "Add host",
"hostsDialog.savedSuccess": "Hosts saved successfully",
"hostsDialog.loading": "loading...",
"hostsDialog.apply": "Apply",
"hostsDialog.port.info": "By default, a host uses the default port of the inbound. You can set a custom port in case this host is a server that forwards traffic from a port that differs from your server's port. For example, the server may forward traffic from port 8443 to the default port of your inbound server.",
"hostsDialog.path.info": "Set a path for host users, useful behind a reverse proxy.",
"hostsDialog.sni.info": "By default, a host uses the default SNI of the inbound. You can set a custom SNI in case this host is a server that has a different SNI. For example, the server may receive traffic with a different SSL certificate, perform SSL termination, and forward it to your inbound server.",
"hostsDialog.host.info": "By default, if a request host is set in the Xray config, this host is used. However, you can set a custom request host here if needed.",
"hostsDialog.security.info": "If the middleware server of this host uses a different security layer than the inbound's default, you can set a custom security layer here.",
Expand Down Expand Up @@ -157,4 +159,4 @@
"core.configuration": "Configuration",
"core.generalErrorMessage": "Something went wrong, please check the configuration",
"core.successMessage": "Core settings updated successfully"
}
}
2 changes: 1 addition & 1 deletion app/dashboard/build/locales/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
"hostsDialog.expireDate": "تاریخ انقضای کاربر به میلادی",
"hostsDialog.jalaliExpireDate": "تاریخ انقضای کاربر به شمسی",
"hostsDialog.remainingTime": "زمان باقی مانده کاربر",
"hostsDialog.statusEmoji": "وضعیت کاربر در قالب اموجی (✅,⌛️,🪫,❌)",
"hostsDialog.statusEmoji": "وضعیت کاربر در قالب اموجی (✅,⌛️,🪫,❌,🔌)",
"hostsDialog.proxyProtocol": "پروتکل پروکسی (مانند VMess)",
"hostsDialog.proxyMethod": "روش انتقال پروکسی (مانند ws)",
"hostsDialog.currentServer": "IP کنونی سرور",
Expand Down
36 changes: 18 additions & 18 deletions app/dashboard/build/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"usersTable.status": "Статус",
"usersTable.dataUsage": "Расход трафика",
"usersTable.noUserMatched": "Похоже, нет пользователя, соответствующего вашему запросу",
"usersTable.noUser": "В системе нет добавленных пользователей",
"usersTable.noUser": "В системе нет созданных пользователей",
"usersTable.copyLink": "Скопировать ссылку на подписку",
"usersTable.copied": "Скопировано",
"usersTable.copyConfigs": "Скопировать конфигурации",
Expand All @@ -40,7 +40,7 @@
"userDialog.protocols": "Протоколы",
"userDialog.editUserTitle": "Редактировать пользователя",
"userDialog.editUser": "Редактировать",
"userDialog.userEdited": "Пользователь {{username}} отредактирован.",
"userDialog.userEdited": "Пользователь {{username}} изменен.",
"userDialog.userCreated": "Пользователь {{username}} создан.",
"userDialog.userAlreadyExists": "Пользователь уже существует",
"userDialog.vmessDesc": "Быстрый и безопасный",
Expand Down Expand Up @@ -68,21 +68,21 @@
"userDialog.revokeSubscription": "Отозвать подписку",
"revoke": "Отозвать",
"userDialog.total": "Всего: ",
"hostsDialog.title": "Используя эту настройку, вы можете настроить свои inbound.",
"hostsDialog.title": "Используя эту настройку, Вы можете настроить свои inbound.",
"hostsDialog.desc": "Используйте эти переменные, чтобы сделать его динамическим",
"hostsDialog.username": "Имя пользователя",
"hostsDialog.dataUsage": "Текущий расход трафика пользователя",
"hostsDialog.dataUsage": "Использованный трафик пользователя",
"hostsDialog.remainingData": "Оставшийся трафик пользователя",
"hostsDialog.dataLimit": "Лимит трафика пользователя",
"hostsDialog.remainingDays": "Оставшиеся дни пользователя",
"hostsDialog.expireDate": "Срок действия пользователя",
"hostsDialog.jalaliExpireDate": "Срок действия пользователя в солнечном календаре",
"hostsDialog.expireDate": "Дата истечения срока пользователя",
"hostsDialog.jalaliExpireDate": "Дата истечения срока по солнечному календарю",
"hostsDialog.remainingTime": "Оставшееся время пользователя",
"hostsDialog.statusEmoji": "Статус пользователя в виде смайлика (✅,⌛️,🪫,❌)",
"hostsDialog.statusEmoji": "Статус пользователя в виде смайлика (✅,⌛️,🪫,❌,🔌)",
"hostsDialog.proxyProtocol": "Протокол прокси (например, VMess)",
"hostsDialog.proxyMethod": "Метод транспорта прокси (например, ws)",
"hostsDialog.currentServer": "Текущий IP-адрес сервера",
"hostsDialog.security": "Уровень безопасности",
"hostsDialog.security": "Security Layer",
"hostsDialog.host": "Host",
"hostsDialog.port": "Port",
"hostsDialog.sni": "SNI",
Expand All @@ -91,21 +91,21 @@
"hostsDialog.savedSuccess": "Хосты успешно сохранены",
"hostsDialog.loading": "загрузка...",
"hostsDialog.apply": "Применить",
"hostsDialog.port.info": "По умолчанию хост использует порт входящего соединения. Вы можете установить пользовательский порт, если этот хост является сервером, который перенаправляет трафик с порта, отличного от порта вашего сервера. Например, сервер может перенаправлять трафик с порта 8443 на порт входящего сервера по умолчанию.",
"hostsDialog.sni.info": "По умолчанию хост использует SNI входящего соединения. Вы можете установить пользовательский SNI, если этот хост является сервером, у которого есть другой SNI. Например, сервер может принимать трафик с другим SSL-сертификатом, выполнять окончание SSL и перенаправлять его на ваш входящий сервер.",
"hostsDialog.host.info": "По умолчанию, если в конфигурации Xray задан запрашиваемый хост, будет использоваться этот хост. Однако, если необходимо, вы можете установить здесь пользовательский запрашиваемый хост.",
"hostsDialog.security.info": "Если промежуточный сервер этого хоста использует другой уровень безопасности, отличный от уровня безопасности входящего соединения по умолчанию, вы можете установить здесь пользовательский уровень безопасности.",
"hostsDialog.port.info": "По умолчанию хост использует порт, значение которого обьявленно в inbound. Вы можете установить свое значение порта, если с него трафик перенаправляется на другой порт. Например, сервер может перенаправлять трафик с порта 443 на порт по умолчанию Вашего inbound",
"hostsDialog.sni.info": "По умолчанию хост использует SNI, значение которого обьявленно в inbound. Вы можете установить свое значение SNI, если этот хост содержит другие SNI. Например, сервер может принимать трафик с другим SSL-сертификатом, выполнять SSL-терминацию и перенаправлять его на ваш inbound.",
"hostsDialog.host.info": "По умолчанию, если в конфигурации XRAY задан запрашиваемый хост, то он и будет использоваться. Однако, если необходимо, вы можете установить здесь пользовательский запрашиваемый хост.",
"hostsDialog.security.info": "Если промежуточный сервер этого хоста использует другой security layer, отличный от security layer Вашего inbound по умолчанию, Вы можете установить его здесь",
"hostsDialog.alpn": "ALPN",
"hostsDialog.fingerprint": "Fingerprint",
"hostsDialog.host.multiHost": "Чтобы установить несколько адресов, разделяйте их с помощью <badge>,</badge>. Каждый раз выбирается случайный адрес.",
"hostsDialog.host.wildcard": "Используйте <badge>*</badge>, чтобы сгенерировать случайную строку (работает для доменных имен с подстановочными знаками)",
"nodes.title": "Используя Marzban-Node, вы можете повысить качество соединения, добавляя узлы на разных серверах.",
"hostsDialog.host.multiHost": "Чтобы установить несколько адресов, разделяйте их с помощью <badge>,</badge>. Каждый раз будет выбран случайный адрес.",
"hostsDialog.host.wildcard": "Используйте <badge>*</badge>, чтобы сгенерировать случайную строку (работает для wildcard доменов)",
"nodes.title": "Используя Marzban-Node, Вы можете масштабировать инфраструктуру, добавляя узлы на разных серверах.",
"nodes.addNewMarzbanNode": "Добавить новый узел Marzban",
"nodes.certificate": "Сертификат",
"nodes.addHostForEveryInbound": "Добавить этот узел как новый хост для каждого inbound",
"nodes.addNode": "Добавить узел",
"nodes.addNodeSuccess": "Узел {{name}} успешно добавлен",
"nodes.apply": "editNode",
"nodes.apply": "Настройки узла успешно обновлены",
"nodes.nodeName": "Имя",
"nodes.nodeAddress": "Адрес",
"nodes.nodePort": "Порт",
Expand Down Expand Up @@ -133,15 +133,15 @@
"qrcodeDialog.sublink": "Ссылка на подписку",
"resetUserUsage.prompt": "Вы уверены, что хотите сбросить расход трафика для пользователя <b>{{username}}</b>?",
"resetUserUsage.title": "Сбросить расход трафика пользователя",
"resetUserUsage.success": "расход трафика пользователя {{username}} успешно сброшен.",
"resetUserUsage.success": "Расход трафика пользователя {{username}} успешно сброшен.",
"resetUserUsage.error": "Сброс расхода не удался, пожалуйста, попробуйте еще раз.",
"revokeUserSub.prompt": "Вы уверены, что хотите отозвать подписку для пользователя <b>{{username}}</b>?",
"revokeUserSub.title": "Отозвать подписку пользователя",
"revokeUserSub.success": "Подписка пользователя {{username}} успешно отозвана.",
"revokeUserSub.error": "Отзыв подписки не удался, пожалуйста, попробуйте еще раз.",
"resetAllUsage.title": "Сбросить расход трафика для всех пользователей",
"resetAllUsage.prompt": "Это действие полностью очищает весь расход трафика пользователей. Вы уверены? ЭТО ДЕЙСТВИЕ НЕОБРАТИМО!",
"resetAllUsage.success": "расход трафика успешно сброшен.",
"resetAllUsage.success": "Расход трафика успешно сброшен.",
"resetAllUsage.error": "Сброс расхода трафика не удался, пожалуйста, попробуйте еще раз.",
"core.title": "Основные настройки",
"core.socket.connecting": "Соединение...",
Expand Down
2 changes: 1 addition & 1 deletion app/dashboard/build/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
"hostsDialog.expireDate": "用户的有效期",
"hostsDialog.jalaliExpireDate": "用户阳历有效日期",
"hostsDialog.remainingTime": "用户剩余时间",
"hostsDialog.statusEmoji": "用户状态作为表情符号 (✅,⌛️,🪫,❌)",
"hostsDialog.statusEmoji": "用户状态作为表情符号 (✅,⌛️,🪫,❌,🔌)",
"hostsDialog.proxyProtocol": "代理协议(例如 VMess)",
"hostsDialog.proxyMethod": "代理传输方法(例如 ws)",
"hostsDialog.currentServer": "当前服务器的 IP 地址",
Expand Down
6 changes: 5 additions & 1 deletion app/views/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,12 @@ async def node_logs(node_id: int, websocket: WebSocket, db: Session = Depends(ge

cache = ''
last_sent_ts = 0
with xray.nodes[node_id].get_logs() as logs:
node = xray.nodes[node_id]
with node.get_logs() as logs:
while True:
if not node == xray.nodes[node_id]:
break

if interval and time.time() - last_sent_ts >= interval and cache:
try:
await websocket.send_text(cache)
Expand Down
12 changes: 7 additions & 5 deletions app/xray/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def __init__(self,
self.restarting = False

self._logs_buffer = deque(maxlen=100)
self._temp_log_buffers = []
self._temp_log_buffers = {}
self._on_start_funcs = []
self._on_stop_funcs = []
self._env = {
Expand Down Expand Up @@ -58,7 +58,7 @@ def capture_and_debug_log():
if output:
output = output.strip()
self._logs_buffer.append(output)
for buf in self._temp_log_buffers:
for buf in list(self._temp_log_buffers.values()):
buf.append(output)
logger.debug(output)

Expand All @@ -71,7 +71,7 @@ def capture_only():
if output:
output = output.strip()
self._logs_buffer.append(output)
for buf in self._temp_log_buffers:
for buf in list(self._temp_log_buffers.values()):
buf.append(output)

elif not self.process or self.process.poll() is not None:
Expand All @@ -85,11 +85,13 @@ def capture_only():
@contextmanager
def get_logs(self):
buf = deque(self._logs_buffer, maxlen=100)
buf_id = id(buf)
try:
self._temp_log_buffers.append(buf)
self._temp_log_buffers[buf_id] = buf
yield buf
finally:
self._temp_log_buffers.remove(buf)
del self._temp_log_buffers[buf_id]
del buf

@property
def started(self):
Expand Down
Loading

0 comments on commit c8359a1

Please sign in to comment.