Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigigraph / maj_bdd.py @ 00456667

History | View | Annotate | Download (9.13 KB)

1
# -*- coding: utf-8 -*-
2
import os
3
import atexit
4
from datetime import datetime
5
from sqlalchemy import and_
6
import paste.deploy
7
import tg
8

    
9
tg.config = paste.deploy.appconfig('config:%s/%s' % (os.getcwd(), 'development.ini'))
10
from vigilo.models.configure import DBSession, configure_db
11
configure_db(tg.config, 'sqlalchemy.')
12

    
13
def commit_on_exit():
14
    """
15
    Effectue un COMMIT sur la transaction à la fin de l'exécution
16
    du script d'insertion des données de test.
17
    """
18
    import transaction
19
    transaction.commit()
20

    
21
atexit.register(commit_on_exit)
22

    
23
from vigilo.models import Host, HostGroup
24
from vigilo.models import LowLevelService, ServiceGroup
25
from vigilo.models import PerfDataSource, Graph
26
from vigilo.models import Ventilation, VigiloServer, Application
27

    
28

    
29
# Groupe d'hôtes (HostGroup)
30
def create_HostGroup(name, parent=None):
31
    g = DBSession.query(HostGroup).filter(HostGroup.name == name).first()
32
    if not g:
33
        if parent:
34
            g = HostGroup(name=name, idparent=parent.idgroup)
35
        else:
36
            g = HostGroup(name=name)
37
        print "Ajout du Groupe: ", name
38
        DBSession.add(g)
39
    return g
40

    
41
# Hôte (Host)
42
#def create_Host(name, checkhostcmd, hosttpl, snmpcommunity, mainip, snmpport):
43
def create_Host(name):
44
    h = DBSession.query(Host).filter(Host.name == name).first()
45
    if not h:
46
        h = Host(name=name,
47
                 checkhostcmd=u'dummy',
48
                 hosttpl=u'linux',
49
                 mainip=u"127.0.0.1",
50
                 snmpcommunity=u"public",
51
                 snmpport=161,
52
                 weight=0)
53
        print "Ajout de l'hôte: ", name
54
        DBSession.add(h)
55
    return h
56

    
57
#Recherche de l'objet Host à partir du name
58
def get_host(hostname):
59
    """ Return Host object from hostname, None if not available"""
60
    return DBSession.query(Host) \
61
            .filter(Host.name == hostname) \
62
            .first()
63

    
64
# Ajout d'un hôte dans un groupe d'hôtes (Host -> HostGroup)
65
def add_Host2HostGroup(host, group):
66
    if host not in group.hosts:
67
        print "Ajout de l'hote: %(h)s dans le group: %(g)s" % \
68
                {'h': host.name,
69
                 'g': group.name}
70
        group.hosts.append(host)
71

    
72
def create_LowLevelService(hostname, servicename):
73
    s = DBSession.query(LowLevelService) \
74
            .join((Host, LowLevelService.idhost == Host.idhost)) \
75
            .filter(LowLevelService.servicename == servicename) \
76
            .filter(Host.name == hostname) \
77
            .first()
78
    if not s:
79
        s = LowLevelService(idhost=get_host(hostname).idhost,
80
                servicename=servicename,
81
                weight = 42, 
82
                op_dep=u"?")
83
        print "Ajout du service", servicename
84
        DBSession.add(s)
85
    return s
86

    
87
# Groupe de services (ServiceGroup)
88
def create_ServiceGroup(name, parent=None):
89
    g = DBSession.query(ServiceGroup).filter(ServiceGroup.name == name).first()
90
    if not g:
91
        if parent:
92
            g = ServiceGroup(name=name, idparent=parent.idgroup)
93
        else:
94
            g = ServiceGroup(name=name)
95
        print "Ajout du Groupe: ", name
96
        DBSession.add(g)
97
    return g
98

    
99
# Ajout d'un hôte dans un groupe d'hôtes (Host -> HostGroup)
100
def add_LowLevelService2ServiceGroup(service, group):
101
    if service not in group.services:
102
        print "Ajout du service: %(s)s dans le group: %(g)s" % \
103
                {'s': service.servicename,
104
                 'g': group.name}
105
        group.services.append(service)
106

    
107
def _get_service(hostname, servicename):
108
    """ Return Host object from hostname, None if not available"""
109
    return DBSession.query(LowLevelService) \
110
            .join((Host, Host.idhost == LowLevelService.idhost)) \
111
            .filter(Host.name == hostname) \
112
            .filter(LowLevelService.servicename == servicename) \
113
            .first()
114

    
115
#Recherche de l'objet ServiceGroup à partir du name
116
def get_ServiceGroup(name):
117
    return DBSession.query(ServiceGroup).filter(ServiceGroup.name == name).first()
118

    
119
#Recherche de l'objet LowLevelService à partir du name
120
def get_LowLevelService(hostname, servicename):
121
    s = DBSession.query(LowLevelService) \
122
            .join((Host, LowLevelService.idhost == Host.idhost)) \
123
            .filter(LowLevelService.servicename == servicename) \
124
            .filter(Host.name == hostname) \
125
            .first()
126
    return s
127

    
128
# DS (Graph)
129
def create_graph(name, vlabel, perfdatasources):
130
    gr = DBSession.query(Graph) \
131
            .filter(Graph.name == name) \
132
            .first()
133
    if not gr:
134
        gr = Graph(name=name, vlabel=vlabel)
135
        print "Ajout du graph: ", vlabel
136
        DBSession.add(gr)
137
    return gr
138

    
139
# DS (PerfDataSource)
140
def create_ds(name, type, service, label, graphs):
141
    ds = DBSession.query(PerfDataSource) \
142
            .filter(PerfDataSource.service == service) \
143
            .filter(PerfDataSource.name == name) \
144
            .first()
145
    if not ds:
146
        ds = PerfDataSource(name=name, type=type, service=service, label=label, graphs=graphs)
147
        print "Ajout de la datasource: ", label
148
        DBSession.add(ds)
149
    return ds
150

    
151
# VigiloServer
152
def create_Server(name, description):
153
    s = DBSession.query(VigiloServer).filter(VigiloServer.name == name).first()
154
    if not s:
155
        s = VigiloServer(name=name, description=description)
156
        print "Ajout du Server Vigilo: %s - %s" % (name, description)
157
        DBSession.add(s)
158
    return s
159

    
160
# VigiloApplication
161
def create_Application(name):
162
    a = DBSession.query(Application).filter(Application.name == name).first()
163
    if not a:
164
        a = Application(name=name)
165
        print "Ajout de l'application Vigilo: %s" % name
166
        DBSession.add(a)
167
    return a
168

    
169
# Ventilation
170
def create_Ventilation(host, server, application):
171
    v = None
172
    h = DBSession.query(Host).filter(Host.name == host).first()
173
    s = DBSession.query(VigiloServer).filter(VigiloServer.name == server).first()
174
    a = DBSession.query(Application).filter(Application.name == application).first()
175
    if h and s:
176
        v = Ventilation(idhost=h.idhost, idvigiloserver=s.idvigiloserver, idapp=a.idapp)
177
        print "Ajout Ventilation - host %s - server %s - application %s" % (host, server, application)
178
        DBSession.add(v)
179
    return v
180

    
181

    
182
hg1 = create_HostGroup(u'Serveurs')
183
hg2 = create_HostGroup(u'Telecoms')
184
hg3 = create_HostGroup(u'Serveurs Linux', hg1)
185
hg4 = create_HostGroup(u'NORTEL', hg2)
186
hg5 = create_HostGroup(u'CISCO', hg2)
187

    
188
h1 = create_Host(u'proto4.si.c-s.fr')
189
h2 = create_Host(u'messagerie.si.c-s.fr')
190
h3 = create_Host(u'testnortel.si.c-s.fr')
191
h4 = create_Host(u'proto6.si.c-s.fr')
192
h5 = create_Host(u'par.linux0')
193

    
194
add_Host2HostGroup(h1, hg3)
195
add_Host2HostGroup(h2, hg3)
196
add_Host2HostGroup(h3, hg4)
197
add_Host2HostGroup(h4, hg5)
198
add_Host2HostGroup(h4, hg3)
199
add_Host2HostGroup(h5, hg3)
200

    
201
sg1 = create_ServiceGroup(u'Général')
202
sg2 = create_ServiceGroup(u'Interface Réseau')
203
sg3 = create_ServiceGroup(u'Performance')
204
sg4 = create_ServiceGroup(u'Partitions')
205
sg5 = create_ServiceGroup(u'Processus')
206

    
207
s1 = create_LowLevelService(h1.name, u'Interface eth0')
208
s2 = create_LowLevelService(h1.name, u'Interface eth1')
209
s3 = create_LowLevelService(h1.name, u'Interface série')
210
s4 = create_LowLevelService(h4.name, u'Interface')
211
s5 = create_LowLevelService(h5.name, u'Interface Linux')
212

    
213
add_LowLevelService2ServiceGroup(s1, sg2)
214
add_LowLevelService2ServiceGroup(s2, sg2)
215
add_LowLevelService2ServiceGroup(s3, sg1)
216
add_LowLevelService2ServiceGroup(s4, sg2)
217
add_LowLevelService2ServiceGroup(s5, sg2)
218
add_LowLevelService2ServiceGroup(s5, sg3)
219

    
220
gr1 = create_graph(u'graph1',u'Graph1', None)
221
gr2 = create_graph(u'graph2',u'Graph2', None)
222
gr3 = create_graph(u'graph3',u'Graph3', None)
223
gr4 = create_graph(u'graph4',u'Graph4', None)
224
#gr5 = create_graph(u'graph5',u'Graph5', None)
225
gr5 = create_graph(u'IO',u'IO', None)
226
gr6 = create_graph(u'RAM',u'RAM', None)
227
gr7 = create_graph(u'TCP connections',u'TCP connections', None)
228
gr8 = create_graph(u'CPU usage (by type)',u'CPU usage (by type)', None)
229

    
230
graphs = []
231
for g in DBSession.query(Graph).all():
232
    graphs.append(g)
233

    
234

    
235
ds1 = create_ds(u'ineth0', u'GAUGE', s1 \
236
                , u'Données en entrée sur eth0', graphs[1:2])
237
ds2 = create_ds(u'outeth0', u'GAUGE', s2 \
238
                , u'Données en sortie sur eth0', graphs[1:3])
239
ds3 = create_ds(u'outeth1', u'GAUGE', s3 \
240
                , u'Données en sortie sur eth1', graphs[2:4])
241
ds4 = create_ds(u'ineth1', u'GAUGE', s4 \
242
                , u'Données en entrée sur eth0', graphs[3:4])
243
ds5_1 = create_ds(u'IO Reads', u'GAUGE', s5 \
244
                , u'IO Reads', graphs[4:5])
245
ds5_2 = create_ds(u'IO Writes', u'GAUGE', s5 \
246
                , u'IO Writes', graphs[4:5])
247
ds6 = create_ds(u'RAM', u'GAUGE', s5 \
248
                , u'RAM', graphs[5:6])
249
ds7 = create_ds(u'TCP connections', u'GAUGE', s5 \
250
                , u'TCP connections', graphs[6:7])
251
ds8 = create_ds(u'CPU usage (by type)', u'GAUGE', s5 \
252
                , u'CPU usage (by type)', graphs[7:8])
253

    
254
# Serveurs Vigilo
255
sv1 = create_Server(u'http://localhost', u'RRD+Nagios')
256

    
257
# Applications Vigilo
258
ap1 = create_Application(u'rrdgraph')
259
ap2 = create_Application(u'nagios')
260

    
261
# Ventilation
262
if sv1 is not None and ap1 is not None:
263
    create_Ventilation(u'par.linux0', sv1.name, ap1.name)
264
if sv1 is not None and ap2 is not None:
265
    create_Ventilation(u'par.linux0', sv1.name, ap2.name)
266