1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package plugin
- import (
- "sync"
- "time"
- "github.com/containerd/containerd/remotes/docker"
- )
- func newPushJobs(tracker docker.StatusTracker) *pushJobs {
- return &pushJobs{
- names: make(map[string]string),
- t: tracker,
- }
- }
- type pushJobs struct {
- t docker.StatusTracker
- mu sync.Mutex
- jobs []string
- // maps job ref to a name
- names map[string]string
- }
- func (p *pushJobs) add(id, name string) {
- p.mu.Lock()
- defer p.mu.Unlock()
- if _, ok := p.names[id]; ok {
- return
- }
- p.jobs = append(p.jobs, id)
- p.names[id] = name
- }
- func (p *pushJobs) status() []contentStatus {
- statuses := make([]contentStatus, 0, len(p.jobs))
- p.mu.Lock()
- defer p.mu.Unlock()
- for _, j := range p.jobs {
- var s contentStatus
- s.Ref = p.names[j]
- status, err := p.t.GetStatus(j)
- if err != nil {
- s.Status = "Waiting"
- } else {
- s.Total = status.Total
- s.Offset = status.Offset
- s.StartedAt = status.StartedAt
- s.UpdatedAt = status.UpdatedAt
- if status.UploadUUID == "" {
- s.Status = "Upload complete"
- } else {
- s.Status = "Uploading"
- }
- }
- statuses = append(statuses, s)
- }
- return statuses
- }
- type contentStatus struct {
- Status string
- Total int64
- Offset int64
- StartedAt time.Time
- UpdatedAt time.Time
- Ref string
- }
|