123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package internal
- import (
- "bytes"
- "encoding/json"
- "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"`
- LastStarted time.Time `json:"last_started"`
- 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
- LastRegister time.Time `json:"last_register"` // last register time
- }
- 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 {
- mapping := map[CmdVerb]string{
- CmdStart: "start",
- CmdStop: "stop",
- CmdDisable: "disable",
- CmdRestart: "restart",
- CmdPing: "ping",
- CmdReload: "reload",
- }
- return mapping[c]
- }
- func NewCmdVerbFromString(s string) CmdVerb {
- mapping := map[string]CmdVerb{
- "start": CmdStart,
- "stop": CmdStop,
- "disable": CmdDisable,
- "restart": CmdRestart,
- "ping": CmdPing,
- "reload": CmdReload,
- }
- return mapping[s]
- }
- // Marshal and Unmarshal for CmdVerb
- func (s CmdVerb) MarshalJSON() ([]byte, error) {
- buffer := bytes.NewBufferString(`"`)
- buffer.WriteString(s.String())
- buffer.WriteString(`"`)
- return buffer.Bytes(), nil
- }
- func (s *CmdVerb) UnmarshalJSON(b []byte) error {
- var j string
- err := json.Unmarshal(b, &j)
- if err != nil {
- return err
- }
- *s = NewCmdVerbFromString(j)
- return nil
- }
- // 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"`
- }
|