10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'plans/status.pp', line 10
plan peadm::status(
TargetSpec $targets,
Enum[json,table] $format = 'table',
Boolean $verbose = false,
Boolean $summarize = true,
Boolean $colors = $format ? { 'json' => false, default => true }
) {
peadm::assert_supported_bolt_version()
$results = run_task('peadm::infrastatus', $targets, { format => 'json' })
# returns the data in a hash
$stack_status = $results.reduce({}) | $res, $item | {
$data = $item.value[output]
$stack_name = $item.target.peadm::certname()
$status = stdlib::merge(peadm::determine_status($data, $colors), { stack_name => $stack_name })
stdlib::merge($res, { $stack_name => $status })
}
$overall_degraded_stacks = $stack_status.filter | $item | { $item[1][status] =~ /degraded/ }
$overall_failed_stacks = $stack_status.filter | $item | { $item[1][status] =~ /failed/ }
$overall_passed_stacks = $stack_status.filter | $item | { $item[1][status] =~ /operational/ }
# determine if the overall status is failed, operationally, or degraded
if $overall_degraded_stacks.count > 0 {
$overall_status = peadm::convert_status('degraded', undef, $colors)
} else {
$overall_status = peadm::convert_status($overall_failed_stacks.count, $stack_status.count, $colors)
}
# produce titles and headers for tables
$table_title = "Overall Status: ${overall_status}"
$table_head = ['Cluster', 'Status']
$service_table_head = ['Cluster', 'Service', 'Url', 'Status']
$stack_table_rows = $stack_status.map | $item | { [$item[0], $item[1][status]] }
$passed_table_rows = $overall_passed_stacks.map | $item | { [$item[0], $item[1][status]] }
# produce array of degraded or failed services
$bad_svc_rows = stdlib::merge($overall_failed_stacks, $overall_degraded_stacks).map | $item | {
$item[1][failed].map | $svc | {
[$item[0], *$svc[0].split('/'), peadm::convert_status($svc[1], undef, $colors)]
}
}
# produce array of working services
$good_svc_rows = $stack_status.map | $item | {
$item[1][passed].map | $svc | {
[$item[0], *$svc[0].split('/'), peadm::convert_status($svc[1], undef, $colors)]
}
}
# print to table via out::message or return json output
if $format == 'table' {
# Summary table
out::message(
format::table({
title => $table_title,
head => $table_head,
rows => $stack_table_rows }))
# Failed services table
unless $bad_svc_rows.empty {
out::message(
format::table({
title => 'Failed Service Status',
head => $service_table_head,
rows => $bad_svc_rows.reduce([]) |$memo,$rows| { $memo + $rows } }))
}
# Operational services table
if $verbose and ! $good_svc_rows.empty {
out::message(
format::table({
title => 'Operational Service Status',
head => $service_table_head,
rows => $good_svc_rows.reduce([]) |$memo,$rows| { $memo + $rows } }))
}
} else {
if $summarize {
$failed = $bad_svc_rows.empty ? { true => [], default => peadm::convert_hash($service_table_head, $bad_svc_rows[0]) }
$passed = $good_svc_rows.empty ? { true => [], default => peadm::convert_hash($service_table_head, $good_svc_rows[0]) }
$summary_json = {
'summary' => {
'status' => $overall_status,
'stacks' => Hash($stack_table_rows),
},
'failed' => $failed,
'operational' => $passed,
}
return $summary_json
} else {
return $stack_status
}
}
}
|