func NewInsertReportManager()

in pkg/analyzer/InsertReportManager.go [67:147]


func NewInsertReportManager(ctx context.Context, db driver.Conn, metaDb *pgxpool.Pool, config DatabaseConfiguration, tableName string, insertWorkerCount int) (*InsertReportManager, error) {
	var err error

	if config.TableName != "" {
		tableName = config.TableName
	}

	metaFields := make([]string, 0, 16)
	metaFields = append(metaFields, "machine", "generated_time", "project", "tc_build_id", "branch", "tc_build_type")
	if config.HasProductField {
		metaFields = append(metaFields, "product")
	}
	if config.HasInstallerField {
		metaFields = append(metaFields, "build_time", "tc_installer_build_id", "build_c1", "build_c2", "build_c3")
	}
	if config.HasBuildNumber {
		metaFields = append(metaFields, "build_number")
	}
	metaFields = append(metaFields, "triggeredBy")
	var sb strings.Builder
	sb.WriteString("insert into ")
	sb.WriteString(tableName)
	sb.WriteString(" (")
	for i, field := range metaFields {
		if i != 0 {
			sb.WriteRune(',')
		}
		sb.WriteString(field)
	}
	config.insertStatementWriter(&sb)
	sb.WriteString(") values (")

	for i, n := 0, len(metaFields)+config.extraFieldCount; i < n; i++ {
		if i != 0 {
			sb.WriteRune(',')
		}
		sb.WriteRune('?')
	}
	sb.WriteRune(')')

	effectiveSql := sb.String()

	insertManager := sql_util.NewBatchInsertManager(ctx, db, effectiveSql, insertWorkerCount, slog.With("type", "report"))

	// large inserts leads to large memory usage, so, allow to override INSERT_BATCH_SIZE via env
	insertManager.BatchSize = env.GetInt("INSERT_BATCH_SIZE", 20_000)

	var installerManager *InsertInstallerManager
	if config.HasInstallerField || config.HasNoInstallerButHasChanges {
		installerManager, err = NewInstallerInsertManager(ctx, db)
		if err != nil {
			return nil, err
		}
	}

	var metaManager *InsertMetaManager
	if config.HasMetaDB && metaDb != nil {
		metaManager, err = NewInsertMetaManager(ctx, metaDb)
		if err != nil {
			return nil, err
		}
	}

	manager := &InsertReportManager{
		nonMetricFieldCount: len(metaFields),
		config:              config,
		TableName:           tableName,
		InsertDataManager: sql_util.InsertDataManager{
			InsertManager: insertManager,
		},

		context:                ctx,
		insertInstallerManager: installerManager,
		insertMetaManager:      metaManager,
	}

	if installerManager != nil {
		insertManager.AddDependency(installerManager.InsertManager)
	}
	return manager, nil
}