pkg/analyzer/analyzer.go (202 lines of code) (raw):

package analyzer import ( "strings" "github.com/valyala/fastjson" ) type ( CustomReportAnalyzer func(runResult *RunResult, data *fastjson.Value) error InsertStatementWriter func(sb *strings.Builder) ) type DatabaseConfiguration struct { DbName string TableName string ReportReader CustomReportAnalyzer insertStatementWriter InsertStatementWriter HasProductField bool HasInstallerField bool HasBuildTypeField bool HasRawReport bool HasBuildNumber bool HasNoInstallerButHasChanges bool HasMetaDB bool extraFieldCount int } func GetAnalyzer(id string) DatabaseConfiguration { switch { case id == "ij": fieldNames := []string{ "classLoadingTime", "classLoadingSearchTime", "classLoadingDefineTime", "classLoadingCount", "classLoadingPreparedCount", "classLoadingLoadedCount", "resourceLoadingTime", "resourceLoadingCount", "measure.name", "measure.start", "measure.duration", "measure.thread", "metrics.name", "metrics.value", } return DatabaseConfiguration{ DbName: id, HasProductField: true, HasInstallerField: true, extraFieldCount: len(IjMetricDescriptors) + len(fieldNames), ReportReader: analyzeIjReport, insertStatementWriter: func(sb *strings.Builder) { for _, metric := range IjMetricDescriptors { sb.WriteByte(',') sb.WriteString(metric.Name) } for _, fieldName := range fieldNames { sb.WriteByte(',') sb.WriteString(fieldName) } }, } case id == "ijDev": fieldNames := []string{ "classLoadingTime", "classLoadingSearchTime", "classLoadingDefineTime", "classLoadingCount", "classLoadingPreparedCount", "classLoadingLoadedCount", "resourceLoadingTime", "resourceLoadingCount", "measure.name", "measure.start", "measure.duration", "measure.thread", "metrics.name", "metrics.value", } return DatabaseConfiguration{ DbName: id, HasProductField: true, HasNoInstallerButHasChanges: true, extraFieldCount: len(IjMetricDescriptors) + len(fieldNames), ReportReader: analyzeIjReport, insertStatementWriter: func(sb *strings.Builder) { for _, metric := range IjMetricDescriptors { sb.WriteByte(',') sb.WriteString(metric.Name) } for _, fieldName := range fieldNames { sb.WriteByte(',') sb.WriteString(fieldName) } }, } case strings.HasPrefix(id, "perfintDev"): dbName, tableName := splitId(id) return DatabaseConfiguration{ DbName: dbName, TableName: tableName, ReportReader: analyzePerfReport[int32], HasMetaDB: true, HasNoInstallerButHasChanges: true, extraFieldCount: 3, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } case strings.HasPrefix(id, "perfint"): dbName, tableName := splitId(id) return DatabaseConfiguration{ DbName: dbName, TableName: tableName, ReportReader: analyzePerfReport[int32], HasInstallerField: true, HasMetaDB: true, extraFieldCount: 3, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } case id == "fleet": return DatabaseConfiguration{ DbName: "fleet", ReportReader: analyzeFleetReport, HasInstallerField: true, extraFieldCount: 4, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.start, measures.thread") }, } case id == "mlEvaluation": return DatabaseConfiguration{ DbName: "mlEvaluation", TableName: "report", ReportReader: analyzePerfReport[float64], HasMetaDB: true, extraFieldCount: 3, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } case id == "perf_fleet": return DatabaseConfiguration{ DbName: "fleet", TableName: "measure_new", ReportReader: analyzePerfFleetReport, extraFieldCount: 3, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type") }, } case id == "jbr": return DatabaseConfiguration{ DbName: "jbr", TableName: "report", extraFieldCount: 3, HasBuildNumber: true, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type") }, } case id == "bazel": return DatabaseConfiguration{ DbName: "bazel", TableName: "report", ReportReader: analyzePerfReport[int32], extraFieldCount: 3, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } case id == "qodana": return DatabaseConfiguration{ DbName: "qodana", TableName: "report", extraFieldCount: 4, ReportReader: analyzePerfReport[int32], insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } case id == "perfUnitTests": return DatabaseConfiguration{ DbName: "perfUnitTests", TableName: "report", ReportReader: analyzePerfReport[int32], HasMetaDB: false, HasNoInstallerButHasChanges: true, extraFieldCount: 3, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } case id == "toolbox": return DatabaseConfiguration{ DbName: "toolbox", TableName: "report", ReportReader: analyzePerfReport[int32], HasMetaDB: false, HasNoInstallerButHasChanges: true, extraFieldCount: 4, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } case id == "diogen": return DatabaseConfiguration{ DbName: "diogen", TableName: "report", ReportReader: analyzePerfReport[int32], HasMetaDB: false, extraFieldCount: 3, HasNoInstallerButHasChanges: true, insertStatementWriter: func(sb *strings.Builder) { sb.WriteString(", measures.name, measures.value, measures.type, mode") }, } default: panic("unknown project: " + id) } } func splitId(id string) (string, string) { result := strings.SplitN(id, "_", 2) return result[0], result[1] }