Skip to content
This repository was archived by the owner on Jul 6, 2021. It is now read-only.

Commit b704d18

Browse files
committed
Merge branch 'dmius-hot-a006-fix' into 'master'
A006 plugin and template fixed See merge request postgres-ai-team/postgres-checkup!271
2 parents f919b07 + d70cdcf commit b704d18

File tree

2 files changed

+96
-84
lines changed

2 files changed

+96
-84
lines changed

pghrep/plugins/A006.go

+92-81
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,113 @@
11
package main
22

33
import (
4-
"../src/pyraconv"
4+
"../src/pyraconv"
55
)
66

77
var Data map[string]interface{}
88

99
type prepare string
1010

1111
func compareHostsData(data map[string]interface{}) {
12-
hosts := pyraconv.ToInterfaceMap(data["hosts"])
13-
master := pyraconv.ToString(hosts["master"])
14-
replicas := pyraconv.ToStringArray(hosts["replicas"])
15-
diffData := make(map[string]interface{})
16-
17-
results := pyraconv.ToInterfaceMap(data["results"])
18-
masterData := pyraconv.ToInterfaceMap(results[master])
19-
masterData = pyraconv.ToInterfaceMap(masterData["data"])
20-
21-
pgSettingsData := pyraconv.ToInterfaceMap(masterData["pg_settings"])
22-
diffSettings := make(map[string]interface{})
23-
for settingName, value := range pgSettingsData {
24-
valueData := pyraconv.ToInterfaceMap(value);
25-
settingValue := pyraconv.ToString(valueData["setting"])
26-
settingUnit := pyraconv.ToString(valueData["unit"])
27-
diffSetting := make(map[string]interface{})
28-
masterSetting := make(map[string]interface{})
29-
masterSetting["value"] = settingValue
30-
masterSetting["unit"] = settingUnit
31-
diffSetting["master"] = masterSetting
32-
diff := false
33-
for _, replica := range replicas {
34-
rSettingValue, rSettingUnit := getReplicaSettingValue(data, replica, settingName)
35-
hostSetting := make(map[string]interface{})
36-
hostSetting["value"] = rSettingValue
37-
hostSetting["unit"] = rSettingUnit
38-
diffSetting[replica] = hostSetting
39-
if (settingValue != rSettingValue) || (settingUnit != rSettingUnit) {
40-
diff = true
41-
}
42-
}
43-
if diff {
44-
diffSettings[settingName] = diffSetting
45-
}
46-
}
47-
diffData["pg_settings"] = diffSettings
48-
49-
pgConfigData := pyraconv.ToInterfaceMap(masterData["pg_config"])
50-
diffConfigs := make(map[string]interface{})
51-
for configName, value := range pgConfigData {
52-
valueData := pyraconv.ToInterfaceMap(value);
53-
settingValue := pyraconv.ToString(valueData["setting"])
54-
settingUnit := pyraconv.ToString(valueData["unit"])
55-
diffConfig := make(map[string]interface{})
56-
masterSetting := make(map[string]interface{})
57-
masterSetting["value"] = settingValue
58-
diffConfig["master"] = masterSetting
59-
diff := false
60-
for _, replica := range replicas {
61-
rSettingValue, rSettingUnit := getReplicaConfigValue(data, replica, configName)
62-
hostSetting := make(map[string]interface{})
63-
hostSetting["value"] = rSettingValue
64-
hostSetting["unit"] = rSettingUnit
65-
diffConfig[replica] = hostSetting
66-
if (settingValue != rSettingValue) || (settingUnit != rSettingUnit) {
67-
diff = true
68-
}
69-
}
70-
if diff {
71-
diffConfigs[configName] = diffConfig
72-
}
73-
}
74-
diffData["pg_configs"] = diffConfigs
75-
76-
data["diffData"] = diffData
12+
hosts := pyraconv.ToInterfaceMap(data["hosts"])
13+
master := pyraconv.ToString(hosts["master"])
14+
replicas := pyraconv.ToStringArray(hosts["replicas"])
15+
diffData := make(map[string]interface{})
16+
17+
results := pyraconv.ToInterfaceMap(data["results"])
18+
masterData := pyraconv.ToInterfaceMap(results[master])
19+
masterData = pyraconv.ToInterfaceMap(masterData["data"])
20+
21+
pgSettingsData := pyraconv.ToInterfaceMap(masterData["pg_settings"])
22+
diffSettings := make(map[string]interface{})
23+
for settingName, value := range pgSettingsData {
24+
valueData := pyraconv.ToInterfaceMap(value)
25+
settingValue := pyraconv.ToString(valueData["setting"])
26+
settingUnit := pyraconv.ToString(valueData["unit"])
27+
diffSetting := make(map[string]interface{})
28+
masterSetting := make(map[string]interface{})
29+
masterSetting["value"] = settingValue
30+
masterSetting["unit"] = settingUnit
31+
diffSetting["master"] = masterSetting
32+
diff := false
33+
for _, replica := range replicas {
34+
rSettingValue, rSettingUnit := getReplicaSettingValue(data, replica, settingName)
35+
if rSettingValue != "null" && rSettingUnit != "null" {
36+
// Process only hosts which have data
37+
hostSetting := make(map[string]interface{})
38+
hostSetting["value"] = rSettingValue
39+
hostSetting["unit"] = rSettingUnit
40+
diffSetting[replica] = hostSetting
41+
if (settingValue != rSettingValue) || (settingUnit != rSettingUnit) {
42+
diff = true
43+
}
44+
}
45+
}
46+
if diff {
47+
diffSettings[settingName] = diffSetting
48+
}
49+
}
50+
diffData["pg_settings"] = diffSettings
51+
52+
pgConfigData := pyraconv.ToInterfaceMap(masterData["pg_config"])
53+
diffConfigs := make(map[string]interface{})
54+
for configName, value := range pgConfigData {
55+
valueData := pyraconv.ToInterfaceMap(value)
56+
settingValue := pyraconv.ToString(valueData["setting"])
57+
settingUnit := pyraconv.ToString(valueData["unit"])
58+
diffConfig := make(map[string]interface{})
59+
masterSetting := make(map[string]interface{})
60+
masterSetting["value"] = settingValue
61+
diffConfig["master"] = masterSetting
62+
diff := false
63+
for _, replica := range replicas {
64+
rSettingValue, rSettingUnit := getReplicaConfigValue(data, replica, configName)
65+
if rSettingValue != "null" && rSettingUnit != "null" {
66+
hostSetting := make(map[string]interface{})
67+
hostSetting["value"] = rSettingValue
68+
hostSetting["unit"] = rSettingUnit
69+
diffConfig[replica] = hostSetting
70+
if (settingValue != rSettingValue) || (settingUnit != rSettingUnit) {
71+
diff = true
72+
}
73+
}
74+
}
75+
if diff {
76+
diffConfigs[configName] = diffConfig
77+
}
78+
}
79+
diffData["pg_configs"] = diffConfigs
80+
81+
data["diffData"] = diffData
7782
}
7883

7984
func getReplicaSettingValue(data map[string]interface{}, replica string, settingName string) (string, string) {
80-
results := pyraconv.ToInterfaceMap(data["results"])
81-
hostData := pyraconv.ToInterfaceMap(results[replica])
82-
hostData = pyraconv.ToInterfaceMap(hostData["data"])
83-
pgSettingsData := pyraconv.ToInterfaceMap(hostData["pg_settings"])
84-
pgSettingData := pyraconv.ToInterfaceMap(pgSettingsData[settingName])
85-
return pyraconv.ToString(pgSettingData["setting"]), pyraconv.ToString(pgSettingData["unit"])
85+
results := pyraconv.ToInterfaceMap(data["results"])
86+
if results[replica] != nil {
87+
hostData := pyraconv.ToInterfaceMap(results[replica])
88+
hostData = pyraconv.ToInterfaceMap(hostData["data"])
89+
pgSettingsData := pyraconv.ToInterfaceMap(hostData["pg_settings"])
90+
pgSettingData := pyraconv.ToInterfaceMap(pgSettingsData[settingName])
91+
return pyraconv.ToString(pgSettingData["setting"]), pyraconv.ToString(pgSettingData["unit"])
92+
}
93+
return "null", "null"
8694
}
8795

8896
func getReplicaConfigValue(data map[string]interface{}, replica string, settingName string) (string, string) {
89-
results := pyraconv.ToInterfaceMap(data["results"])
90-
hostData := pyraconv.ToInterfaceMap(results[replica])
91-
hostData = pyraconv.ToInterfaceMap(hostData["data"])
92-
pgConfigsData := pyraconv.ToInterfaceMap(hostData["pg_config"])
93-
pgСonfigData := pyraconv.ToInterfaceMap(pgConfigsData[settingName])
94-
return pyraconv.ToString(pgСonfigData["setting"]), pyraconv.ToString(pgСonfigData["unit"])
97+
results := pyraconv.ToInterfaceMap(data["results"])
98+
if results[replica] != nil {
99+
hostData := pyraconv.ToInterfaceMap(results[replica])
100+
hostData = pyraconv.ToInterfaceMap(hostData["data"])
101+
pgConfigsData := pyraconv.ToInterfaceMap(hostData["pg_config"])
102+
pgСonfigData := pyraconv.ToInterfaceMap(pgConfigsData[settingName])
103+
return pyraconv.ToString(pgСonfigData["setting"]), pyraconv.ToString(pgСonfigData["unit"])
104+
}
105+
return "null", "null"
95106
}
96107

97108
func (g prepare) Prepare(data map[string]interface{}) map[string]interface{} {
98-
compareHostsData(data)
99-
return data
109+
compareHostsData(data)
110+
return data
100111
}
101112

102-
var Preparer prepare
113+
var Preparer prepare

pghrep/templates/A006.tpl

+4-3
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ No differences in `pg_settings` are found.
1414
{{end}}
1515
### Configs(pg_config) that differ ###
1616
{{ if (index .diffData "pg_configs") }}
17-
{{ range $key, $value := (index .diffData "pg_configs") }}
18-
Config {{ $key }}: {{ range $key, $value := $value }} On {{ $key }}: {{ if (index $value "unit") }}{{ UnitValue (index $value "value") (index $value "unit") }}{{else}}{{ index $value "value" }}{{ end }}{{ end }}
17+
▼ Config | {{.hosts.master}} {{ range $skey, $host := .hosts.replicas }}| {{ $host }} {{ end }}
18+
--------|-------{{ range $skey, $host := .hosts.replicas }}|-------- {{ end }}
19+
{{ range $key, $value := (index .diffData "pg_configs") }}{{ $key }} {{ range $key, $value := $value }} | {{ if and ( ne (index $value "value") "-1") ( ne (index $value "value") "0") (index $value "unit") }}{{ if (UnitValue (index $value "value") (index $value "unit")) }}{{ UnitValue (index $value "value") (index $value "unit") }}{{else}}{{(index $value "value")}} {{(index $value "unit") }}{{end}}{{else}}{{ index $value "value" }}{{ end }}{{ end }}
1920
{{ end }}
2021
{{ else }}
2122
No differences in `pg_config` are found.
2223
{{end}}
2324
{{ else }}
24-
No data
25+
No data
2526
{{ end }}
2627

2728
## Conclusions ##

0 commit comments

Comments
 (0)