package Web import ( "fmt" "github.com/SommerEngineering/Ocean/Admin" "github.com/SommerEngineering/Ocean/Admin/Scheme" "github.com/SommerEngineering/Ocean/Log" "github.com/SommerEngineering/Ocean/Log/DeviceDatabase" LM "github.com/SommerEngineering/Ocean/Log/Meta" "github.com/SommerEngineering/Ocean/MimeTypes" "github.com/SommerEngineering/Ocean/Shutdown" "net/http" "strconv" "strings" ) // Handler for accessing the web logging. func HandlerWebLog(response http.ResponseWriter, request *http.Request) { // Case: The system goes down now. if Shutdown.IsDown() { http.NotFound(response, request) return } // Execute the HTTP form: request.ParseForm() countParameters := len(request.Form) // The current page as number: currentPageNumber := 1 // The max. page as number: lastPageNumber := 1 // Setup the data for the HTML template: data := Scheme.LoggingViewer{} data.Title = `Logging Viewer` data.Sender = DeviceDatabase.ReadSenderNames() data.MessageNames = DeviceDatabase.ReadMessageNames() // To less parameters? if countParameters < 9 { // Initial view => first page (latest logs) data.Events, lastPageNumber = readLatest() data.SetLiveView = true data.CurrentPage = `1` data.LastPage = fmt.Sprintf("%d", lastPageNumber) if currentPageNumber+1 > lastPageNumber { data.NextPage = fmt.Sprintf("%d", lastPageNumber) } else { data.NextPage = `2` } data.PreviousPage = `1` } else { // Case: Custom view currentLevel := request.FormValue(`Level`) currentTimeRange := request.FormValue(`TimeRange`) currentCategory := request.FormValue(`Category`) currentImpact := request.FormValue(`Impact`) currentSeverity := request.FormValue(`Severity`) currentMessageName := request.FormValue(`MSGName`) currentSender := request.FormValue(`Sender`) currentPage := request.FormValue(`CurrentPage`) currentLiveView := request.FormValue(`LiveView`) // Get the current page as number: if currentPage != `` { if number, err := strconv.Atoi(currentPage); err != nil { Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityNone, LM.ImpactNone, LM.MessageNameEXECUTE, `Was not able to parse the page number.`, err.Error()) } else { currentPageNumber = number } } // Store the events for the template: data.Events, lastPageNumber = readCustom(currentTimeRange, currentLevel, currentCategory, currentImpact, currentSeverity, currentMessageName, currentSender, currentPageNumber) if strings.ToLower(currentLiveView) == `true` { data.SetLiveView = true } // // Correct the form's values to '*' for the any-case: // if currentLevel != `` { data.CurrentLevel = currentLevel } else { data.CurrentLevel = `*` } if currentTimeRange != `` { data.CurrentTimeRange = currentTimeRange } else { data.CurrentTimeRange = `*` } if currentCategory != `` { data.CurrentCategory = currentCategory } else { data.CurrentCategory = `*` } if currentImpact != `` { data.CurrentImpact = currentImpact } else { data.CurrentImpact = `*` } if currentSeverity != `` { data.CurrentSeverity = currentSeverity } else { data.CurrentSeverity = `*` } if currentMessageName != `` { data.CurrentMessageName = currentMessageName } else { data.CurrentMessageName = `*` } if currentSender != `` { data.CurrentSender = currentSender } else { data.CurrentSender = `*` } // Calculate the current, last, previous and next page: if currentPage != `` { data.CurrentPage = fmt.Sprintf("%d", currentPageNumber) data.LastPage = fmt.Sprintf("%d", lastPageNumber) if currentPageNumber+1 > lastPageNumber { data.NextPage = fmt.Sprintf("%d", lastPageNumber) } else { data.NextPage = fmt.Sprintf("%d", currentPageNumber+1) } if currentPageNumber > 1 { data.PreviousPage = fmt.Sprintf("%d", currentPageNumber-1) } else { data.PreviousPage = `1` } data.CurrentPage = currentPage } else { data.CurrentPage = `1` data.LastPage = fmt.Sprintf("%d", lastPageNumber) if currentPageNumber+1 > lastPageNumber { data.NextPage = fmt.Sprintf("%d", lastPageNumber) } else { data.NextPage = `2` } data.PreviousPage = `1` } } // Write the MIME type and execute the template: MimeTypes.Write2HTTP(response, MimeTypes.TypeWebHTML) if executeError := Admin.AdminTemplates.ExecuteTemplate(response, `WebLog`, data); executeError != nil { Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameEXECUTE, `Was not able to execute the web log viewer template.`, executeError.Error()) } }