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

     1  package db
     2  
     3  import (
     4  	sq "github.com/Masterminds/squirrel"
     5  )
     6  
     7  //go:generate counterfeiter . ResourceConfigCheckSessionLifecycle
     8  
     9  type ResourceConfigCheckSessionLifecycle interface {
    10  	CleanInactiveResourceConfigCheckSessions() error
    11  	CleanExpiredResourceConfigCheckSessions() error
    12  }
    13  
    14  type resourceConfigCheckSessionLifecycle struct {
    15  	conn Conn
    16  }
    17  
    18  func NewResourceConfigCheckSessionLifecycle(conn Conn) ResourceConfigCheckSessionLifecycle {
    19  	return resourceConfigCheckSessionLifecycle{
    20  		conn: conn,
    21  	}
    22  }
    23  
    24  func (lifecycle resourceConfigCheckSessionLifecycle) CleanInactiveResourceConfigCheckSessions() error {
    25  	usedByActiveUnpausedResources, _, err := sq.
    26  		Select("rccs.id").
    27  		From("resource_config_check_sessions rccs").
    28  		Join("resource_configs rc ON rccs.resource_config_id = rc.id").
    29  		Join("resources r ON r.resource_config_id = rc.id").
    30  		Join("pipelines p ON p.id = r.pipeline_id").
    31  		Where(sq.Expr("r.active AND NOT p.paused")).
    32  		ToSql()
    33  	if err != nil {
    34  		return err
    35  	}
    36  
    37  	usedByActiveUnpausedResourceTypes, _, err := sq.
    38  		Select("rccs.id").
    39  		From("resource_config_check_sessions rccs").
    40  		Join("resource_configs rc ON rccs.resource_config_id = rc.id").
    41  		Join("resource_types rt ON rt.resource_config_id = rc.id").
    42  		Join("pipelines p ON p.id = rt.pipeline_id").
    43  		Where(sq.Expr("rt.active AND NOT p.paused")).
    44  		ToSql()
    45  	if err != nil {
    46  		return err
    47  	}
    48  
    49  	_, err = sq.Delete("resource_config_check_sessions").
    50  		Where("id NOT IN (" + usedByActiveUnpausedResources + " UNION " + usedByActiveUnpausedResourceTypes + ")").
    51  		PlaceholderFormat(sq.Dollar).
    52  		RunWith(lifecycle.conn).
    53  		Exec()
    54  
    55  	return err
    56  }
    57  
    58  func (lifecycle resourceConfigCheckSessionLifecycle) CleanExpiredResourceConfigCheckSessions() error {
    59  	_, err := psql.Delete("resource_config_check_sessions").
    60  		Where(sq.Expr("expires_at < NOW()")).
    61  		RunWith(lifecycle.conn).
    62  		Exec()
    63  
    64  	return err
    65  }