/
Logger.go
65 lines (49 loc) · 2.23 KB
/
Logger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package endpoints
import (
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
"github.com/pixlise/core/v3/api/handlers"
"github.com/pixlise/core/v3/api/permission"
apiRouter "github.com/pixlise/core/v3/api/router"
"github.com/pixlise/core/v3/core/api"
"github.com/pixlise/core/v3/core/cloudwatch"
"github.com/pixlise/core/v3/core/logger"
)
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Logger
const logLevelId = "logLevel"
const logStreamId = "logStream"
func registerLoggerHandler(router *apiRouter.ApiObjectRouter) {
const pathPrefix = "logger"
// Adjusting and getting log level
router.AddJSONHandler(handlers.MakeEndpointPath(pathPrefix+"/level"), apiRouter.MakeMethodPermission("GET", permission.PermReadLogs), getLogLevel)
router.AddJSONHandler(handlers.MakeEndpointPath(pathPrefix+"/level", logLevelId), apiRouter.MakeMethodPermission("PUT", permission.PermWriteLogLevel), putLogLevel)
// Querying logs
router.AddJSONHandler(handlers.MakeEndpointPath(pathPrefix+"/fetch", logStreamId), apiRouter.MakeMethodPermission("GET", permission.PermReadLogs), logRequest)
}
func logRequest(params handlers.ApiHandlerParams) (interface{}, error) {
logGroup := "/dataset-importer/" + params.Svcs.Config.EnvironmentName
logStream := params.PathParams[logStreamId]
logs, err := cloudwatch.FetchLogs(params.Svcs, logGroup, logStream)
if aerr, ok := err.(awserr.Error); ok {
if aerr.Code() == cloudwatchlogs.ErrCodeResourceNotFoundException {
return nil, api.MakeNotFoundError(logStream)
}
}
return logs, err
}
func getLogLevel(params handlers.ApiHandlerParams) (interface{}, error) {
return logger.GetLogLevelName(params.Svcs.Log.GetLogLevel())
}
func putLogLevel(params handlers.ApiHandlerParams) (interface{}, error) {
logLevelName := params.PathParams[logLevelId]
logLevel, err := logger.GetLogLevel(logLevelName)
if err != nil {
return nil, err
}
// Also set it on the actual logger
params.Svcs.Log.SetLogLevel(logLevel)
// Not really an error, but we log in this level to ensure it always gets printed
params.Svcs.Log.Errorf("User %v request changed log level to: %v", params.UserInfo.UserID, logLevelName)
return nil, nil
}