Skip to content

Commit 275cf7b

Browse files
committed
observe replica number #1
1 parent 1ecee07 commit 275cf7b

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

app/main.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

105150
func generateAlertMsg(pods []v1.Pod) string {

0 commit comments

Comments
 (0)