in pkg/analyzer/ReportAnalyzer.go [99:220]
func (t *ReportAnalyzer) Analyze(data []byte, extraData model.ExtraData) error {
if t.analyzeContext.Err() != nil {
return nil
}
var err error
runResult := &RunResult{
RawReport: data,
TcBuildId: getNullIfEmpty(extraData.TcBuildId),
TcBuildType: extraData.TcBuildType,
TcInstallerBuildId: getNullIfEmpty(extraData.TcInstallerBuildId),
ReportFileName: extraData.ReportFile,
TriggeredBy: extraData.TriggeredBy,
}
if isBisectRun(extraData, t.logger) {
return nil
}
switch t.config.DbName {
case "jbr":
ignore := analyzePerfJbrReport(runResult, extraData)
if ignore {
// ignore empty report
return nil
}
case "qodana":
reportURL := runResult.ReportFileName
fileName := reportURL[strings.LastIndex(reportURL, "/")+1:]
if fileName == "open-telemetry.json" {
ignore := analyzeQodanaReport(runResult, extraData)
if ignore {
return nil
}
}
if fileName == "metrics.json" {
err = ReadReport(runResult, t.config)
}
default:
err = ReadReport(runResult, t.config)
}
projectId := t.config.DbName
if err != nil {
return err
}
if runResult.Report == nil {
// ignore report
return nil
}
if extraData.ProductCode == "" {
extraData.ProductCode = runResult.Report.ProductCode
}
if extraData.BuildNumber == "" {
extraData.BuildNumber = runResult.Report.Build
}
if extraData.Machine == "" {
return errors.New("machine is not specified")
}
runResult.Product = extraData.ProductCode
runResult.Machine = extraData.Machine
if runResult.GeneratedTime.IsZero() {
runResult.GeneratedTime, err = computeGeneratedTime(runResult.Report, extraData)
if err != nil {
if extraData.CurrentBuildTime.IsZero() {
return err
}
runResult.GeneratedTime = extraData.CurrentBuildTime
}
}
if t.config.HasInstallerField {
runResult.BuildTime = extraData.BuildTime
if extraData.BuildNumber == "" {
t.logger.Error("buildNumber is missed")
return nil
}
buildComponents := strings.Split(extraData.BuildNumber, ".")
if len(buildComponents) == 2 {
buildComponents = append(buildComponents, "0")
}
runResult.BuildC1, runResult.BuildC2, runResult.BuildC3, err = splitBuildNumber(buildComponents)
if err != nil {
// we might get 231.snapshot build numbers, that is more or less fine and we need such build anyway
t.logger.Error(err.Error())
}
}
if t.config.HasBuildNumber {
runResult.BuildNumber = extraData.TcBuildNumber
}
if t.analyzeContext.Err() != nil {
return nil
}
if len(extraData.TcBuildProperties) == 0 {
runResult.branch = "master"
} else {
runResult.branch, err = getBranch(runResult, extraData, projectId, t.logger)
if err != nil {
return err
}
}
t.waitGroup.Add(1)
t.insertQueue <- &ReportInfo{
extraData: extraData,
runResult: runResult,
}
return nil
}