Implement statistics collection
This commit is contained in:
		
							parent
							
								
									a51d2c5cb4
								
							
						
					
					
						commit
						ee789dacb5
					
				
							
								
								
									
										26
									
								
								hub/hub.go
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								hub/hub.go
									
									
									
									
									
								
							| @ -4,6 +4,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/KosyanMedia/burlesque/stats" | ||||
| 	"github.com/KosyanMedia/burlesque/storage" | ||||
| ) | ||||
| 
 | ||||
| @ -12,6 +13,7 @@ type ( | ||||
| 		storage     *storage.Storage | ||||
| 		subscribers []*Subscription | ||||
| 		lock        sync.Mutex | ||||
| 		statistics  *stats.Stats | ||||
| 	} | ||||
| 	Message struct { | ||||
| 		Queue   string | ||||
| @ -27,6 +29,7 @@ func New(st *storage.Storage) *Hub { | ||||
| 	h := &Hub{ | ||||
| 		storage:     st, | ||||
| 		subscribers: []*Subscription{}, | ||||
| 		statistics:  stats.New(), | ||||
| 	} | ||||
| 
 | ||||
| 	go h.cleanupEverySecond() | ||||
| @ -35,6 +38,8 @@ func New(st *storage.Storage) *Hub { | ||||
| } | ||||
| 
 | ||||
| func (h *Hub) Pub(queue string, msg []byte) bool { | ||||
| 	h.statistics.AddMessage(queue) | ||||
| 
 | ||||
| 	for _, s := range h.subscribers { | ||||
| 		if ok := s.Need(queue); ok { | ||||
| 			// Check if subscription is already served | ||||
| @ -45,6 +50,7 @@ func (h *Hub) Pub(queue string, msg []byte) bool { | ||||
| 			} | ||||
| 
 | ||||
| 			if ok := s.Send(Message{queue, msg}); ok { | ||||
| 				h.statistics.AddDelivery(queue) | ||||
| 				return true | ||||
| 			} | ||||
| 		} | ||||
| @ -57,9 +63,11 @@ func (h *Hub) Pub(queue string, msg []byte) bool { | ||||
| 
 | ||||
| func (h *Hub) Sub(s *Subscription) { | ||||
| 	for _, queue := range s.Queues { | ||||
| 		if msg, ok := h.storage.Get(queue, s.Done()); ok { | ||||
| 			s.Send(Message{queue, msg}) | ||||
| 			return | ||||
| 		if msg, okGot := h.storage.Get(queue, s.Done()); okGot { | ||||
| 			if okSent := s.Send(Message{queue, msg}); okSent { | ||||
| 				h.statistics.AddDelivery(queue) | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -82,9 +90,12 @@ func (h *Hub) Info() map[string]map[string]int64 { | ||||
| 	info := make(map[string]map[string]int64) | ||||
| 
 | ||||
| 	for queue, size := range h.storage.QueueSizes() { | ||||
| 		inRate, outRate := h.statistics.Rates(queue) | ||||
| 		info[queue] = map[string]int64{ | ||||
| 			"messages":      size, | ||||
| 			"subscriptions": 0, | ||||
| 			"in_rate":       inRate, | ||||
| 			"out_rate":      outRate, | ||||
| 		} | ||||
| 	} | ||||
| 	for _, sub := range h.subscribers { | ||||
| @ -102,6 +113,15 @@ func (h *Hub) Info() map[string]map[string]int64 { | ||||
| 	return info | ||||
| } | ||||
| 
 | ||||
| func (h *Hub) RateHistory() map[string]map[string][]int64 { | ||||
| 	hist := map[string]map[string][]int64{} | ||||
| 	for queue, _ := range h.storage.QueueSizes() { | ||||
| 		hist[queue] = h.statistics.RateHistory(queue) | ||||
| 	} | ||||
| 
 | ||||
| 	return hist | ||||
| } | ||||
| 
 | ||||
| func (h *Hub) StorageInfo() map[string]interface{} { | ||||
| 	return h.storage.Info() | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user