mirror of https://github.com/jetkvm/kvm.git
[WIP] Updates: audio output & input subprocesses memory & cpu usage
This commit is contained in:
parent
879ea5e472
commit
38ad145863
|
@ -272,23 +272,89 @@ func (aeb *AudioEventBroadcaster) sendCurrentMetrics(subscriber *AudioEventSubsc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send microphone process metrics
|
// Send microphone process metrics (always send, even when subprocess is not running)
|
||||||
if inputSupervisor := GetAudioInputIPCSupervisor(); inputSupervisor != nil {
|
sessionProvider = GetSessionProvider()
|
||||||
if processMetrics := inputSupervisor.GetProcessMetrics(); processMetrics != nil {
|
if sessionProvider.IsSessionActive() {
|
||||||
|
if inputManager := sessionProvider.GetAudioInputManager(); inputManager != nil {
|
||||||
|
if inputSupervisor := inputManager.GetSupervisor(); inputSupervisor != nil {
|
||||||
|
if processMetrics := inputSupervisor.GetProcessMetrics(); processMetrics != nil {
|
||||||
|
// Subprocess is running, send actual metrics
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: processMetrics.PID,
|
||||||
|
CPUPercent: processMetrics.CPUPercent,
|
||||||
|
MemoryRSS: processMetrics.MemoryRSS,
|
||||||
|
MemoryVMS: processMetrics.MemoryVMS,
|
||||||
|
MemoryPercent: processMetrics.MemoryPercent,
|
||||||
|
Running: inputSupervisor.IsRunning(),
|
||||||
|
ProcessName: processMetrics.ProcessName,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.sendToSubscriber(subscriber, micProcessEvent)
|
||||||
|
} else {
|
||||||
|
// Supervisor exists but no process metrics (subprocess not running)
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: 0,
|
||||||
|
CPUPercent: 0.0,
|
||||||
|
MemoryRSS: 0,
|
||||||
|
MemoryVMS: 0,
|
||||||
|
MemoryPercent: 0.0,
|
||||||
|
Running: false,
|
||||||
|
ProcessName: "audio-input-server",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.sendToSubscriber(subscriber, micProcessEvent)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// No supervisor (microphone never started)
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: 0,
|
||||||
|
CPUPercent: 0.0,
|
||||||
|
MemoryRSS: 0,
|
||||||
|
MemoryVMS: 0,
|
||||||
|
MemoryPercent: 0.0,
|
||||||
|
Running: false,
|
||||||
|
ProcessName: "audio-input-server",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.sendToSubscriber(subscriber, micProcessEvent)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// No input manager (no session)
|
||||||
micProcessEvent := AudioEvent{
|
micProcessEvent := AudioEvent{
|
||||||
Type: AudioEventMicProcessMetrics,
|
Type: AudioEventMicProcessMetrics,
|
||||||
Data: ProcessMetricsData{
|
Data: ProcessMetricsData{
|
||||||
PID: processMetrics.PID,
|
PID: 0,
|
||||||
CPUPercent: processMetrics.CPUPercent,
|
CPUPercent: 0.0,
|
||||||
MemoryRSS: processMetrics.MemoryRSS,
|
MemoryRSS: 0,
|
||||||
MemoryVMS: processMetrics.MemoryVMS,
|
MemoryVMS: 0,
|
||||||
MemoryPercent: processMetrics.MemoryPercent,
|
MemoryPercent: 0.0,
|
||||||
Running: inputSupervisor.IsRunning(),
|
Running: false,
|
||||||
ProcessName: processMetrics.ProcessName,
|
ProcessName: "audio-input-server",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
aeb.sendToSubscriber(subscriber, micProcessEvent)
|
aeb.sendToSubscriber(subscriber, micProcessEvent)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// No active session
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: 0,
|
||||||
|
CPUPercent: 0.0,
|
||||||
|
MemoryRSS: 0,
|
||||||
|
MemoryVMS: 0,
|
||||||
|
MemoryPercent: 0.0,
|
||||||
|
Running: false,
|
||||||
|
ProcessName: "audio-input-server",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.sendToSubscriber(subscriber, micProcessEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,23 +448,89 @@ func (aeb *AudioEventBroadcaster) startMetricsBroadcasting() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Broadcast microphone process metrics
|
// Broadcast microphone process metrics (always broadcast, even when subprocess is not running)
|
||||||
if inputSupervisor := GetAudioInputIPCSupervisor(); inputSupervisor != nil {
|
sessionProvider = GetSessionProvider()
|
||||||
if processMetrics := inputSupervisor.GetProcessMetrics(); processMetrics != nil {
|
if sessionProvider.IsSessionActive() {
|
||||||
|
if inputManager := sessionProvider.GetAudioInputManager(); inputManager != nil {
|
||||||
|
if inputSupervisor := inputManager.GetSupervisor(); inputSupervisor != nil {
|
||||||
|
if processMetrics := inputSupervisor.GetProcessMetrics(); processMetrics != nil {
|
||||||
|
// Subprocess is running, broadcast actual metrics
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: processMetrics.PID,
|
||||||
|
CPUPercent: processMetrics.CPUPercent,
|
||||||
|
MemoryRSS: processMetrics.MemoryRSS,
|
||||||
|
MemoryVMS: processMetrics.MemoryVMS,
|
||||||
|
MemoryPercent: processMetrics.MemoryPercent,
|
||||||
|
Running: inputSupervisor.IsRunning(),
|
||||||
|
ProcessName: processMetrics.ProcessName,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.broadcast(micProcessEvent)
|
||||||
|
} else {
|
||||||
|
// Supervisor exists but no process metrics (subprocess not running)
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: 0,
|
||||||
|
CPUPercent: 0.0,
|
||||||
|
MemoryRSS: 0,
|
||||||
|
MemoryVMS: 0,
|
||||||
|
MemoryPercent: 0.0,
|
||||||
|
Running: false,
|
||||||
|
ProcessName: "audio-input-server",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.broadcast(micProcessEvent)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// No supervisor (microphone never started)
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: 0,
|
||||||
|
CPUPercent: 0.0,
|
||||||
|
MemoryRSS: 0,
|
||||||
|
MemoryVMS: 0,
|
||||||
|
MemoryPercent: 0.0,
|
||||||
|
Running: false,
|
||||||
|
ProcessName: "audio-input-server",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.broadcast(micProcessEvent)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// No input manager (no session)
|
||||||
micProcessEvent := AudioEvent{
|
micProcessEvent := AudioEvent{
|
||||||
Type: AudioEventMicProcessMetrics,
|
Type: AudioEventMicProcessMetrics,
|
||||||
Data: ProcessMetricsData{
|
Data: ProcessMetricsData{
|
||||||
PID: processMetrics.PID,
|
PID: 0,
|
||||||
CPUPercent: processMetrics.CPUPercent,
|
CPUPercent: 0.0,
|
||||||
MemoryRSS: processMetrics.MemoryRSS,
|
MemoryRSS: 0,
|
||||||
MemoryVMS: processMetrics.MemoryVMS,
|
MemoryVMS: 0,
|
||||||
MemoryPercent: processMetrics.MemoryPercent,
|
MemoryPercent: 0.0,
|
||||||
Running: inputSupervisor.IsRunning(),
|
Running: false,
|
||||||
ProcessName: processMetrics.ProcessName,
|
ProcessName: "audio-input-server",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
aeb.broadcast(micProcessEvent)
|
aeb.broadcast(micProcessEvent)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// No active session
|
||||||
|
micProcessEvent := AudioEvent{
|
||||||
|
Type: AudioEventMicProcessMetrics,
|
||||||
|
Data: ProcessMetricsData{
|
||||||
|
PID: 0,
|
||||||
|
CPUPercent: 0.0,
|
||||||
|
MemoryRSS: 0,
|
||||||
|
MemoryVMS: 0,
|
||||||
|
MemoryPercent: 0.0,
|
||||||
|
Running: false,
|
||||||
|
ProcessName: "audio-input-server",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
aeb.broadcast(micProcessEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue