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  }