-
Notifications
You must be signed in to change notification settings - Fork 24
/
report.go
122 lines (114 loc) · 4.49 KB
/
report.go
1
2
3
4
5
6
7
8
9
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package api
// Report contains the fields of a Preflight report
type Report struct {
// Unique ID of the report.
ID string `json:"id"`
// PreflightVersion indicates the version of preflight this report was generated with.
PreflightVersion string `json:"preflight-version"`
// Timestamp indicates when the report was generated.
Timestamp Time `json:"timestamp"`
// Cluster indicates which was the target of the report.
Cluster string `json:"cluster"`
// Package indicates which package was used for the report. (deprecated)
Package string `json:"package"`
// PackageInformation contains all the information about the package that was used to generate the report.
PackageInformation PackageInformation `json:"package-information"`
// Name is the name of the package that was used for this report.
Name string `json:"name"`
// Description is the description of the package that was used for this report.
Description string `json:"description,omitempty"`
// Sections contains the sections of the package that was used for this report.
Sections []ReportSection `json:"sections,omitempty"`
}
// Summarize produces as ReportSummary from a Report
func (r *Report) Summarize() ReportSummary {
var successes, failures int
for _, section := range r.Sections {
for _, rule := range section.Rules {
if rule.Success {
successes++
} else {
failures++
}
}
}
return ReportSummary{
ID: r.ID,
Package: r.Package,
Cluster: r.Cluster,
Timestamp: r.Timestamp,
FailureCount: failures,
SuccessCount: successes,
}
}
// GetReportMetadata returns the ReportMetadata for the Report.
func (r *Report) GetReportMetadata() *ReportMetadata {
return &ReportMetadata{
ID: r.ID,
Timestamp: r.Timestamp,
Cluster: r.Cluster,
Package: r.Package,
PackageInformation: r.PackageInformation,
PreflightVersion: r.PreflightVersion,
}
}
// PackageInformation contains all the details to identify a package.
type PackageInformation struct {
// Namespace the package belongs to.
Namespace string `json:"namespace"`
// ID is the ID of the package.
ID string `json:"id"`
// Version is the version of the package.
Version string `json:"version"`
// SchemaVersion is the version of the Preflight package schema.
SchemaVersion string `json:"schema-version"`
}
// ReportSection contains the fields of a section inside a Report
type ReportSection struct {
// ID is the ID of the section.
ID string `json:"id"`
// Name is the name of the section.
Name string `json:"name"`
// Description is the description of the section.
Description string `json:"description,omitempty"`
// Rules contain all the rules in the section.
Rules []ReportRule `json:"rules,omitempty"`
}
// ReportRule contains the fields of a rule inside a Report
type ReportRule struct {
// ID is the id of the rule.
ID string `json:"id"`
// Name is a shortname for the rule.
Name string `json:"name"`
// Description is a text describing what the rule is about.
Description string `json:"description,omitempty"`
// Manual indicated whether the rule can be evaluated automatically by Preflight or requires manual intervention.
Manual bool `json:"manual,omitempty"`
// Remediation is a text describing how to fix a failure of the rule.
Remediation string `json:"remediation,omitempty"`
// Links contains useful links related to the rule.
Links []string `json:"links,omitempty"`
// Success indicates whether the check was a success or not.
Success bool `json:"success"`
// Value contains the raw result of the check.
Value interface{} `json:"value,omitempty"`
// Violations contains the list of messages from the execution of the check
Violations interface{} `json:"violations"`
// Missing indicates whether the Rego rule was missing or not.
Missing bool `json:"missing"`
}
// ReportMetadata contains metadata about a report
type ReportMetadata struct {
// Unique ID of the report.
ID string `json:"id"`
// Timestamp indicates when the report was generated.
Timestamp Time `json:"timestamp"`
// Cluster indicates which was the target of the report.
Cluster string `json:"cluster"`
// Deprecated: Package indicates which package was used for the report.
Package string `json:"package"`
// PackageInformation contains all the information about the package that was used to generate the report.
PackageInformation PackageInformation `json:"package-information"`
// PreflightVersion indicates the version of preflight this report was generated with.
PreflightVersion string `json:"preflight-version"`
}