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  }