go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/llx/code_bundle.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package llx 5 6 func (x *CodeBundle) FilterResults(results map[string]*RawResult) map[string]*RawResult { 7 filteredResults := map[string]*RawResult{} 8 9 for i := range x.CodeV2.Checksums { 10 checksum := x.CodeV2.Checksums[i] 11 12 res := results[checksum] 13 if res != nil { 14 filteredResults[checksum] = res 15 } 16 } 17 18 return filteredResults 19 } 20 21 func Results2Assessment(bundle *CodeBundle, results map[string]*RawResult) *Assessment { 22 return Results2AssessmentLookupV2(bundle, func(s string) (*RawResult, bool) { 23 r := results[s] 24 return r, r != nil 25 }) 26 } 27 28 func ReturnValuesV2(bundle *CodeBundle, f func(s string) (*RawResult, bool)) []*RawResult { 29 return bundle.CodeV2.returnValues(bundle, f) 30 } 31 32 // Results2Assessment converts a list of raw results into an assessment for the query 33 func Results2AssessmentV2(bundle *CodeBundle, results map[string]*RawResult) *Assessment { 34 return Results2AssessmentLookupV2(bundle, func(s string) (*RawResult, bool) { 35 r := results[s] 36 return r, r != nil 37 }) 38 } 39 40 // Results2AssessmentLookup creates an assessment for a bundle using a lookup hook to get all results 41 func Results2AssessmentLookupV2(bundle *CodeBundle, f func(s string) (*RawResult, bool)) *Assessment { 42 code := bundle.CodeV2 43 44 if code == nil { 45 return nil 46 } 47 48 res := Assessment{ 49 Success: true, 50 Checksum: code.Id, 51 } 52 res.Success = true 53 54 entrypoints := code.Entrypoints() 55 for i := range entrypoints { 56 ep := entrypoints[i] 57 cur := code.entrypoint2assessment(bundle, ep, f) 58 if cur == nil { 59 continue 60 } 61 62 res.Results = append(res.Results, cur) 63 if !cur.Success { 64 res.Success = false 65 } 66 67 res.IsAssertion = res.IsAssertion || cur.IsAssertion 68 } 69 70 if !res.IsAssertion { 71 return nil 72 } 73 74 return &res 75 } 76 77 // CodepointChecksums returns the entrypoint- and datapoint-checksums 78 func (x *CodeBundle) CodepointChecksums() []string { 79 return append( 80 x.EntrypointChecksums(), 81 x.DatapointChecksums()...) 82 } 83 84 // EntrypointChecksums returns the checksums for all entrypoints 85 func (x *CodeBundle) EntrypointChecksums() []string { 86 checksums := make([]string, len(x.CodeV2.Blocks[0].Entrypoints)) 87 for i, ref := range x.CodeV2.Blocks[0].Entrypoints { 88 checksums[i] = x.CodeV2.Checksums[ref] 89 } 90 return checksums 91 } 92 93 // DatapointChecksums returns the checksums for all datapoints 94 func (x *CodeBundle) DatapointChecksums() []string { 95 checksums := make([]string, len(x.CodeV2.Blocks[0].Datapoints)) 96 for i, ref := range x.CodeV2.Blocks[0].Datapoints { 97 checksums[i] = x.CodeV2.Checksums[ref] 98 } 99 return checksums 100 }