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 }