4
4
5
5
namespace Icinga \Module \Icingadb \Model ;
6
6
7
- use ipl \Orm \UnionModel ;
7
+ use ipl \Orm \Query ;
8
8
use ipl \Sql \Expression ;
9
9
10
- class ServicegroupSummary extends UnionModel
10
+ class ServicegroupSummary extends Servicegroup
11
11
{
12
- public function getTableName ()
13
- {
14
- return 'servicegroup ' ;
15
- }
16
-
17
- public function getKeyName ()
18
- {
19
- return ['id ' => 'servicegroup_id ' ];
20
- }
21
-
22
12
public function getColumns ()
23
13
{
24
14
return [
25
- 'display_name ' => 'servicegroup_display_name ' ,
26
- 'name ' => 'servicegroup_name ' ,
15
+ 'display_name ' => 'display_name ' ,
16
+ 'name ' => 'name ' ,
27
17
'services_critical_handled ' => new Expression (
28
- 'SUM(CASE WHEN service_state = 2 AND service_handled = \'y \' THEN 1 ELSE 0 END) '
18
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 2
19
+ AND servicegroup_service_state.is_handled = \'y \' THEN 1 ELSE 0 END) '
29
20
),
30
21
'services_critical_unhandled ' => new Expression (
31
- 'SUM(CASE WHEN service_state = 2 AND service_handled = \'n \' THEN 1 ELSE 0 END) '
22
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 2
23
+ AND servicegroup_service_state.is_handled = \'n \' THEN 1 ELSE 0 END) '
32
24
),
33
25
'services_ok ' => new Expression (
34
- 'SUM(CASE WHEN service_state = 0 THEN 1 ELSE 0 END) '
26
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 0 THEN 1 ELSE 0 END) '
35
27
),
36
28
'services_pending ' => new Expression (
37
- 'SUM(CASE WHEN service_state = 99 THEN 1 ELSE 0 END) '
29
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 99 THEN 1 ELSE 0 END) '
38
30
),
39
31
'services_total ' => new Expression (
40
- 'SUM(CASE WHEN service_id IS NOT NULL THEN 1 ELSE 0 END) '
32
+ 'SUM(CASE WHEN servicegroup_servicegroup_member. service_id IS NOT NULL THEN 1 ELSE 0 END) '
41
33
),
42
34
'services_unknown_handled ' => new Expression (
43
- 'SUM(CASE WHEN service_state = 3 AND service_handled = \'y \' THEN 1 ELSE 0 END) '
35
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 3
36
+ AND servicegroup_service_state.is_handled = \'y \' THEN 1 ELSE 0 END) '
44
37
),
45
38
'services_unknown_unhandled ' => new Expression (
46
- 'SUM(CASE WHEN service_state = 3 AND service_handled = \'n \' THEN 1 ELSE 0 END) '
39
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 3
40
+ AND servicegroup_service_state.is_handled = \'n \' THEN 1 ELSE 0 END) '
47
41
),
48
42
'services_warning_handled ' => new Expression (
49
- 'SUM(CASE WHEN service_state = 1 AND service_handled = \'y \' THEN 1 ELSE 0 END) '
43
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 1
44
+ AND servicegroup_service_state.is_handled = \'y \' THEN 1 ELSE 0 END) '
50
45
),
51
46
'services_warning_unhandled ' => new Expression (
52
- 'SUM(CASE WHEN service_state = 1 AND service_handled = \'n \' THEN 1 ELSE 0 END) '
47
+ 'SUM(CASE WHEN servicegroup_service_state.soft_state = 1
48
+ AND servicegroup_service_state.is_handled = \'n \' THEN 1 ELSE 0 END) '
53
49
),
54
- 'services_severity ' => new Expression ('MAX(service_severity ) ' )
50
+ 'services_severity ' => new Expression ('MAX(servicegroup_service_state.severity ) ' )
55
51
];
56
52
}
57
53
54
+ public function getMetaData ()
55
+ {
56
+ return [];
57
+ }
58
+
58
59
public function getAggregateColumns ()
59
60
{
60
61
return true ;
@@ -65,45 +66,15 @@ public function getSearchColumns()
65
66
return ['display_name ' ];
66
67
}
67
68
68
- public function getDefaultSort ()
69
- {
70
- return 'display_name ' ;
71
- }
72
-
73
- public function getUnions ()
69
+ public function createDefaultUtilize (Query $ query )
74
70
{
75
- $ unions = [
76
- [
77
- Servicegroup::class,
78
- [],
79
- [
80
- 'servicegroup_id ' => 'servicegroup.id ' ,
81
- 'servicegroup_name ' => 'servicegroup.name ' ,
82
- 'servicegroup_display_name ' => 'servicegroup.display_name ' ,
83
- 'service_id ' => new Expression ('NULL ' ),
84
- 'service_state ' => new Expression ('NULL ' ),
85
- 'service_handled ' => new Expression ('NULL ' ),
86
- 'service_severity ' => new Expression ('0 ' )
87
- ]
88
- ],
89
- [
90
- Service::class,
91
- [
92
- 'servicegroup ' ,
93
- 'state '
94
- ],
95
- [
96
- 'servicegroup_id ' => 'servicegroup.id ' ,
97
- 'servicegroup_name ' => new Expression ('NULL ' ),
98
- 'servicegroup_display_name ' => new Expression ('NULL ' ),
99
- 'service_id ' => 'service.id ' ,
100
- 'service_state ' => 'state.soft_state ' ,
101
- 'service_handled ' => 'state.is_handled ' ,
102
- 'service_severity ' => 'state.severity '
103
- ]
104
- ]
105
- ];
71
+ $ query ->utilize ([
72
+ 'service ' ,
73
+ 'service.state '
74
+ ]);
106
75
107
- return $ unions ;
76
+ // We need to select all servicegroups regardless of whether they have services or not
77
+ $ query ->getUtilize ()['servicegroup.service ' ]->setJoinType ('LEFT ' );
78
+ $ query ->getUtilize ()['servicegroup.service.state ' ]->setJoinType ('LEFT ' );
108
79
}
109
80
}
0 commit comments