|
30 | 30 | alertEnabled bool |
31 | 31 | mu sync.Mutex |
32 | 32 | defaultLimit = setDefaultLimit() |
| 33 | + shutdownChan = make(chan struct{}) |
33 | 34 | ) |
34 | 35 |
|
35 | 36 | func setDefaultLimit() SetLimit { |
@@ -105,6 +106,16 @@ func sendAlert(resource string, usage float64) { |
105 | 106 | } |
106 | 107 | } |
107 | 108 |
|
| 109 | +func shutdownHandler(w http.ResponseWriter, r *http.Request) { |
| 110 | + if r.Method == http.MethodPost { |
| 111 | + log.Println("Received shutdown request") |
| 112 | + close(shutdownChan) // Trigger shutdown |
| 113 | + w.WriteHeader(http.StatusOK) |
| 114 | + } else { |
| 115 | + http.Error(w, "Invalid request method", http.StatusMethodNotAllowed) |
| 116 | + } |
| 117 | +} |
| 118 | + |
108 | 119 | func toggleAlertHandler(w http.ResponseWriter, r *http.Request) { |
109 | 120 | mu.Lock() |
110 | 121 | defer mu.Unlock() |
@@ -169,33 +180,41 @@ func monitorResources() { |
169 | 180 | cpuUsage := getCPUUsage() |
170 | 181 | memUsage := getMemoryUsage() |
171 | 182 | diskUsage := getDiskUsage() |
172 | | - |
173 | | - // Check if the resource usage exceeds thresholds and send notifications |
174 | 183 | sendAlert("CPU", cpuUsage) |
175 | 184 | sendAlert("Memory", memUsage) |
176 | 185 | sendAlert("Disk", diskUsage) |
177 | 186 |
|
178 | 187 | time.Sleep(5 * time.Second) |
179 | 188 | } |
180 | 189 | } |
181 | | - |
182 | 190 | func main() { |
183 | | - // Initial alert state |
184 | 191 | alertEnabled = true |
185 | 192 | limit := setDefaultLimit() |
186 | 193 | log.Println(limit) |
| 194 | + server := &http.Server{ |
| 195 | + Addr: ":8080", |
| 196 | + } |
187 | 197 |
|
188 | | - // Set up routes |
189 | 198 | http.HandleFunc("/toggle-alerts", toggleAlertHandler) |
190 | 199 | http.HandleFunc("/resource-usage", resourceUsageHandler) |
191 | 200 | http.HandleFunc("/limit-changer", toggleLimitHandler) |
| 201 | + http.HandleFunc("/shutdown", shutdownHandler) |
192 | 202 |
|
193 | | - // Start monitoring resources in the background |
194 | 203 | go monitorResources() |
195 | 204 |
|
196 | | - // Start the backend server |
197 | | - log.Println("Starting backend server on port 8080...") |
198 | | - if err := http.ListenAndServe(":8080", nil); err != nil { |
199 | | - log.Fatal("Error starting server: ", err) |
| 205 | + go func() { |
| 206 | + log.Println("Starting backend server on port 8080...") |
| 207 | + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { |
| 208 | + log.Fatalf("Error starting server: %v", err) |
| 209 | + } |
| 210 | + }() |
| 211 | + |
| 212 | + <-shutdownChan |
| 213 | + |
| 214 | + log.Println("Shutting down the server...") |
| 215 | + if err := server.Close(); err != nil { |
| 216 | + log.Fatalf("Server shutdown failed: %v", err) |
200 | 217 | } |
| 218 | + |
| 219 | + log.Println("Server stopped.") |
201 | 220 | } |
0 commit comments