github.com/mackerelio/mackerel-agent-plugins@v0.89.3/mackerel-plugin-rabbitmq/lib/rabbitmq.go (about) 1 package mprabbitmq 2 3 import ( 4 "flag" 5 "os" 6 7 mp "github.com/mackerelio/go-mackerel-plugin-helper" 8 "github.com/michaelklishin/rabbit-hole" 9 ) 10 11 var graphdef = map[string]mp.Graphs{ 12 "rabbitmq.queue": { 13 Label: "RabbitMQ Queue", 14 Unit: "integer", 15 Metrics: []mp.Metrics{ 16 {Name: "messages", Label: "Total", Diff: false}, 17 {Name: "ready", Label: "Ready", Diff: false}, 18 {Name: "unacknowledged", Label: "Unacknowledged", Diff: false}, 19 }, 20 }, 21 "rabbitmq.message": { 22 Label: "RabbitMQ Message", 23 Unit: "integer", 24 Metrics: []mp.Metrics{ 25 {Name: "publish", Label: "Publish", Diff: false}, 26 }, 27 }, 28 } 29 30 // RabbitMQPlugin metrics 31 type RabbitMQPlugin struct { 32 URI string 33 User string 34 Password string 35 TempFile string 36 } 37 38 // FetchMetrics interface for mackerelplugin 39 func (r RabbitMQPlugin) FetchMetrics() (map[string]interface{}, error) { 40 rmqc, err := rabbithole.NewClient(r.URI, r.User, r.Password) 41 if err != nil { 42 return nil, err 43 } 44 res, err := rmqc.Overview() 45 if err != nil { 46 return nil, err 47 } 48 49 return r.parseStats(*res) 50 } 51 52 func (r RabbitMQPlugin) parseStats(res rabbithole.Overview) (map[string]interface{}, error) { 53 stat := make(map[string]interface{}) 54 55 stat["messages"] = float64(res.QueueTotals.Messages) 56 stat["ready"] = float64(res.QueueTotals.MessagesReady) 57 stat["unacknowledged"] = float64(res.QueueTotals.MessagesUnacknowledged) 58 stat["publish"] = float64(res.MessageStats.PublishDetails.Rate) 59 60 return stat, nil 61 62 } 63 64 // GraphDefinition interface for mackerel plugin 65 func (r RabbitMQPlugin) GraphDefinition() map[string]mp.Graphs { 66 return graphdef 67 } 68 69 // Do the plugin 70 func Do() { 71 defaultPass := "guest" 72 if v, ok := os.LookupEnv("RABBITMQ_PASSWORD"); ok { 73 defaultPass = v 74 } 75 76 optURI := flag.String("uri", "http://localhost:15672", "URI") 77 optUser := flag.String("user", "guest", "User") 78 optPass := flag.String("password", defaultPass, "Password") 79 flag.Parse() 80 81 var rabbitmq RabbitMQPlugin 82 83 rabbitmq.URI = *optURI 84 rabbitmq.User = *optUser 85 rabbitmq.Password = *optPass 86 87 helper := mp.NewMackerelPlugin(rabbitmq) 88 89 helper.Run() 90 }