mirror of
https://github.com/ncarlier/webhookd.git
synced 2025-04-10 00:11:51 +00:00
52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package worker
|
|
|
|
import (
|
|
"sync"
|
|
"sync/atomic"
|
|
)
|
|
|
|
var workID uint64
|
|
|
|
// WorkRequest is a request of work for a worker
|
|
type WorkRequest struct {
|
|
ID uint64
|
|
Name string
|
|
Script string
|
|
Payload string
|
|
Args []string
|
|
MessageChan chan []byte
|
|
Timeout int
|
|
Terminated bool
|
|
mutex sync.Mutex
|
|
}
|
|
|
|
// NewWorkRequest creats new work request
|
|
func NewWorkRequest(name, script, payload string, args []string, timeout int) *WorkRequest {
|
|
return &WorkRequest{
|
|
ID: atomic.AddUint64(&workID, 1),
|
|
Name: name,
|
|
Script: script,
|
|
Payload: payload,
|
|
Args: args,
|
|
Timeout: timeout,
|
|
MessageChan: make(chan []byte),
|
|
Terminated: false,
|
|
}
|
|
}
|
|
|
|
// Terminate set work request as terminated
|
|
func (wr *WorkRequest) Terminate() {
|
|
wr.mutex.Lock()
|
|
defer wr.mutex.Unlock()
|
|
if !wr.Terminated {
|
|
wr.Terminated = true
|
|
}
|
|
}
|
|
|
|
// IsTerminated ask if the work request is terminated
|
|
func (wr *WorkRequest) IsTerminated() bool {
|
|
wr.mutex.Lock()
|
|
defer wr.mutex.Unlock()
|
|
return wr.Terminated
|
|
}
|