diff --git a/admin/handlers/handlers.go b/admin/handlers/handlers.go index 46daa8d3..3dc87b30 100644 --- a/admin/handlers/handlers.go +++ b/admin/handlers/handlers.go @@ -5,6 +5,7 @@ import ( "github.com/jmpsec/osctrl/admin/sessions" "github.com/jmpsec/osctrl/carves" "github.com/jmpsec/osctrl/environments" + "github.com/jmpsec/osctrl/logging" "github.com/jmpsec/osctrl/metrics" "github.com/jmpsec/osctrl/nodes" "github.com/jmpsec/osctrl/queries" @@ -43,6 +44,7 @@ type HandlersAdmin struct { Carves *carves.Carves Settings *settings.Settings Metrics *metrics.Metrics + LoggerDB *logging.LoggerDB Sessions *sessions.SessionManager ServiceVersion string OsqueryTables []types.OsqueryTable @@ -99,6 +101,12 @@ func WithMetrics(metrics *metrics.Metrics) HandlersOption { } } +func WithLoggerDB(logger *logging.LoggerDB) HandlersOption { + return func(h *HandlersAdmin) { + h.LoggerDB = logger + } +} + func WithSessions(sessions *sessions.SessionManager) HandlersOption { return func(h *HandlersAdmin) { h.Sessions = sessions diff --git a/admin/handlers/json-logs.go b/admin/handlers/json-logs.go index 3549e98a..fe4a4bb5 100644 --- a/admin/handlers/json-logs.go +++ b/admin/handlers/json-logs.go @@ -109,7 +109,7 @@ func (h *HandlersAdmin) JSONLogsHandler(w http.ResponseWriter, r *http.Request) // Get logs logJSON := []LogJSON{} if logType == "status" { - statusLogs, err := h.postgresStatusLogs(UUID, env, secondsBack) + statusLogs, err := h.LoggerDB.StatusLogs(UUID, env, secondsBack) if err != nil { log.Printf("error getting logs %v", err) h.Inc(metricJSONErr) @@ -129,7 +129,7 @@ func (h *HandlersAdmin) JSONLogsHandler(w http.ResponseWriter, r *http.Request) logJSON = append(logJSON, _l) } } else if logType == "result" { - resultLogs, err := h.postgresResultLogs(UUID, env, secondsBack) + resultLogs, err := h.LoggerDB.ResultLogs(UUID, env, secondsBack) if err != nil { log.Printf("error getting logs %v", err) h.Inc(metricJSONErr) @@ -178,7 +178,7 @@ func (h *HandlersAdmin) JSONQueryLogsHandler(w http.ResponseWriter, r *http.Requ return } // Get logs - queryLogs, err := h.postgresQueryLogs(name) + queryLogs, err := h.LoggerDB.QueryLogs(name) if err != nil { log.Printf("error getting logs %v", err) h.Inc(metricJSONErr) diff --git a/admin/handlers/postgres.go b/admin/handlers/postgres.go deleted file mode 100644 index 097c9e14..00000000 --- a/admin/handlers/postgres.go +++ /dev/null @@ -1,72 +0,0 @@ -package handlers - -import ( - "encoding/json" - "time" - - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/postgres" -) - -// OsqueryResultData to log result data to database -type OsqueryResultData struct { - gorm.Model - UUID string `gorm:"index"` - Environment string - Name string - Action string - Epoch int64 - Columns json.RawMessage - Counter int -} - -// OsqueryStatusData to log status data to database -type OsqueryStatusData struct { - gorm.Model - UUID string `gorm:"index"` - Environment string - Line string - Message string - Version string - Filename string - Severity string -} - -// OsqueryQueryData to log query data to database -type OsqueryQueryData struct { - gorm.Model - UUID string `gorm:"index"` - Environment string - Name string - Data json.RawMessage - Status int -} - -// Function to retrieve the last status logs for a given node -func (h *HandlersAdmin) postgresStatusLogs(uuid, environment string, seconds int64) ([]OsqueryStatusData, error) { - var logs []OsqueryStatusData - minusSeconds := time.Now().Add(time.Duration(-seconds) * time.Second) - if err := h.DB.Where("uuid = ? AND environment = ?", uuid, environment).Where("created_at > ?", minusSeconds).Find(&logs).Error; err != nil { - return logs, err - } - return logs, nil -} - -// Function to retrieve the last result logs for a given node -func (h *HandlersAdmin) postgresResultLogs(uuid, environment string, seconds int64) ([]OsqueryResultData, error) { - var logs []OsqueryResultData - minusSeconds := time.Now().Add(time.Duration(-seconds) * time.Second) - if err := h.DB.Where("uuid = ? AND environment = ?", uuid, environment).Where("created_at > ?", minusSeconds).Find(&logs).Error; err != nil { - return logs, err - } - return logs, nil -} - -// Function to retrieve the query log by name -func (h *HandlersAdmin) postgresQueryLogs(name string) ([]OsqueryQueryData, error) { - var logs []OsqueryQueryData - if err := h.DB.Where("name = ?", name).Find(&logs).Error; err != nil { - return logs, err - } - return logs, nil -} diff --git a/admin/main.go b/admin/main.go index 0f083279..9dfb4e45 100644 --- a/admin/main.go +++ b/admin/main.go @@ -16,6 +16,7 @@ import ( "github.com/jmpsec/osctrl/backend" "github.com/jmpsec/osctrl/carves" "github.com/jmpsec/osctrl/environments" + "github.com/jmpsec/osctrl/logging" "github.com/jmpsec/osctrl/metrics" "github.com/jmpsec/osctrl/nodes" "github.com/jmpsec/osctrl/queries" @@ -108,6 +109,7 @@ var ( osqueryTables []types.OsqueryTable adminMetrics *metrics.Metrics handlersAdmin *ahandlers.HandlersAdmin + loggerDB *logging.LoggerDB ) // Variables for flags @@ -280,7 +282,11 @@ func main() { if err != nil { log.Fatalf("Error loading metrics - %v", err) } - + // Initialize DB logger + loggerDB, err = logging.CreateLoggerDB(*dbFlag, backend.DBKey) + if err != nil { + log.Fatalf("Error loading logger - %v", err) + } // Start SAML Middleware if we are using SAML if adminConfig.Auth == settings.AuthSAML { if settingsmgr.DebugService(settings.ServiceAdmin) { @@ -330,6 +336,7 @@ func main() { ahandlers.WithCarves(carvesmgr), ahandlers.WithSettings(settingsmgr), ahandlers.WithMetrics(adminMetrics), + ahandlers.WithLoggerDB(loggerDB), ahandlers.WithSessions(sessionsmgr), ahandlers.WithVersion(serviceVersion), ahandlers.WithOsqueryTables(osqueryTables), diff --git a/admin/static/js/nodeactions.js b/admin/static/js/nodeactions.js index ceec7283..a1eedf5d 100644 --- a/admin/static/js/nodeactions.js +++ b/admin/static/js/nodeactions.js @@ -85,3 +85,10 @@ function showCarveFiles(_uuids) { }); $("#carveModal").modal(); } + +function changeBackValue(table_id, range_input, range_output) { + range_output.value = range_input.value; + var table = $('#' + table_id).DataTable(); + var _url = table.ajax.url(); + table.ajax.url(_url.split('seconds=')[0] + 'seconds=' + (range_output.value*3600)); +} diff --git a/admin/templates/conf.html b/admin/templates/conf.html index 87f4d7c4..4bff5498 100644 --- a/admin/templates/conf.html +++ b/admin/templates/conf.html @@ -42,7 +42,7 @@ + oninput="changeIntervalValue(conf_range, conf_output);"> @@ -52,7 +52,7 @@ + oninput="changeIntervalValue(logging_range, logging_output);"> @@ -61,7 +61,7 @@ + oninput="changeIntervalValue(query_range, query_output);"> diff --git a/admin/templates/node.html b/admin/templates/node.html index f415f73a..65b2031d 100644 --- a/admin/templates/node.html +++ b/admin/templates/node.html @@ -291,7 +291,10 @@