github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/controllers/k8score/event_utils.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package k8score 21 22 import ( 23 "encoding/json" 24 "time" 25 26 corev1 "k8s.io/api/core/v1" 27 28 intctrlutil "github.com/1aal/kubeblocks/pkg/controllerutil" 29 ) 30 31 // IsOvertimeEvent checks whether the duration of warning event reaches the threshold. 32 func IsOvertimeEvent(event *corev1.Event, timeout time.Duration) bool { 33 if event.Series != nil { 34 return event.Series.LastObservedTime.After(event.EventTime.Add(timeout)) 35 } 36 // Note: LastTimestamp/FirstTimestamp/Count/Source of event are deprecated in k8s v1.25 37 return event.LastTimestamp.After(event.FirstTimestamp.Add(timeout)) 38 } 39 40 // ParseProbeEventMessage parses probe event message. 41 func ParseProbeEventMessage(reqCtx intctrlutil.RequestCtx, event *corev1.Event) *ProbeMessage { 42 message := &ProbeMessage{} 43 err := json.Unmarshal([]byte(event.Message), message) 44 if err != nil { 45 // not role related message, ignore it 46 reqCtx.Log.Info("not role message", "message", event.Message, "error", err) 47 return nil 48 } 49 return message 50 }