func (context *statusContext) processUnit(unit *state.Unit) (status unitStatus) { status.PublicAddress, _ = unit.PublicAddress() for _, port := range unit.OpenedPorts() { status.OpenedPorts = append(status.OpenedPorts, port.String()) } if unit.IsPrincipal() { status.Machine, _ = unit.AssignedMachineId() } status.Life, status.AgentVersion, status.AgentState, status.AgentStateInfo, status.Err = processAgent(unit) if subUnits := unit.SubordinateNames(); len(subUnits) > 0 { status.Subordinates = make(map[string]unitStatus) for _, name := range subUnits { subUnit := context.unitByName(name) // subUnit may be nil if subordinate was filtered out. if subUnit != nil { status.Subordinates[name] = context.processUnit(subUnit) } } } return }
func processUnit(unit *state.Unit) (map[string]interface{}, error) { r := m() if addr, ok := unit.PublicAddress(); ok { r["public-address"] = addr } if id, err := unit.AssignedMachineId(); err == nil { // TODO(dfc) we could make this nicer, ie machine/0 r["machine"] = id } processVersion(r, unit) processStatus(r, unit) return r, nil }
func (context *statusContext) processUnit(unit *state.Unit) (status unitStatus) { status.PublicAddress, _ = unit.PublicAddress() if unit.IsPrincipal() { status.Machine, _ = unit.AssignedMachineId() } status.Life, status.AgentVersion, status.AgentState, status.AgentStateInfo, status.Err = processAgent(unit) if subUnits := unit.SubordinateNames(); len(subUnits) > 0 { status.Subordinates = make(map[string]unitStatus) for _, name := range subUnits { subUnit := context.unitByName(name) status.Subordinates[name] = context.processUnit(subUnit) } } return }