github.com/verrazzano/verrazzano@v1.7.1/tools/vz/pkg/internal/util/files/parse_install_log.go (about) 1 // Copyright (c) 2023, 2024, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package files 5 6 import ( 7 "bufio" 8 "encoding/json" 9 "os" 10 ) 11 12 type LogMessage struct { 13 Level string `json:"level"` 14 Timestamp string `json:"@timestamp"` 15 Message string `json:"message"` 16 Component string `json:"component"` 17 } 18 19 // ConvertToLogMessage reads the install log and creates a list of LogMessage 20 func ConvertToLogMessage(path string) ([]LogMessage, error) { 21 readFile, err := os.Open(path) 22 if err != nil { 23 return nil, err 24 } 25 defer readFile.Close() 26 fileScanner := bufio.NewScanner(readFile) 27 fileScanner.Split(bufio.ScanLines) 28 var fileLines []string 29 for fileScanner.Scan() { 30 fileLines = append(fileLines, fileScanner.Text()) 31 } 32 var allMessages []LogMessage 33 for _, eachLine := range fileLines { 34 logMessage := LogMessage{} 35 err = json.Unmarshal([]byte(eachLine), &logMessage) 36 if err != nil { 37 continue 38 } 39 allMessages = append(allMessages, logMessage) 40 } 41 return allMessages, nil 42 } 43 44 // FilterLogsByLevelComponent filters the install log for a given log level and component and returns the matching list of LogMessage 45 func FilterLogsByLevelComponent(level string, component string, allMessages []LogMessage) ([]LogMessage, error) { 46 var filteredLogs []LogMessage 47 for _, singleMessage := range allMessages { 48 if level == singleMessage.Level && component == singleMessage.Component { 49 filteredLogs = append(filteredLogs, singleMessage) 50 } 51 } 52 return filteredLogs, nil 53 }