github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/context/default-context.go (about)

     1  package context
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  type defaultContext struct {
     9  	appName    string
    10  	appVersion string
    11  	buildNum   string
    12  }
    13  
    14  var context = defaultContext{}
    15  
    16  func InitContext(appName string, appVersion string, buildNum string) LauncherContext {
    17  	// TODO check the appName value
    18  	context.appName = appName
    19  	context.appVersion = appVersion
    20  	context.buildNum = buildNum
    21  
    22  	return &context
    23  }
    24  
    25  func AppContext() (LauncherContext, error) {
    26  	if context.appName != "" {
    27  		return &context, nil
    28  	}
    29  
    30  	return nil, fmt.Errorf("uninitialized context, the root command has to init the context")
    31  }
    32  
    33  func (ctx *defaultContext) AppVersion() string {
    34  	return ctx.appVersion
    35  }
    36  
    37  func (ctx *defaultContext) AppBuildNum() string {
    38  	return ctx.buildNum
    39  }
    40  
    41  func (ctx *defaultContext) AppName() string {
    42  	return ctx.appName
    43  }
    44  
    45  func (ctx *defaultContext) AppDirname() string {
    46  	return fmt.Sprintf(".%s", ctx.appName)
    47  }
    48  
    49  func (ctx *defaultContext) AppHomeEnvVar() string {
    50  	return ctx.envVarName("HOME")
    51  }
    52  
    53  func (ctx *defaultContext) UsernameEnvVar() string {
    54  	return ctx.envVarName("USERNAME")
    55  }
    56  
    57  func (ctx *defaultContext) PasswordEnvVar() string {
    58  	return ctx.envVarName("PASSWORD")
    59  }
    60  
    61  func (ctx *defaultContext) AuthTokenEnvVar() string {
    62  	return ctx.envVarName("AUTH_TOKEN")
    63  }
    64  
    65  func (ctx *defaultContext) LogLevelEnvVar() string {
    66  	return ctx.envVarName("LOG_LEVEL")
    67  }
    68  
    69  func (ctx *defaultContext) DebugFlagsEnvVar() string {
    70  	return ctx.envVarName("DEBUG_FLAGS")
    71  }
    72  
    73  func (ctx *defaultContext) ConfigurationFileEnvVar() string {
    74  	return ctx.envVarName("CONFIG_FILE")
    75  }
    76  
    77  func (ctx *defaultContext) RemoteConfigurationUrlEnvVar() string {
    78  	return ctx.envVarName("REMOTE_CONFIG_URL")
    79  }
    80  
    81  func (ctx *defaultContext) CmdPackageDirEnvVar() string {
    82  	return ctx.envVarName("PACKAGE_DIR")
    83  }
    84  
    85  func (ctx *defaultContext) envVarName(name string) string {
    86  	return fmt.Sprintf("%s_%s", ctx.prefix(), name)
    87  }
    88  
    89  func (ctx *defaultContext) prefix() string {
    90  	// TODO: in 1.8+ use COLA as the prefix so that it is independent to the binary name
    91  	// return "COLA"
    92  	return strings.ToUpper(ctx.appName)
    93  }