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  }