adjast wss + docker logs
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user