v 0.0.75 (добавлен онлайн просмотр видео)
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -34,6 +34,8 @@ type ChannelConfigDB struct {
|
||||
// Видео поля
|
||||
ChannelType string `json:"channel_type"`
|
||||
VideoDevice string `json:"video_device"`
|
||||
VideoDeviceType string `json:"video_device_type"` // "usb", "ip", "rtsp"
|
||||
VideoRTSPUrl string `json:"video_rtsp_url"`
|
||||
VideoResolution string `json:"video_resolution"`
|
||||
VideoFramerate int `json:"video_framerate"`
|
||||
VideoBitrate int `json:"video_bitrate"`
|
||||
|
||||
@@ -1,481 +1,14 @@
|
||||
{"id":158,"timestamp":"2026-06-09T09:43:27.527848063+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":159,"timestamp":"2026-06-09T09:43:27.622787983+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard остановлен"}
|
||||
{"id":160,"timestamp":"2026-06-09T09:43:28.699199246+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":161,"timestamp":"2026-06-09T09:43:29.247980984+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":162,"timestamp":"2026-06-09T09:46:00.588770277+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":163,"timestamp":"2026-06-09T09:48:43.086337416+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":164,"timestamp":"2026-06-09T09:48:48.100988534+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":165,"timestamp":"2026-06-09T09:48:48.61780624+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: failed to set config: exit status 1"}
|
||||
{"id":166,"timestamp":"2026-06-09T09:49:00.635371442+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":167,"timestamp":"2026-06-09T09:49:00.711491325+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":168,"timestamp":"2026-06-09T09:49:01.21976132+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: failed to set config: exit status 1"}
|
||||
{"id":169,"timestamp":"2026-06-09T09:49:01.219807941+07:00","level":"ERROR","category":"VPN","message":"Ошибка запуска WireGuard: failed to set config: exit status 1"}
|
||||
{"id":170,"timestamp":"2026-06-09T09:49:19.605911075+07:00","level":"SETTINGS","category":"WIREGUARD","message":"Настройки обновлены"}
|
||||
{"id":171,"timestamp":"2026-06-09T09:49:19.679445331+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":172,"timestamp":"2026-06-09T09:49:20.187933961+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: failed to set config: exit status 1"}
|
||||
{"id":173,"timestamp":"2026-06-09T09:49:21.08841767+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":174,"timestamp":"2026-06-09T09:49:21.596674427+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: failed to set config: exit status 1"}
|
||||
{"id":175,"timestamp":"2026-06-09T09:50:02.77536005+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":176,"timestamp":"2026-06-09T09:50:02.775412318+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":177,"timestamp":"2026-06-09T09:51:06.991508555+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":178,"timestamp":"2026-06-09T09:51:12.054571645+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":179,"timestamp":"2026-06-09T09:51:12.856412958+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":180,"timestamp":"2026-06-09T09:54:59.334244213+07:00","level":"SETTINGS","category":"WIREGUARD","message":"Настройки обновлены"}
|
||||
{"id":181,"timestamp":"2026-06-09T10:15:53.025713605+07:00","level":"SETTINGS","category":"WIREGUARD","message":"Настройки обновлены"}
|
||||
{"id":182,"timestamp":"2026-06-09T10:16:20.072785256+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":183,"timestamp":"2026-06-09T10:16:20.176381346+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard остановлен"}
|
||||
{"id":184,"timestamp":"2026-06-09T10:16:21.659494019+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":185,"timestamp":"2026-06-09T10:16:22.212060303+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":186,"timestamp":"2026-06-09T10:18:56.059023055+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":187,"timestamp":"2026-06-09T10:19:42.423772702+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":188,"timestamp":"2026-06-09T10:19:47.427472404+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":189,"timestamp":"2026-06-09T10:19:47.97428549+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":190,"timestamp":"2026-06-09T10:20:32.403249806+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":191,"timestamp":"2026-06-09T10:20:32.403334224+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":192,"timestamp":"2026-06-09T10:21:43.273848181+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":193,"timestamp":"2026-06-09T10:22:24.010822053+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":194,"timestamp":"2026-06-09T10:22:29.014565593+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":195,"timestamp":"2026-06-09T10:22:29.561667234+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":196,"timestamp":"2026-06-09T10:30:27.687269952+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":197,"timestamp":"2026-06-09T10:32:38.006401559+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":198,"timestamp":"2026-06-09T10:32:43.118868893+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":199,"timestamp":"2026-06-09T10:32:43.215403169+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: signal: segmentation fault (core dumped)"}
|
||||
{"id":200,"timestamp":"2026-06-09T10:33:00.164438321+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":201,"timestamp":"2026-06-09T10:33:00.253263414+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: signal: segmentation fault (core dumped)"}
|
||||
{"id":202,"timestamp":"2026-06-09T10:33:29.401539635+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":203,"timestamp":"2026-06-09T10:33:29.401580773+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":204,"timestamp":"2026-06-09T10:34:53.790748428+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":205,"timestamp":"2026-06-09T10:34:58.810328038+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":206,"timestamp":"2026-06-09T10:34:59.361613201+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":207,"timestamp":"2026-06-09T10:36:21.761021188+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":208,"timestamp":"2026-06-09T10:36:21.761086646+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":209,"timestamp":"2026-06-09T10:38:21.617724012+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":210,"timestamp":"2026-06-09T10:41:39.003647697+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":211,"timestamp":"2026-06-09T10:41:44.013015155+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":212,"timestamp":"2026-06-09T10:41:44.680311653+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":213,"timestamp":"2026-06-09T10:45:39.689316211+07:00","level":"WARNING","category":"WIREGUARD","message":"Подключение потеряно"}
|
||||
{"id":214,"timestamp":"2026-06-09T10:45:44.801980487+07:00","level":"INFO","category":"WIREGUARD","message":"Подключение установлено | IP: 10.8.0.13"}
|
||||
{"id":215,"timestamp":"2026-06-09T10:45:44.802016585+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение WireGuard"}
|
||||
{"id":216,"timestamp":"2026-06-09T10:45:46.909309639+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":217,"timestamp":"2026-06-09T10:45:47.466727019+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":218,"timestamp":"2026-06-09T10:45:47.466753906+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение выполнено"}
|
||||
{"id":219,"timestamp":"2026-06-09T10:46:09.689644514+07:00","level":"WARNING","category":"WIREGUARD","message":"Подключение потеряно"}
|
||||
{"id":220,"timestamp":"2026-06-09T10:46:19.697387072+07:00","level":"WARNING","category":"WIREGUARD","message":"Подключение потеряно"}
|
||||
{"id":221,"timestamp":"2026-06-09T10:46:29.705221814+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение WireGuard"}
|
||||
{"id":222,"timestamp":"2026-06-09T10:46:31.804294618+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":223,"timestamp":"2026-06-09T10:53:02.458741069+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: failed to set config: exit status 1"}
|
||||
{"id":224,"timestamp":"2026-06-09T10:53:02.544214424+07:00","level":"INFO","category":"WIREGUARD","message":"Подключение установлено | IP: "}
|
||||
{"id":225,"timestamp":"2026-06-09T10:53:02.544263919+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение WireGuard"}
|
||||
{"id":226,"timestamp":"2026-06-09T10:53:04.611847439+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":227,"timestamp":"2026-06-09T10:53:04.700330337+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка переподключения: failed to set config: exit status 1"}
|
||||
{"id":228,"timestamp":"2026-06-09T10:53:04.700376095+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":229,"timestamp":"2026-06-09T10:53:04.700387258+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение выполнено"}
|
||||
{"id":230,"timestamp":"2026-06-09T10:53:04.700441666+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":231,"timestamp":"2026-06-09T10:53:04.70046122+07:00","level":"INFO","category":"WIREGUARD","message":"Подключение установлено | IP: "}
|
||||
{"id":232,"timestamp":"2026-06-09T10:53:04.70049521+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":233,"timestamp":"2026-06-09T10:53:04.700541916+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":234,"timestamp":"2026-06-09T10:53:04.700553726+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":235,"timestamp":"2026-06-09T10:53:04.70058825+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":236,"timestamp":"2026-06-09T10:53:04.700606708+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":237,"timestamp":"2026-06-09T10:53:04.700642504+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":238,"timestamp":"2026-06-09T10:53:04.700655888+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":239,"timestamp":"2026-06-09T10:53:04.702260498+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":240,"timestamp":"2026-06-09T10:53:04.702292759+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":241,"timestamp":"2026-06-09T10:53:04.702711639+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":242,"timestamp":"2026-06-09T10:53:04.702732493+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":243,"timestamp":"2026-06-09T10:53:04.715062344+07:00","level":"SETTINGS","category":"VPN","message":"Изменение настроек | VPN по умолчанию: wireguard -\u003e wireguard"}
|
||||
{"id":244,"timestamp":"2026-06-09T10:58:46.019749174+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":245,"timestamp":"2026-06-09T10:58:46.024623776+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":246,"timestamp":"2026-06-09T10:58:51.027168864+07:00","level":"INFO","category":"OPENVPN","message":"Подключение установлено | IP: 10.0.8.35"}
|
||||
{"id":247,"timestamp":"2026-06-09T10:59:22.326867775+07:00","level":"SETTINGS","category":"VPN","message":"Изменение настроек | VPN по умолчанию: wireguard -\u003e openvpn"}
|
||||
{"id":248,"timestamp":"2026-06-09T10:59:22.962728437+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: openvpn"}
|
||||
{"id":249,"timestamp":"2026-06-09T10:59:22.962771708+07:00","level":"INFO","category":"VPN","message":"OpenVPN запущен как VPN по умолчанию"}
|
||||
{"id":250,"timestamp":"2026-06-09T11:00:04.70474155+07:00","level":"WARNING","category":"VPN","message":"WireGuard: есть handshake, но нет связи"}
|
||||
{"id":251,"timestamp":"2026-06-09T11:00:04.704802815+07:00","level":"WARNING","category":"VPN","message":"Потеряно подключение для wireguard"}
|
||||
{"id":252,"timestamp":"2026-06-09T11:00:04.704821703+07:00","level":"WARNING","category":"VPN","message":"WireGuard: есть handshake, но нет связи"}
|
||||
{"id":253,"timestamp":"2026-06-09T11:00:04.704832039+07:00","level":"WARNING","category":"VPN","message":"Потеряно подключение для wireguard"}
|
||||
{"id":254,"timestamp":"2026-06-09T11:00:04.70489336+07:00","level":"WARNING","category":"VPN","message":"WireGuard: есть handshake, но нет связи"}
|
||||
{"id":255,"timestamp":"2026-06-09T11:00:04.704913501+07:00","level":"WARNING","category":"VPN","message":"Потеряно подключение для wireguard"}
|
||||
{"id":256,"timestamp":"2026-06-09T11:00:04.704921311+07:00","level":"WARNING","category":"VPN","message":"WireGuard: есть handshake, но нет связи"}
|
||||
{"id":257,"timestamp":"2026-06-09T11:00:04.704945266+07:00","level":"WARNING","category":"VPN","message":"Потеряно подключение для wireguard"}
|
||||
{"id":258,"timestamp":"2026-06-09T11:00:04.704956879+07:00","level":"WARNING","category":"VPN","message":"Обнаружено 4 ошибок, переключение VPN"}
|
||||
{"id":259,"timestamp":"2026-06-09T11:00:04.70497311+07:00","level":"WARNING","category":"VPN","message":"Переключение VPN: wireguard не работает, попытка подключить альтернативу"}
|
||||
{"id":260,"timestamp":"2026-06-09T11:00:04.704981161+07:00","level":"INFO","category":"WIREGUARD","message":"Остановка WireGuard"}
|
||||
{"id":261,"timestamp":"2026-06-09T11:00:04.705004163+07:00","level":"WARNING","category":"VPN","message":"Обнаружено 3 ошибок, переключение VPN"}
|
||||
{"id":262,"timestamp":"2026-06-09T11:00:04.705033953+07:00","level":"WARNING","category":"VPN","message":"WireGuard: есть handshake, но нет связи"}
|
||||
{"id":263,"timestamp":"2026-06-09T11:00:04.705045581+07:00","level":"WARNING","category":"VPN","message":"Потеряно подключение для wireguard"}
|
||||
{"id":264,"timestamp":"2026-06-09T11:00:04.705052794+07:00","level":"WARNING","category":"VPN","message":"Обнаружено 5 ошибок, переключение VPN"}
|
||||
{"id":265,"timestamp":"2026-06-09T11:00:04.706309443+07:00","level":"WARNING","category":"VPN","message":"WireGuard: есть handshake, но нет связи"}
|
||||
{"id":266,"timestamp":"2026-06-09T11:00:04.706341726+07:00","level":"WARNING","category":"VPN","message":"WireGuard: есть handshake, но нет связи"}
|
||||
{"id":267,"timestamp":"2026-06-09T11:00:04.706363891+07:00","level":"WARNING","category":"VPN","message":"Потеряно подключение для wireguard"}
|
||||
{"id":268,"timestamp":"2026-06-09T11:00:04.70637717+07:00","level":"WARNING","category":"VPN","message":"Обнаружено 6 ошибок, переключение VPN"}
|
||||
{"id":269,"timestamp":"2026-06-09T11:00:04.70638831+07:00","level":"WARNING","category":"VPN","message":"Потеряно подключение для wireguard"}
|
||||
{"id":270,"timestamp":"2026-06-09T11:00:04.706396575+07:00","level":"WARNING","category":"VPN","message":"Обнаружено 7 ошибок, переключение VPN"}
|
||||
{"id":271,"timestamp":"2026-06-09T11:00:04.726341963+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard остановлен"}
|
||||
{"id":272,"timestamp":"2026-06-09T11:00:04.726359706+07:00","level":"INFO","category":"VPN","message":"WireGuard остановлен для переключения"}
|
||||
{"id":273,"timestamp":"2026-06-09T11:00:07.726676865+07:00","level":"INFO","category":"VPN","message":"Попытка запустить OpenVPN как альтернативу"}
|
||||
{"id":274,"timestamp":"2026-06-09T11:00:07.726745382+07:00","level":"INFO","category":"VPN","message":"Успешно переключено на openvpn"}
|
||||
{"id":275,"timestamp":"2026-06-09T11:02:34.463066745+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: openvpn"}
|
||||
{"id":276,"timestamp":"2026-06-09T11:02:34.46311454+07:00","level":"INFO","category":"VPN","message":"OpenVPN запущен как VPN по умолчанию"}
|
||||
{"id":277,"timestamp":"2026-06-09T11:02:44.659862185+07:00","level":"SETTINGS","category":"VPN","message":"Изменение настроек | VPN по умолчанию: openvpn -\u003e wireguard"}
|
||||
{"id":278,"timestamp":"2026-06-09T11:02:45.75751906+07:00","level":"INFO","category":"VPN","message":"Запуск VPN по умолчанию: wireguard"}
|
||||
{"id":279,"timestamp":"2026-06-09T11:02:45.766676418+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":280,"timestamp":"2026-06-09T11:02:46.409527363+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":281,"timestamp":"2026-06-09T11:02:46.409558725+07:00","level":"INFO","category":"VPN","message":"WireGuard запущен как VPN по умолчанию"}
|
||||
{"id":282,"timestamp":"2026-06-09T11:03:04.801407516+07:00","level":"INFO","category":"VPN","message":"Подключение восстановлено для wireguard"}
|
||||
{"id":283,"timestamp":"2026-06-09T11:03:04.801478686+07:00","level":"INFO","category":"VPN","message":"Подключение восстановлено для wireguard"}
|
||||
{"id":284,"timestamp":"2026-06-09T11:12:12.884770581+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":285,"timestamp":"2026-06-09T11:13:02.332698472+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":286,"timestamp":"2026-06-09T11:13:02.333154325+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":287,"timestamp":"2026-06-09T11:13:07.352121685+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":288,"timestamp":"2026-06-09T11:13:07.354150939+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":289,"timestamp":"2026-06-09T11:13:07.435520877+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":290,"timestamp":"2026-06-09T11:13:07.983174874+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":291,"timestamp":"2026-06-09T11:13:17.361132488+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":292,"timestamp":"2026-06-09T11:14:02.01559806+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":293,"timestamp":"2026-06-09T11:15:03.107498892+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":294,"timestamp":"2026-06-09T11:15:03.107697188+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":295,"timestamp":"2026-06-09T11:15:08.121915832+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":296,"timestamp":"2026-06-09T11:15:08.124011623+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":297,"timestamp":"2026-06-09T11:15:08.203591892+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":298,"timestamp":"2026-06-09T11:15:08.759878651+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":299,"timestamp":"2026-06-09T11:15:18.130219389+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":300,"timestamp":"2026-06-09T11:16:53.915913049+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":301,"timestamp":"2026-06-09T11:22:00.837867723+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":302,"timestamp":"2026-06-09T11:22:00.838434366+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":303,"timestamp":"2026-06-09T11:22:05.84879823+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":304,"timestamp":"2026-06-09T11:22:05.85139949+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":305,"timestamp":"2026-06-09T11:22:05.939658476+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":306,"timestamp":"2026-06-09T11:22:06.493338219+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":307,"timestamp":"2026-06-09T11:22:15.860251458+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":308,"timestamp":"2026-06-09T11:39:36.346329873+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":309,"timestamp":"2026-06-09T11:39:36.346544122+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":310,"timestamp":"2026-06-09T11:39:41.363474105+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":311,"timestamp":"2026-06-09T11:39:41.363930577+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":312,"timestamp":"2026-06-09T11:39:41.366543969+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":313,"timestamp":"2026-06-09T11:39:46.368922104+07:00","level":"INFO","category":"OPENVPN","message":"Подключение установлено | IP: 10.0.8.35"}
|
||||
{"id":314,"timestamp":"2026-06-09T11:44:30.786795052+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":315,"timestamp":"2026-06-09T11:44:51.804768089+07:00","level":"WARNING","category":"WIREGUARD","message":"Подключение потеряно"}
|
||||
{"id":316,"timestamp":"2026-06-09T11:44:56.804998489+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение WireGuard"}
|
||||
{"id":317,"timestamp":"2026-06-09T11:44:58.888450896+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":318,"timestamp":"2026-06-09T11:45:09.438470088+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":319,"timestamp":"2026-06-09T11:45:09.43852329+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение выполнено"}
|
||||
{"id":320,"timestamp":"2026-06-09T11:51:39.638548324+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":321,"timestamp":"2026-06-09T11:57:23.833451571+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":322,"timestamp":"2026-06-09T11:57:23.833968813+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":323,"timestamp":"2026-06-09T11:57:28.854999928+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":324,"timestamp":"2026-06-09T11:57:28.85693434+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":325,"timestamp":"2026-06-09T11:57:28.947598606+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":326,"timestamp":"2026-06-09T11:57:29.493908775+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":327,"timestamp":"2026-06-09T11:57:38.869210559+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":328,"timestamp":"2026-06-09T12:01:26.64731508+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":329,"timestamp":"2026-06-09T12:02:06.744543267+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":330,"timestamp":"2026-06-09T12:02:06.744910945+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":331,"timestamp":"2026-06-09T12:02:11.763713855+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":332,"timestamp":"2026-06-09T12:02:11.765536596+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":333,"timestamp":"2026-06-09T12:02:11.850530671+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":334,"timestamp":"2026-06-09T12:02:12.408005263+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":335,"timestamp":"2026-06-09T12:02:21.786305711+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":336,"timestamp":"2026-06-09T12:17:42.060953039+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":337,"timestamp":"2026-06-09T12:29:28.326518464+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":338,"timestamp":"2026-06-09T12:29:28.326900098+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":339,"timestamp":"2026-06-09T12:29:33.352642463+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":340,"timestamp":"2026-06-09T12:29:33.354356716+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":341,"timestamp":"2026-06-09T12:29:33.434601226+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":342,"timestamp":"2026-06-09T12:29:33.989349137+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":343,"timestamp":"2026-06-09T12:29:43.367209049+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":344,"timestamp":"2026-06-09T12:30:06.524726156+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":345,"timestamp":"2026-06-09T13:48:09.852211905+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":346,"timestamp":"2026-06-09T13:48:09.852645418+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":347,"timestamp":"2026-06-09T13:48:14.874804632+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":348,"timestamp":"2026-06-09T13:48:14.876655221+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":349,"timestamp":"2026-06-09T13:48:14.958466583+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":350,"timestamp":"2026-06-09T13:48:15.657345016+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":351,"timestamp":"2026-06-09T13:48:24.882759934+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":352,"timestamp":"2026-06-09T13:50:02.065593128+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":353,"timestamp":"2026-06-09T13:51:46.246448713+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":354,"timestamp":"2026-06-09T13:51:46.246984465+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":355,"timestamp":"2026-06-09T13:51:51.260362181+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":356,"timestamp":"2026-06-09T13:51:51.26301492+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":357,"timestamp":"2026-06-09T13:51:51.34654735+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":358,"timestamp":"2026-06-09T13:51:51.904959118+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":359,"timestamp":"2026-06-09T13:52:01.272711751+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":360,"timestamp":"2026-06-09T13:56:15.433475218+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":361,"timestamp":"2026-06-09T14:13:36.953638383+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":362,"timestamp":"2026-06-09T14:13:36.954076675+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":363,"timestamp":"2026-06-09T14:13:41.970174249+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":364,"timestamp":"2026-06-09T14:13:41.972282175+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":365,"timestamp":"2026-06-09T14:13:42.065512473+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":366,"timestamp":"2026-06-09T14:13:42.632773429+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":367,"timestamp":"2026-06-09T14:13:51.982159235+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":368,"timestamp":"2026-06-09T14:14:53.981615956+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":369,"timestamp":"2026-06-09T14:16:46.779138935+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":370,"timestamp":"2026-06-09T14:16:46.779565595+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":371,"timestamp":"2026-06-09T14:16:51.795268722+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":372,"timestamp":"2026-06-09T14:16:51.797269336+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":373,"timestamp":"2026-06-09T14:16:51.882473701+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":374,"timestamp":"2026-06-09T14:16:52.427512117+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":375,"timestamp":"2026-06-09T14:17:01.807394787+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":376,"timestamp":"2026-06-09T14:20:34.635315806+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":377,"timestamp":"2026-06-09T14:21:51.621824637+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":378,"timestamp":"2026-06-09T14:21:51.62223184+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":379,"timestamp":"2026-06-09T14:21:56.635289018+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":380,"timestamp":"2026-06-09T14:21:56.637612455+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":381,"timestamp":"2026-06-09T14:21:56.720512697+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":382,"timestamp":"2026-06-09T14:21:57.264781368+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":383,"timestamp":"2026-06-09T14:22:06.650598408+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":384,"timestamp":"2026-06-09T14:26:40.877245202+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":385,"timestamp":"2026-06-09T14:27:15.257791837+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":386,"timestamp":"2026-06-09T14:27:15.258187828+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":387,"timestamp":"2026-06-09T14:27:20.273467653+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":388,"timestamp":"2026-06-09T14:27:20.275683536+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":389,"timestamp":"2026-06-09T14:27:20.363531848+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":390,"timestamp":"2026-06-09T14:27:20.913279141+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":391,"timestamp":"2026-06-09T14:27:30.283412772+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":392,"timestamp":"2026-06-09T14:36:12.348724338+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":393,"timestamp":"2026-06-09T14:36:35.801104688+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":394,"timestamp":"2026-06-09T14:36:35.801360842+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":395,"timestamp":"2026-06-09T14:36:40.814827883+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":396,"timestamp":"2026-06-09T14:36:40.81690388+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":397,"timestamp":"2026-06-09T14:36:40.906411438+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":398,"timestamp":"2026-06-09T14:36:45.818361553+07:00","level":"INFO","category":"OPENVPN","message":"Подключение установлено | IP: 10.0.8.35"}
|
||||
{"id":399,"timestamp":"2026-06-09T14:39:49.630778729+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":400,"timestamp":"2026-06-09T14:39:49.640628044+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: failed to set config: signal: interrupt"}
|
||||
{"id":401,"timestamp":"2026-06-10T11:22:14.2077741+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":402,"timestamp":"2026-06-10T11:22:14.208133747+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":403,"timestamp":"2026-06-10T11:22:19.236120903+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":404,"timestamp":"2026-06-10T11:22:19.23679943+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":405,"timestamp":"2026-06-10T11:22:19.239496308+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":406,"timestamp":"2026-06-10T11:22:19.983049406+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":407,"timestamp":"2026-06-10T11:22:29.254291058+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":408,"timestamp":"2026-06-10T11:29:03.811340245+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-10 11-29-03.wav"}
|
||||
{"id":409,"timestamp":"2026-06-10T11:29:09.353395283+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel2 | Файл: 2026-06-10 11-29-09.wav"}
|
||||
{"id":410,"timestamp":"2026-06-10T11:30:07.07773072+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":411,"timestamp":"2026-06-10T11:30:48.594206437+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":412,"timestamp":"2026-06-10T11:30:48.594429469+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":413,"timestamp":"2026-06-10T11:30:53.607825386+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":414,"timestamp":"2026-06-10T11:30:53.609844339+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":415,"timestamp":"2026-06-10T11:30:53.682034323+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":416,"timestamp":"2026-06-10T11:30:54.288533419+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":417,"timestamp":"2026-06-10T11:31:03.615811098+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":418,"timestamp":"2026-06-10T11:31:35.261670944+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":419,"timestamp":"2026-06-10T11:32:25.278259084+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":420,"timestamp":"2026-06-10T11:32:25.278742484+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":421,"timestamp":"2026-06-10T11:32:30.290665318+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":422,"timestamp":"2026-06-10T11:32:30.292645106+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":423,"timestamp":"2026-06-10T11:32:30.369138314+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":424,"timestamp":"2026-06-10T11:32:30.927059895+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":425,"timestamp":"2026-06-10T11:32:40.301606311+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":426,"timestamp":"2026-06-10T12:15:54.063277941+07:00","level":"WARNING","category":"WIREGUARD","message":"Подключение потеряно"}
|
||||
{"id":427,"timestamp":"2026-06-10T12:15:59.07607262+07:00","level":"INFO","category":"WIREGUARD","message":"Переподключение WireGuard"}
|
||||
{"id":428,"timestamp":"2026-06-10T12:16:01.169576156+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":429,"timestamp":"2026-06-10T12:16:10.298109453+07:00","level":"INFO","category":"OPENVPN","message":"Подключение установлено | IP: 10.0.8.35"}
|
||||
{"id":430,"timestamp":"2026-06-10T12:22:34.045864818+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка запуска: failed to set config: exit status 1"}
|
||||
{"id":431,"timestamp":"2026-06-10T12:22:34.045927527+07:00","level":"ERROR","category":"WIREGUARD","message":"Ошибка переподключения: failed to set config: exit status 1"}
|
||||
{"id":432,"timestamp":"2026-06-10T12:29:50.762449527+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-10 12-29-50.wav"}
|
||||
{"id":433,"timestamp":"2026-06-10T12:31:09.804898834+07:00","level":"INFO","category":"RECORDING","message":"Запись: ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-10 12-29-50.wav | Длительность: 5м 0с | Размер: 2 MB"}
|
||||
{"id":434,"timestamp":"2026-06-10T12:31:09.807941618+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-10 12-29-50.wav | Папка: 1-60рпропол-998-2026"}
|
||||
{"id":435,"timestamp":"2026-06-10T12:37:10.352531773+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":436,"timestamp":"2026-06-10T13:12:47.020233582+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":437,"timestamp":"2026-06-10T13:12:47.031657155+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":438,"timestamp":"2026-06-10T13:12:52.046931708+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":439,"timestamp":"2026-06-10T13:12:52.04969342+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":440,"timestamp":"2026-06-10T13:12:52.130010364+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":441,"timestamp":"2026-06-10T13:12:52.507874042+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":442,"timestamp":"2026-06-10T13:13:02.05878545+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":443,"timestamp":"2026-06-10T13:14:01.404863738+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-10 13-14-01.wav"}
|
||||
{"id":444,"timestamp":"2026-06-10T13:14:24.332423949+07:00","level":"INFO","category":"RECORDING","message":"Запись: ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-10 13-14-01.wav | Длительность: 5м 0с | Размер: 652 KB"}
|
||||
{"id":445,"timestamp":"2026-06-10T13:14:24.334883655+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-10 13-14-01.wav | Папка: 1-60рпропол-998-2026"}
|
||||
{"id":446,"timestamp":"2026-06-10T13:17:29.85417718+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":447,"timestamp":"2026-06-10T16:43:49.074091205+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":448,"timestamp":"2026-06-10T16:43:49.074598882+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":449,"timestamp":"2026-06-10T16:43:54.091037323+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":450,"timestamp":"2026-06-10T16:43:54.093176307+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":451,"timestamp":"2026-06-10T16:43:54.178072761+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":452,"timestamp":"2026-06-10T16:43:54.469945728+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":453,"timestamp":"2026-06-10T16:44:04.099343908+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":454,"timestamp":"2026-06-10T16:44:58.629865195+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":455,"timestamp":"2026-06-11T08:35:29.618048264+07:00","level":"INFO","category":"OPENVPN","message":"Восстановление подключения после перезагрузки"}
|
||||
{"id":456,"timestamp":"2026-06-11T08:35:29.618542557+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: wireguard"}
|
||||
{"id":457,"timestamp":"2026-06-11T08:35:34.643389231+07:00","level":"INFO","category":"WIREGUARD","message":"Запуск WireGuard | Интерфейс: wg0"}
|
||||
{"id":458,"timestamp":"2026-06-11T08:35:34.645427059+07:00","level":"INFO","category":"OPENVPN","message":"Запуск OpenVPN | Конфиг: /home/dnd/pfSense-UDP4-1194-DND-config.ovpn"}
|
||||
{"id":459,"timestamp":"2026-06-11T08:35:34.648114473+07:00","level":"INFO","category":"OPENVPN","message":"OpenVPN запущен, ожидание подключения..."}
|
||||
{"id":460,"timestamp":"2026-06-11T08:35:34.858237227+07:00","level":"INFO","category":"WIREGUARD","message":"WireGuard запущен успешно"}
|
||||
{"id":461,"timestamp":"2026-06-11T08:35:44.659283013+07:00","level":"WARNING","category":"OPENVPN","message":"Подключение не установлено, проверьте логи"}
|
||||
{"id":462,"timestamp":"2026-06-11T08:36:12.603766985+07:00","level":"INFO","category":"OPENVPN","message":"Остановка OpenVPN"}
|
||||
{"id":463,"timestamp":"2026-06-11T08:36:56.800733483+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":464,"timestamp":"2026-06-11T08:49:59.291459949+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":465,"timestamp":"2026-06-11T08:49:59.299236184+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":466,"timestamp":"2026-06-11T08:50:19.331116698+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-11 08-50-19.wav"}
|
||||
{"id":467,"timestamp":"2026-06-11T08:50:41.215507399+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":468,"timestamp":"2026-06-11T08:50:41.233737179+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":469,"timestamp":"2026-06-11T08:50:51.784094037+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-11 08-50-51.wav"}
|
||||
{"id":470,"timestamp":"2026-06-11T08:54:08.083840846+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":471,"timestamp":"2026-06-11T08:54:08.100799753+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":472,"timestamp":"2026-06-11T09:44:54.153781939+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":473,"timestamp":"2026-06-11T09:44:54.153831491+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":474,"timestamp":"2026-06-11T09:45:45.074318639+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":475,"timestamp":"2026-06-11T09:46:11.592258028+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":476,"timestamp":"2026-06-11T09:46:11.617861986+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":477,"timestamp":"2026-06-11T09:46:23.469837207+07:00","level":"INFO","category":"RECORDING","message":"Запись: ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_09-46-23.mp4 | Длительность: 1м 0с"}
|
||||
{"id":478,"timestamp":"2026-06-11T09:46:53.180643045+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_09-46-23.mp4 | Папка: channel1"}
|
||||
{"id":479,"timestamp":"2026-06-11T09:48:15.372621915+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":480,"timestamp":"2026-06-11T09:48:15.409122328+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":481,"timestamp":"2026-06-11T09:48:19.040243829+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-11 09-48-19.wav"}
|
||||
{"id":482,"timestamp":"2026-06-11T09:48:21.686939937+07:00","level":"INFO","category":"VIDEO","message":"Синхронная запись запущена | Канал: channel1"}
|
||||
{"id":483,"timestamp":"2026-06-11T09:48:21.686974575+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: mixed_2026-06-11_09-48-21.mp4 | Длительность: 1м 0с"}
|
||||
{"id":484,"timestamp":"2026-06-11T09:51:53.13985635+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":485,"timestamp":"2026-06-11T09:51:53.139903325+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":486,"timestamp":"2026-06-11T09:52:54.519113025+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":487,"timestamp":"2026-06-11T09:53:28.771537241+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":488,"timestamp":"2026-06-11T09:53:28.805611157+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":489,"timestamp":"2026-06-11T09:53:34.978879667+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":490,"timestamp":"2026-06-11T09:53:35.013267378+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":491,"timestamp":"2026-06-11T09:53:41.762206646+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-11 09-53-41.wav"}
|
||||
{"id":492,"timestamp":"2026-06-11T09:53:44.408841321+07:00","level":"INFO","category":"VIDEO","message":"Синхронная запись запущена | Канал: channel1"}
|
||||
{"id":493,"timestamp":"2026-06-11T09:53:44.408888495+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: mixed_2026-06-11_09-53-44.mp4 | Длительность: 1м 0с"}
|
||||
{"id":494,"timestamp":"2026-06-11T09:54:35.163192108+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":495,"timestamp":"2026-06-11T09:54:35.200703475+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":496,"timestamp":"2026-06-11T09:54:39.834784507+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-11 09-54-39.wav"}
|
||||
{"id":497,"timestamp":"2026-06-11T09:55:35.2291069+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":498,"timestamp":"2026-06-11T09:55:35.229155868+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":499,"timestamp":"2026-06-11T10:09:26.562430876+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":500,"timestamp":"2026-06-11T10:09:28.575306705+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel1 | Файл: 2026-06-11 10-09-28.wav"}
|
||||
{"id":501,"timestamp":"2026-06-11T10:10:30.62806718+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11 10-09-28.wav | Папка: channel1"}
|
||||
{"id":502,"timestamp":"2026-06-11T10:10:30.629318697+07:00","level":"INFO","category":"RECORDING","message":"Запись: ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11 10-09-28.wav | Длительность: 1м 0с | Размер: 1 MB"}
|
||||
{"id":503,"timestamp":"2026-06-11T10:10:30.63060279+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11 10-09-28.wav | Папка: channel1"}
|
||||
{"id":504,"timestamp":"2026-06-11T10:15:20.893299271+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":505,"timestamp":"2026-06-11T10:15:20.934865403+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":506,"timestamp":"2026-06-11T10:15:24.14437315+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_10-15-24.mp4 | Длительность: 1м 0с"}
|
||||
{"id":507,"timestamp":"2026-06-11T10:16:24.170745543+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-15-24.mp4 | Папка: channel1"}
|
||||
{"id":508,"timestamp":"2026-06-11T10:16:24.171947322+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11_10-15-24.mp4 | Длительность: 1м 0с | Размер: 14 MB"}
|
||||
{"id":509,"timestamp":"2026-06-11T10:16:24.173207386+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-15-24.mp4 | Папка: channel1"}
|
||||
{"id":510,"timestamp":"2026-06-11T10:19:12.257700588+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":511,"timestamp":"2026-06-11T10:19:12.257753979+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":512,"timestamp":"2026-06-11T10:21:58.452866241+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":513,"timestamp":"2026-06-11T10:22:22.243359639+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":514,"timestamp":"2026-06-11T10:22:22.28008747+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":515,"timestamp":"2026-06-11T10:22:25.896895117+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_10-22-25.mp4 | Длительность: 1м 0с"}
|
||||
{"id":516,"timestamp":"2026-06-11T10:23:25.92267812+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-22-25.mp4 | Папка: channel1"}
|
||||
{"id":517,"timestamp":"2026-06-11T10:23:25.923952866+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11_10-22-25.mp4 | Длительность: 1м 0с | Размер: 14 MB"}
|
||||
{"id":518,"timestamp":"2026-06-11T10:23:25.925154242+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-22-25.mp4 | Папка: channel1"}
|
||||
{"id":519,"timestamp":"2026-06-11T10:29:44.019876674+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":520,"timestamp":"2026-06-11T10:29:44.029569614+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":521,"timestamp":"2026-06-11T10:30:58.457976195+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":522,"timestamp":"2026-06-11T10:31:23.153961679+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":523,"timestamp":"2026-06-11T10:31:23.190144689+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":524,"timestamp":"2026-06-11T10:31:26.328853046+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_10-31-26.mp4 | Длительность: 1м 0с"}
|
||||
{"id":525,"timestamp":"2026-06-11T10:32:26.357400301+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-31-26.mp4 | Папка: channel1"}
|
||||
{"id":526,"timestamp":"2026-06-11T10:32:26.358956941+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11_10-31-26.mp4 | Длительность: 1м 0с | Размер: 6 MB"}
|
||||
{"id":527,"timestamp":"2026-06-11T10:32:26.360142563+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-31-26.mp4 | Папка: channel1"}
|
||||
{"id":528,"timestamp":"2026-06-11T10:32:44.038745727+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":529,"timestamp":"2026-06-11T10:32:44.074410691+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":530,"timestamp":"2026-06-11T10:32:46.293341921+07:00","level":"INFO","category":"RECORDING","message":"Запись: ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_10-32-46.mp4 | Длительность: 1м 0с"}
|
||||
{"id":531,"timestamp":"2026-06-11T10:33:46.320126373+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-32-46.mp4 | Папка: channel1"}
|
||||
{"id":532,"timestamp":"2026-06-11T10:33:46.321464394+07:00","level":"INFO","category":"RECORDING","message":"Запись: ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11_10-32-46.mp4 | Длительность: 1м 0с | Размер: 5 MB"}
|
||||
{"id":533,"timestamp":"2026-06-11T10:33:46.322704982+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-32-46.mp4 | Папка: channel1"}
|
||||
{"id":534,"timestamp":"2026-06-11T10:36:23.861819985+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":535,"timestamp":"2026-06-11T10:36:23.861870127+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":536,"timestamp":"2026-06-11T10:37:02.23998958+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":537,"timestamp":"2026-06-11T10:37:32.898081319+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":538,"timestamp":"2026-06-11T10:37:32.933999337+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":539,"timestamp":"2026-06-11T10:37:38.267008225+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_10-37-38.mp4 | Длительность: 30с"}
|
||||
{"id":540,"timestamp":"2026-06-11T10:38:08.293871402+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-37-38.mp4 | Папка: channel1"}
|
||||
{"id":541,"timestamp":"2026-06-11T10:38:08.295066178+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11_10-37-38.mp4 | Длительность: 30с | Размер: 3 MB"}
|
||||
{"id":542,"timestamp":"2026-06-11T10:38:08.296314264+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-37-38.mp4 | Папка: channel1"}
|
||||
{"id":543,"timestamp":"2026-06-11T10:41:22.842677909+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":544,"timestamp":"2026-06-11T10:41:22.852317478+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":545,"timestamp":"2026-06-11T10:42:03.403988903+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":546,"timestamp":"2026-06-11T10:42:32.283055534+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":547,"timestamp":"2026-06-11T10:42:32.318771179+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":548,"timestamp":"2026-06-11T10:42:36.62756771+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_10-42-36.mp4 | Длительность: 30с"}
|
||||
{"id":549,"timestamp":"2026-06-11T10:43:05.189238622+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel2 | настройки канала = сохранены"}
|
||||
{"id":550,"timestamp":"2026-06-11T10:43:05.225466874+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel2 | расписание = обновлено"}
|
||||
{"id":551,"timestamp":"2026-06-11T10:43:06.754044528+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-42-36.mp4 | Папка: channel1"}
|
||||
{"id":552,"timestamp":"2026-06-11T10:43:06.756317516+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11_10-42-36.mp4 | Длительность: 30с | Размер: 3 MB"}
|
||||
{"id":553,"timestamp":"2026-06-11T10:43:06.75937835+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_10-42-36.mp4 | Папка: channel1"}
|
||||
{"id":554,"timestamp":"2026-06-11T10:53:27.429892733+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":555,"timestamp":"2026-06-11T10:53:27.429936113+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":556,"timestamp":"2026-06-11T10:54:10.784084627+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":557,"timestamp":"2026-06-11T10:56:01.776853926+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":558,"timestamp":"2026-06-11T10:56:01.776950924+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":559,"timestamp":"2026-06-11T10:59:32.659514977+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":560,"timestamp":"2026-06-11T11:00:31.614430359+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":561,"timestamp":"2026-06-11T11:00:31.614500059+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":562,"timestamp":"2026-06-11T11:01:08.599136417+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":563,"timestamp":"2026-06-11T11:02:10.813431805+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel2 | Файл: 2026-06-11 11-02-10.wav"}
|
||||
{"id":564,"timestamp":"2026-06-11T11:02:14.436979351+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11 11-02-10.wav | Папка: channel2"}
|
||||
{"id":565,"timestamp":"2026-06-11T11:02:28.481497673+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":566,"timestamp":"2026-06-11T11:02:28.523921345+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":567,"timestamp":"2026-06-11T11:02:42.729306265+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel2 | настройки канала = сохранены"}
|
||||
{"id":568,"timestamp":"2026-06-11T11:02:42.765541152+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel2 | расписание = обновлено"}
|
||||
{"id":569,"timestamp":"2026-06-11T11:02:48.42043759+07:00","level":"INFO","category":"RECORDING","message":"Запись: НАЧАЛО | Канал: channel2 | Файл: 2026-06-11 11-02-48.wav"}
|
||||
{"id":570,"timestamp":"2026-06-11T11:02:50.808265977+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_11-02-50.mp4 | Длительность: 30с"}
|
||||
{"id":571,"timestamp":"2026-06-11T11:03:20.890651828+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_11-02-50.mp4 | Папка: channel1"}
|
||||
{"id":572,"timestamp":"2026-06-11T11:03:20.894952626+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-11_11-02-50.mp4 | Длительность: 30с | Размер: 5 MB"}
|
||||
{"id":573,"timestamp":"2026-06-11T11:03:20.89626573+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_11-02-50.mp4 | Папка: channel1"}
|
||||
{"id":574,"timestamp":"2026-06-11T11:03:50.473642035+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: | Папка: channel2"}
|
||||
{"id":575,"timestamp":"2026-06-11T11:03:50.474943678+07:00","level":"INFO","category":"RECORDING","message":"Запись: ЗАВЕРШЕНА | Канал: channel2 | Файл: | Длительность: 1м 0с | Размер: 237 KB"}
|
||||
{"id":576,"timestamp":"2026-06-11T11:03:50.476165766+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: | Папка: channel2"}
|
||||
{"id":577,"timestamp":"2026-06-11T13:09:07.630033285+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":578,"timestamp":"2026-06-11T13:09:07.630086756+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":579,"timestamp":"2026-06-11T13:14:25.129752539+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":580,"timestamp":"2026-06-11T13:15:24.5001539+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_11-02-50.mp4"}
|
||||
{"id":581,"timestamp":"2026-06-11T13:15:24.51208185+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel2 | Файл: 2026-06-11 11-02-48.wav"}
|
||||
{"id":582,"timestamp":"2026-06-11T13:15:24.514134374+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel2 | Файл: 2026-06-11 11-02-10.wav"}
|
||||
{"id":583,"timestamp":"2026-06-11T13:15:24.515798689+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_10-42-36.mp4"}
|
||||
{"id":584,"timestamp":"2026-06-11T13:15:24.517229028+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_10-37-38.mp4"}
|
||||
{"id":585,"timestamp":"2026-06-11T13:15:24.518623483+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_10-32-46.mp4"}
|
||||
{"id":586,"timestamp":"2026-06-11T13:15:24.52021845+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_10-31-26.mp4"}
|
||||
{"id":587,"timestamp":"2026-06-11T13:15:24.52182986+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_10-22-25.mp4"}
|
||||
{"id":588,"timestamp":"2026-06-11T13:15:24.523754885+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_10-15-24.mp4"}
|
||||
{"id":589,"timestamp":"2026-06-11T13:15:24.525294561+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11 10-09-28.wav"}
|
||||
{"id":590,"timestamp":"2026-06-11T13:15:24.527543959+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11 09-54-39.wav"}
|
||||
{"id":591,"timestamp":"2026-06-11T13:15:24.529484369+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11 09-53-41.wav"}
|
||||
{"id":592,"timestamp":"2026-06-11T13:15:24.531247858+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11 09-48-19.wav"}
|
||||
{"id":593,"timestamp":"2026-06-11T13:15:28.878305767+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_13-15-28.mp4 | Длительность: 30с"}
|
||||
{"id":594,"timestamp":"2026-06-11T13:15:47.353360178+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_13-15-28.mp4 | Папка: channel1"}
|
||||
{"id":595,"timestamp":"2026-06-11T13:18:26.601844508+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-11_13-15-28.mp4"}
|
||||
{"id":596,"timestamp":"2026-06-11T13:18:30.987537463+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":597,"timestamp":"2026-06-11T13:18:30.987570164+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":598,"timestamp":"2026-06-11T13:23:06.21109956+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":599,"timestamp":"2026-06-11T13:32:04.941477287+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":600,"timestamp":"2026-06-11T13:32:04.941708818+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":601,"timestamp":"2026-06-11T13:32:42.766367315+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":602,"timestamp":"2026-06-11T13:39:40.541435791+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-11_13-39-40.mp4 | Длительность: 30с"}
|
||||
{"id":603,"timestamp":"2026-06-11T13:39:46.674050011+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-11_13-39-40.mp4 | Папка: channel1"}
|
||||
{"id":604,"timestamp":"2026-06-11T13:42:46.898249625+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":605,"timestamp":"2026-06-11T13:42:46.898433815+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":606,"timestamp":"2026-06-11T13:43:29.732505755+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":607,"timestamp":"2026-06-11T13:51:54.929275479+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":608,"timestamp":"2026-06-11T13:51:54.929315445+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":609,"timestamp":"2026-06-11T13:52:32.121275924+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":610,"timestamp":"2026-06-11T14:04:03.887180812+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":611,"timestamp":"2026-06-11T14:04:03.8970172+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":612,"timestamp":"2026-06-11T14:05:17.084311691+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":613,"timestamp":"2026-06-29T10:56:48.339282449+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":614,"timestamp":"2026-06-29T10:57:21.194589798+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":615,"timestamp":"2026-06-29T10:57:21.220990959+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":616,"timestamp":"2026-06-29T10:57:31.962777877+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-29_10-57-31.mp4 | Длительность: 30с"}
|
||||
{"id":617,"timestamp":"2026-06-29T10:57:39.472445785+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | настройки канала = сохранены"}
|
||||
{"id":618,"timestamp":"2026-06-29T10:57:39.498962706+07:00","level":"SETTINGS","category":"SETTINGS","message":"Изменение настроек | Канал: channel1 | расписание = обновлено"}
|
||||
{"id":619,"timestamp":"2026-06-29T10:58:01.330862182+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-29_10-11-08.mp4"}
|
||||
{"id":620,"timestamp":"2026-06-29T10:58:01.331117313+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-29_10-37-31.mp4"}
|
||||
{"id":621,"timestamp":"2026-06-29T10:58:01.331334986+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-29_10-50-13.mp4"}
|
||||
{"id":622,"timestamp":"2026-06-29T10:58:01.331517565+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-29_10-52-06.mp4"}
|
||||
{"id":623,"timestamp":"2026-06-29T10:58:02.056400876+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-29_10-57-31.mp4 | Папка: channel1"}
|
||||
{"id":624,"timestamp":"2026-06-29T10:58:02.063339452+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО ЗАВЕРШЕНА | Канал: channel1 | Файл: 2026-06-29_10-57-31.mp4 | Длительность: 5м 0с | Размер: 5 MB"}
|
||||
{"id":625,"timestamp":"2026-06-29T10:58:02.064770672+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-29_10-57-31.mp4 | Папка: channel1"}
|
||||
{"id":626,"timestamp":"2026-06-29T10:58:03.086034403+07:00","level":"INFO","category":"RECORDING","message":"Запись: АУДИО+ВИДЕО НАЧАЛО | Канал: channel1 | Файл: 2026-06-29_10-58-03.mp4 | Длительность: 5м 0с"}
|
||||
{"id":627,"timestamp":"2026-06-29T10:59:07.551831105+07:00","level":"INFO","category":"SMB","message":"Добавлен в очередь повторных попыток | Файл: 2026-06-29_10-58-03.mp4 | Папка: channel1"}
|
||||
{"id":628,"timestamp":"2026-06-29T10:59:22.499937485+07:00","level":"INFO","category":"RECORDING","message":"Удаление записи | Канал: channel1 | Файл: 2026-06-29_10-57-31.mp4"}
|
||||
{"id":629,"timestamp":"2026-06-29T16:40:31.384011033+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":630,"timestamp":"2026-06-29T16:42:36.847734993+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":631,"timestamp":"2026-06-29T16:42:36.847877592+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":632,"timestamp":"2026-06-29T16:43:31.310739681+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":633,"timestamp":"2026-06-29T16:44:23.981849444+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":634,"timestamp":"2026-06-29T16:44:23.982000986+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":635,"timestamp":"2026-06-29T16:49:15.658613706+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":636,"timestamp":"2026-06-29T16:52:56.798355055+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":637,"timestamp":"2026-06-29T16:52:56.798535335+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":638,"timestamp":"2026-06-29T16:53:48.090223538+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":640,"timestamp":"2026-06-30T08:57:48.086637046+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":641,"timestamp":"2026-06-30T08:57:48.086798773+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":642,"timestamp":"2026-06-30T09:15:04.012088125+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":643,"timestamp":"2026-06-30T09:18:31.358290161+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":644,"timestamp":"2026-06-30T09:18:31.358444317+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":645,"timestamp":"2026-06-30T09:20:07.902625101+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":646,"timestamp":"2026-06-30T09:24:48.072743806+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":647,"timestamp":"2026-06-30T09:24:48.072809494+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":648,"timestamp":"2026-06-30T09:30:43.339852548+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":649,"timestamp":"2026-06-30T09:37:35.575173792+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":650,"timestamp":"2026-06-30T09:37:35.575299961+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
{"id":651,"timestamp":"2026-06-30T09:38:18.944801215+07:00","level":"INFO","category":"VPN","message":"VPN Manager инициализирован | VPN по умолчанию: none"}
|
||||
{"id":652,"timestamp":"2026-06-30T09:52:29.117871183+07:00","level":"INFO","category":"VPN","message":"Остановка всех VPN клиентов"}
|
||||
{"id":653,"timestamp":"2026-06-30T09:52:29.117917202+07:00","level":"INFO","category":"VPN","message":"Все VPN клиенты остановлены"}
|
||||
|
||||
+83
-2
@@ -37,6 +37,8 @@ type Channel struct {
|
||||
|
||||
// Видео настройки
|
||||
VideoDevice string `json:"video_device"`
|
||||
VideoDeviceType string `json:"video_device_type"` // "usb", "ip", "rtsp"
|
||||
VideoRTSPUrl string `json:"video_rtsp_url"`
|
||||
VideoResolution string `json:"video_resolution"`
|
||||
VideoFramerate int `json:"video_framerate"`
|
||||
VideoBitrate int `json:"video_bitrate"`
|
||||
@@ -63,7 +65,6 @@ type Channel struct {
|
||||
stopOnce sync.Once
|
||||
stopChan chan struct{}
|
||||
}
|
||||
|
||||
type ChannelConfig struct {
|
||||
ChannelID string `json:"channel_id"`
|
||||
ChannelName string `json:"channel_name"`
|
||||
@@ -369,7 +370,7 @@ func (ch *Channel) startAudioRecording(outputDir string, testDeviceFunc func(str
|
||||
}
|
||||
|
||||
// supportsMJPEG - проверяет поддержку MJPEG формата камерой (только одно объявление!)
|
||||
func supportsMJPEG(device string) bool {
|
||||
func SupportsMJPEG(device string) bool {
|
||||
cmd := exec.Command("v4l2-ctl", "-d", device, "--list-formats-ext")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
@@ -1147,3 +1148,83 @@ func (ch *Channel) IsRecordingActive() bool {
|
||||
defer ch.mu.RUnlock()
|
||||
return ch.IsRecording
|
||||
}
|
||||
func (r *Recorder) loadChannelsFromDB() {
|
||||
db := database.GetDB()
|
||||
recordingsDir, _ := db.GetSetting("recordings_dir")
|
||||
if recordingsDir == "" {
|
||||
recordingsDir = r.OutputDir
|
||||
}
|
||||
|
||||
channels, err := db.GetAllChannels()
|
||||
if err != nil {
|
||||
log.Printf("Error loading channels from DB: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Для ARM добавляем задержку между загрузкой каналов
|
||||
delay := 0
|
||||
if optimization.IsARM() {
|
||||
delay = 100 // миллисекунд
|
||||
}
|
||||
|
||||
for _, chConfig := range channels {
|
||||
channel := NewChannel(
|
||||
chConfig.ID, chConfig.Name, chConfig.Device,
|
||||
chConfig.Duration, chConfig.SampleRate, chConfig.Channels,
|
||||
chConfig.Format, chConfig.AutoRestart, recordingsDir,
|
||||
)
|
||||
channel.SMBFolder = chConfig.SMBFolder
|
||||
|
||||
// Загрузка типа канала
|
||||
channel.ChannelType = chConfig.ChannelType
|
||||
if channel.ChannelType == "" {
|
||||
channel.ChannelType = "audio"
|
||||
}
|
||||
|
||||
// Загрузка видео настроек
|
||||
channel.VideoDevice = chConfig.VideoDevice
|
||||
channel.VideoDeviceType = chConfig.VideoDeviceType
|
||||
if channel.VideoDeviceType == "" {
|
||||
channel.VideoDeviceType = "usb"
|
||||
}
|
||||
channel.VideoRTSPUrl = chConfig.VideoRTSPUrl
|
||||
channel.VideoResolution = chConfig.VideoResolution
|
||||
channel.VideoFramerate = chConfig.VideoFramerate
|
||||
channel.VideoBitrate = chConfig.VideoBitrate
|
||||
channel.VideoCodec = chConfig.VideoCodec
|
||||
channel.VideoAudioOffset = chConfig.VideoAudioOffset
|
||||
|
||||
log.Printf("Loaded channel %s from database (type: %s, video_type: %s, video_device: %s, rtsp_url: %s)",
|
||||
chConfig.ID, channel.ChannelType, channel.VideoDeviceType, channel.VideoDevice, channel.VideoRTSPUrl)
|
||||
|
||||
// Загрузка расписания
|
||||
schedule, _ := db.GetSchedule(chConfig.ID)
|
||||
if schedule != nil {
|
||||
channel.ScheduleEnabled = schedule.Enabled
|
||||
channel.StartDate = schedule.StartDate
|
||||
channel.StartTime = schedule.StartTime
|
||||
channel.EndDate = schedule.EndDate
|
||||
channel.EndTime = schedule.EndTime
|
||||
channel.RepeatDaily = schedule.RepeatDaily
|
||||
|
||||
if schedule.Enabled {
|
||||
go func(ch *Channel) {
|
||||
sleepTime := 2 * time.Second
|
||||
if optimization.IsARM() {
|
||||
sleepTime = 3 * time.Second
|
||||
}
|
||||
time.Sleep(sleepTime)
|
||||
ch.StartSchedule()
|
||||
}(channel)
|
||||
}
|
||||
}
|
||||
|
||||
r.channels[channel.ID] = channel
|
||||
os.MkdirAll(filepath.Join(recordingsDir, channel.ID), 0755)
|
||||
log.Printf("Loaded channel %s from database", chConfig.ID)
|
||||
|
||||
if delay > 0 {
|
||||
time.Sleep(time.Duration(delay) * time.Millisecond)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,78 +31,6 @@ func NewRecorder(outputDir string) *Recorder {
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *Recorder) loadChannelsFromDB() {
|
||||
db := database.GetDB()
|
||||
recordingsDir, _ := db.GetSetting("recordings_dir")
|
||||
if recordingsDir == "" {
|
||||
recordingsDir = r.OutputDir
|
||||
}
|
||||
|
||||
channels, err := db.GetAllChannels()
|
||||
if err != nil {
|
||||
log.Printf("Error loading channels from DB: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
delay := 0
|
||||
if optimization.IsARM() {
|
||||
delay = 100
|
||||
}
|
||||
|
||||
for _, chConfig := range channels {
|
||||
channel := NewChannel(
|
||||
chConfig.ID, chConfig.Name, chConfig.Device,
|
||||
chConfig.Duration, chConfig.SampleRate, chConfig.Channels,
|
||||
chConfig.Format, chConfig.AutoRestart, recordingsDir,
|
||||
)
|
||||
channel.SMBFolder = chConfig.SMBFolder
|
||||
|
||||
// Загрузка типа канала и видео настроек из БД
|
||||
channel.ChannelType = chConfig.ChannelType
|
||||
if channel.ChannelType == "" {
|
||||
channel.ChannelType = "audio"
|
||||
}
|
||||
channel.VideoDevice = chConfig.VideoDevice
|
||||
channel.VideoResolution = chConfig.VideoResolution
|
||||
channel.VideoFramerate = chConfig.VideoFramerate
|
||||
channel.VideoBitrate = chConfig.VideoBitrate
|
||||
channel.VideoCodec = chConfig.VideoCodec
|
||||
channel.VideoAudioOffset = chConfig.VideoAudioOffset
|
||||
|
||||
log.Printf("Loaded channel %s from database (type: %s, video_device: %s)",
|
||||
chConfig.ID, channel.ChannelType, channel.VideoDevice)
|
||||
|
||||
schedule, _ := db.GetSchedule(chConfig.ID)
|
||||
if schedule != nil {
|
||||
channel.ScheduleEnabled = schedule.Enabled
|
||||
channel.StartDate = schedule.StartDate
|
||||
channel.StartTime = schedule.StartTime
|
||||
channel.EndDate = schedule.EndDate
|
||||
channel.EndTime = schedule.EndTime
|
||||
channel.RepeatDaily = schedule.RepeatDaily
|
||||
|
||||
if schedule.Enabled {
|
||||
go func(ch *Channel) {
|
||||
sleepTime := 2 * time.Second
|
||||
if optimization.IsARM() {
|
||||
sleepTime = 3 * time.Second
|
||||
}
|
||||
time.Sleep(sleepTime)
|
||||
ch.StartSchedule()
|
||||
}(channel)
|
||||
}
|
||||
}
|
||||
|
||||
r.channels[channel.ID] = channel
|
||||
os.MkdirAll(filepath.Join(recordingsDir, channel.ID), 0755)
|
||||
log.Printf("Loaded channel %s from database", chConfig.ID)
|
||||
|
||||
if delay > 0 {
|
||||
time.Sleep(time.Duration(delay) * time.Millisecond)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AddChannel добавляет новый канал
|
||||
func (r *Recorder) AddChannel(channel *Channel) {
|
||||
r.mu.Lock()
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,7 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"embed"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
@@ -2634,3 +2635,188 @@ func GetVideoDuration(filePath string) int {
|
||||
|
||||
return int(durationFloat)
|
||||
}
|
||||
|
||||
// HandleVideoStream - потоковая передача видео для онлайн просмотра
|
||||
func HandleVideoStream(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodGet && r.Method != http.MethodHead {
|
||||
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
|
||||
channelID := r.URL.Query().Get("channel")
|
||||
if channelID == "" {
|
||||
sendJSONError(w, "Channel ID required", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("Video stream request for channel %s", channelID)
|
||||
|
||||
ch, exists := RecorderInstance.GetChannel(channelID)
|
||||
if !exists {
|
||||
log.Printf("Channel %s not found", channelID)
|
||||
sendJSONError(w, "Channel not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
// Проверяем что канал имеет видео
|
||||
if ch.ChannelType != "video" && ch.ChannelType != "both" {
|
||||
sendJSONError(w, "Channel does not support video", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
// Проверяем видео устройство
|
||||
var inputArgs []string
|
||||
var videoDevice string
|
||||
|
||||
switch ch.VideoDeviceType {
|
||||
case "usb":
|
||||
if ch.VideoDevice == "" {
|
||||
sendJSONError(w, "Video device not configured", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
videoDevice = ch.VideoDevice
|
||||
inputArgs = []string{"-f", "v4l2"}
|
||||
if recorder.SupportsMJPEG(videoDevice) {
|
||||
inputArgs = append(inputArgs, "-input_format", "mjpeg")
|
||||
}
|
||||
framerate := 15
|
||||
if ch.VideoFramerate > 0 {
|
||||
framerate = ch.VideoFramerate
|
||||
}
|
||||
resolution := "640x480"
|
||||
if ch.VideoResolution != "" {
|
||||
resolution = ch.VideoResolution
|
||||
}
|
||||
inputArgs = append(inputArgs, "-framerate", strconv.Itoa(framerate),
|
||||
"-video_size", resolution, "-i", videoDevice)
|
||||
|
||||
case "rtsp", "ip":
|
||||
if ch.VideoRTSPUrl == "" {
|
||||
sendJSONError(w, "RTSP URL not configured", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
if ch.VideoDeviceType == "rtsp" {
|
||||
inputArgs = []string{
|
||||
"-rtsp_transport", "tcp",
|
||||
"-rtsp_flags", "prefer_tcp",
|
||||
"-stimeout", "5000000",
|
||||
"-i", ch.VideoRTSPUrl,
|
||||
}
|
||||
} else {
|
||||
inputArgs = []string{"-i", ch.VideoRTSPUrl}
|
||||
}
|
||||
|
||||
default:
|
||||
sendJSONError(w, "Unsupported video device type", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
// Для HEAD запроса просто проверяем доступность
|
||||
if r.Method == http.MethodHead {
|
||||
w.Header().Set("Content-Type", "video/mp4")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("Starting video stream for channel %s", channelID)
|
||||
|
||||
w.Header().Set("Content-Type", "video/mp4")
|
||||
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||
w.Header().Set("Connection", "keep-alive")
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
|
||||
flusher, ok := w.(http.Flusher)
|
||||
if !ok {
|
||||
log.Printf("Streaming not supported")
|
||||
sendJSONError(w, "Streaming not supported", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Формируем команду ffmpeg для стрима
|
||||
args := []string{}
|
||||
|
||||
// Добавляем входные аргументы
|
||||
args = append(args, inputArgs...)
|
||||
|
||||
// Добавляем параметры вывода для MP4 фрагментов
|
||||
args = append(args,
|
||||
"-f", "mp4",
|
||||
"-movflags", "frag_keyframe+empty_moov",
|
||||
"-c:v", "libx264",
|
||||
"-preset", "ultrafast",
|
||||
"-tune", "zerolatency",
|
||||
"-crf", "30",
|
||||
"-pix_fmt", "yuv420p",
|
||||
"-g", "60",
|
||||
"-b:v", "800k",
|
||||
"-",
|
||||
)
|
||||
|
||||
cmd := exec.Command("ffmpeg", args...)
|
||||
log.Printf("Video stream command: ffmpeg %v", args)
|
||||
|
||||
stdout, err := cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
log.Printf("Error creating stdout pipe: %v", err)
|
||||
sendJSONError(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
stderr, err := cmd.StderrPipe()
|
||||
if err != nil {
|
||||
log.Printf("Error creating stderr pipe: %v", err)
|
||||
sendJSONError(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
log.Printf("Error starting ffmpeg: %v", err)
|
||||
sendJSONError(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Логируем stderr
|
||||
go func() {
|
||||
scanner := bufio.NewScanner(stderr)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
log.Printf("ffmpeg stream: %s", line)
|
||||
}
|
||||
}()
|
||||
|
||||
// Буфер для данных
|
||||
buffer := make([]byte, 8192)
|
||||
done := make(chan struct{})
|
||||
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-r.Context().Done():
|
||||
log.Printf("Video stream client disconnected for channel %s", channelID)
|
||||
cmd.Process.Kill()
|
||||
close(done)
|
||||
return
|
||||
default:
|
||||
n, err := stdout.Read(buffer)
|
||||
if err != nil {
|
||||
log.Printf("Video stream read error: %v", err)
|
||||
close(done)
|
||||
return
|
||||
}
|
||||
if n > 0 {
|
||||
if _, err := w.Write(buffer[:n]); err != nil {
|
||||
log.Printf("Video stream write error: %v", err)
|
||||
cmd.Process.Kill()
|
||||
close(done)
|
||||
return
|
||||
}
|
||||
flusher.Flush()
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
<-done
|
||||
cmd.Wait()
|
||||
log.Printf("Video stream ended for channel %s", channelID)
|
||||
}
|
||||
|
||||
+1
-1
@@ -121,7 +121,7 @@ func (s *Server) SetupRoutes() {
|
||||
|
||||
// ========== Live Stream ==========
|
||||
mux.HandleFunc("/api/live-stream", CORSMiddleware(AuthMiddleware(HandleLiveStream)))
|
||||
|
||||
mux.HandleFunc("/api/video-stream", CORSMiddleware(AuthMiddleware(HandleVideoStream)))
|
||||
// ========== Логи ==========
|
||||
mux.HandleFunc("/api/logs", CORSMiddleware(AuthMiddleware(HandleGetLogs)))
|
||||
mux.HandleFunc("/api/logs/clear", CORSMiddleware(AuthMiddleware(HandleClearLogs)))
|
||||
|
||||
+5
-4
@@ -24,7 +24,7 @@
|
||||
<button class="tab-btn" data-tab="logs">📋 Логи</button>
|
||||
</div>
|
||||
|
||||
<!-- Вкладка: Состояние канала -->
|
||||
<!-- Вкладка: Состояние канала -->
|
||||
<div id="tab-channel" class="tab-content active">
|
||||
<div class="channel-selector">
|
||||
<label for="activeChannelSelect">Активный канал:</label>
|
||||
@@ -32,7 +32,7 @@
|
||||
<option value="">Загрузка каналов...</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="status-card">
|
||||
<h3>Состояние записи</h3>
|
||||
<div class="status-indicator">
|
||||
@@ -49,13 +49,13 @@
|
||||
<span id="channelTypeDisplay" class="current-device">Аудио</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="button-group">
|
||||
<button id="startBtn" class="btn btn-start">▶ Начать запись</button>
|
||||
<button id="stopBtn" class="btn btn-stop" disabled>⏹ Остановить</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Онлайн прослушивание (только для аудио) -->
|
||||
<div id="liveStreamBlock" class="info-card">
|
||||
<h3>🎧 Онлайн прослушивание</h3>
|
||||
@@ -76,6 +76,7 @@
|
||||
💡 Прослушивание аудио в реальном времени. Для работы требуется активная запись на канале.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Видео стрим (только для видео каналов) -->
|
||||
<div id="videoStreamBlock" class="info-card" style="display: none;">
|
||||
<h3>📹 Онлайн просмотр видео</h3>
|
||||
|
||||
+30
-1
@@ -19,6 +19,7 @@ import {
|
||||
loadSMBSettings, saveSMBSettings, testSMBConnection, toggleSmbPasswordVisibility
|
||||
} from './modules/smb.js';
|
||||
import { initLivePlayer, startLivePlayback, stopLivePlayback, setLiveVolume } from './modules/liveplayer.js';
|
||||
import { initVideoStream, startVideoStream, stopVideoStream } from './modules/video_stream.js';
|
||||
import {
|
||||
loadOpenVPNSettings, saveOpenVPNSettings, startOpenVPN, stopOpenVPN,
|
||||
toggleOpenvpnPasswordVisibility, startStatusPolling as startOpenVPNPolling, stopStatusPolling as stopOpenVPNPolling
|
||||
@@ -140,6 +141,21 @@ function bindEventHandlers() {
|
||||
liveVolume._hasHandler = true;
|
||||
}
|
||||
|
||||
// Видео стрим
|
||||
const playVideoStreamBtn = document.getElementById('playVideoStreamBtn');
|
||||
if (playVideoStreamBtn && !playVideoStreamBtn._hasHandler) {
|
||||
playVideoStreamBtn.onclick = () => startVideoStream(getCurrentChannelId());
|
||||
playVideoStreamBtn._hasHandler = true;
|
||||
console.log('Play video stream button handler attached');
|
||||
}
|
||||
|
||||
const stopVideoStreamBtn = document.getElementById('stopVideoStreamBtn');
|
||||
if (stopVideoStreamBtn && !stopVideoStreamBtn._hasHandler) {
|
||||
stopVideoStreamBtn.onclick = stopVideoStream;
|
||||
stopVideoStreamBtn._hasHandler = true;
|
||||
console.log('Stop video stream button handler attached');
|
||||
}
|
||||
|
||||
const saveConfigBtn = document.getElementById('saveChannelConfigBtn');
|
||||
if (saveConfigBtn && !saveConfigBtn._hasHandler) {
|
||||
saveConfigBtn.onclick = saveChannelConfig;
|
||||
@@ -217,6 +233,7 @@ function bindEventHandlers() {
|
||||
logoutBtn.onclick = async () => {
|
||||
disconnectWebSocket();
|
||||
stopLivePlayback();
|
||||
stopVideoStream();
|
||||
await logout();
|
||||
};
|
||||
logoutBtn._hasHandler = true;
|
||||
@@ -227,6 +244,7 @@ function bindEventHandlers() {
|
||||
if (channelSelect && !channelSelect._hasHandler) {
|
||||
channelSelect.onchange = (e) => {
|
||||
if (e.target.value) {
|
||||
stopVideoStream();
|
||||
selectChannel(e.target.value, false);
|
||||
}
|
||||
};
|
||||
@@ -237,8 +255,9 @@ function bindEventHandlers() {
|
||||
if (activeChannelSelect && !activeChannelSelect._hasHandler) {
|
||||
activeChannelSelect.onchange = (e) => {
|
||||
if (e.target.value) {
|
||||
selectChannel(e.target.value, false);
|
||||
stopVideoStream();
|
||||
stopLivePlayback();
|
||||
selectChannel(e.target.value, false);
|
||||
}
|
||||
};
|
||||
activeChannelSelect._hasHandler = true;
|
||||
@@ -620,6 +639,7 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||
console.log('DOM загружен, инициализация приложения...');
|
||||
|
||||
initLivePlayer();
|
||||
initVideoStream();
|
||||
|
||||
const isAuth = await checkAuth();
|
||||
if (!isAuth) return;
|
||||
@@ -688,8 +708,16 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||
await loadChannels(true);
|
||||
}, 5000);
|
||||
|
||||
// ========== ОБРАБОТЧИК TAB CHANGED ВНУТРИ DOMContentLoaded ==========
|
||||
document.addEventListener('tabChanged', async (e) => {
|
||||
const tabId = e.detail.tabId;
|
||||
|
||||
// Если переключаемся не на вкладку channel - останавливаем стримы
|
||||
if (tabId !== 'channel') {
|
||||
stopVideoStream();
|
||||
stopLivePlayback();
|
||||
}
|
||||
|
||||
if (tabId === 'archive') {
|
||||
await loadRecordings();
|
||||
}
|
||||
@@ -773,6 +801,7 @@ window.addEventListener('beforeunload', () => {
|
||||
}
|
||||
disconnectWebSocket();
|
||||
stopLivePlayback();
|
||||
stopVideoStream();
|
||||
stopOpenVPNPolling();
|
||||
stopTimeUpdater();
|
||||
});
|
||||
@@ -288,7 +288,6 @@ export async function selectChannel(channelId, skipConfigLoad = false) {
|
||||
await loadStatus();
|
||||
await loadSchedule(channelId);
|
||||
|
||||
// Обновляем отображение типа канала
|
||||
if (config) {
|
||||
updateChannelTypeDisplay(config);
|
||||
}
|
||||
@@ -555,10 +554,13 @@ function applyConfigToForm(config) {
|
||||
const deleteBtn = document.getElementById('deleteChannelBtn');
|
||||
if (deleteBtn) deleteBtn.style.display = 'block';
|
||||
}
|
||||
|
||||
// ====== ИСПРАВЛЕННАЯ ФУНКЦИЯ updateChannelTypeDisplay ======
|
||||
function updateChannelTypeDisplay(config) {
|
||||
const channelTypeSpan = document.getElementById('infoChannelType');
|
||||
const channelTypeDisplay = document.getElementById('channelTypeDisplay');
|
||||
const liveStreamBlock = document.getElementById('liveStreamBlock');
|
||||
const videoStreamBlock = document.getElementById('videoStreamBlock');
|
||||
const type = config.channel_type || 'audio';
|
||||
|
||||
let typeText = '';
|
||||
@@ -584,11 +586,29 @@ function updateChannelTypeDisplay(config) {
|
||||
if (channelTypeSpan) channelTypeSpan.textContent = typeIcon + ' ' + typeText;
|
||||
if (channelTypeDisplay) channelTypeDisplay.textContent = typeIcon + ' ' + typeText;
|
||||
|
||||
// Показываем/скрываем блок онлайн прослушивания (только для аудио)
|
||||
// Показываем/скрываем блок аудио стрима (только для audio и both)
|
||||
if (liveStreamBlock) {
|
||||
liveStreamBlock.style.display = (type === 'audio' || type === 'both') ? 'block' : 'none';
|
||||
}
|
||||
|
||||
// Показываем/скрываем блок видео стрима (только для video и both)
|
||||
if (videoStreamBlock) {
|
||||
videoStreamBlock.style.display = (type === 'video' || type === 'both') ? 'block' : 'none';
|
||||
}
|
||||
|
||||
// Показываем/скрываем аудио информацию (только для audio и both)
|
||||
const audioInfoBlock = document.getElementById('audioInfoBlock');
|
||||
if (audioInfoBlock) {
|
||||
audioInfoBlock.style.display = (type === 'audio' || type === 'both') ? 'block' : 'none';
|
||||
}
|
||||
|
||||
// Показываем/скрываем видео информацию (только для video и both)
|
||||
const videoInfoBlock = document.getElementById('videoInfoBlock');
|
||||
if (videoInfoBlock) {
|
||||
videoInfoBlock.style.display = (type === 'video' || type === 'both') ? 'block' : 'none';
|
||||
}
|
||||
}
|
||||
|
||||
function updateChannelInfo(config) {
|
||||
const channelType = config.channel_type || 'audio';
|
||||
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
// frontend/js/modules/video_stream.js
|
||||
import { showNotification } from './ui.js';
|
||||
|
||||
let videoStream = null;
|
||||
let isStreaming = false;
|
||||
let currentChannel = null;
|
||||
let streamRetryCount = 0;
|
||||
const MAX_RETRIES = 3;
|
||||
let abortController = null;
|
||||
|
||||
export function initVideoStream() {
|
||||
videoStream = document.getElementById('videoStream');
|
||||
if (!videoStream) {
|
||||
videoStream = document.createElement('video');
|
||||
videoStream.id = 'videoStream';
|
||||
videoStream.controls = true;
|
||||
videoStream.autoplay = true;
|
||||
videoStream.style.width = '100%';
|
||||
videoStream.style.maxWidth = '640px';
|
||||
videoStream.style.borderRadius = '8px';
|
||||
videoStream.style.background = '#000';
|
||||
const container = document.getElementById('videoStreamContainer');
|
||||
if (container) {
|
||||
container.appendChild(videoStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function startVideoStream(channelId) {
|
||||
// Если уже стримим этот канал - ничего не делаем
|
||||
if (isStreaming && currentChannel === channelId) {
|
||||
console.log('Video stream already active for channel', channelId);
|
||||
return;
|
||||
}
|
||||
|
||||
// Останавливаем текущий стрим перед запуском нового
|
||||
if (isStreaming) {
|
||||
stopVideoStream();
|
||||
// Даем время на освобождение ресурсов
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
}
|
||||
|
||||
if (!channelId) {
|
||||
showNotification('Сначала выберите канал', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
currentChannel = channelId;
|
||||
streamRetryCount = 0;
|
||||
|
||||
const playBtn = document.getElementById('playVideoStreamBtn');
|
||||
const stopBtn = document.getElementById('stopVideoStreamBtn');
|
||||
const status = document.getElementById('videoStreamStatus');
|
||||
const container = document.getElementById('videoStreamContainer');
|
||||
|
||||
if (playBtn) playBtn.disabled = true;
|
||||
if (stopBtn) stopBtn.disabled = false;
|
||||
if (status) {
|
||||
status.textContent = 'Подключение...';
|
||||
status.className = 'live-status buffering';
|
||||
}
|
||||
if (container) container.style.display = 'block';
|
||||
|
||||
try {
|
||||
// Проверяем доступность стрима
|
||||
const checkUrl = `/api/video-stream?channel=${channelId}`;
|
||||
const response = await fetch(checkUrl, { method: 'HEAD' });
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Stream not available (${response.status})`);
|
||||
}
|
||||
|
||||
// Создаем AbortController для отмены запроса
|
||||
abortController = new AbortController();
|
||||
|
||||
const url = `${checkUrl}&t=${Date.now()}`;
|
||||
videoStream.src = url;
|
||||
videoStream.load();
|
||||
|
||||
// Убираем старые обработчики
|
||||
videoStream.oncanplay = null;
|
||||
videoStream.onerror = null;
|
||||
videoStream.onended = null;
|
||||
|
||||
// Обработчик успешной загрузки
|
||||
videoStream.oncanplay = function() {
|
||||
if (!isStreaming) {
|
||||
this.play().catch(err => {
|
||||
console.log('Autoplay prevented:', err);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Обработчик ошибок - без автоматического ретрая
|
||||
videoStream.onerror = function(e) {
|
||||
console.error('Video stream error:', e);
|
||||
// Проверяем, не была ли это остановка пользователем
|
||||
if (isStreaming) {
|
||||
showNotification('Ошибка видеопотока', 'error');
|
||||
stopVideoStream();
|
||||
}
|
||||
};
|
||||
|
||||
// При завершении потока - останавливаем
|
||||
videoStream.onended = function() {
|
||||
if (isStreaming) {
|
||||
console.log('Video stream ended');
|
||||
stopVideoStream();
|
||||
}
|
||||
};
|
||||
|
||||
await videoStream.play();
|
||||
|
||||
isStreaming = true;
|
||||
if (status) {
|
||||
status.textContent = '📹 Воспроизведение...';
|
||||
status.className = 'live-status playing';
|
||||
}
|
||||
showNotification('Начат просмотр видео канала ' + channelId, 'success');
|
||||
|
||||
} catch (error) {
|
||||
console.error('Video stream error:', error);
|
||||
// Не ретраим, просто показываем ошибку
|
||||
showNotification('Ошибка подключения к видеопотоку: ' + error.message, 'error');
|
||||
stopVideoStream();
|
||||
}
|
||||
}
|
||||
|
||||
export function stopVideoStream() {
|
||||
// Прерываем все запросы
|
||||
if (abortController) {
|
||||
abortController.abort();
|
||||
abortController = null;
|
||||
}
|
||||
|
||||
if (videoStream) {
|
||||
videoStream.pause();
|
||||
// Убираем обработчики чтобы они не вызывались после остановки
|
||||
videoStream.oncanplay = null;
|
||||
videoStream.onerror = null;
|
||||
videoStream.onended = null;
|
||||
// Не очищаем src полностью, чтобы можно было перезапустить
|
||||
// но удаляем источник чтобы остановить загрузку
|
||||
videoStream.removeAttribute('src');
|
||||
videoStream.load();
|
||||
}
|
||||
|
||||
isStreaming = false;
|
||||
currentChannel = null;
|
||||
streamRetryCount = 0;
|
||||
|
||||
const playBtn = document.getElementById('playVideoStreamBtn');
|
||||
const stopBtn = document.getElementById('stopVideoStreamBtn');
|
||||
const status = document.getElementById('videoStreamStatus');
|
||||
const container = document.getElementById('videoStreamContainer');
|
||||
|
||||
if (playBtn) playBtn.disabled = false;
|
||||
if (stopBtn) stopBtn.disabled = true;
|
||||
if (status) {
|
||||
status.textContent = 'Остановлено';
|
||||
status.className = 'live-status stopped';
|
||||
}
|
||||
if (container) container.style.display = 'none';
|
||||
}
|
||||
|
||||
export function isVideoStreamActive() {
|
||||
return isStreaming;
|
||||
}
|
||||
|
||||
export function getCurrentVideoChannel() {
|
||||
return currentChannel;
|
||||
}
|
||||
@@ -1011,4 +1011,65 @@ header h1 {
|
||||
padding: 8px 14px;
|
||||
font-size: 11px;
|
||||
}
|
||||
}
|
||||
/* Video stream player */
|
||||
.video-stream-player {
|
||||
padding: 10px;
|
||||
background: #0d0d0d;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.video-stream-player .stream-controls {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.video-stream-player .btn-live {
|
||||
background: #30d158;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.video-stream-player .btn-live:hover:not(:disabled) {
|
||||
background: #2bb350;
|
||||
}
|
||||
|
||||
.video-stream-player .btn-stop-live {
|
||||
background: #ff3b30;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.video-stream-player .btn-stop-live:hover:not(:disabled) {
|
||||
background: #e6352b;
|
||||
}
|
||||
|
||||
.video-stream-player .live-status {
|
||||
margin-top: 10px;
|
||||
padding: 4px 10px;
|
||||
border-radius: 5px;
|
||||
font-size: 10px;
|
||||
text-align: center;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.video-stream-player .live-status.playing {
|
||||
background: #30d158;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.video-stream-player .live-status.stopped {
|
||||
background: #3a3a3a;
|
||||
color: #aaaaaa;
|
||||
}
|
||||
|
||||
.video-stream-player .live-status.buffering {
|
||||
background: #ff9f0a;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.video-stream-player video {
|
||||
width: 100%;
|
||||
max-width: 640px;
|
||||
border-radius: 8px;
|
||||
background: #000;
|
||||
}
|
||||
Reference in New Issue
Block a user