Skip to content

Commit fa5f4e1

Browse files
authored
Various fixes when working with alert templates (librenms#18153)
Add mock data when validating template syntax
1 parent 14bb598 commit fa5f4e1

File tree

4 files changed

+38
-17
lines changed

4 files changed

+38
-17
lines changed

database/seeders/DefaultAlertTemplateSeeder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function run(): void
4848
@if ($alert->faults)
4949
Faults:
5050
@foreach ($alert->faults as $key => $value)
51-
@php($unit = __("sensors.{$value["sensor_class"]}.unit"))
51+
@php($unit = __("sensors.{$value['sensor_class']}.unit"))
5252
#{{ $key }}: {{ $value['sensor_descr'] ?? 'Sensor' }}
5353
5454
Current: {{ $value['sensor_current'].$unit }}

includes/html/forms/alert-templates.inc.php

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
* @copyright 2014 f0o, LibreNMS
2222
* @license GPL
2323
*/
24+
25+
use App\Models\Device;
26+
use LibreNMS\Alert\AlertData;
27+
2428
$status = 'error';
2529

2630
if (! Auth::user()->hasGlobalAdmin()) {
@@ -29,10 +33,30 @@
2933
exit(json_encode($response));
3034
}
3135

36+
$rules = explode(',', $vars['rules'] ?? '');
37+
3238
try {
33-
Blade::render($vars['template']);
34-
Blade::render($vars['title']);
35-
Blade::render($vars['title_rec']);
39+
// create some test data to check the template
40+
$test_data = [
41+
'id' => 0,
42+
'rule' => 'test',
43+
'name' => 'Test Rule',
44+
'severity' => 'critical',
45+
'extra' => '',
46+
'disabled' => 0,
47+
'query' => '',
48+
'builder' => [],
49+
'proc' => '',
50+
'invert_map' => 0,
51+
'notes' => '',
52+
];
53+
$test_device = new Device(['hostname' => 'test']);
54+
$test_device->device_id = 0;
55+
$test_data['alert'] = new AlertData(AlertData::testData($test_device));
56+
57+
Blade::render($vars['template'], $test_data);
58+
Blade::render($vars['title'], $test_data);
59+
Blade::render($vars['title_rec'], $test_data);
3660

3761
$template_id = 0;
3862
$template_newid = 0;
@@ -68,14 +92,13 @@
6892
if ($status == 'ok') {
6993
$alertRulesOk = true;
7094
dbDelete('alert_template_map', 'alert_templates_id = ?', [$template_id]);
71-
$rules = explode(',', $vars['rules']);
72-
if ($rules !== false) {
73-
foreach ($rules as $rule_id) {
74-
if (! dbInsert(['alert_rule_id' => $rule_id, 'alert_templates_id' => $template_id], 'alert_template_map')) {
75-
$alertRulesOk = false;
76-
}
95+
96+
foreach ($rules as $rule_id) {
97+
if (! dbInsert(['alert_rule_id' => $rule_id, 'alert_templates_id' => $template_id], 'alert_template_map')) {
98+
$alertRulesOk = false;
7799
}
78100
}
101+
79102
if ($alertRulesOk) {
80103
$status = 'ok';
81104
$message = 'Alert template has been ' . ($create ? 'created' : 'updated') . ' and attached rules have been updated.';
@@ -92,6 +115,6 @@
92115
$message .= $e->getMessage();
93116
}
94117

95-
$response = ['status' => htmlentities($status), 'message' => htmlentities($message), 'newid' => $template_newid];
118+
$response = ['status' => htmlentities($status), 'message' => htmlentities($message), 'newid' => $template_newid ?? null];
96119

97120
echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);

includes/html/modal/alert_rule_list.inc.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@
5252
<?php
5353
$alert_rules = dbFetchRows('SELECT * FROM alert_rules order by name');
5454
foreach ($alert_rules as $rule) {
55-
if (empty($rule['builder'])) {
56-
$rule_display = $rule['rule'];
57-
} elseif (isset($rule_extra['options']['override_query']) && $rule_extra['options']['override_query'] === 'on') {
55+
if (isset($rule_extra['options']['override_query']) && $rule_extra['options']['override_query'] === 'on') {
5856
$rule_display = 'Custom SQL Query';
5957
} else {
6058
$rule_display = QueryBuilderParser::fromJson($rule['builder'])->toSql(false);

includes/html/print-alert-rules.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
}
6161

6262
$qb = QueryBuilderParser::fromJson($add_rule['builder']);
63-
63+
6464
$insert = [
6565
'builder' => json_encode($add_rule['builder']),
6666
'query' => $qb->toSql(),
@@ -363,12 +363,12 @@
363363

364364
// Extra
365365

366-
echo '<td><small>Max: ' . $rule_extra['count'] . '<br />Delay: ' . $rule_extra['delay'] . '<br />Interval: ' . $rule_extra['interval'] . '</small></td>';
366+
echo '<td><small>Max: ' . $rule_extra['count'] . '<br />Delay: ' . $rule_extra['delay'] . '<br />Interval: ' . ($rule_extra['interval'] ?? '') . '</small></td>';
367367

368368
// Rule
369369

370370
echo "<td class='col-sm-4'>";
371-
if ($rule_extra['invert'] === true) {
371+
if (isset($rule_extra['invert']) && $rule_extra['invert'] === true) {
372372
echo '<strong><em>Inverted</em></strong> ';
373373
}
374374

0 commit comments

Comments
 (0)