2015-02-04 06:58:23 +00:00
package Web
import (
2015-06-22 18:54:38 +00:00
"fmt"
2015-06-22 12:08:29 +00:00
"github.com/SommerEngineering/Ocean/Admin"
"github.com/SommerEngineering/Ocean/Admin/Scheme"
2015-02-04 06:58:23 +00:00
"github.com/SommerEngineering/Ocean/Log"
2015-02-26 15:37:36 +00:00
"github.com/SommerEngineering/Ocean/Log/DeviceDatabase"
2015-02-04 06:58:23 +00:00
LM "github.com/SommerEngineering/Ocean/Log/Meta"
"github.com/SommerEngineering/Ocean/MimeTypes"
"github.com/SommerEngineering/Ocean/Shutdown"
"net/http"
2015-06-22 18:54:38 +00:00
"strconv"
2015-02-26 17:29:42 +00:00
"strings"
2015-02-04 06:58:23 +00:00
)
2015-06-17 15:44:52 +00:00
// Handler for accessing the web logging.
2015-02-04 06:58:23 +00:00
func HandlerWebLog ( response http . ResponseWriter , request * http . Request ) {
2015-06-17 15:44:52 +00:00
// Case: The system goes down now.
2015-02-04 06:58:23 +00:00
if Shutdown . IsDown ( ) {
http . NotFound ( response , request )
return
}
2015-06-17 15:44:52 +00:00
// Execute the HTTP form:
2015-02-05 20:30:32 +00:00
request . ParseForm ( )
countParameters := len ( request . Form )
2015-06-22 18:54:38 +00:00
// The current page as number:
currentPageNumber := 1
// The max. page as number:
lastPageNumber := 1
2015-06-17 15:44:52 +00:00
// Setup the data for the HTML template:
2015-06-22 15:38:55 +00:00
data := Scheme . LoggingViewer { }
2015-06-22 12:08:29 +00:00
data . Title = ` Logging Viewer `
2015-02-26 15:37:36 +00:00
data . Sender = DeviceDatabase . ReadSenderNames ( )
data . MessageNames = DeviceDatabase . ReadMessageNames ( )
2015-02-04 06:58:23 +00:00
2015-06-17 15:44:52 +00:00
// To less parameters?
2015-02-05 20:30:32 +00:00
if countParameters < 9 {
2015-06-22 15:38:55 +00:00
// Initial view => first page (latest logs)
2015-06-23 05:49:59 +00:00
data . Events , lastPageNumber = readLatest ( )
2015-02-26 16:30:33 +00:00
data . SetLiveView = true
2015-06-22 18:54:38 +00:00
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 `
2015-02-05 20:30:32 +00:00
} else {
2015-06-17 15:44:52 +00:00
// Case: Custom view
2015-02-26 17:29:42 +00:00
currentLevel := request . FormValue ( ` Level ` )
2015-06-22 15:38:55 +00:00
currentTimeRange := request . FormValue ( ` TimeRange ` )
2015-02-26 17:29:42 +00:00
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 ` )
2015-06-17 15:44:52 +00:00
// Store the events for the template:
2015-06-23 05:49:59 +00:00
data . Events , lastPageNumber = readCustom ( currentTimeRange , currentLevel , currentCategory , currentImpact , currentSeverity , currentMessageName , currentSender , currentPage )
2015-02-26 17:29:42 +00:00
if strings . ToLower ( currentLiveView ) == ` true ` {
data . SetLiveView = true
}
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 = ` * `
}
2015-03-01 20:54:15 +00:00
if currentSeverity != ` ` {
data . CurrentSeverity = currentSeverity
} else {
data . CurrentSeverity = ` * `
}
if currentMessageName != ` ` {
data . CurrentMessageName = currentMessageName
} else {
data . CurrentMessageName = ` * `
}
if currentSender != ` ` {
data . CurrentSender = currentSender
} else {
data . CurrentSender = ` * `
}
2015-06-22 15:38:55 +00:00
if currentPage != ` ` {
2015-06-22 18:54:38 +00:00
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
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 `
}
}
2015-06-22 15:38:55 +00:00
data . CurrentPage = currentPage
} else {
2015-06-22 18:54:38 +00:00
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 `
2015-06-22 15:38:55 +00:00
}
2015-02-05 20:30:32 +00:00
}
2015-06-17 15:44:52 +00:00
// Write the MIME type and execute the template:
2015-02-04 06:58:23 +00:00
MimeTypes . Write2HTTP ( response , MimeTypes . TypeWebHTML )
2015-06-22 12:08:29 +00:00
if executeError := Admin . AdminTemplates . ExecuteTemplate ( response , ` WebLog ` , data ) ; executeError != nil {
2015-02-04 06:58:23 +00:00
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 ( ) )
}
}