Skip to content

Commit

Permalink
nsqadmin: make importable
Browse files Browse the repository at this point in the history
  • Loading branch information
mreiferson committed Mar 28, 2015
1 parent 8b06d09 commit 72728f5
Show file tree
Hide file tree
Showing 9 changed files with 25 additions and 31 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
build
apps/nsqlookupd/nsqlookupd
apps/nsqd/nsqd
nsqadmin/nsqadmin
apps/nsqadmin/nsqadmin
bench/bench_reader/bench_reader
bench/bench_writer/bench_writer
bench/bench_channels/bench_channels
Expand Down
5 changes: 3 additions & 2 deletions nsqadmin/main.go → apps/nsqadmin/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/BurntSushi/toml"
"github.com/bitly/nsq/internal/app"
"github.com/bitly/nsq/internal/version"
"github.com/bitly/nsq/nsqadmin"
"github.com/mreiferson/go-options"
)

Expand Down Expand Up @@ -70,9 +71,9 @@ func main() {
}
}

opts := NewNSQAdminOptions()
opts := nsqadmin.NewNSQAdminOptions()
options.Resolve(opts, flagSet, cfg)
nsqadmin := NewNSQAdmin(opts)
nsqadmin := nsqadmin.NewNSQAdmin(opts)

nsqadmin.Main()
<-exitChan
Expand Down
2 changes: 1 addition & 1 deletion nsqadmin/context.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package nsqadmin

type Context struct {
nsqadmin *NSQAdmin
Expand Down
18 changes: 9 additions & 9 deletions nsqadmin/graphs.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package nsqadmin

import (
"encoding/json"
Expand Down Expand Up @@ -193,7 +193,7 @@ func (g *GraphOptions) Sparkline(gr GraphTarget, key string) template.URL {
params.Set("lineMode", "connected")
params.Set("drawNullAsZero", "false")

interval := fmt.Sprintf("%dsec", *statsdInterval/time.Second)
interval := fmt.Sprintf("%dsec", g.ctx.nsqadmin.opts.StatsdInterval/time.Second)
targets, color := gr.Target(key)
for _, target := range targets {
target = fmt.Sprintf(target, g.Prefix(gr.Host(), metricType(key)))
Expand All @@ -216,13 +216,13 @@ func (g *GraphOptions) LargeGraph(gr GraphTarget, key string) template.URL {
params.Set("lineMode", "connected")
params.Set("drawNullAsZero", "false")

interval := fmt.Sprintf("%dsec", *statsdInterval/time.Second)
interval := fmt.Sprintf("%dsec", g.ctx.nsqadmin.opts.StatsdInterval/time.Second)
targets, color := gr.Target(key)
for _, target := range targets {
target = fmt.Sprintf(target, g.Prefix(gr.Host(), metricType(key)))
target = fmt.Sprintf(`summarize(%s,"%s","avg")`, target, interval)
if metricType(key) == "counter" {
scale := fmt.Sprintf("%.04f", 1/float64(*statsdInterval/time.Second))
scale := fmt.Sprintf("%.04f", 1/float64(g.ctx.nsqadmin.opts.StatsdInterval/time.Second))
target = fmt.Sprintf(`scale(%s,%s)`, target, scale)
}
params.Add("target", target)
Expand Down Expand Up @@ -257,18 +257,18 @@ func metricType(key string) string {
}[key]
}

func rateQuery(target string) string {
func rateQuery(target string, statsdInterval time.Duration) string {
params := url.Values{}
fromInterval := fmt.Sprintf("-%dsec", *statsdInterval*2/time.Second)
fromInterval := fmt.Sprintf("-%dsec", statsdInterval*2/time.Second)
params.Set("from", fromInterval)
untilInterval := fmt.Sprintf("-%dsec", *statsdInterval/time.Second)
untilInterval := fmt.Sprintf("-%dsec", statsdInterval/time.Second)
params.Set("until", untilInterval)
params.Set("format", "json")
params.Set("target", target)
return fmt.Sprintf("/render?%s", params.Encode())
}

func parseRateResponse(body []byte) ([]byte, error) {
func parseRateResponse(body []byte, statsdInterval time.Duration) ([]byte, error) {
js, err := simplejson.NewJson([]byte(body))
if err != nil {
return nil, err
Expand All @@ -284,7 +284,7 @@ func parseRateResponse(body []byte) ([]byte, error) {
if rate < 0 {
rateStr = "N/A"
} else {
rateDivisor := *statsdInterval / time.Second
rateDivisor := statsdInterval / time.Second
rateStr = fmt.Sprintf("%.2f", rate/float64(rateDivisor))
}
return json.Marshal(map[string]string{"datapoint": rateStr})
Expand Down
15 changes: 4 additions & 11 deletions nsqadmin/http.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package nsqadmin

import (
"fmt"
Expand Down Expand Up @@ -979,20 +979,13 @@ func (s *httpServer) graphiteDataHandler(w http.ResponseWriter, req *http.Reques
return
}

var queryFunc func(string) string
var formatJSONResponseFunc func([]byte) ([]byte, error)

switch metric {
case "rate":
queryFunc = rateQuery
formatJSONResponseFunc = parseRateResponse
default:
if metric != "rate" {
s.ctx.nsqadmin.logf("ERROR: unknown metric value %s", metric)
http.Error(w, "INVALID_METRIC_PARAM", 500)
return
}

query := queryFunc(target)
query := rateQuery(target, s.ctx.nsqadmin.opts.StatsdInterval)
url := s.ctx.nsqadmin.opts.GraphiteURL + query
s.ctx.nsqadmin.logf("GRAPHITE: %s", url)
response, err := graphiteGet(url)
Expand All @@ -1002,7 +995,7 @@ func (s *httpServer) graphiteDataHandler(w http.ResponseWriter, req *http.Reques
return
}

resp, err := formatJSONResponseFunc(response)
resp, err := parseRateResponse(response, s.ctx.nsqadmin.opts.StatsdInterval)
if err != nil {
s.ctx.nsqadmin.logf("ERROR: response formating failed - %s", err)
http.Error(w, "INVALID_GRAPHITE_RESPONSE", 500)
Expand Down
2 changes: 1 addition & 1 deletion nsqadmin/logger.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package nsqadmin

type logger interface {
Output(maxdepth int, s string) error
Expand Down
2 changes: 1 addition & 1 deletion nsqadmin/notify.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package nsqadmin

import (
"encoding/base64"
Expand Down
8 changes: 4 additions & 4 deletions nsqadmin/nsqadmin.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package nsqadmin

import (
"bytes"
Expand Down Expand Up @@ -72,7 +72,7 @@ func NewNSQAdmin(opts *nsqadminOptions) *NSQAdmin {
n.graphiteURL = url
}

n.logf(version.String("nsqlookupd"))
n.logf(version.String("nsqadmin"))

return n
}
Expand All @@ -91,8 +91,8 @@ func (n *NSQAdmin) handleAdminActions() {
n.logf("ERROR: failed to serialize admin action - %s", err)
}
httpclient := &http.Client{Transport: http_api.NewDeadlineTransport(10 * time.Second)}
n.logf("POSTing notification to %s", *notificationHTTPEndpoint)
_, err = httpclient.Post(*notificationHTTPEndpoint, "application/json", bytes.NewBuffer(content))
n.logf("POSTing notification to %s", n.opts.NotificationHTTPEndpoint)
_, err = httpclient.Post(n.opts.NotificationHTTPEndpoint, "application/json", bytes.NewBuffer(content))
if err != nil {
n.logf("ERROR: failed to POST notification - %s", err)
}
Expand Down
2 changes: 1 addition & 1 deletion nsqadmin/options.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package nsqadmin

import (
"log"
Expand Down

0 comments on commit 72728f5

Please sign in to comment.