Beispiel #1
0
// StatusHistory returns a slice of past statuses for several entities.
func (c *Client) StatusHistory(args params.StatusHistoryArgs) (params.StatusHistoryResults, error) {
	if args.Size < 1 {
		return params.StatusHistoryResults{}, errors.Errorf("invalid history size: %d", args.Size)
	}
	history := params.StatusHistoryResults{}
	statuses := []params.DetailedStatus{}
	var err error
	switch args.Kind {
	case params.KindUnit, params.KindWorkload, params.KindUnitAgent:
		statuses, err = c.unitStatusHistory(args.Name, args.Size, args.Kind)
		if err != nil {
			return params.StatusHistoryResults{}, errors.Annotatef(err, "fetching unit status history for %q", args.Name)
		}
	case params.KindMachineInstance:
		mIStatuses, err := c.machineInstanceStatusHistory(args.Name, args.Size, params.KindMachineInstance)
		if err != nil {
			return params.StatusHistoryResults{}, errors.Annotate(err, "fetching machine instance status history")
		}
		statuses = mIStatuses
	case params.KindMachine:
		mStatuses, err := c.machineStatusHistory(args.Name, args.Size, params.KindMachine)
		if err != nil {
			return params.StatusHistoryResults{}, errors.Annotate(err, "fetching juju agent status history for machine")
		}
		statuses = mStatuses
	case params.KindContainerInstance:
		cIStatuses, err := c.machineStatusHistory(args.Name, args.Size, params.KindContainerInstance)
		if err != nil {
			return params.StatusHistoryResults{}, errors.Annotate(err, "fetching container status history")
		}
		statuses = cIStatuses
	case params.KindContainer:
		cStatuses, err := c.machineStatusHistory(args.Name, args.Size, params.KindContainer)
		if err != nil {
			return params.StatusHistoryResults{}, errors.Annotate(err, "fetching juju agent status history for container")
		}
		statuses = cStatuses
	}
	history.Statuses = statuses
	sort.Sort(sortableStatuses(history.Statuses))
	return history, nil
}