@@ -35,17 +35,19 @@ import (
35
35
"time"
36
36
37
37
"github.com/NYTimes/gziphandler"
38
- logger "github.com/sirupsen/logrus "
38
+ trigram "github.com/dgryski/go-trigram "
39
39
"github.com/dgryski/httputil"
40
40
"github.com/gogo/protobuf/proto"
41
+ pickle "github.com/kisielk/og-rek"
41
42
pb "github.com/signal18/replication-manager/graphite/carbonzipperpb"
42
- trigram "github.com/dgryski/go-trigram"
43
43
"github.com/signal18/replication-manager/graphite/helper"
44
- pickle "github.com/kisielk/og-rek"
45
44
"github.com/signal18/replication-manager/graphite/points"
46
45
whisper "github.com/signal18/replication-manager/graphite/whisper"
46
+ "github.com/sirupsen/logrus"
47
47
)
48
48
49
+ var Log = logrus .New ()
50
+
49
51
type metricStruct struct {
50
52
RenderRequests uint64
51
53
RenderErrors uint64
@@ -146,7 +148,7 @@ func (listener *CarbonserverListener) fileListUpdater(dir string, tick <-chan ti
146
148
147
149
err := filepath .Walk (dir , func (p string , info os.FileInfo , err error ) error {
148
150
if err != nil {
149
- logger .Infof ("[carbonserver] error processing %q: %v" , p , err )
151
+ Log .Infof ("[carbonserver] error processing %q: %v" , p , err )
150
152
return nil
151
153
}
152
154
@@ -157,16 +159,16 @@ func (listener *CarbonserverListener) fileListUpdater(dir string, tick <-chan ti
157
159
return nil
158
160
})
159
161
160
- logger .Debugln ("[carbonserver] file scan took" , time .Since (t0 ), "," , len (files ), "items" )
162
+ Log .Debugln ("[carbonserver] file scan took" , time .Since (t0 ), "," , len (files ), "items" )
161
163
t0 = time .Now ()
162
164
163
165
idx := trigram .NewIndex (files )
164
166
165
- logger .Debugln ("[carbonserver] indexing took" , time .Since (t0 ), len (idx ), "trigrams" )
167
+ Log .Debugln ("[carbonserver] indexing took" , time .Since (t0 ), len (idx ), "trigrams" )
166
168
167
169
pruned := idx .Prune (0.95 )
168
170
169
- logger .Debugln ("[carbonserver] pruned" , pruned , "common trigrams" )
171
+ Log .Debugln ("[carbonserver] pruned" , pruned , "common trigrams" )
170
172
171
173
if err == nil {
172
174
listener .UpdateFileIndex (& fileIndex {idx , files })
@@ -316,7 +318,7 @@ func (listener *CarbonserverListener) findHandler(wr http.ResponseWriter, req *h
316
318
317
319
if format != "json" && format != "pickle" && format != "protobuf" {
318
320
atomic .AddUint64 (& listener .metrics .FindErrors , 1 )
319
- logger .Infof ("[carbonserver] dropping invalid uri (format=%s): %s" ,
321
+ Log .Infof ("[carbonserver] dropping invalid uri (format=%s): %s" ,
320
322
format , req .URL .RequestURI ())
321
323
http .Error (wr , "Bad request (unsupported format)" ,
322
324
http .StatusBadRequest )
@@ -325,7 +327,7 @@ func (listener *CarbonserverListener) findHandler(wr http.ResponseWriter, req *h
325
327
326
328
if query == "" {
327
329
atomic .AddUint64 (& listener .metrics .FindErrors , 1 )
328
- logger .Infof ("[carbonserver] dropping invalid request (query=): %s" , req .URL .RequestURI ())
330
+ Log .Infof ("[carbonserver] dropping invalid request (query=): %s" , req .URL .RequestURI ())
329
331
http .Error (wr , "Bad request (no query)" , http .StatusBadRequest )
330
332
return
331
333
}
@@ -353,7 +355,7 @@ func (listener *CarbonserverListener) findHandler(wr http.ResponseWriter, req *h
353
355
}
354
356
if err != nil {
355
357
atomic .AddUint64 (& listener .metrics .FindErrors , 1 )
356
- logger .Infof ("[carbonserver] failed to create %s data for glob %s: %s" ,
358
+ Log .Infof ("[carbonserver] failed to create %s data for glob %s: %s" ,
357
359
format , * response .Name , err )
358
360
return
359
361
}
@@ -388,7 +390,7 @@ func (listener *CarbonserverListener) findHandler(wr http.ResponseWriter, req *h
388
390
atomic .AddUint64 (& listener .metrics .FindZero , 1 )
389
391
}
390
392
391
- logger .Debugf ("[carbonserver] find: %d hits for %s in %v" , len (files ), req .FormValue ("query" ), time .Since (t0 ))
393
+ Log .Debugf ("[carbonserver] find: %d hits for %s in %v" , len (files ), req .FormValue ("query" ), time .Since (t0 ))
392
394
return
393
395
}
394
396
@@ -408,13 +410,13 @@ func (listener *CarbonserverListener) fetchHandler(wr http.ResponseWriter, req *
408
410
if r := recover (); r != nil {
409
411
var buf [4096 ]byte
410
412
runtime .Stack (buf [:], false )
411
- logger .Infof ("[carbonserver] panic handling request: %v\n %s\n %s" , r , req .RequestURI , string (buf [:]))
413
+ Log .Infof ("[carbonserver] panic handling request: %v\n %s\n %s" , r , req .RequestURI , string (buf [:]))
412
414
}
413
415
}()
414
416
415
417
if format != "json" && format != "pickle" && format != "protobuf" {
416
418
atomic .AddUint64 (& listener .metrics .RenderErrors , 1 )
417
- logger .Infof ("[carbonserver] dropping invalid uri (format=%s): %s" ,
419
+ Log .Infof ("[carbonserver] dropping invalid uri (format=%s): %s" ,
418
420
format , req .URL .RequestURI ())
419
421
http .Error (wr , "Bad request (unsupported format)" ,
420
422
http .StatusBadRequest )
@@ -425,13 +427,13 @@ func (listener *CarbonserverListener) fetchHandler(wr http.ResponseWriter, req *
425
427
426
428
i , err := strconv .Atoi (from )
427
429
if err != nil {
428
- logger .Infof ("[carbonserver] fromTime (%s) invalid: %s (in %s)" , from , err , req .URL .RequestURI ())
430
+ Log .Infof ("[carbonserver] fromTime (%s) invalid: %s (in %s)" , from , err , req .URL .RequestURI ())
429
431
badTime = true
430
432
}
431
433
fromTime := int32 (i )
432
434
i , err = strconv .Atoi (until )
433
435
if err != nil {
434
- logger .Infof ("[carbonserver] untilTime (%s) invalid: %s (in %s)" , from , err , req .URL .RequestURI ())
436
+ Log .Infof ("[carbonserver] untilTime (%s) invalid: %s (in %s)" , from , err , req .URL .RequestURI ())
435
437
badTime = true
436
438
}
437
439
untilTime := int32 (i )
@@ -445,7 +447,7 @@ func (listener *CarbonserverListener) fetchHandler(wr http.ResponseWriter, req *
445
447
multi , err := listener .fetchData (metric , fromTime , untilTime )
446
448
if err != nil {
447
449
atomic .AddUint64 (& listener .metrics .RenderErrors , 1 )
448
- logger .Infof ("[carbonserver] %s" , err )
450
+ Log .Infof ("[carbonserver] %s" , err )
449
451
http .Error (wr , fmt .Sprintf ("Bad request (%s)" , err ),
450
452
http .StatusBadRequest )
451
453
}
@@ -499,12 +501,12 @@ func (listener *CarbonserverListener) fetchHandler(wr http.ResponseWriter, req *
499
501
500
502
if err != nil {
501
503
atomic .AddUint64 (& listener .metrics .RenderErrors , 1 )
502
- logger .Infof ("[carbonserver] failed to create %s data for %s: %s" , format , "<metric>" , err )
504
+ Log .Infof ("[carbonserver] failed to create %s data for %s: %s" , format , "<metric>" , err )
503
505
return
504
506
}
505
507
wr .Write (b )
506
508
507
- logger .Debugf ("[carbonserver] fetch: served %q from %s to %s in %v" , metric , from , until , time .Since (t0 ))
509
+ Log .Debugf ("[carbonserver] fetch: served %q from %s to %s in %v" , metric , from , until , time .Since (t0 ))
508
510
509
511
}
510
512
@@ -518,15 +520,15 @@ func (listener *CarbonserverListener) fetchSingleMetric(metric string, fromTime,
518
520
// the FE/carbonzipper often requests metrics we don't have
519
521
// We shouldn't really see this any more -- expandGlobs() should filter them out
520
522
atomic .AddUint64 (& listener .metrics .NotFound , 1 )
521
- logger .Infof ("[carbonserver] error opening %q: %v" , path , err )
523
+ Log .Infof ("[carbonserver] error opening %q: %v" , path , err )
522
524
return nil , errors .New ("Can't open metric" )
523
525
}
524
526
525
527
retentions := w .Retentions ()
526
528
now := int32 (time .Now ().Unix ())
527
529
diff := now - fromTime
528
530
529
- logger .Infof ("[carbonserver] Time %d: %d" , now , fromTime )
531
+ Log .Infof ("[carbonserver] Time %d: %d" , now , fromTime )
530
532
bestStep := int32 (retentions [0 ].SecondsPerPoint ())
531
533
for _ , retention := range retentions {
532
534
if int32 (retention .MaxRetention ()) >= diff {
@@ -537,13 +539,13 @@ func (listener *CarbonserverListener) fetchSingleMetric(metric string, fromTime,
537
539
538
540
if step == 0 {
539
541
atomic .AddUint64 (& listener .metrics .RenderErrors , 1 )
540
- logger .Infof ("[carbonserver] Can't find proper archive for the request for metric %q" , path )
542
+ Log .Infof ("[carbonserver] Can't find proper archive for the request for metric %q" , path )
541
543
return nil , errors .New ("Can't find proper archive" )
542
544
}
543
545
544
546
var cacheData []points.Point
545
547
if step != bestStep {
546
- logger .Debugf ("[carbonserver] Cache is not supported for this query (required step != best step). path=%q fromTime=%v untilTime=%v step=%v bestStep=%v" , path , fromTime , untilTime , step , bestStep )
548
+ Log .Debugf ("[carbonserver] Cache is not supported for this query (required step != best step). path=%q fromTime=%v untilTime=%v step=%v bestStep=%v" , path , fromTime , untilTime , step , bestStep )
547
549
} else {
548
550
// query cache
549
551
cacheStartTime := time .Now ()
@@ -552,21 +554,21 @@ func (listener *CarbonserverListener) fetchSingleMetric(metric string, fromTime,
552
554
atomic .AddUint64 (& listener .metrics .CacheWaitTimeFetchNS , waitTime )
553
555
}
554
556
555
- logger .Debugf ("[carbonserver] fetching disk metric=%v from=%v until=%v" , metric , fromTime , untilTime )
557
+ Log .Debugf ("[carbonserver] fetching disk metric=%v from=%v until=%v" , metric , fromTime , untilTime )
556
558
atomic .AddUint64 (& listener .metrics .DiskRequests , 1 )
557
559
diskStartTime := time .Now ()
558
560
points , err := w .Fetch (int (fromTime ), int (untilTime ))
559
561
w .Close ()
560
562
if err != nil {
561
563
atomic .AddUint64 (& listener .metrics .RenderErrors , 1 )
562
- logger .Infof ("[carbonserver] failed to fetch points from %s: %s" , path , err )
564
+ Log .Infof ("[carbonserver] failed to fetch points from %s: %s" , path , err )
563
565
return nil , errors .New ("failed to fetch points" )
564
566
}
565
567
566
568
// Should never happen, because we have a check for proper archive now
567
569
if points == nil {
568
570
atomic .AddUint64 (& listener .metrics .RenderErrors , 1 )
569
- logger .Infof ("[carbonserver] Metric time range not found: metric=%s from=%d to=%d " , metric , fromTime , untilTime )
571
+ Log .Infof ("[carbonserver] Metric time range not found: metric=%s from=%d to=%d " , metric , fromTime , untilTime )
570
572
return nil , errors .New ("time range not found" )
571
573
}
572
574
atomic .AddUint64 (& listener .metrics .MetricsReturned , 1 )
@@ -622,7 +624,7 @@ func (listener *CarbonserverListener) fetchData(metric string, fromTime, untilTi
622
624
var multi pb.MultiFetchResponse
623
625
for i , metric := range files {
624
626
if ! leafs [i ] {
625
- logger .Debugf ("[carbonserver] skipping directory = %q" , metric )
627
+ Log .Debugf ("[carbonserver] skipping directory = %q" , metric )
626
628
// can't fetch a directory
627
629
continue
628
630
}
@@ -648,7 +650,7 @@ func (listener *CarbonserverListener) infoHandler(wr http.ResponseWriter, req *h
648
650
649
651
if format != "json" && format != "protobuf" {
650
652
atomic .AddUint64 (& listener .metrics .InfoErrors , 1 )
651
- logger .Infof ("[carbonserver] dropping invalid uri (format=%s): %s" ,
653
+ Log .Infof ("[carbonserver] dropping invalid uri (format=%s): %s" ,
652
654
format , req .URL .RequestURI ())
653
655
http .Error (wr , "Bad request (unsupported format)" ,
654
656
http .StatusBadRequest )
@@ -660,7 +662,7 @@ func (listener *CarbonserverListener) infoHandler(wr http.ResponseWriter, req *h
660
662
661
663
if err != nil {
662
664
atomic .AddUint64 (& listener .metrics .NotFound , 1 )
663
- logger .Debugf ("[carbonserver] failed to %s" , err )
665
+ Log .Debugf ("[carbonserver] failed to %s" , err )
664
666
http .Error (wr , "Metric not found" , http .StatusNotFound )
665
667
return
666
668
}
@@ -696,12 +698,12 @@ func (listener *CarbonserverListener) infoHandler(wr http.ResponseWriter, req *h
696
698
}
697
699
if err != nil {
698
700
atomic .AddUint64 (& listener .metrics .RenderErrors , 1 )
699
- logger .Infof ("[carbonserver] failed to create %s data for %s: %s" , format , path , err )
701
+ Log .Infof ("[carbonserver] failed to create %s data for %s: %s" , format , path , err )
700
702
return
701
703
}
702
704
wr .Write (b )
703
705
704
- logger .Debugf ("[carbonserver] served info for %s" , metric )
706
+ Log .Debugf ("[carbonserver] served info for %s" , metric )
705
707
return
706
708
}
707
709
@@ -749,15 +751,15 @@ func (listener *CarbonserverListener) Stop() error {
749
751
}
750
752
751
753
func (listener * CarbonserverListener ) Listen (listen string ) error {
752
- logger .Warnln ("[carbonserver] carbonserver support is still experimental, use at your own risk" )
753
- logger .Infoln ("[carbonserver] starting carbonserver" )
754
+ Log .Warnln ("[carbonserver] carbonserver support is still experimental, use at your own risk" )
755
+ Log .Infoln ("[carbonserver] starting carbonserver" )
754
756
755
- logger .Infof ("[carbonserver] reading whisper files from: %s" , listener .whisperData )
757
+ Log .Infof ("[carbonserver] reading whisper files from: %s" , listener .whisperData )
756
758
757
- logger .Infof ("[carbonserver] maximum brace expansion set to: %d" , listener .maxGlobs )
759
+ Log .Infof ("[carbonserver] maximum brace expansion set to: %d" , listener .maxGlobs )
758
760
759
761
if listener .scanFrequency != 0 {
760
- logger .Infoln ("[carbonserver] use file cache with scan frequency" , listener .scanFrequency )
762
+ Log .Infoln ("[carbonserver] use file cache with scan frequency" , listener .scanFrequency )
761
763
force := make (chan struct {})
762
764
listener .exitChan = make (chan struct {})
763
765
go listener .fileListUpdater (listener .whisperData , time .Tick (listener .scanFrequency ), force , listener .exitChan )
@@ -776,7 +778,7 @@ func (listener *CarbonserverListener) Listen(listen string) error {
776
778
fmt .Fprintln (w , "User-agent: *\n Disallow: /" )
777
779
})
778
780
779
- logger .Infof ("[carbonserver] listening on %s" , listen )
781
+ Log .Infof ("[carbonserver] listening on %s" , listen )
780
782
tcpAddr , err := net .ResolveTCPAddr ("tcp" , listen )
781
783
if err != nil {
782
784
return err
@@ -815,7 +817,7 @@ func (listener *CarbonserverListener) bucketRequestTimes(req *http.Request, t ti
815
817
} else {
816
818
// Too big? Increment overflow bucket and log
817
819
atomic .AddUint64 (& listener .timeBuckets [listener .buckets ], 1 )
818
- logger .Infof ("[carbonserver] Slow Request: %s: %s" , t .String (), req .URL .String ())
820
+ Log .Infof ("[carbonserver] Slow Request: %s: %s" , t .String (), req .URL .String ())
819
821
}
820
822
}
821
823
0 commit comments