@@ -12,7 +12,9 @@ import (
1212 "strings"
1313 "time"
1414
15+ appsv1 "k8s.io/api/apps/v1"
1516 v1 "k8s.io/api/core/v1"
17+
1618 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1719 "k8s.io/client-go/kubernetes"
1820 "k8s.io/client-go/rest"
@@ -99,7 +101,50 @@ func listPod(clientset *kubernetes.Clientset) {
99101 msg := generateAlertMsg (notReadyPods )
100102 sendAlertToTeams ("Pod Defect Alert" , msg , teamsEndpoint )
101103 }
104+ // Issue #1
105+ // https://github.com/iaoiui/PodMonitoringTool/issues/1
106+ observeReplicaNumbers (clientset )
107+
108+ }
109+
110+ func observeReplicaNumbers (clientset * kubernetes.Clientset ) {
111+ // get not ready deployment
112+ notReadyDeployments := getNotReadyDeployments (clientset )
113+ msg := generateAlertMsgForDeployment (notReadyDeployments )
114+ sendAlertToTeams ("Deployment Defect Alert" , msg , teamsEndpoint )
115+
116+ // TODO get not ready statefulsets
117+ }
118+
119+ func getNotReadyDeployments (clientset * kubernetes.Clientset ) []appsv1.Deployment {
120+ deployments , err := clientset .AppsV1 ().Deployments (namespace ).List (context .TODO (), metav1.ListOptions {})
121+ if err != nil {
122+ panic (err .Error ())
123+ }
124+ notReadyDeployments := []appsv1.Deployment {}
102125
126+ for _ , d := range deployments .Items {
127+ desiredReplicas := d .Status .Replicas
128+ availableReplicas := d .Status .AvailableReplicas
129+ if desiredReplicas != availableReplicas {
130+ notReadyDeployments = append (notReadyDeployments , d )
131+ }
132+
133+ }
134+
135+ return notReadyDeployments
136+ }
137+
138+ func generateAlertMsgForDeployment (deployments []appsv1.Deployment ) string {
139+ msg := ""
140+ log .Printf ("%v deployments is not ready \n " , len (deployments ))
141+ msg += fmt .Sprintf ("# **%v deployment is not ready** \n " , len (deployments )) + "\n "
142+ for i , deploy := range deployments {
143+ log .Println (i + 1 )
144+ log .Println ("\t " , deploy .Name , "\t " )
145+ msg += fmt .Sprintln ("\t Namespace: \t " , deploy .Namespace , "Deployment: \t " , deploy .Name , ", availableReplicas: \t " , deploy .Status .AvailableReplicas , ", desiredReplicas: \t " , deploy .Status .Replicas ) + "\n "
146+ }
147+ return msg
103148}
104149
105150func generateAlertMsg (pods []v1.Pod ) string {
0 commit comments