@@ -101,19 +101,42 @@ func listPod(clientset *kubernetes.Clientset) {
101101 msg := generateAlertMsg (notReadyPods )
102102 sendAlertToTeams ("Pod Defect Alert" , msg , teamsEndpoint )
103103 }
104- // Issue #1
104+
105105 // https://github.com/iaoiui/PodMonitoringTool/issues/1
106106 observeReplicaNumbers (clientset )
107107
108108}
109109
110+ // observe replica number of deployment and statefulsets
110111func observeReplicaNumbers (clientset * kubernetes.Clientset ) {
111112 // get not ready deployment
112113 notReadyDeployments := getNotReadyDeployments (clientset )
113114 msg := generateAlertMsgForDeployment (notReadyDeployments )
114115 sendAlertToTeams ("Deployment Defect Alert" , msg , teamsEndpoint )
115116
116- // TODO get not ready statefulsets
117+ // get not ready statefulsets
118+ notReadyStatefulsets := getNotReadyStatefulsets (clientset )
119+ msg = generateAlertMsgForStatefulset (notReadyStatefulsets )
120+ sendAlertToTeams ("Statefulsets Defect Alert" , msg , teamsEndpoint )
121+ }
122+
123+ func getNotReadyStatefulsets (clientset * kubernetes.Clientset ) []appsv1.StatefulSet {
124+ statefulsets , err := clientset .AppsV1 ().StatefulSets (namespace ).List (context .TODO (), metav1.ListOptions {})
125+ if err != nil {
126+ panic (err .Error ())
127+ }
128+ notReadyStatefulsets := []appsv1.StatefulSet {}
129+
130+ for _ , s := range statefulsets .Items {
131+ desiredReplicas := s .Status .Replicas
132+ availableReplicas := s .Status .ReadyReplicas
133+ if desiredReplicas != availableReplicas {
134+ notReadyStatefulsets = append (notReadyStatefulsets , s )
135+ }
136+
137+ }
138+
139+ return notReadyStatefulsets
117140}
118141
119142func getNotReadyDeployments (clientset * kubernetes.Clientset ) []appsv1.Deployment {
@@ -135,6 +158,18 @@ func getNotReadyDeployments(clientset *kubernetes.Clientset) []appsv1.Deployment
135158 return notReadyDeployments
136159}
137160
161+ func generateAlertMsgForStatefulset (statefulsets []appsv1.StatefulSet ) string {
162+ msg := ""
163+ log .Printf ("%v statefulsets is not ready \n " , len (statefulsets ))
164+ msg += fmt .Sprintf ("# **%v statefulset is not ready** \n " , len (statefulsets )) + "\n "
165+ for i , sts := range statefulsets {
166+ log .Println (i + 1 )
167+ log .Println ("\t " , sts .Name , "\t " )
168+ msg += fmt .Sprintln ("\t Namespace: \t " , sts .Namespace , "StatefulSet: \t " , sts .Name , ", availableReplicas: \t " , sts .Status .ReadyReplicas , ", desiredReplicas: \t " , sts .Status .Replicas ) + "\n "
169+ }
170+ return msg
171+ }
172+
138173func generateAlertMsgForDeployment (deployments []appsv1.Deployment ) string {
139174 msg := ""
140175 log .Printf ("%v deployments is not ready \n " , len (deployments ))
0 commit comments