Skip to content

Commit 1e8e9c7

Browse files
committed
feat: Rebuild the modelingStatuses cache when the leader goes online
1 parent eba5eff commit 1e8e9c7

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

internal/status/apis/v1/manager.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ type StatusManager struct {
5656
// One VarmorPolicy/ClusterPolicyName object corresponds to one PolicyStatus
5757
policyStatuses map[string]varmortypes.PolicyStatus
5858
policyStatusesLock sync.RWMutex
59-
// Use "namespace/VarmorPolicyName" as key. One VarmorPolicy object corresponds to one ModelingStatus
60-
// TODO: Rebuild modelingStatuses from ArmorProfile object when leader change occurs.
59+
// Use "namespace/VarmorPolicyName" or "VarmorClusterPolicyName" as key.
60+
// One VarmorPolicy/ClusterPolicyName object corresponds to one ModelingStatus
6161
modelingStatuses map[string]varmortypes.ModelingStatus
6262
modelingStatusesLock sync.RWMutex
6363
ResetCh chan string
@@ -179,7 +179,7 @@ func (m *StatusManager) retrieveNodeNameList() ([]string, error) {
179179
return nodes, nil
180180
}
181181

182-
// rebuildPolicyStatuses rebuild the policyStatuses cache from the existing ArmorProfile objects.
182+
// rebuildPolicyStatuses rebuild the policyStatuses and modelingStatuses cache from the existing ArmorProfile objects.
183183
func (m *StatusManager) rebuildPolicyStatuses() error {
184184
m.policyStatusesLock.Lock()
185185
defer m.policyStatusesLock.Unlock()
@@ -214,13 +214,21 @@ func (m *StatusManager) rebuildPolicyStatuses() error {
214214
}
215215

216216
var policyStatus varmortypes.PolicyStatus
217+
var modelingStatus varmortypes.ModelingStatus
218+
217219
policyStatus.NodeMessages = make(map[string]string, m.desiredNumber)
220+
modelingStatus.NodeMessages = make(map[string]string, m.desiredNumber)
218221

219222
// Only count the failed node that is still in the cluster
220223
for _, condition := range ap.Status.Conditions {
221224
if varmorutils.InStringArray(condition.NodeName, nodes) {
222225
policyStatus.FailedNumber += 1
223226
policyStatus.NodeMessages[condition.NodeName] = condition.Message
227+
228+
if ap.Spec.BehaviorModeling.Duration != 0 {
229+
modelingStatus.FailedNumber += 1
230+
modelingStatus.NodeMessages[condition.NodeName] = condition.Message
231+
}
224232
}
225233
}
226234

@@ -229,11 +237,17 @@ func (m *StatusManager) rebuildPolicyStatuses() error {
229237
if _, ok := policyStatus.NodeMessages[node]; !ok {
230238
policyStatus.SuccessedNumber += 1
231239
policyStatus.NodeMessages[node] = string(varmor.ArmorProfileReady)
240+
241+
if ap.Spec.BehaviorModeling.Duration != 0 {
242+
modelingStatus.CompletedNumber += 1
243+
modelingStatus.NodeMessages[node] = string(varmor.ArmorProfileModelReady)
244+
}
232245
}
233246
}
234247

235-
// Cache policy status
248+
// Cache status
236249
m.policyStatuses[statusKey] = policyStatus
250+
m.modelingStatuses[statusKey] = modelingStatus
237251
}
238252
}
239253
return nil

0 commit comments

Comments
 (0)