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
}