go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/internal/datalakes/inmemory/assets.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package inmemory
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  
    10  	"github.com/rs/zerolog/log"
    11  	"go.mondoo.com/cnquery/explorer"
    12  )
    13  
    14  type wrapAsset struct {
    15  	mrn             string
    16  	ResolvedPack    *explorer.ResolvedPack
    17  	ResolvedVersion explorer.ResolvedVersion
    18  	Bundle          *explorer.Bundle
    19  }
    20  
    21  // EnsureAsset makes sure an asset exists
    22  func (db *Db) EnsureAsset(ctx context.Context, mrn string) error {
    23  	_, _, err := db.ensureAssetObject(ctx, mrn)
    24  	return err
    25  }
    26  
    27  func (db *Db) ensureAssetObject(ctx context.Context, mrn string) (wrapAsset, bool, error) {
    28  	log.Debug().Str("mrn", mrn).Msg("assets> ensure asset")
    29  
    30  	x, ok := db.cache.Get(dbIDAsset + mrn)
    31  	if ok {
    32  		return x.(wrapAsset), false, nil
    33  	}
    34  
    35  	assetw := wrapAsset{
    36  		mrn: mrn,
    37  		Bundle: &explorer.Bundle{
    38  			OwnerMrn: mrn,
    39  		},
    40  	}
    41  	ok = db.cache.Set(dbIDAsset+mrn, assetw, 1)
    42  	if !ok {
    43  		return wrapAsset{}, false, errors.New("failed to create asset '" + mrn + "'")
    44  	}
    45  
    46  	return assetw, true, nil
    47  }