github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/uniter/agent.go (about)

     1  // Copyright 2012-2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package uniter
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  
     9  	"github.com/juju/juju/core/model"
    10  	"github.com/juju/juju/core/status"
    11  )
    12  
    13  // setAgentStatus sets the unit's status if it has changed since last time this method was called.
    14  func setAgentStatus(u *Uniter, agentStatus status.Status, info string, data map[string]interface{}) error {
    15  	u.setStatusMutex.Lock()
    16  	defer u.setStatusMutex.Unlock()
    17  	if u.lastReportedStatus == agentStatus && u.lastReportedMessage == info {
    18  		return nil
    19  	}
    20  	u.lastReportedStatus = agentStatus
    21  	u.lastReportedMessage = info
    22  	u.logger.Debugf("[AGENT-STATUS] %s: %s", agentStatus, info)
    23  	return u.unit.SetAgentStatus(agentStatus, info, data)
    24  }
    25  
    26  // reportAgentError reports if there was an error performing an agent operation.
    27  func reportAgentError(u *Uniter, userMessage string, err error) {
    28  	// If a non-nil error is reported (e.g. due to an operation failing),
    29  	// set the agent status to Failed.
    30  	if err == nil {
    31  		return
    32  	}
    33  	u.logger.Errorf("%s: %v", userMessage, err)
    34  	err2 := setAgentStatus(u, status.Failed, userMessage, nil)
    35  	if err2 != nil {
    36  		u.logger.Errorf("updating agent status: %v", err2)
    37  	}
    38  }
    39  
    40  // setUpgradeSeriesStatus sets the upgrade series status.
    41  func setUpgradeSeriesStatus(u *Uniter, status model.UpgradeSeriesStatus, reason string) error {
    42  	err := u.unit.SetUpgradeSeriesStatus(status, reason)
    43  	return errors.Annotatef(err, "cannot set upgrade series status to %q with reason: %q", status, reason)
    44  }