pkg/infra: Check errors (#19705)

* pkg/infra: Check errors

Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>

* pkg/infra: Handle errors

Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>

* Update pkg/infra/usagestats/usage_stats.go

Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
This commit is contained in:
Arve Knudsen 2019-10-10 16:42:11 +02:00 committed by GitHub
parent f971b808b8
commit 7349a6b96c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 42 additions and 19 deletions

View File

@ -209,20 +209,23 @@ func (w *FileLogWriter) DoRotate() error {
func (w *FileLogWriter) deleteOldLog() {
dir := filepath.Dir(w.Filename)
filepath.Walk(dir, func(path string, info os.FileInfo, err error) (returnErr error) {
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) (returnErr error) {
defer func() {
if r := recover(); r != nil {
returnErr = fmt.Errorf("Unable to delete old log '%s', error: %+v", path, r)
}
}()
if !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) {
if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) {
os.Remove(path)
}
if !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) &&
strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) {
returnErr = os.Remove(path)
return
}
return returnErr
return
})
if err != nil {
fmt.Fprintf(os.Stderr, "FileLogWriter(%q): %s\n", w.Filename, err)
}
}
// destroy file logger, close file writer.
@ -234,7 +237,9 @@ func (w *FileLogWriter) Close() {
// there are no buffering messages in file logger in memory.
// flush file means sync file from disk.
func (w *FileLogWriter) Flush() {
w.mw.fd.Sync()
if err := w.mw.fd.Sync(); err != nil {
fmt.Fprintf(os.Stderr, "FileLogWriter(%q): %s\n", w.Filename, err)
}
}
// Reload file logger

View File

@ -209,7 +209,11 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
handler = log15.StreamHandler(os.Stdout, format)
case "file":
fileName := sec.Key("file_name").MustString(filepath.Join(logsPath, "grafana.log"))
os.MkdirAll(filepath.Dir(fileName), os.ModePerm)
dpath := filepath.Dir(fileName)
if err := os.MkdirAll(dpath, os.ModePerm); err != nil {
Root.Error("Failed to create directory", "dpath", dpath, "err", err)
break
}
fileHandler := NewFileWriter()
fileHandler.Filename = fileName
fileHandler.Format = format
@ -218,7 +222,10 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
fileHandler.Maxsize = 1 << uint(sec.Key("max_size_shift").MustInt(28))
fileHandler.Daily = sec.Key("daily_rotate").MustBool(true)
fileHandler.Maxdays = sec.Key("max_days").MustInt64(7)
fileHandler.Init()
if err := fileHandler.Init(); err != nil {
Root.Error("Failed to create directory", "dpath", dpath, "err", err)
break
}
loggersToClose = append(loggersToClose, fileHandler)
loggersToReload = append(loggersToReload, fileHandler)

View File

@ -547,9 +547,15 @@ func newMockGraphite(port string) (*mockGraphite, error) {
conn, err := ln.Accept()
if err != nil {
errc <- err
return
}
var b bytes.Buffer
io.Copy(&b, conn)
if _, err := io.Copy(&b, conn); err != nil {
errc <- err
return
}
readc <- b.String()
}()

View File

@ -32,10 +32,12 @@ func TestDatabaseStorageGarbageCollection(t *testing.T) {
assert.Equal(t, err, nil)
// insert object that should never expire
db.Set("key4", obj, 0)
err = db.Set("key4", obj, 0)
assert.Equal(t, err, nil)
getTime = time.Now
db.Set("key5", obj, 1000*time.Second)
err = db.Set("key5", obj, 1000*time.Second)
assert.Equal(t, err, nil)
//run GC
db.internalRunGC()

View File

@ -7,6 +7,7 @@ import (
"github.com/grafana/grafana/pkg/services/sqlstore"
"github.com/grafana/grafana/pkg/setting"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
type CacheableStruct struct {
@ -29,19 +30,17 @@ func createTestClient(t *testing.T, opts *setting.RemoteCacheOptions, sqlstore *
}
err := dc.Init()
if err != nil {
t.Fatalf("failed to init client for test. error: %v", err)
}
require.Nil(t, err, "Failed to init client for test")
return dc
}
func TestCachedBasedOnConfig(t *testing.T) {
cfg := setting.NewCfg()
cfg.Load(&setting.CommandLineArgs{
err := cfg.Load(&setting.CommandLineArgs{
HomePath: "../../../",
})
require.Nil(t, err, "Failed to load config")
client := createTestClient(t, cfg.RemoteCacheOptions, sqlstore.InitTestDB(t))
runTestsForClient(t, client)

View File

@ -38,7 +38,7 @@ func (ts *TracingService) Init() error {
ts.parseSettings()
if ts.enabled {
ts.initGlobalTracer()
return ts.initGlobalTracer()
}
return nil

View File

@ -151,7 +151,11 @@ func (uss *UsageStatsService) sendUsageStats(oauthProviders map[string]bool) {
data := bytes.NewBuffer(out)
client := http.Client{Timeout: 5 * time.Second}
go client.Post(usageStatsURL, "application/json", data)
go func() {
if _, err := client.Post(usageStatsURL, "application/json", data); err != nil {
metricsLogger.Error("Failed to send usage stats", "err", err)
}
}()
}
func (uss *UsageStatsService) updateTotalStats() {