package sectorstorage import ( "time" "github.com/google/uuid" "github.com/filecoin-project/lotus/extern/sector-storage/storiface" ) func (m *Manager) WorkerStats() map[uuid.UUID]storiface.WorkerStats { m.sched.workersLk.RLock() defer m.sched.workersLk.RUnlock() out := map[uuid.UUID]storiface.WorkerStats{} for id, handle := range m.sched.workers { handle.lk.Lock() out[uuid.UUID(id)] = storiface.WorkerStats{ Info: handle.info, Enabled: handle.enabled, MemUsedMin: handle.active.memUsedMin, MemUsedMax: handle.active.memUsedMax, GpuUsed: handle.active.gpuUsed, CpuUse: handle.active.cpuUse, } handle.lk.Unlock() } return out } func (m *Manager) WorkerJobs() map[uuid.UUID][]storiface.WorkerJob { out := map[uuid.UUID][]storiface.WorkerJob{} calls := map[storiface.CallID]struct{}{} for _, t := range m.sched.workTracker.Running() { out[uuid.UUID(t.worker)] = append(out[uuid.UUID(t.worker)], t.job) calls[t.job.ID] = struct{}{} } m.sched.workersLk.RLock() for id, handle := range m.sched.workers { handle.wndLk.Lock() for wi, window := range handle.activeWindows { for _, request := range window.todo { out[uuid.UUID(id)] = append(out[uuid.UUID(id)], storiface.WorkerJob{ ID: storiface.UndefCall, Sector: request.sector.ID, Task: request.taskType, RunWait: wi + 1, Start: request.start, }) } } handle.wndLk.Unlock() } m.sched.workersLk.RUnlock() m.workLk.Lock() defer m.workLk.Unlock() for id, work := range m.callToWork { _, found := calls[id] if found { continue } var ws WorkState if err := m.work.Get(work).Get(&ws); err != nil { log.Errorf("WorkerJobs: get work %s: %+v", work, err) } wait := storiface.RWRetWait if _, ok := m.results[work]; ok { wait = storiface.RWReturned } if ws.Status == wsDone { wait = storiface.RWRetDone } out[uuid.UUID{}] = append(out[uuid.UUID{}], storiface.WorkerJob{ ID: id, Sector: id.Sector, Task: work.Method, RunWait: wait, Start: time.Unix(ws.StartTime, 0), Hostname: ws.WorkerHostname, }) } return out }