github.com/wtfutil/wtf@v0.43.0/modules/opsgenie/settings.go (about) 1 package opsgenie 2 3 import ( 4 "os" 5 6 "github.com/olebedev/config" 7 "github.com/wtfutil/wtf/cfg" 8 ) 9 10 const ( 11 defaultFocusable = false 12 defaultTitle = "OpsGenie" 13 ) 14 15 type Settings struct { 16 *cfg.Common 17 18 apiKey string `help:"Your OpsGenie API token."` 19 region string `help:"Defines region to use. Possible options: us (by default), eu." optional:"true"` 20 displayEmpty bool `help:"Whether schedules with no assigned person on-call should be displayed." optional:"true"` 21 schedule []string `help:"A list of names of the schedule(s) to retrieve."` 22 scheduleIdentifierType string `help:"Type of the schedule identifier." values:"id or name" optional:"true"` 23 } 24 25 func NewSettingsFromYAML(name string, ymlConfig *config.Config, globalConfig *config.Config) *Settings { 26 27 settings := Settings{ 28 Common: cfg.NewCommonSettingsFromModule(name, defaultTitle, defaultFocusable, ymlConfig, globalConfig), 29 30 apiKey: ymlConfig.UString("apiKey", ymlConfig.UString("apikey", os.Getenv("WTF_OPS_GENIE_API_KEY"))), 31 region: ymlConfig.UString("region", "us"), 32 displayEmpty: ymlConfig.UBool("displayEmpty", true), 33 scheduleIdentifierType: ymlConfig.UString("scheduleIdentifierType", "id"), 34 } 35 36 cfg.ModuleSecret(name, globalConfig, &settings.apiKey).Load() 37 38 settings.schedule = settings.arrayifySchedules(ymlConfig) 39 40 return &settings 41 } 42 43 // arrayifySchedules figures out if we're dealing with a single project or an array of projects 44 func (settings *Settings) arrayifySchedules(ymlConfig *config.Config) []string { 45 schedules := []string{} 46 47 // Single schedule 48 schedule, err := ymlConfig.String("schedule") 49 if err == nil { 50 schedules = append(schedules, schedule) 51 return schedules 52 } 53 54 // Array of schedules 55 scheduleList := ymlConfig.UList("schedule") 56 for _, scheduleName := range scheduleList { 57 if schedule, ok := scheduleName.(string); ok { 58 schedules = append(schedules, schedule) 59 } 60 } 61 62 return schedules 63 }