HTTP Triggers hookup (#1086)

* Initial suypport for invoking tiggers

* dupe method

* tighten server constraints

* runner tests not working yet

* basic route tests passing

* post rebase fixes

* add hybrid support for trigger invoke and tests

* consoloidate all hybrid evil into one place

* cleanup and make triggers unique by source

* fix oops with Agent

* linting

* review fixes
This commit is contained in:
Owen Cliffe
2018-07-05 18:56:07 +01:00
committed by Reed Allman
parent b07a000a18
commit b8b544ed25
38 changed files with 2208 additions and 865 deletions

View File

@@ -127,6 +127,8 @@ const (
triggerSelector = `SELECT id,name,app_id,fn_id,type,source,annotations,created_at,updated_at FROM triggers`
triggerIDSelector = triggerSelector + ` WHERE id=?`
triggerIDSourceSelector = triggerSelector + ` WHERE app_id=? AND type=? AND source=?`
EnvDBPingMaxRetries = "FN_DS_DB_PING_MAX_RETRIES"
)
@@ -1185,6 +1187,8 @@ func (ds *SQLStore) InsertTrigger(ctx context.Context, newTrigger *models.Trigge
if err := r.Scan(new(int)); err != nil {
if err == sql.ErrNoRows {
return models.ErrAppsNotFound
} else if err != nil {
return err
}
}
@@ -1194,12 +1198,23 @@ func (ds *SQLStore) InsertTrigger(ctx context.Context, newTrigger *models.Trigge
if err := r.Scan(&app_id); err != nil {
if err == sql.ErrNoRows {
return models.ErrFnsNotFound
} else if err != nil {
return err
}
}
if app_id != trigger.AppID {
return models.ErrTriggerFnIDNotSameApp
}
query = tx.Rebind(`SELECT 1 FROM triggers WHERE app_id=? AND type=? and source=?`)
r = tx.QueryRowContext(ctx, query, trigger.AppID, trigger.Type, trigger.Source)
err := r.Scan(new(int))
if err == nil {
return models.ErrTriggerSourceExists
} else if err != sql.ErrNoRows {
return err
}
query = tx.Rebind(`INSERT INTO triggers (
id,
name,
@@ -1318,8 +1333,7 @@ func (ds *SQLStore) GetTriggerByID(ctx context.Context, triggerID string) (*mode
err := row.StructScan(&trigger)
if err == sql.ErrNoRows {
return nil, models.ErrTriggerNotFound
}
if err != nil {
} else if err != nil {
return nil, err
}
@@ -1403,10 +1417,26 @@ func (ds *SQLStore) GetTriggers(ctx context.Context, filter *models.TriggerFilte
if err == sql.ErrNoRows {
return res, nil // no error for empty list
}
return nil, err
}
return res, nil
}
func (ds *SQLStore) GetTriggerBySource(ctx context.Context, appId string, triggerType, source string) (*models.Trigger, error) {
var trigger models.Trigger
query := ds.db.Rebind(triggerIDSourceSelector)
row := ds.db.QueryRowxContext(ctx, query, appId, triggerType, source)
err := row.StructScan(&trigger)
if err == sql.ErrNoRows {
return nil, models.ErrTriggerNotFound
} else if err != nil {
return nil, err
}
return &trigger, nil
}
// Close closes the database, releasing any open resources.
func (ds *SQLStore) Close() error {
return ds.db.Close()