From e8f67bf53c336fe8f8aaf1b208d76c55baf60fd7 Mon Sep 17 00:00:00 2001 From: Javier Marcos <1271349+javuto@users.noreply.github.com> Date: Sun, 6 Feb 2022 11:23:43 +0100 Subject: [PATCH] Fix for issue with db logger and osctrl-admin #209 --- admin/handlers/json-logs.go | 54 +++++++++++++++++++------------------ admin/main.go | 14 +++++++--- logging/db.go | 17 +++++++++++- logging/file.go | 2 +- logging/logging.go | 2 +- nodes/nodes.go | 4 --- 6 files changed, 56 insertions(+), 37 deletions(-) diff --git a/admin/handlers/json-logs.go b/admin/handlers/json-logs.go index 14271b40..dd43b916 100644 --- a/admin/handlers/json-logs.go +++ b/admin/handlers/json-logs.go @@ -122,7 +122,7 @@ func (h *HandlersAdmin) JSONLogsHandler(w http.ResponseWriter, r *http.Request) } // Get logs logJSON := []LogJSON{} - if logType == "status" { + if logType == "status" && h.LoggerDB != nil { statusLogs, err := h.LoggerDB.StatusLogs(UUID, env.Name, secondsBack) if err != nil { log.Printf("error getting logs %v", err) @@ -142,7 +142,7 @@ func (h *HandlersAdmin) JSONLogsHandler(w http.ResponseWriter, r *http.Request) } logJSON = append(logJSON, _l) } - } else if logType == "result" { + } else if logType == "result" && h.LoggerDB != nil { resultLogs, err := h.LoggerDB.ResultLogs(UUID, env.Name, secondsBack) if err != nil { log.Printf("error getting logs %v", err) @@ -192,34 +192,36 @@ func (h *HandlersAdmin) JSONQueryLogsHandler(w http.ResponseWriter, r *http.Requ return } // Get logs - queryLogs, err := h.LoggerDB.QueryLogs(name) - if err != nil { - log.Printf("error getting logs %v", err) - h.Inc(metricJSONErr) - return - } - // Prepare data to be returned queryLogJSON := []QueryLogJSON{} - for _, q := range queryLogs { - // Get target node - node, err := h.Nodes.GetByUUID(q.UUID) + if h.LoggerDB != nil { + queryLogs, err := h.LoggerDB.QueryLogs(name) if err != nil { - node.UUID = q.UUID - node.Localname = "" - } - _c := CreationTimes{ - Display: utils.PastFutureTimes(q.CreatedAt), - Timestamp: utils.TimeTimestamp(q.CreatedAt), + log.Printf("error getting logs %v", err) + h.Inc(metricJSONErr) + return } - _l := QueryLogJSON{ - Created: _c, - Target: QueryTargetNode{ - UUID: node.UUID, - Name: node.Localname, - }, - Data: string(q.Data), + // Prepare data to be returned + for _, q := range queryLogs { + // Get target node + node, err := h.Nodes.GetByUUID(q.UUID) + if err != nil { + node.UUID = q.UUID + node.Localname = "" + } + _c := CreationTimes{ + Display: utils.PastFutureTimes(q.CreatedAt), + Timestamp: utils.TimeTimestamp(q.CreatedAt), + } + _l := QueryLogJSON{ + Created: _c, + Target: QueryTargetNode{ + UUID: node.UUID, + Name: node.Localname, + }, + Data: string(q.Data), + } + queryLogJSON = append(queryLogJSON, _l) } - queryLogJSON = append(queryLogJSON, _l) } returned := ReturnedQueryLogs{ Data: queryLogJSON, diff --git a/admin/main.go b/admin/main.go index 30e70abd..72a25e6c 100644 --- a/admin/main.go +++ b/admin/main.go @@ -483,10 +483,16 @@ func osctrlAdminService() { if err != nil { log.Fatalf("Error loading metrics - %v", err) } - // Initialize DB logger - loggerDB, err = logging.CreateLoggerDB(loggerFile) - if err != nil { - log.Fatalf("Error loading logger - %v", err) + // TODO Initialize DB logger regardless of settings + // This is temporary until we have logs stored in Redis + if adminConfig.Logger == settings.LoggingDB { + loggerDB, err = logging.CreateLoggerDBFile(loggerFile) + if err != nil { + loggerDB, err = logging.CreateLoggerDBConfig(dbConfig) + if err != nil { + log.Fatalf("Error creating db logger - %v", err) + } + } } // Start SAML Middleware if we are using SAML if adminConfig.Auth == settings.AuthSAML { diff --git a/logging/db.go b/logging/db.go index 881d3b3c..3e9d1f8e 100644 --- a/logging/db.go +++ b/logging/db.go @@ -61,12 +61,27 @@ type LoggerDB struct { } // CreateLoggerDB to initialize the logger -func CreateLoggerDB(dbfile string) (*LoggerDB, error) { +func CreateLoggerDBFile(dbfile string) (*LoggerDB, error) { // Initialize backend backend, err := backend.CreateDBManagerFile(dbfile) if err != nil { return nil, fmt.Errorf("Failed to create backend - %v", err) } + return CreateLoggerDB(backend) +} + +// CreateLoggerDB to initialize the logger without reading a config file +func CreateLoggerDBConfig(dbConfig backend.JSONConfigurationDB) (*LoggerDB, error) { + // Initialize backend + backend, err := backend.CreateDBManager(dbConfig) + if err != nil { + return nil, fmt.Errorf("Failed to create backend - %v", err) + } + return CreateLoggerDB(backend) +} + +// CreateLoggerDB to initialize the logger without reading a config file +func CreateLoggerDB(backend *backend.DBManager) (*LoggerDB, error) { l := &LoggerDB{ Database: backend, Enabled: true, diff --git a/logging/file.go b/logging/file.go index dfc15ac9..04b52a85 100644 --- a/logging/file.go +++ b/logging/file.go @@ -48,7 +48,7 @@ func CreateLoggerFile(filename string, cfg LumberjackConfig) (*LoggerFile, error // Settings - Function to prepare settings for the logger func (logFile *LoggerFile) Settings(mgr *settings.Settings) { - log.Printf("No stdout logging settings\n") + log.Printf("No file logging settings\n") } // Log - Function that sends JSON result/status/query logs to stdout diff --git a/logging/logging.go b/logging/logging.go index 9a38f477..c53309fc 100644 --- a/logging/logging.go +++ b/logging/logging.go @@ -39,7 +39,7 @@ func CreateLoggerTLS(logging, loggingFile string, mgr *settings.Settings, nodes g.Settings(mgr) l.Logger = g case settings.LoggingDB: - d, err := CreateLoggerDB(loggingFile) + d, err := CreateLoggerDBFile(loggingFile) if err != nil { return nil, err } diff --git a/nodes/nodes.go b/nodes/nodes.go index 43c7a815..ff32af47 100644 --- a/nodes/nodes.go +++ b/nodes/nodes.go @@ -460,10 +460,6 @@ func (n *NodeManager) Create(node *OsqueryNode) error { if err := n.NewHistoryIPAddress(i); err != nil { return fmt.Errorf("newNodeHistoryIPAddress %v", err) } - // FIXME needs rewriting - //if err := geoLocationCheckByIPAddress(node.IPAddress); err != nil { - // return fmt.Errorf("geoLocationCheckByIPAddress %v", err) - //} u := NodeHistoryUsername{ UUID: node.UUID, Username: node.Username,