| 
									
										
										
										
											2017-08-27 21:33:38 +01:00
										 |  |  | package health
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-01 18:32:15 -08:00
										 |  |  | // Healther interface needs to be implemented by each plugin willing to provide
 | 
					
						
							|  |  |  | // healthhceck information to the health plugin. Note this method should return
 | 
					
						
							|  |  |  | // quickly, i.e. just checking a boolean status, as it is called every second
 | 
					
						
							|  |  |  | // from the health plugin.
 | 
					
						
							| 
									
										
										
										
											2017-08-27 21:33:38 +01:00
										 |  |  | type Healther interface {
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | 	// Health returns a boolean indicating the health status of a plugin.
 | 
					
						
							| 
									
										
										
										
											2017-08-27 21:33:38 +01:00
										 |  |  | 	// False indicates unhealthy.
 | 
					
						
							|  |  |  | 	Health() bool
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | // Ok returns the global health status of all plugin configured in this server.
 | 
					
						
							| 
									
										
										
										
											2017-08-27 21:33:38 +01:00
										 |  |  | func (h *health) Ok() bool {
 | 
					
						
							|  |  |  | 	h.RLock()
 | 
					
						
							|  |  |  | 	defer h.RUnlock()
 | 
					
						
							|  |  |  | 	return h.ok
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | // SetOk sets the global health status of all plugin configured in this server.
 | 
					
						
							| 
									
										
										
										
											2017-08-27 21:33:38 +01:00
										 |  |  | func (h *health) SetOk(ok bool) {
 | 
					
						
							|  |  |  | 	h.Lock()
 | 
					
						
							|  |  |  | 	defer h.Unlock()
 | 
					
						
							|  |  |  | 	h.ok = ok
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // poll polls all healthers and sets the global state.
 | 
					
						
							|  |  |  | func (h *health) poll() {
 | 
					
						
							|  |  |  | 	for _, m := range h.h {
 | 
					
						
							|  |  |  | 		if !m.Health() {
 | 
					
						
							|  |  |  | 			h.SetOk(false)
 | 
					
						
							|  |  |  | 			return
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	h.SetOk(true)
 | 
					
						
							|  |  |  | }
 |