github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/pipeline_factory.go (about)

     1  package db
     2  
     3  import (
     4  	sq "github.com/Masterminds/squirrel"
     5  	"github.com/pf-qiu/concourse/v6/atc/db/lock"
     6  )
     7  
     8  //go:generate counterfeiter . PipelineFactory
     9  
    10  type PipelineFactory interface {
    11  	VisiblePipelines([]string) ([]Pipeline, error)
    12  	AllPipelines() ([]Pipeline, error)
    13  	PipelinesToSchedule() ([]Pipeline, error)
    14  }
    15  
    16  type pipelineFactory struct {
    17  	conn        Conn
    18  	lockFactory lock.LockFactory
    19  }
    20  
    21  func NewPipelineFactory(conn Conn, lockFactory lock.LockFactory) PipelineFactory {
    22  	return &pipelineFactory{
    23  		conn:        conn,
    24  		lockFactory: lockFactory,
    25  	}
    26  }
    27  
    28  func (f *pipelineFactory) VisiblePipelines(teamNames []string) ([]Pipeline, error) {
    29  	tx, err := f.conn.Begin()
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  
    34  	defer Rollback(tx)
    35  
    36  	rows, err := pipelinesQuery.
    37  		Where(sq.Eq{"t.name": teamNames}).
    38  		OrderBy("t.name ASC", "ordering ASC").
    39  		RunWith(tx).
    40  		Query()
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  
    45  	currentTeamPipelines, err := scanPipelines(f.conn, f.lockFactory, rows)
    46  	if err != nil {
    47  		return nil, err
    48  	}
    49  
    50  	rows, err = pipelinesQuery.
    51  		Where(sq.NotEq{"t.name": teamNames}).
    52  		Where(sq.Eq{"public": true}).
    53  		OrderBy("t.name ASC", "ordering ASC").
    54  		RunWith(tx).
    55  		Query()
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  
    60  	otherTeamPublicPipelines, err := scanPipelines(f.conn, f.lockFactory, rows)
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  
    65  	err = tx.Commit()
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  
    70  	return append(currentTeamPipelines, otherTeamPublicPipelines...), nil
    71  }
    72  
    73  func (f *pipelineFactory) AllPipelines() ([]Pipeline, error) {
    74  	rows, err := pipelinesQuery.
    75  		OrderBy("t.name ASC", "ordering ASC").
    76  		RunWith(f.conn).
    77  		Query()
    78  	if err != nil {
    79  		return nil, err
    80  	}
    81  
    82  	return scanPipelines(f.conn, f.lockFactory, rows)
    83  }
    84  
    85  func (f *pipelineFactory) PipelinesToSchedule() ([]Pipeline, error) {
    86  	rows, err := pipelinesQuery.
    87  		Join("jobs j ON j.pipeline_id = p.id").
    88  		Where(sq.Expr("j.schedule_requested > j.last_scheduled")).
    89  		RunWith(f.conn).
    90  		Query()
    91  	if err != nil {
    92  		return nil, err
    93  	}
    94  
    95  	return scanPipelines(f.conn, f.lockFactory, rows)
    96  }