-
Notifications
You must be signed in to change notification settings - Fork 63
/
config_helpers.go
106 lines (92 loc) · 2.96 KB
/
config_helpers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
* Copyright (c) F5, Inc.
*
* This source code is licensed under the Apache License, Version 2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
package config
import (
"github.com/mitchellh/mapstructure"
)
const (
KeyDelimiter = "_"
// viper keys used in config
FeaturesKey = "features"
FeatureRegistration = "registration"
// Deprecated: use nginx-config-async instead
FeatureNginxConfig = "nginx-config"
FeatureNginxConfigAsync = "nginx-config-async"
FeatureNginxSSLConfig = "nginx-ssl-config"
FeatureNginxCounting = "nginx-counting"
FeatureMetrics = "metrics"
FeatureMetricsCollection = "metrics-collection"
FeatureMetricsSender = "metrics-sender"
FeatureMetricsThrottle = "metrics-throttle"
FeatureDataPlaneStatus = "dataplane-status"
FeatureProcessWatcher = "process-watcher"
FeatureFileWatcher = "file-watcher"
FeatureFileWatcherThrottle = "file-watch-throttle"
FeatureActivityEvents = "activity-events"
FeatureAgentAPI = "agent-api"
CommanderPlugin = "commander"
ConfigReaderPlugin = "config-reader-plugin"
ExtensionPlugin = "extension-plugin"
FeaturesPlugin = "features-plugin"
NginxBinaryPlugin = "nginx-binary"
// Extensions
ExtensionsKey = "extensions"
AdvancedMetricsExtensionPlugin = "advanced-metrics"
NginxAppProtectExtensionPlugin = "nginx-app-protect"
NginxAppProtectMonitoringExtensionPlugin = "nap-monitoring"
PhpFpmMetricsExtensionPlugin = "php-fpm-metrics"
// Configuration Keys
AdvancedMetricsExtensionPluginConfigKey = "advanced_metrics"
NginxAppProtectExtensionPluginConfigKey = "nginx_app_protect"
NginxAppProtectMonitoringExtensionPluginConfigKey = "nap_monitoring"
)
func GetKnownExtensions() []string {
return []string{
AdvancedMetricsExtensionPlugin,
NginxAppProtectExtensionPlugin,
NginxAppProtectMonitoringExtensionPlugin,
// TODO : Enable php-fpm metric extension functionality
// PhpFpmMetricsExtensionPlugin,
}
}
func IsKnownExtension(extension string) bool {
for _, knownExtension := range GetKnownExtensions() {
if knownExtension == extension {
return true
}
}
return false
}
func GetDefaultFeatures() []string {
return []string{
FeatureRegistration,
FeatureNginxConfigAsync,
FeatureNginxSSLConfig,
FeatureNginxCounting,
FeatureMetrics,
FeatureDataPlaneStatus,
FeatureProcessWatcher,
FeatureFileWatcher,
FeatureActivityEvents,
FeatureAgentAPI,
}
}
func DecodeConfig[T interface{}](input interface{}) (output T, err error) {
decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
WeaklyTypedInput: true,
DecodeHook: mapstructure.ComposeDecodeHookFunc(mapstructure.StringToTimeDurationHookFunc()),
Result: &output,
})
if err != nil {
return output, err
}
err = decoder.Decode(input)
if err != nil {
return output, err
}
return output, nil
}