adjast wss + docker logs

This commit is contained in:
2026-05-11 13:10:00 +03:00
parent 724b74b3c8
commit 4d574d5fdf
9 changed files with 327 additions and 67 deletions
@@ -1,8 +1,10 @@
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import {Observable, Subject} from 'rxjs';
import { GlobalConstants } from '../global-constants';
import { webSocket, WebSocketSubject } from 'rxjs/webSocket';
import SockJS from 'sockjs-client';
import { Client, IMessage } from '@stomp/stompjs';
// Унифицируем название интерфейса для списка контейнеров
export interface DockerContainer {
@@ -44,6 +46,7 @@ export interface ProjectDetailResponse {
export class ProjectService {
// Используем baseUrl, как определено в начале класса
private baseUrl = GlobalConstants.API_URL;
private stompClient: Client | null = null;
constructor(private http: HttpClient) {}
@@ -80,12 +83,40 @@ export class ProjectService {
}
// WebSocket для трансляции логов в реальном времени[cite: 3, 5]
public connectToDockerLogs(projectId: string): WebSocketSubject<any> {
const socketUrl = this.baseUrl.replace('http', 'ws') + '/ws-jambotron/' + projectId;
return webSocket({
url: socketUrl,
deserializer: (msg) => msg.data
public connectToDockerLogs(containerId: string): Observable<string> {
const logSubject = new Subject<string>();
// Твой эндпоинт из WebSocketConfig.java
const socket = new SockJS(`${this.baseUrl}/ws-jambotron`);
this.stompClient = new Client({
webSocketFactory: () => socket,
debug: (str) => console.log(str),
onConnect: () => {
// 1. Подписываемся на логи конкретного контейнера
this.stompClient?.subscribe(`/topic/logs/${containerId}`, (message: IMessage) => {
logSubject.next(message.body);
});
// 2. Отправляем сигнал бэкенду начать стриминг (согласно LogController)
this.stompClient?.publish({
destination: '/app/start-logs',
body: containerId
});
},
onStompError: (frame) => {
logSubject.error('Broker error: ' + frame.headers['message']);
}
});
this.stompClient.activate();
return logSubject.asObservable();
}
public disconnectLogs(): void {
if (this.stompClient) {
this.stompClient.deactivate();
}
}
// ИСПРАВЛЕНО: возвращаем DockerContainer и используем правильный baseUrl[cite: 5]