func mapUnitToJob(entity *schema.Unit, mm map[string]*machine.MachineState) (*job.Job, error) { contents, err := base64.StdEncoding.DecodeString(entity.FileContents) if err != nil { return nil, err } u, err := unit.NewUnit(string(contents)) if err != nil { return nil, err } js := job.JobState(entity.CurrentState) j := job.Job{ Name: entity.Name, State: &js, Unit: *u, } // populate a UnitState object only if the entity // is actually reporting relevant data if entity.Systemd != nil { j.UnitState = &unit.UnitState{ LoadState: entity.Systemd.LoadState, ActiveState: entity.Systemd.ActiveState, SubState: entity.Systemd.SubState, } if len(entity.Systemd.MachineID) > 0 { j.UnitState.MachineID = entity.Systemd.MachineID } } return &j, nil }
func (r *EtcdRegistry) hydrateJob(j *job.Job) (err error) { j.TargetState, err = r.jobTargetState(j.Name) if err != nil { return } j.TargetMachineID, err = r.jobTargetMachine(j.Name) if err != nil { return } j.UnitState = r.getUnitState(j.Name) j.State = r.determineJobState(j.Name) return }
func (r *EtcdRegistry) hydrateJob(j *job.Job) error { tgt, err := r.jobTargetState(j.Name) if err != nil { return err } j.TargetState = tgt j.TargetMachineID, err = r.jobTargetMachine(j.Name) if err != nil { return err } j.UnitState = r.getUnitState(j.Name) j.State = r.determineJobState(j.Name) return nil }
func (r *EtcdRegistry) parseJobDir(j *job.Job, dir *etcd.Node) (err error) { var heartbeat string for _, node := range dir.Nodes { switch node.Key { case r.jobTargetStatePath(j.Name): j.TargetState, err = job.ParseJobState(node.Value) if err != nil { return } case r.jobTargetAgentPath(j.Name): j.TargetMachineID = node.Value case r.jobHeartbeatPath(j.Name): heartbeat = node.Value } } j.UnitState = r.getUnitState(j.Name) js := determineJobState(j, heartbeat) j.State = &js return }