Project

General

Profile

Revision d6c3a0c9

IDd6c3a0c923d130ca4c8ccd24260574cf91790ab4
Parent 8ad24667
Child 969c7ba2

Added by Thomas ANDREJAK almost 15 years ago

Correction d'une erreur d'accès
Corrections de problèmes d'affichage
Ajout de différents liens pour la navigation
Révision du système de plugin pour y ajouter des fonctionnalités
Changement dans les liens pour une gestion plus simple

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@524 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigiboard/config/vigiboard.py
6 6
    'vigiboard_bdd.basename' : '',
7 7
    
8 8
    # Affichage, lien disponibles dans la fenêtre de détail d'un évènement
9
    'vigiboard_links.nagios' : 'http://example1.com/%(idevent)d',
10
    'vigiboard_links.metrology' : 'http://example2.com/%(idevent)d',
11
    'vigiboard_links.security' : 'http://example3.com/%(idevent)d',
12
    'vigiboard_links.servicetype' : 'http://example4.com/%(idevent)d',
9
    'vigiboard_links.eventdetails' : {
10
        'nagios' : ['Nagios host details','http://example1.com/%(idevent)d'],
11
        'metrology' : ['Metrology details','http://example2.com/%(idevent)d'],
12
        'security' : ['Security details','http://example3.com/%(idevent)d'],
13
        'servicetype' : ['Service Type','http://example4.com/%(idevent)d']
14
        },
13 15
    
14 16
    # Nombre d'évènments par pages
15 17
    'vigiboard_item_per_page' : '15',
......
20 22
        [ 'shn' , 'PluginSHN' ]
21 23
        ],
22 24

  
23
}
25
    # Version de Vigiboard
26
    'vigiboard_version' : '0.1',
27

  
28
    # URL pour le logo Vigilo, si vide on renvoi sur /
29
    'vigiboard_links.logo' : '',
24 30

  
31
    # URL des tickets, possibilités:
32
    # - %(idevent)d
33
    # - %(host)s
34
    # - %(service)s
35
    # - %(tt)s
36
    'vigiboard_links.tt' : 'http://example4.com/%(idevent)d/%(tt)s'
37
}
vigiboard/controllers/root.py
75 75
            page = 1
76 76

  
77 77
        events = VigiboardRequest()
78

  
78
        
79
        search = 0
79 80
        # Application des filtres si nécessaire
80 81
        if host :
82
            search = 1
81 83
            events.add_filter(Events.hostname.like('%%%s%%' % host))
82 84
        if service :
85
            search = 1
83 86
            events.add_filter(Events.servicename.like('%%%s%%' % service))
84 87
        if output :
88
            search = 1
85 89
            events.add_filter(Events.output.like('%%%s%%' % output))
86 90
        if trouble_ticket :
91
            search = 1
87 92
            events.add_filter(Events.trouble_ticket.like(
88 93
                '%%%s%%' % trouble_ticket))
89 94

  
......
110 115
               event_edit_status_options = edit_event_status_options,
111 116
               history = [],
112 117
               hist_error = False,
113
               plugin_context = events.context_fct
118
               plugin_context = events.context_fct,
119
               search = search
114 120
            )
115 121
       
116 122
    @validate(validators={'idevent':validators.Int(not_empty=True)},
......
147 153
        severity = { 0: _('None'), 1: _('OK'), 2: _('Suppressed'),
148 154
                3: _('Initial'), 4: _('Maintenance'), 5: _('Minor'),
149 155
                6: _('Major'), 7: _('Critical') }
150
        
156
        eventdetails = {}
157
        for edname, edlink in tg.config['vigiboard_links.eventdetails'].iteritems():
158
            eventdetails[edname] = edlink[1] % {
159
                    'idevent': events.idevent,
160
                    'host': events.hostname,
161
                    'service': events.servicename
162
                    }
151 163
        return dict(
152 164
                initial_state = severity[int(initial_state)],
153 165
                current_state = severity[events.severity],
154 166
                idevent = events.idevent,
155 167
                host = events.hostname,
156 168
                service = events.servicename,
157
                nagios_link = tg.config['vigiboard_links.nagios'] % \
158
                        {'idevent': events.idevent,'host': events.hostname, 'service': events.servicename},
159
                metrology_link = tg.config['vigiboard_links.metrology'] % \
160
                        {'idevent': events.idevent,'host': events.hostname, 'service': events.servicename},
161
                security_link = tg.config['vigiboard_links.security'] % \
162
                        {'idevent': events.idevent,'host': events.hostname, 'service': events.servicename},
163
                servicetype_link = tg.config['vigiboard_links.servicetype'] % \
164
                        {'idevent': events.idevent,'host': events.hostname, 'service': events.servicename}
165

  
169
                eventdetails = eventdetails
166 170
            )
167 171

  
168 172
    @validate(validators={'idevent':validators.Int(not_empty=True)},
......
199 203
               event_edit_status_options = edit_event_status_options,
200 204
               history = events.hist,
201 205
               hist_error = True,
202
               plugin_context = events.context_fct
206
               plugin_context = events.context_fct,
207
               search = 0
203 208
            )
204 209

  
205 210
    @validate(validators={'host':validators.NotEmpty(),
......
239 244
               event_edit_status_options = edit_event_status_options,
240 245
               history = events.hist,
241 246
               hist_error = True,
242
               plugin_context = events.context_fct
247
               plugin_context = events.context_fct,
248
               search = 0
243 249
            )
244 250

  
245 251
    @validate(validators={
vigiboard/controllers/vigiboardrequest.py
274 274

  
275 275
        # Liste des éléments pour la tête du tableau
276 276

  
277
        lst_title = ['', _('Date<br />[Duration]'), '#', _('Host'),
278
                _('Service Type<br />Service Name'), _('Output')]
279
        lst_title.extend([plug.name for plug in self.plugin])
280
        lst_title.extend(['[T T]', ''])
281
        
277
        lst_title = [['',{}], [_('Date')+ '<span style="font-weight:normal">' + _('<br />[Duration]') + '</span>', {}], ['#',{'style':'text-align:center'}], [_('Host'),{}],
278
                [_('Service Type<br />Service Name'),{}], [_('Output'),{}]]
279
        lst_title.extend([[plug.name,plug.style] for plug in self.plugin])
280
        lst_title.extend([['[TT]',{'style':'text-align:center'}], ['',{}]])
282 281
        events = [lst_title]
283 282
        i = 0
284 283
        class_tr = ['odd', 'even']
......
310 309
                    event,
311 310
                    {'class': class_tr[i%2]},
312 311
                    {'class' : self.bouton_severity[event.severity] + \
313
                            self.class_ack[event.status]},
312
                            self.class_ack[event.status],
313
                     'style' : 'text-align: center'},
314 314
                    {'class' : self.bouton_severity[event.severity] + \
315 315
                            self.class_ack[event.status] },
316 316
                    {'src' : '/images/%s2.png' % \
vigiboard/public/css/vigiboard_style.css
3 3
        width: 99%;
4 4
        margin: auto;
5 5
        padding: 0;
6
        font-size: 11px;
6
        font-size: 10px;
7 7
        font-family:"Lucida Grande","Lucida Sans Unicode",geneva,verdana,sans-serif;
8 8
}
9 9

  
10
.table_top {
11
	border: solid 0px black;
12
	width: 100%;
13
	background-color: #F0F1F5;
14
	border-collapse:collapse;
15
	margin-bottom: 10px;
16
}
10 17
.vigitable {
11 18
	width: 100%;
12 19
	border-spacing: 10px;
13 20
	border-collapse: collapse;
14 21
}
15 22

  
16
.vigitable tr {
23
.vigitable thead tr td {
24
	padding: 0px;
25
}
26

  
27
.vigitable tbody tr {
17 28
	border-style: solid;
18 29
        border-width: 1px 1px 1px 1px;
19 30
        border-color: #FFFFFF;
20
        padding: 5px;
21 31
        empty-cells: show;
22 32
}
23 33

  
24
.vigitable tr td {
34
.vigitable tbody tr td {
25 35
	border-style: solid;
26 36
        border-width: 1px 1px 1px 1px;
27 37
        border-color: #FFFFFF;
28
        padding: 4px;
38
        padding: 3px;
29 39
        empty-cells: show;
30 40
}
31 41

  
42

  
32 43
tr.odd {
33 44
	background-color: #F8F8F8;
34 45
}
......
77 88

  
78 89
img { 
79 90
	border: none;
91
	margin: 0px;
80 92
}
81 93

  
82 94
#flash, .notice {
vigiboard/templates/vigiboard.html
14 14
</head>
15 15

  
16 16
<body>
17
	
18
<table class="table_top">
19
	<tr>
20
		<td style="width: 20%;text-align: left;">
21
			<a py:if="tg.config['vigiboard_links.logo'] != ''" href="${tg.config['vigiboard_links.logo']}"><img alt="logo" src="images/vigilo.png" style="width:58px;"/></a>
22
			<a py:if="tg.config['vigiboard_links.logo'] == ''" href="${tg.url('/')}"><img alt="logo" src="images/vigilo.png" style="width:58px;"/></a>
23
			v${tg.config['vigiboard_version']}</td>
24
		<td style="text-align: center">
25
			<span py:if="search == 1" style="color:rgb(70, 130, 180)">
26
				Mode recherche, <a href="${tg.url('/')}" style="color:rgb(70, 130, 180); text-decoration: underline;">cliquer ici</a> pour revenir au mode initial.
27
			</span>
28
		</td>
29
		<td style="width: 20%;text-align: right;"><a href="${tg.url('/')}">Accueil</a>
30
			<a id="SearchLien" href="javascript:vigiboard_searchdialog()">
31
				<img src="${tg.url('/images/filter.png')}" />
32
				</a>
33
		</td>
34
	</tr>
35
</table>	
36

  
17 37
<py:with vars="flash=tg.flash_obj.render('flash', use_js=False)">
18 38
<div py:if="flash" py:content="XML(flash)" />
19 39
</py:with>
vigiboard/templates/vigiboard_event_table.html
7 7
<py:def function="event_table(events,page,pages,id_first_row,id_last_row,total_row,edit_event_status_options)">
8 8
<?python from genshi import HTML ?>
9 9

  
10
<div style="text-align: right; margin-bottom: 10px">
11
	<a href="${tg.url('/')}">Accueil</a>
12
	<a id="SearchLien" href="javascript:vigiboard_searchdialog()">
13
	<img src="${tg.url('/images/filter.png')}" />
14
	</a>
15
</div>
16 10
<py:if test="len(events) > 1">
17 11
<table class="vigitable">
18 12
	
19 13
	<thead>
20
		<tr>
21
			<td style="width:27px">
14
		<tr >
15
			<td style="width:26px;background-color: rgb(70, 130, 180);">
22 16
				<a py:if="page > pages[0]" href="${tg.url('/%d' % (page-1))}"><img src="${tg.url('/images/fleche_up.png')}" alt="" /></a>
23 17
				<img py:if="page == pages[0]" src="${tg.url('/images/fleche_up.png')}" alt="" />
24 18
			</td>
25
			<td colspan="${8+len(events[1][6])}" style="background-color:#4682B4;color:white;text-align:center">Showing rows ${id_first_row} to ${id_last_row} of ${total_row}<br />
19
			<td colspan="${8+len(events[1][6])}" style="width:100%;background-color:#4682B4;color:white;text-align:center">Showing rows ${id_first_row} to ${id_last_row} of ${total_row}<br />
26 20
				Pages <py:for each="p in pages">
27 21
				<a py:if="p != page" href="${tg.url('/%d' % p)}" py:content="p" />
28 22
				<span py:if="p == page" py:replace="p" />
29 23
				</py:for>
30 24
			</td>
31
			<td style="width:27px">
25
			<td style="width:26px">
32 26
				<a py:if="pages[-1] > page" href="${tg.url('/%d' % (page+1))}"><img src="${tg.url('/images/fleche_down.png')}" alt="" /></a>
33 27
				<img py:if="page == pages[-1]" src="${tg.url('/images/fleche_down.png')}" alt="" />
34 28
			</td>
35 29
		</tr>
30

  
36 31
		<tr style="background-color:#F8F8F8;font-weight: bold">
37
			<td py:for="item in events[0]">${HTML(item)}</td>
38
			<td><a class="Edit_EventsLien" href="javascript:vigiboard_edit_eventdialog('all')"><img src="${tg.url('/images/icon_page_edit.png')}" /></a></td>
39
			<td><input id="vigiboard_checkall_checkbox" type="checkbox" onclick="javascript:vigiboard_checkall()" /></td>
32
			<py:for each="(pname,pstyle) in events[0]">
33
			<td style="padding: 5px;" py:attrs="pstyle">${HTML(pname)}</td>
34
			</py:for>
35
			<td style="text-align: center;" ><a class="Edit_EventsLien" href="javascript:vigiboard_edit_eventdialog('all')"><img src="${tg.url('/images/icon_page_edit.png')}" /></a></td>
36
			<td style="text-align: center;"><input id="vigiboard_checkall_checkbox" type="checkbox" onclick="javascript:vigiboard_checkall()" /></td>
40 37
		</tr>
41 38
	</thead>
42 39
	
......
45 42
		<py:for each="(event,class_tr,class_td_severity,class_td_date,img_fleche,img_statu,plugin) in events[1:]">
46 43
		<tr py:attrs="class_tr">
47 44
			<td py:attrs="class_td_severity"><a href="javascript:vigiboard_historydialog('${event.idevent}')" class="HistoryLien"><img src="${tg.url(img_fleche['src'])}" style="width:20px"/></a></td>
48
			<td py:attrs="class_td_date">${event.get_date('timestamp_active')}<br />[${event.get_since_date('timestamp_active')}]</td>
45
			<td py:attrs="class_td_date"><span style="font-weight: bold;">${event.get_date('timestamp_active')}</span><br />[${event.get_since_date('timestamp_active')}]</td>
49 46
			<td py:attrs="class_td_date" style="text-align:center">${event.occurence}</td>
50 47
			<td>${event.hostname}</td>
51 48
			<td>${event.servicename}</td>
52 49
			<td>${event.output}</td>
53 50
			<td py:for="plug in plugin" py:attrs="plug[1]">${HTML(plug[0])}</td>
54
			<td>${event.trouble_ticket}</td>
55
			<td><img py:attrs="img_statu" py:if="img_statu != None" /></td>
56
			<td py:attrs="class_td_date"><a class="Edit_EventsLien" href="javascript:vigiboard_edit_eventdialog('${event.idevent}')"><img src="${tg.url('/images/icon_page_edit.png')}" /></a></td>
57
			<td py:attrs="class_td_date"><input type="checkbox" class="Edit_EventsCheckBox" value="${event.idevent}"/></td>
51
			<td style="text-align: center"><a href="${
52
					tg.config['vigiboard_links.tt'] % {
53
						'idevent' : event.idevent,
54
						'host' : event.hostname,
55
						'service' : event.servicename,
56
						'tt' : event.trouble_ticket }}">${event.trouble_ticket}</a></td>
57
			<td style="text-align: center"><img py:attrs="img_statu" py:if="img_statu != None" /></td>
58
			<td py:attrs="class_td_date" style="text-align: center"><a class="Edit_EventsLien" href="javascript:vigiboard_edit_eventdialog('${event.idevent}')"><img src="${tg.url('/images/icon_page_edit.png')}" /></a></td>
59
			<td py:attrs="class_td_date" style="text-align: center"><input type="checkbox" class="Edit_EventsCheckBox" value="${event.idevent}"/></td>
58 60

  
59 61
		</tr>
60 62
		</py:for>
......
78 80
			$('#HistoryDialog_current_state').html(json.current_state);
79 81
			$('#HistoryDialog_detailed_event').attr('href' , '${tg.url('/event/')}' + json.idevent);
80 82
			$('#HistoryDialog_detailed_host').attr('href', '${tg.url('/host_service/')}' + json.host + "/" + json.service);
81
			$('#HistoryDialog_nagios').attr('href', json.nagios_link);
82
			$('#HistoryDialog_metrology').attr('href', json.metrology_link);
83
			$('#HistoryDialog_security').attr('href', json.security_link);
84
			$('#HistoryDialog_servicetype').attr('href', json.servicetype_link);
83
			<py:for each="edname, edit in tg.config['vigiboard_links.eventdetails'].iteritems()">
84
			$('#HistoryDialog_${edname}').attr('href', json.eventdetails['${edname}']);
85
			</py:for>
85 86
			$('#HistoryDialog').dialog('open');
86 87
		})
87 88
	}
......
133 134
<ul>
134 135
	<li><a id="HistoryDialog_detailed_event" href="" >Detailed history for this event</a></li>
135 136
	<li><a id="HistoryDialog_detailed_host" href="" >Detailed history for this host/service</a></li>
136
	<li><a id="HistoryDialog_nagios" href="" >Nagios host details</a></li>
137
	<li><a id="HistoryDialog_metrology" href="" >Metrology details</a></li>
138
	<li><a id="HistoryDialog_security" href="" >Security details</a></li>
139
	<li><a id="HistoryDialog_servicetype" href="" >Service Type</a></li>
137
	<li py:for="edname, edit in tg.config['vigiboard_links.eventdetails'].iteritems()">
138
		<a href="" id="HistoryDialog_${edname}">${edit[0]}</a>
139
	</li>
140 140
</ul>
141 141
</div>
142 142

  
......
150 150
</py:if>
151 151

  
152 152
<py:if test="1 >= len(events)">
153
Aucun évènement disponible.
153
<table class="vigitable">
154

  
155
        <thead>
156
                <tr >
157
                        <td style="width:26px;background-color: rgb(70, 130, 180);">
158
                                <img src="${tg.url('/images/fleche_up.png')}" alt="" />
159
                        </td>
160
                        <td colspan="9" style="width:100%;background-color:#4682B4;color:white;text-align:center">Showing rows 0 to 0 of 0<br />
161
                                Page 0
162
                        </td>
163
                        <td style="width:26px">
164
                                <img src="${tg.url('/images/fleche_down.png')}" alt="" />
165
                        </td>
166
                </tr>
167

  
168
                <tr style="background-color:#F8F8F8;font-weight: bold">
169
			<py:for each="(pname,pstyle) in events[0]">
170
		                        <td py:attrs="pstyle">${HTML(pname)}</td>
171
				                        </py:for>	
172
			<td style="text-align: center;"><img src="${tg.url('/images/icon_page_edit.png')}" /></td>
173
                        <td style="text-align: center;"><input id="vigiboard_checkall_checkbox" type="checkbox" /></td>
174
                </tr>
175
        </thead>
176

  
177
        <tbody>
178
<tr><td colspan="9"><br />Aucun évènement disponible.</td></tr>
179
</tbody>
180
</table>
181
${tmpl_context.searchdialog}
182
<div id="SearchDialog">
183
        ${tmpl_context.search_form()}
184
</div>
185
<script type="text/javascript">
186
function vigiboard_searchdialog() {
187
                $('#search_form_host').attr('value','');
188
                $('#search_form_service').attr('value','');
189
                $('#search_form_output').attr('value','');
190
                $('#search_form_trouble_ticket').attr('value', '');
191
                $('#SearchDialog').dialog('open');      
192
        }
193
$('#SearchLien').click(function(e){
194
                $('#SearchDialog').dialog('option','position','center');
195
        });
196
</script>
197

  
154 198
</py:if>
155 199

  
156 200
</py:def>
vigiboard/widgets/edit_event.py
44 44
		TextField('trouble_ticket',label_text=_('Trouble Ticket')),
45 45
		]
46 46

  
47
    method = 'GET'
47 48
    submit_text = _('Search')

Also available in: Unified diff