Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigigraph / maj_bdd.py @ 43e9f440

History | View | Annotate | Download (7.22 KB)

1
# -*- coding: utf-8 -*-
2
from sqlalchemy import and_
3

    
4
from vigilo.models import Host, HostGroup
5
from vigilo.models import LowLevelService, ServiceGroup
6
from vigilo.models import PerfDataSource, Graph
7
from vigilo.models.session import DBSession
8

    
9
from datetime import datetime
10

    
11
import transaction
12

    
13
#DBSession.autocommit = True
14

    
15
# Groupe d'hôtes (HostGroup)
16
def create_HostGroup(name, parent=None):
17
    g = DBSession.query(HostGroup).filter(HostGroup.name == name).first()
18
    if not g:
19
        if parent:
20
            g = HostGroup(name=name, idparent=parent.idgroup)
21
        else:
22
            g = HostGroup(name=name)
23
        print "Ajout du Groupe: ", name
24
        DBSession.add(g)
25
    return g
26

    
27
# Hôte (Host)
28
#def create_Host(name, checkhostcmd, hosttpl, snmpcommunity, mainip, snmpport):
29
def create_Host(name):
30
    h = DBSession.query(Host).filter(Host.name == name).first()
31
    if not h:
32
        h = Host(name=name,
33
                 checkhostcmd=u'dummy',
34
                 hosttpl=u'linux',
35
                 mainip=u"127.0.0.1",
36
                 snmpcommunity=u"public",
37
                 snmpport=161,
38
                 weight=0)
39
        print "Ajout de l'hôte: ", name
40
        DBSession.add(h)
41
    return h
42

    
43
#Recherche de l'objet Host à partir du name
44
def get_host(hostname):
45
    """ Return Host object from hostname, None if not available"""
46
    return DBSession.query(Host) \
47
            .filter(Host.name == hostname) \
48
            .first()
49

    
50
# Ajout d'un hôte dans un groupe d'hôtes (Host -> HostGroup)
51
def add_Host2HostGroup(host, group):
52
    if host not in group.hosts:
53
        print "Ajout de l'hote: %(h)s dans le group: %(g)s" % \
54
                {'h': host.name,
55
                 'g': group.name}
56
        group.hosts.append(host)
57

    
58
def create_LowLevelService(hostname, servicename):
59
    s = DBSession.query(LowLevelService) \
60
            .join((Host, LowLevelService.idhost == Host.idhost)) \
61
            .filter(LowLevelService.servicename == servicename) \
62
            .filter(Host.name == hostname) \
63
            .first()
64
    if not s:
65
        s = LowLevelService(idhost=get_host(hostname).idhost,
66
                servicename=servicename,
67
                weight = 42, 
68
                op_dep=u"?")
69
        print "Ajout du service", servicename
70
        DBSession.add(s)
71
    return s
72

    
73
# Groupe de services (ServiceGroup)
74
def create_ServiceGroup(name, parent=None):
75
    g = DBSession.query(ServiceGroup).filter(ServiceGroup.name == name).first()
76
    if not g:
77
        if parent:
78
            g = ServiceGroup(name=name, idparent=parent.idgroup)
79
        else:
80
            g = ServiceGroup(name=name)
81
        print "Ajout du Groupe: ", name
82
        DBSession.add(g)
83
    return g
84

    
85
# Ajout d'un hôte dans un groupe d'hôtes (Host -> HostGroup)
86
def add_LowLevelService2ServiceGroup(service, group):
87
    if service not in group.services:
88
        print "Ajout du service: %(s)s dans le group: %(g)s" % \
89
                {'s': service.servicename,
90
                 'g': group.name}
91
        group.services.append(service)
92

    
93
def _get_service(hostname, servicename):
94
    """ Return Host object from hostname, None if not available"""
95
    return DBSession.query(LowLevelService) \
96
            .join((Host, Host.idhost == LowLevelService.idhost)) \
97
            .filter(Host.name == hostname) \
98
            .filter(LowLevelService.servicename == servicename) \
99
            .first()
100

    
101
#Recherche de l'objet ServiceGroup à partir du name
102
def get_ServiceGroup(name):
103
    return DBSession.query(ServiceGroup).filter(ServiceGroup.name == name).first()
104

    
105
#Recherche de l'objet LowLevelService à partir du name
106
def get_LowLevelService(hostname, servicename):
107
    s = DBSession.query(LowLevelService) \
108
            .join((Host, LowLevelService.idhost == Host.idhost)) \
109
            .filter(LowLevelService.servicename == servicename) \
110
            .filter(Host.name == hostname) \
111
            .first()
112
    return s
113

    
114
# DS (Graph)
115
def create_graph(name, vlabel, perfdatasources):
116
    gr = DBSession.query(Graph) \
117
            .filter(Graph.name == name) \
118
            .first()
119
    if not gr:
120
        gr = Graph(name=name, vlabel=vlabel)
121
        print "Ajout du graph: ", vlabel
122
        DBSession.add(gr)
123
    return gr
124

    
125
# DS (PerfDataSource)
126
def create_ds(name, type, service, label, graphs):
127
    ds = DBSession.query(PerfDataSource) \
128
            .filter(PerfDataSource.service == service) \
129
            .filter(PerfDataSource.name == name) \
130
            .first()
131
    if not ds:
132
        ds = PerfDataSource(name=name, type=type, service=service, label=label, graphs=graphs)
133
        print "Ajout de la datasource: ", label
134
        DBSession.add(ds)
135
    return ds
136

    
137

    
138
hg1 = create_HostGroup(u'Serveurs')
139
hg2 = create_HostGroup(u'Telecoms')
140
hg3 = create_HostGroup(u'Serveurs Linux', hg1)
141
hg4 = create_HostGroup(u'NORTEL', hg2)
142
hg5 = create_HostGroup(u'CISCO', hg2)
143

    
144
h1 = create_Host(u'proto4.si.c-s.fr')
145
h2 = create_Host(u'messagerie.si.c-s.fr')
146
h3 = create_Host(u'testnortel.si.c-s.fr')
147
h4 = create_Host(u'proto6.si.c-s.fr')
148
h5 = create_Host(u'par.linux0')
149

    
150
add_Host2HostGroup(h1, hg3)
151
add_Host2HostGroup(h2, hg3)
152
add_Host2HostGroup(h3, hg4)
153
add_Host2HostGroup(h4, hg5)
154
add_Host2HostGroup(h4, hg3)
155
add_Host2HostGroup(h5, hg3)
156

    
157
sg1 = create_ServiceGroup(u'Général')
158
sg2 = create_ServiceGroup(u'Interface Réseau')
159
sg3 = create_ServiceGroup(u'Performance')
160
sg4 = create_ServiceGroup(u'Partitions')
161
sg5 = create_ServiceGroup(u'Processus')
162

    
163
s1 = create_LowLevelService(h1.name, u'Interface eth0')
164
s2 = create_LowLevelService(h1.name, u'Interface eth1')
165
s3 = create_LowLevelService(h1.name, u'Interface série')
166
s4 = create_LowLevelService(h4.name, u'Interface')
167
s5 = create_LowLevelService(h5.name, u'Interface Linux')
168

    
169
add_LowLevelService2ServiceGroup(s1, sg2)
170
add_LowLevelService2ServiceGroup(s2, sg2)
171
add_LowLevelService2ServiceGroup(s3, sg1)
172
add_LowLevelService2ServiceGroup(s4, sg2)
173
add_LowLevelService2ServiceGroup(s5, sg2)
174
add_LowLevelService2ServiceGroup(s5, sg3)
175

    
176
gr1 = create_graph(u'graph1',u'Graph1', None)
177
gr2 = create_graph(u'graph2',u'Graph2', None)
178
gr3 = create_graph(u'graph3',u'Graph3', None)
179
gr4 = create_graph(u'graph4',u'Graph4', None)
180
#gr5 = create_graph(u'graph5',u'Graph5', None)
181
gr5 = create_graph(u'IO',u'IO', None)
182
gr6 = create_graph(u'RAM',u'RAM', None)
183
gr7 = create_graph(u'TCP connections',u'TCP connections', None)
184
gr8 = create_graph(u'CPU usage (by type)',u'CPU usage (by type)', None)
185

    
186
graphs = []
187
for g in DBSession.query(Graph).all():
188
    graphs.append(g)
189

    
190

    
191
ds1 = create_ds(u'ineth0', u'GAUGE', s1 \
192
                , u'Données en entrée sur eth0', graphs[1:2])
193
ds2 = create_ds(u'outeth0', u'GAUGE', s2 \
194
                , u'Données en sortie sur eth0', graphs[1:3])
195
ds3 = create_ds(u'outeth1', u'GAUGE', s3 \
196
                , u'Données en sortie sur eth1', graphs[2:4])
197
ds4 = create_ds(u'ineth1', u'GAUGE', s4 \
198
                , u'Données en entrée sur eth0', graphs[3:4])
199
ds5_1 = create_ds(u'IO Reads', u'GAUGE', s5 \
200
                , u'IO Reads', graphs[4:5])
201
ds5_2 = create_ds(u'IO Writes', u'GAUGE', s5 \
202
                , u'IO Writes', graphs[4:5])
203
ds6 = create_ds(u'RAM', u'GAUGE', s5 \
204
                , u'RAM', graphs[5:6])
205
ds7 = create_ds(u'TCP connections', u'GAUGE', s5 \
206
                , u'TCP connections', graphs[6:7])
207
ds8 = create_ds(u'CPU usage (by type)', u'GAUGE', s5 \
208
                , u'CPU usage (by type)', graphs[7:8])
209

    
210
transaction.commit()