|
|
@ -235,8 +235,22 @@ func UpdateHookTask(t *HookTask) error { |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
|
|
|
// Prevent duplicate deliveries.
|
|
|
|
|
|
|
|
// This happens with massive hook tasks cannot finish delivering
|
|
|
|
|
|
|
|
// before next shooting starts.
|
|
|
|
|
|
|
|
isShooting = false |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
// DeliverHooks checks and delivers undelivered hooks.
|
|
|
|
// DeliverHooks checks and delivers undelivered hooks.
|
|
|
|
|
|
|
|
// FIXME: maybe can use goroutine to shoot a number of them at same time?
|
|
|
|
func DeliverHooks() { |
|
|
|
func DeliverHooks() { |
|
|
|
|
|
|
|
if isShooting { |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
isShooting = true |
|
|
|
|
|
|
|
defer func() { isShooting = false }() |
|
|
|
|
|
|
|
|
|
|
|
tasks := make([]*HookTask, 0, 10) |
|
|
|
tasks := make([]*HookTask, 0, 10) |
|
|
|
timeout := time.Duration(setting.WebhookDeliverTimeout) * time.Second |
|
|
|
timeout := time.Duration(setting.WebhookDeliverTimeout) * time.Second |
|
|
|
x.Where("is_delivered=?", false).Iterate(new(HookTask), |
|
|
|
x.Where("is_delivered=?", false).Iterate(new(HookTask), |
|
|
@ -255,7 +269,7 @@ func DeliverHooks() { |
|
|
|
|
|
|
|
|
|
|
|
t.IsDelivered = true |
|
|
|
t.IsDelivered = true |
|
|
|
|
|
|
|
|
|
|
|
// TODO: record response.
|
|
|
|
// FIXME: record response.
|
|
|
|
switch t.Type { |
|
|
|
switch t.Type { |
|
|
|
case GOGS: |
|
|
|
case GOGS: |
|
|
|
{ |
|
|
|
{ |
|
|
|