mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-20 03:32:43 +00:00
103 lines
2.5 KiB
Go
103 lines
2.5 KiB
Go
package internal
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// A MirrorStatus represents a msg when
|
|
// a worker has done syncing
|
|
type MirrorStatus struct {
|
|
Name string `json:"name"`
|
|
Worker string `json:"worker"`
|
|
IsMaster bool `json:"is_master"`
|
|
Status SyncStatus `json:"status"`
|
|
LastUpdate time.Time `json:"last_update"`
|
|
LastEnded time.Time `json:"last_ended"`
|
|
Scheduled time.Time `json:"next_schedule"`
|
|
Upstream string `json:"upstream"`
|
|
Size string `json:"size"`
|
|
ErrorMsg string `json:"error_msg"`
|
|
}
|
|
|
|
// A WorkerStatus is the information struct that describe
|
|
// a worker, and sent from the manager to clients.
|
|
type WorkerStatus struct {
|
|
ID string `json:"id"`
|
|
URL string `json:"url"` // worker url
|
|
Token string `json:"token"` // session token
|
|
LastOnline time.Time `json:"last_online"` // last seen
|
|
}
|
|
|
|
type MirrorSchedules struct {
|
|
Schedules []MirrorSchedule `json:"schedules"`
|
|
}
|
|
|
|
type MirrorSchedule struct {
|
|
MirrorName string `json:"name"`
|
|
NextSchedule time.Time `json:"next_schedule"`
|
|
}
|
|
|
|
// A CmdVerb is an action to a job or worker
|
|
type CmdVerb uint8
|
|
|
|
const (
|
|
// CmdStart start a job
|
|
CmdStart CmdVerb = iota
|
|
// CmdStop stop syncing, but keep the job
|
|
CmdStop
|
|
// CmdDisable disable the job (stops goroutine)
|
|
CmdDisable
|
|
// CmdRestart restart a syncing job
|
|
CmdRestart
|
|
// CmdPing ensures the goroutine is alive
|
|
CmdPing
|
|
|
|
// CmdReload tells a worker to reload mirror config
|
|
CmdReload
|
|
)
|
|
|
|
func (c CmdVerb) String() string {
|
|
switch c {
|
|
case CmdStart:
|
|
return "start"
|
|
case CmdStop:
|
|
return "stop"
|
|
case CmdDisable:
|
|
return "disable"
|
|
case CmdRestart:
|
|
return "restart"
|
|
case CmdPing:
|
|
return "ping"
|
|
case CmdReload:
|
|
return "reload"
|
|
}
|
|
return "unknown"
|
|
}
|
|
|
|
// A WorkerCmd is the command message send from the
|
|
// manager to a worker
|
|
type WorkerCmd struct {
|
|
Cmd CmdVerb `json:"cmd"`
|
|
MirrorID string `json:"mirror_id"`
|
|
Args []string `json:"args"`
|
|
Options map[string]bool `json:"options"`
|
|
}
|
|
|
|
func (c WorkerCmd) String() string {
|
|
if len(c.Args) > 0 {
|
|
return fmt.Sprintf("%v (%s, %v)", c.Cmd, c.MirrorID, c.Args)
|
|
}
|
|
return fmt.Sprintf("%v (%s)", c.Cmd, c.MirrorID)
|
|
}
|
|
|
|
// A ClientCmd is the command message send from client
|
|
// to the manager
|
|
type ClientCmd struct {
|
|
Cmd CmdVerb `json:"cmd"`
|
|
MirrorID string `json:"mirror_id"`
|
|
WorkerID string `json:"worker_id"`
|
|
Args []string `json:"args"`
|
|
Options map[string]bool `json:"options"`
|
|
}
|