Skip to content

Commit c9d7f92

Browse files
authored
Merge pull request #238 from andyxning/enable_condition_update_when_message_change_for_custom_plugin
enable codnition updaet when message change for custom plugin
2 parents 25bebf5 + 33dffe0 commit c9d7f92

File tree

5 files changed

+75
-39
lines changed

5 files changed

+75
-39
lines changed

config/custom-plugin-monitor.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"invoke_interval": "30s",
55
"timeout": "5s",
66
"max_output_length": 80,
7-
"concurrency": 3
7+
"concurrency": 3,
8+
"enable_message_change_based_condition_update": false
89
},
910
"source": "ntp-custom-plugin-monitor",
1011
"conditions": [

docs/custom_plugin_monitor.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
* `timeout`: Time after which custom plugins invokation will be terminated and considered timeout.
77
* `max_output_length`: The maximum standard output size from custom plugins that NPD will be cut and use for condition status message.
88
* `concurrency`: The plugin worker number, i.e., how many custom plugins will be invoked concurrently.
9+
* `enable_message_change_based_condition_update`: Flag controls whether message change should result in a condition update.

pkg/custompluginmonitor/custom_plugin_monitor.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,12 @@ func (c *customPluginMonitor) generateStatus(result cpmtypes.Result) *types.Stat
176176

177177
condition.Status = status
178178
condition.Reason = result.Rule.Reason
179-
} else if condition.Status == status && condition.Reason != result.Rule.Reason {
180-
// change 4: Condition status do not change. condition reason changes.
179+
} else if condition.Status == status &&
180+
(condition.Reason != result.Rule.Reason ||
181+
(*c.config.PluginGlobalConfig.EnableMessageChangeBasedConditionUpdate && condition.Message != result.Message)) {
182+
// change 4: Condition status do not change.
183+
// condition reason changes or
184+
// condition message changes when message based condition update is enabled.
181185
condition.Transition = timestamp
182186
condition.Reason = result.Rule.Reason
183187
condition.Message = result.Message

pkg/custompluginmonitor/types/config.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ import (
2525
)
2626

2727
var (
28-
defaultGlobalTimeout = 5 * time.Second
29-
defaultGlobalTimeoutString = defaultGlobalTimeout.String()
30-
defaultInvokeInterval = 30 * time.Second
31-
defaultInvokeIntervalString = defaultInvokeInterval.String()
32-
defaultMaxOutputLength = 80
33-
defaultConcurrency = 3
28+
defaultGlobalTimeout = 5 * time.Second
29+
defaultGlobalTimeoutString = defaultGlobalTimeout.String()
30+
defaultInvokeInterval = 30 * time.Second
31+
defaultInvokeIntervalString = defaultInvokeInterval.String()
32+
defaultMaxOutputLength = 80
33+
defaultConcurrency = 3
34+
defaultMessageChangeBasedConditionUpdate = false
3435

3536
customPluginName = "custom"
3637
)
@@ -48,6 +49,8 @@ type pluginGlobalConfig struct {
4849
MaxOutputLength *int `json:"max_output_length,omitempty"`
4950
// Concurrency is the number of concurrent running plugins.
5051
Concurrency *int `json:"concurrency,omitempty"`
52+
// EnableMessageChangeBasedConditionUpdate indicates whether NPD should enable message change based condition update.
53+
EnableMessageChangeBasedConditionUpdate *bool `json:"enable_message_change_based_condition_update,omitempty"`
5154
}
5255

5356
// Custom plugin config is the configuration of custom plugin monitor.
@@ -95,6 +98,9 @@ func (cpc *CustomPluginConfig) ApplyConfiguration() error {
9598
if cpc.PluginGlobalConfig.Concurrency == nil {
9699
cpc.PluginGlobalConfig.Concurrency = &defaultConcurrency
97100
}
101+
if cpc.PluginGlobalConfig.EnableMessageChangeBasedConditionUpdate == nil {
102+
cpc.PluginGlobalConfig.EnableMessageChangeBasedConditionUpdate = &defaultMessageChangeBasedConditionUpdate
103+
}
98104

99105
for _, rule := range cpc.Rules {
100106
if rule.TimeoutString != nil {

pkg/custompluginmonitor/types/config_test.go

Lines changed: 54 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
2929
invokeIntervalString := invokeInterval.String()
3030
maxOutputLength := 79
3131
concurrency := 2
32+
messageChangeBasedConditionUpdate := true
3233

3334
ruleTimeout := 1 * time.Second
3435
ruleTimeoutString := ruleTimeout.String()
@@ -51,12 +52,13 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
5152
},
5253
Wanted: CustomPluginConfig{
5354
PluginGlobalConfig: pluginGlobalConfig{
54-
InvokeIntervalString: &defaultInvokeIntervalString,
55-
InvokeInterval: &defaultInvokeInterval,
56-
TimeoutString: &defaultGlobalTimeoutString,
57-
Timeout: &defaultGlobalTimeout,
58-
MaxOutputLength: &defaultMaxOutputLength,
59-
Concurrency: &defaultConcurrency,
55+
InvokeIntervalString: &defaultInvokeIntervalString,
56+
InvokeInterval: &defaultInvokeInterval,
57+
TimeoutString: &defaultGlobalTimeoutString,
58+
Timeout: &defaultGlobalTimeout,
59+
MaxOutputLength: &defaultMaxOutputLength,
60+
Concurrency: &defaultConcurrency,
61+
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
6062
},
6163
Rules: []*CustomRule{
6264
{
@@ -78,12 +80,13 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
7880
},
7981
Wanted: CustomPluginConfig{
8082
PluginGlobalConfig: pluginGlobalConfig{
81-
InvokeIntervalString: &invokeIntervalString,
82-
InvokeInterval: &invokeInterval,
83-
TimeoutString: &defaultGlobalTimeoutString,
84-
Timeout: &defaultGlobalTimeout,
85-
MaxOutputLength: &defaultMaxOutputLength,
86-
Concurrency: &defaultConcurrency,
83+
InvokeIntervalString: &invokeIntervalString,
84+
InvokeInterval: &invokeInterval,
85+
TimeoutString: &defaultGlobalTimeoutString,
86+
Timeout: &defaultGlobalTimeout,
87+
MaxOutputLength: &defaultMaxOutputLength,
88+
Concurrency: &defaultConcurrency,
89+
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
8790
},
8891
},
8992
},
@@ -95,12 +98,13 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
9598
},
9699
Wanted: CustomPluginConfig{
97100
PluginGlobalConfig: pluginGlobalConfig{
98-
InvokeIntervalString: &defaultInvokeIntervalString,
99-
InvokeInterval: &defaultInvokeInterval,
100-
TimeoutString: &globalTimeoutString,
101-
Timeout: &globalTimeout,
102-
MaxOutputLength: &defaultMaxOutputLength,
103-
Concurrency: &defaultConcurrency,
101+
InvokeIntervalString: &defaultInvokeIntervalString,
102+
InvokeInterval: &defaultInvokeInterval,
103+
TimeoutString: &globalTimeoutString,
104+
Timeout: &globalTimeout,
105+
MaxOutputLength: &defaultMaxOutputLength,
106+
Concurrency: &defaultConcurrency,
107+
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
104108
},
105109
},
106110
},
@@ -112,12 +116,13 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
112116
},
113117
Wanted: CustomPluginConfig{
114118
PluginGlobalConfig: pluginGlobalConfig{
115-
InvokeIntervalString: &defaultInvokeIntervalString,
116-
InvokeInterval: &defaultInvokeInterval,
117-
TimeoutString: &defaultGlobalTimeoutString,
118-
Timeout: &defaultGlobalTimeout,
119-
MaxOutputLength: &maxOutputLength,
120-
Concurrency: &defaultConcurrency,
119+
InvokeIntervalString: &defaultInvokeIntervalString,
120+
InvokeInterval: &defaultInvokeInterval,
121+
TimeoutString: &defaultGlobalTimeoutString,
122+
Timeout: &defaultGlobalTimeout,
123+
MaxOutputLength: &maxOutputLength,
124+
Concurrency: &defaultConcurrency,
125+
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
121126
},
122127
},
123128
},
@@ -129,12 +134,31 @@ func TestCustomPluginConfigApplyConfiguration(t *testing.T) {
129134
},
130135
Wanted: CustomPluginConfig{
131136
PluginGlobalConfig: pluginGlobalConfig{
132-
InvokeIntervalString: &defaultInvokeIntervalString,
133-
InvokeInterval: &defaultInvokeInterval,
134-
TimeoutString: &defaultGlobalTimeoutString,
135-
Timeout: &defaultGlobalTimeout,
136-
MaxOutputLength: &defaultMaxOutputLength,
137-
Concurrency: &concurrency,
137+
InvokeIntervalString: &defaultInvokeIntervalString,
138+
InvokeInterval: &defaultInvokeInterval,
139+
TimeoutString: &defaultGlobalTimeoutString,
140+
Timeout: &defaultGlobalTimeout,
141+
MaxOutputLength: &defaultMaxOutputLength,
142+
Concurrency: &concurrency,
143+
EnableMessageChangeBasedConditionUpdate: &defaultMessageChangeBasedConditionUpdate,
144+
},
145+
},
146+
},
147+
"custom message change based condition update": {
148+
Orig: CustomPluginConfig{
149+
PluginGlobalConfig: pluginGlobalConfig{
150+
EnableMessageChangeBasedConditionUpdate: &messageChangeBasedConditionUpdate,
151+
},
152+
},
153+
Wanted: CustomPluginConfig{
154+
PluginGlobalConfig: pluginGlobalConfig{
155+
InvokeIntervalString: &defaultInvokeIntervalString,
156+
InvokeInterval: &defaultInvokeInterval,
157+
TimeoutString: &defaultGlobalTimeoutString,
158+
Timeout: &defaultGlobalTimeout,
159+
MaxOutputLength: &defaultMaxOutputLength,
160+
Concurrency: &defaultConcurrency,
161+
EnableMessageChangeBasedConditionUpdate: &messageChangeBasedConditionUpdate,
138162
},
139163
},
140164
},

0 commit comments

Comments
 (0)