mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
@@ -209,20 +209,23 @@ func (w *FileLogWriter) DoRotate() error {
|
|||||||
|
|
||||||
func (w *FileLogWriter) deleteOldLog() {
|
func (w *FileLogWriter) deleteOldLog() {
|
||||||
dir := filepath.Dir(w.Filename)
|
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() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
returnErr = fmt.Errorf("Unable to delete old log '%s', error: %+v", path, r)
|
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 !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) &&
|
||||||
if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) {
|
strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) {
|
||||||
os.Remove(path)
|
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.
|
// destroy file logger, close file writer.
|
||||||
@@ -234,7 +237,9 @@ func (w *FileLogWriter) Close() {
|
|||||||
// there are no buffering messages in file logger in memory.
|
// there are no buffering messages in file logger in memory.
|
||||||
// flush file means sync file from disk.
|
// flush file means sync file from disk.
|
||||||
func (w *FileLogWriter) Flush() {
|
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
|
// Reload file logger
|
||||||
|
|||||||
@@ -209,7 +209,11 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
|
|||||||
handler = log15.StreamHandler(os.Stdout, format)
|
handler = log15.StreamHandler(os.Stdout, format)
|
||||||
case "file":
|
case "file":
|
||||||
fileName := sec.Key("file_name").MustString(filepath.Join(logsPath, "grafana.log"))
|
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 := NewFileWriter()
|
||||||
fileHandler.Filename = fileName
|
fileHandler.Filename = fileName
|
||||||
fileHandler.Format = format
|
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.Maxsize = 1 << uint(sec.Key("max_size_shift").MustInt(28))
|
||||||
fileHandler.Daily = sec.Key("daily_rotate").MustBool(true)
|
fileHandler.Daily = sec.Key("daily_rotate").MustBool(true)
|
||||||
fileHandler.Maxdays = sec.Key("max_days").MustInt64(7)
|
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)
|
loggersToClose = append(loggersToClose, fileHandler)
|
||||||
loggersToReload = append(loggersToReload, fileHandler)
|
loggersToReload = append(loggersToReload, fileHandler)
|
||||||
|
|||||||
@@ -547,9 +547,15 @@ func newMockGraphite(port string) (*mockGraphite, error) {
|
|||||||
conn, err := ln.Accept()
|
conn, err := ln.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errc <- err
|
errc <- err
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
io.Copy(&b, conn)
|
if _, err := io.Copy(&b, conn); err != nil {
|
||||||
|
errc <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
readc <- b.String()
|
readc <- b.String()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
@@ -32,10 +32,12 @@ func TestDatabaseStorageGarbageCollection(t *testing.T) {
|
|||||||
assert.Equal(t, err, nil)
|
assert.Equal(t, err, nil)
|
||||||
|
|
||||||
// insert object that should never expire
|
// 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
|
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
|
//run GC
|
||||||
db.internalRunGC()
|
db.internalRunGC()
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/services/sqlstore"
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CacheableStruct struct {
|
type CacheableStruct struct {
|
||||||
@@ -29,19 +30,17 @@ func createTestClient(t *testing.T, opts *setting.RemoteCacheOptions, sqlstore *
|
|||||||
}
|
}
|
||||||
|
|
||||||
err := dc.Init()
|
err := dc.Init()
|
||||||
if err != nil {
|
require.Nil(t, err, "Failed to init client for test")
|
||||||
t.Fatalf("failed to init client for test. error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return dc
|
return dc
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCachedBasedOnConfig(t *testing.T) {
|
func TestCachedBasedOnConfig(t *testing.T) {
|
||||||
|
|
||||||
cfg := setting.NewCfg()
|
cfg := setting.NewCfg()
|
||||||
cfg.Load(&setting.CommandLineArgs{
|
err := cfg.Load(&setting.CommandLineArgs{
|
||||||
HomePath: "../../../",
|
HomePath: "../../../",
|
||||||
})
|
})
|
||||||
|
require.Nil(t, err, "Failed to load config")
|
||||||
|
|
||||||
client := createTestClient(t, cfg.RemoteCacheOptions, sqlstore.InitTestDB(t))
|
client := createTestClient(t, cfg.RemoteCacheOptions, sqlstore.InitTestDB(t))
|
||||||
runTestsForClient(t, client)
|
runTestsForClient(t, client)
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ func (ts *TracingService) Init() error {
|
|||||||
ts.parseSettings()
|
ts.parseSettings()
|
||||||
|
|
||||||
if ts.enabled {
|
if ts.enabled {
|
||||||
ts.initGlobalTracer()
|
return ts.initGlobalTracer()
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -151,7 +151,11 @@ func (uss *UsageStatsService) sendUsageStats(oauthProviders map[string]bool) {
|
|||||||
data := bytes.NewBuffer(out)
|
data := bytes.NewBuffer(out)
|
||||||
|
|
||||||
client := http.Client{Timeout: 5 * time.Second}
|
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() {
|
func (uss *UsageStatsService) updateTotalStats() {
|
||||||
|
|||||||
Reference in New Issue
Block a user