backend/analyzer/entities/TroubleShootingInfo.go (79 lines of code) (raw):

package entities import ( "bufio" "io" "log" "log_analyzer/backend/analyzer" "os" "strings" ) func init() { CurrentAnalyzer.AddStaticEntity(analyzer.StaticEntity{ Name: "troubleshooting.txt", ConvertToStaticInfo: parseTroubleshootingInfo, CheckPath: isTroubleshootingInfo, }) } func isTroubleshootingInfo(path string) bool { if strings.Contains(path, "troubleshooting.txt") { return true } return false } func parseTroubleshootingInfo(path string) (a analyzer.StaticInfo) { reader, _ := os.Open(path) bufReader := bufio.NewReader(reader) for { currentString, err := bufReader.ReadString('\n') var build string if build = findBuild(currentString); len(build) > 0 { a.Build = build } if jre := findJRE(currentString); len(jre) > 0 { a.JRE = jre } if customPLuginsList := findCustomPlugins(currentString); len(customPLuginsList) > 0 { a.PluginsList = customPLuginsList } if os := findOS(currentString); len(os) > 0 { a.OS = os } if err == io.EOF { break } if err != nil { log.Printf("parseTroubleshootingInfo failed. ERROR: %s", err) } } return a } func findCustomPlugins(currentString string) (pluginsList []analyzer.IDEPlugin) { s := analyzer.GetRegexNamedCapturedGroups(`^Custom plugins: \[(?P<PluginsString>.*)\]`, currentString)["PluginsString"] if len(s) == 0 { return nil } pluginsListAsSlice := strings.Split(s, ",") for _, pluginAsString := range pluginsListAsSlice { s := analyzer.GetRegexNamedCapturedGroups(`^\s*(?P<Plugin>.*)\s+\((?P<Version>.*)\)$`, pluginAsString) version := s["Version"] name := s["Plugin"] //todo: retreive plugin's link pluginsList = append(pluginsList, analyzer.IDEPlugin{ Version: version, Name: name, Link: "https://plugins.jetbrains.com/search?search=" + name, }) } return pluginsList } func findJRE(currentString string) string { s := analyzer.GetRegexNamedCapturedGroups(`^JRE:\s*(?P<JRE>.*)`, currentString)["JRE"] return s } func findBuild(currentString string) string { s := analyzer.GetRegexNamedCapturedGroups(`Build:\s(?P<Build>#.*)`, currentString)["Build"] return s } func findOS(currentString string) string { s := analyzer.GetRegexNamedCapturedGroups(`^Operating System:\s*(?P<OS>.*)`, currentString)["OS"] return s }