mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-30 19:26:11 -04:00
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package nmdata
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
)
|
|
|
|
// Process is the slim twin of posture.Process.
|
|
type Process struct {
|
|
LinuxPath string
|
|
MacPath string
|
|
WindowsPath string
|
|
}
|
|
|
|
// ProcessCheck is the slim twin of posture.ProcessCheck.
|
|
type ProcessCheck struct {
|
|
Processes []Process
|
|
}
|
|
|
|
func (p *ProcessCheck) check(peer *Peer) (bool, error) {
|
|
peerActiveProcesses := extractPeerActiveProcesses(peer.Meta.Files)
|
|
|
|
var pathSelector func(Process) string
|
|
switch peer.Meta.GoOS {
|
|
case "linux":
|
|
pathSelector = func(process Process) string { return process.LinuxPath }
|
|
case "darwin":
|
|
pathSelector = func(process Process) string { return process.MacPath }
|
|
case "windows":
|
|
pathSelector = func(process Process) string { return process.WindowsPath }
|
|
default:
|
|
return false, fmt.Errorf("unsupported peer's operating system: %s", peer.Meta.GoOS)
|
|
}
|
|
|
|
return p.areAllProcessesRunning(peerActiveProcesses, pathSelector), nil
|
|
}
|
|
|
|
func (p *ProcessCheck) areAllProcessesRunning(activeProcesses []string, pathSelector func(Process) string) bool {
|
|
for _, process := range p.Processes {
|
|
path := pathSelector(process)
|
|
if path == "" || !slices.Contains(activeProcesses, path) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func extractPeerActiveProcesses(files []File) []string {
|
|
activeProcesses := make([]string, 0, len(files))
|
|
for _, file := range files {
|
|
if file.ProcessIsRunning {
|
|
activeProcesses = append(activeProcesses, file.Path)
|
|
}
|
|
}
|
|
return activeProcesses
|
|
}
|