Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / nova / nova_instance_ @ 22fbe167

Historique | Voir | Annoter | Télécharger (2,63 ko)

1 22fbe167 Mehdi Abaakouk
#!/usr/bin/env python
2
#
3
# Plugin to monitor status of Floating IPs in Nova
4
#
5
# To monitor instance states, link instance_states to this file.
6
# E.g.
7
#    ln -s /usr/share/munin/plugins/nova_instance_states /etc/munin/plugins/
8
#
9
# Needs following minimal configuration in plugin-conf.d/nova:
10
#   [nova_*]
11
#   user nova
12
#
13
# Magic markers
14
#%# capabilities=autoconf
15
#%# family=nova
16
17
from nova import context
18
from nova import db
19
from nova import flags
20
from nova import utils
21
import sys
22
23
24
class InstanceState(object):
25
    instance_counts = None
26
    states = None
27
28
    @classmethod
29
    def init(cls, metric):
30
        if cls.states and cls.instance_counts:
31
            return
32
        ctxt = context.get_admin_context()
33
        instances = db.instance_get_all(ctxt)
34
        cls.instance_counts = {}
35
        instance_types = {}
36
        for it in db.instance_type_get_all(ctxt, True).values():
37
            instance_types[it['id']] = it['name']
38
39
        if metric == 'state':
40
            metric = 'state_description'
41
42
        for instance in instances:
43
            i = dict(instance)
44
            i['instance_type'] = i['type'] = instance_types.get(
45
                                                 instance.instance_type_id,
46
                                                '(unknown')
47
            val = cls.instance_counts.get(i[metric], 0)
48
            cls.instance_counts[i[metric]] = val + 1
49
        cls.states = cls.instance_counts.keys()
50
51
    @classmethod
52
    def get_states(cls, metric):
53
        InstanceState.init(metric)
54
        return cls.states
55
56
    @classmethod
57
    def get_instance_counts(cls, metric):
58
        InstanceState.init(metric)
59
        return cls.instance_counts
60
61
62
def print_config(metric):
63
    states = InstanceState.get_states(metric)
64
    print 'graph_title Nova Instance States'
65
    print 'graph_vlabel instances'
66
    print 'graph_args --base 1000 --lower-limit 0'
67
    print 'graph_category nova'
68
    print 'graph_scale no'
69
    print 'graph_info This graph shows the number of instances by state'
70
    for state in states:
71
        print '%s.label %s' % (state, state)
72
        print '%s.draw LINE2' % state
73
        print '%s.info %s IPs' % (state, state)
74
75
76
def print_values(metric):
77
    status = InstanceState.get_instance_counts(metric)
78
    for (state, value) in status.iteritems():
79
        print '%s.value %s' % (state, value)
80
81
82
if __name__ == '__main__':
83
    argv = sys.argv[:]
84
    utils.default_flagfile()
85
    flags.FLAGS(sys.argv)
86
    metric = argv[0].split('nova_instance_').pop() or 'state'
87
88
    if len(argv) > 1:
89
        if argv[1] == 'config':
90
            print_config(metric)
91
        elif argv[1] == 'autoconf':
92
            print 'yes'
93
    else:
94
        print_values(metric)