611
611
func (context *statusContext) processApplication(service *state.Application) params.ApplicationStatus {
612
serviceCharmURL, _ := service.CharmURL()
612
serviceCharm, _, err := service.Charm()
614
return params.ApplicationStatus{Err: common.ServerError(err)}
613
617
var processedStatus = params.ApplicationStatus{
614
Charm: serviceCharmURL.String(),
618
Charm: serviceCharm.URL().String(),
615
619
Series: service.Series(),
616
620
Exposed: service.IsExposed(),
617
621
Life: processLife(service),
620
if latestCharm, ok := context.latestCharms[*serviceCharmURL.WithRevision(-1)]; ok && latestCharm != nil {
621
if latestCharm.Revision() > serviceCharmURL.Revision {
624
if latestCharm, ok := context.latestCharms[*serviceCharm.URL().WithRevision(-1)]; ok && latestCharm != nil {
625
if latestCharm.Revision() > serviceCharm.URL().Revision {
622
626
processedStatus.CanUpgradeTo = latestCharm.String()
627
630
processedStatus.Relations, processedStatus.SubordinateTo, err = context.processServiceRelations(service)
629
processedStatus.Err = err
632
processedStatus.Err = common.ServerError(err)
630
633
return processedStatus
632
635
units := context.units[service.Name()]
633
636
if service.IsPrincipal() {
634
processedStatus.Units = context.processUnits(units, serviceCharmURL.String())
637
processedStatus.Units = context.processUnits(units, serviceCharm.URL().String())
636
639
applicationStatus, err := service.Status()
638
processedStatus.Err = err
641
processedStatus.Err = common.ServerError(err)
639
642
return processedStatus
641
644
processedStatus.Status.Status = applicationStatus.Status.String()
643
646
processedStatus.Status.Data = applicationStatus.Data
644
647
processedStatus.Status.Since = applicationStatus.Since
646
processedStatus.MeterStatuses = context.processUnitMeterStatuses(units)
649
metrics := serviceCharm.Metrics()
650
planRequired := metrics != nil && metrics.Plan != nil && metrics.Plan.Required
651
if planRequired || len(service.MetricCredentials()) > 0 {
652
processedStatus.MeterStatuses = context.processUnitMeterStatuses(units)
648
655
versions := make([]status.StatusInfo, 0, len(units))
649
656
for _, unit := range units {
651
658
status.StatusHistoryFilter{Size: 1},
654
processedStatus.Err = err
661
processedStatus.Err = common.ServerError(err)
655
662
return processedStatus
657
664
// Even though we fully expect there to be historical values there,
797
804
// processMachine retrieves version and status information for the given machine.
798
805
// It also returns deprecated legacy status information.
799
806
func processMachine(machine *state.Machine) (out params.DetailedStatus) {
800
statusInfo, err := machine.Status()
807
statusInfo, err := common.MachineStatus(machine)
801
808
populateStatusFromStatusInfoAndErr(&out, statusInfo, err)
803
810
out.Life = processLife(machine)