github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/steampipeconfig/options/database.go (about)

     1  package options
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/turbot/steampipe/pkg/constants"
     8  )
     9  
    10  type Database struct {
    11  	Cache            *bool   `hcl:"cache"`
    12  	CacheMaxTtl      *int    `hcl:"cache_max_ttl"`
    13  	CacheMaxSizeMb   *int    `hcl:"cache_max_size_mb"`
    14  	Listen           *string `hcl:"listen"`
    15  	Port             *int    `hcl:"port"`
    16  	SearchPath       *string `hcl:"search_path"`
    17  	SearchPathPrefix *string `hcl:"search_path_prefix"`
    18  	StartTimeout     *int    `hcl:"start_timeout"`
    19  }
    20  
    21  // ConfigMap creates a config map that can be merged with viper
    22  func (d *Database) ConfigMap() map[string]interface{} {
    23  	// only add keys which are non null
    24  	res := map[string]interface{}{}
    25  	if d.Listen != nil {
    26  		res[constants.ArgDatabaseListenAddresses] = d.Listen
    27  	}
    28  	if d.Port != nil {
    29  		res[constants.ArgDatabasePort] = d.Port
    30  	}
    31  	if d.SearchPath != nil {
    32  		// convert from string to array
    33  		res[constants.ConfigKeyServerSearchPath] = searchPathToArray(*d.SearchPath)
    34  	}
    35  	if d.SearchPathPrefix != nil {
    36  		// convert from string to array
    37  		res[constants.ConfigKeyServerSearchPathPrefix] = searchPathToArray(*d.SearchPathPrefix)
    38  	}
    39  	if d.StartTimeout != nil {
    40  		res[constants.ArgDatabaseStartTimeout] = d.StartTimeout
    41  	} else {
    42  		res[constants.ArgDatabaseStartTimeout] = constants.DBStartTimeout.Seconds()
    43  	}
    44  
    45  	if d.Cache != nil {
    46  		res[constants.ArgServiceCacheEnabled] = d.Cache
    47  	}
    48  	if d.CacheMaxTtl != nil {
    49  		res[constants.ArgCacheMaxTtl] = d.CacheMaxTtl
    50  	}
    51  	if d.CacheMaxSizeMb != nil {
    52  		res[constants.ArgMaxCacheSizeMb] = d.CacheMaxSizeMb
    53  	}
    54  	return res
    55  }
    56  
    57  // Merge ::  merge other options over the top of this options object
    58  // i.e. if a property is set in otherOptions, it takes precedence
    59  func (d *Database) Merge(otherOptions Options) {
    60  	switch o := otherOptions.(type) {
    61  	case *Database:
    62  		if o.Listen != nil {
    63  			d.Listen = o.Listen
    64  		}
    65  		if o.Port != nil {
    66  			d.Port = o.Port
    67  		}
    68  		if o.SearchPath != nil {
    69  			d.SearchPath = o.SearchPath
    70  		}
    71  		if o.StartTimeout != nil {
    72  			d.StartTimeout = o.StartTimeout
    73  		}
    74  		if o.SearchPathPrefix != nil {
    75  			d.SearchPathPrefix = o.SearchPathPrefix
    76  		}
    77  		if o.Cache != nil {
    78  			d.Cache = o.Cache
    79  		}
    80  		if o.CacheMaxSizeMb != nil {
    81  			d.CacheMaxSizeMb = o.CacheMaxSizeMb
    82  		}
    83  		if o.CacheMaxTtl != nil {
    84  			d.CacheMaxTtl = o.CacheMaxTtl
    85  		}
    86  	}
    87  }
    88  
    89  func (d *Database) String() string {
    90  	if d == nil {
    91  		return ""
    92  	}
    93  	var str []string
    94  	if d.Listen == nil {
    95  		str = append(str, "  Listen: nil")
    96  	} else {
    97  		str = append(str, fmt.Sprintf("  Listen: %s", *d.Listen))
    98  	}
    99  	if d.Port == nil {
   100  		str = append(str, "  Port: nil")
   101  	} else {
   102  		str = append(str, fmt.Sprintf("  Port: %d", *d.Port))
   103  	}
   104  	if d.SearchPath == nil {
   105  		str = append(str, "  SearchPath: nil")
   106  	} else {
   107  		str = append(str, fmt.Sprintf("  SearchPath: %s", *d.SearchPath))
   108  	}
   109  	if d.StartTimeout == nil {
   110  		str = append(str, "  ServiceStartTimeout: nil")
   111  	} else {
   112  		str = append(str, fmt.Sprintf("  ServiceStartTimeout: %d", *d.StartTimeout))
   113  	}
   114  	if d.SearchPathPrefix == nil {
   115  		str = append(str, "  SearchPathPrefix: nil")
   116  	} else {
   117  		str = append(str, fmt.Sprintf("  SearchPathPrefix: %s", *d.SearchPathPrefix))
   118  	}
   119  	if d.Cache == nil {
   120  		str = append(str, "  Cache: nil")
   121  	} else {
   122  		str = append(str, fmt.Sprintf("  Cache: %t", *d.Cache))
   123  	}
   124  	if d.CacheMaxSizeMb == nil {
   125  		str = append(str, "  CacheMaxSizeMb: nil")
   126  	} else {
   127  		str = append(str, fmt.Sprintf("  CacheMaxSizeMb: %d", *d.CacheMaxSizeMb))
   128  	}
   129  	if d.CacheMaxTtl == nil {
   130  		str = append(str, "  CacheMaxTtl: nil")
   131  	} else {
   132  		str = append(str, fmt.Sprintf("  CacheMaxTtl: %d", *d.CacheMaxTtl))
   133  	}
   134  	return strings.Join(str, "\n")
   135  }