~juju-qa/ubuntu/xenial/juju/xenial-2.0-beta3

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/state/metricsmanager.go

  • Committer: Martin Packman
  • Date: 2016-03-30 19:31:08 UTC
  • mfrom: (1.1.41)
  • Revision ID: martin.packman@canonical.com-20160330193108-h9iz3ak334uk0z5r
Merge new upstream source 2.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
        "time"
8
8
 
9
9
        "github.com/juju/errors"
10
 
        "github.com/juju/loggo"
11
10
        "gopkg.in/mgo.v2"
12
11
        "gopkg.in/mgo.v2/bson"
13
12
        "gopkg.in/mgo.v2/txn"
14
13
)
15
14
 
16
 
var metricsManagerLogger = loggo.GetLogger("juju.state.metricsmanager")
17
 
 
18
15
const (
19
16
        defaultGracePeriod                      = 7 * 24 * time.Hour // 1 week in hours
20
17
        metricsManagerConsecutiveErrorThreshold = 3
28
25
}
29
26
 
30
27
type metricsManagerDoc struct {
31
 
        DocID              string        `bson:"_id"`
32
 
        ModelUUID          string        `bson:"model-uuid"`
33
28
        LastSuccessfulSend time.Time     `bson:"lastsuccessfulsend"`
34
29
        ConsecutiveErrors  int           `bson:"consecutiveerrors"`
35
30
        GracePeriod        time.Duration `bson:"graceperiod"`
36
31
}
37
32
 
38
 
// DocID returns the Document id of the MetricsManager.
39
 
func (m *MetricsManager) DocID() string {
40
 
        return m.doc.DocID
41
 
}
42
 
 
43
 
// ModelUUID returns the model UUID of the Metrics Manager.
44
 
func (m *MetricsManager) ModelUUID() string {
45
 
        return m.doc.ModelUUID
46
 
}
47
 
 
48
33
// LastSuccessfulSend returns the time of the last successful send.
49
34
func (m *MetricsManager) LastSuccessfulSend() time.Time {
50
35
        return m.doc.LastSuccessfulSend
75
60
        mm := &MetricsManager{
76
61
                st: st,
77
62
                doc: metricsManagerDoc{
78
 
                        DocID:              st.docID(metricsManagerKey),
79
 
                        ModelUUID:          st.ModelUUID(),
80
63
                        LastSuccessfulSend: time.Time{},
81
64
                        ConsecutiveErrors:  0,
82
65
                        GracePeriod:        defaultGracePeriod,
83
66
                }}
84
 
        buildTxn := func(attempt int) ([]txn.Op, error) {
85
 
                if attempt > 0 {
86
 
                        return nil, errors.NotFoundf("metrics manager")
87
 
                }
88
 
                return []txn.Op{{
89
 
                        C:      metricsManagerC,
90
 
                        Id:     st.docID(metricsManagerKey),
91
 
                        Assert: txn.DocMissing,
92
 
                        Insert: mm.doc,
93
 
                }}, nil
94
 
        }
95
 
        err := st.run(buildTxn)
 
67
        ops := []txn.Op{{
 
68
                C:      metricsManagerC,
 
69
                Id:     metricsManagerKey,
 
70
                Assert: txn.DocMissing,
 
71
                Insert: mm.doc,
 
72
        }}
 
73
        err := st.runTransaction(ops)
96
74
        if err != nil {
97
75
                return nil, onAbort(err, errors.NotFoundf("metrics manager"))
98
76
        }
103
81
        coll, closer := st.getCollection(metricsManagerC)
104
82
        defer closer()
105
83
        var doc metricsManagerDoc
106
 
        err := coll.FindId(st.docID(metricsManagerKey)).One(&doc)
 
84
        err := coll.FindId(metricsManagerKey).One(&doc)
107
85
        if err == mgo.ErrNotFound {
108
86
                return nil, errors.NotFoundf("metrics manager")
109
87
        } else if err != nil {
113
91
}
114
92
 
115
93
func (m *MetricsManager) updateMetricsManager(update bson.M) error {
116
 
        buildTxn := func(attempt int) ([]txn.Op, error) {
117
 
                return []txn.Op{{
118
 
                        C:      metricsManagerC,
119
 
                        Id:     m.st.docID(metricsManagerKey),
120
 
                        Assert: txn.DocExists,
121
 
                        Update: update,
122
 
                }}, nil
123
 
        }
124
 
        err := m.st.run(buildTxn)
 
94
        ops := []txn.Op{{
 
95
                C:      metricsManagerC,
 
96
                Id:     metricsManagerKey,
 
97
                Assert: txn.DocExists,
 
98
                Update: update,
 
99
        }}
 
100
        err := m.st.runTransaction(ops)
125
101
        if err == txn.ErrAborted {
126
102
                err = errors.NotFoundf("metrics manager")
127
103
        }