()
| 138 | } |
| 139 | |
| 140 | func (sm *ServiceManager) ListServices() []ServiceStatus { |
| 141 | sm.Mu.RLock() |
| 142 | defer sm.Mu.RUnlock() |
| 143 | |
| 144 | var serviceStatuses []ServiceStatus |
| 145 | for name, service := range sm.Services { |
| 146 | service.mu.RLock() |
| 147 | |
| 148 | status := ServiceStatus{ |
| 149 | Name: name, |
| 150 | Status: service.Status, |
| 151 | PID: service.PID, |
| 152 | Uptime: time.Since(service.StartTime).Round(time.Second), |
| 153 | WorkDir: service.WorkDir, |
| 154 | RAM: service.Config.RAM, |
| 155 | RAMBytes: service.Config.RAMBytes, |
| 156 | } |
| 157 | |
| 158 | if service.Status == "running" { |
| 159 | usage, err := getProcessTreeRAM(service.PID) |
| 160 | if err == nil { |
| 161 | status.RAMUsage = usage |
| 162 | status.RAMUsageStr = utils.ConvertBytesToString(usage) |
| 163 | } else { |
| 164 | status.RAMUsage = 0 |
| 165 | status.RAMUsageStr = "N/A" |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | serviceStatuses = append(serviceStatuses, status) |
| 170 | service.mu.RUnlock() |
| 171 | } |
| 172 | |
| 173 | return serviceStatuses |
| 174 | } |
| 175 | |
| 176 | func (sm *ServiceManager) ListAllowedServices(username string) []ServiceStatus { |
| 177 | sm.Mu.RLock() |
nothing calls this directly
no test coverage detected