aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/goexec/tsch/create.go196
1 files changed, 97 insertions, 99 deletions
diff --git a/pkg/goexec/tsch/create.go b/pkg/goexec/tsch/create.go
index c0f24d1..8c99c82 100644
--- a/pkg/goexec/tsch/create.go
+++ b/pkg/goexec/tsch/create.go
@@ -1,113 +1,111 @@
package tschexec
import (
- "context"
- "github.com/FalconOpsLLC/goexec/pkg/goexec"
- "github.com/FalconOpsLLC/goexec/pkg/goexec/smb"
- "github.com/rs/zerolog"
- "time"
+ "context"
+ "github.com/FalconOpsLLC/goexec/pkg/goexec"
+ "github.com/rs/zerolog"
+ "time"
)
const (
- MethodCreate = "Create"
+ MethodCreate = "Create"
)
type TschCreate struct {
- Tsch
- goexec.Executor
- goexec.Cleaner
- smb.OutputFileFetcher
-
- IO goexec.ExecutionIO
-
- NoDelete bool
- CallDelete bool
- StartDelay time.Duration
- StopDelay time.Duration
- DeleteDelay time.Duration
- TimeOffset time.Duration
- // FEATURE: more opts
+ Tsch
+ goexec.Executor
+ goexec.Cleaner
+
+ IO goexec.ExecutionIO
+
+ NoDelete bool
+ CallDelete bool
+ StartDelay time.Duration
+ StopDelay time.Duration
+ DeleteDelay time.Duration
+ TimeOffset time.Duration
+ // FEATURE: more opts
}
func (m *TschCreate) Execute(ctx context.Context, execIO *goexec.ExecutionIO) (err error) {
- log := zerolog.Ctx(ctx).With().
- Str("module", ModuleName).
- Str("method", MethodCreate).
- Str("task", m.TaskName).
- Logger()
-
- startTime := time.Now().UTC().Add(m.StartDelay)
- stopTime := startTime.Add(m.StopDelay)
-
- trigger := taskTimeTrigger{
- StartBoundary: startTime.Format(TaskXmlDurationFormat),
- Enabled: true,
- }
-
- var deleteAfter string
-
- if !m.NoDelete && !m.CallDelete {
-
- if m.StopDelay == 0 {
- m.StopDelay = time.Second // value is required, 1 second by default
- }
- trigger.EndBoundary = stopTime.Format(TaskXmlDurationFormat)
- deleteAfter = xmlDuration(m.DeleteDelay)
- }
-
- path, err := m.registerTask(ctx,
- &registerOptions{
- AllowStartOnDemand: true,
- AllowHardTerminate: true,
- Hidden: !m.NotHidden,
- triggers: taskTriggers{
- TimeTriggers: []taskTimeTrigger{trigger},
- },
- DeleteAfter: deleteAfter,
- },
- execIO,
- )
- if err != nil {
- return err
- }
-
- if !m.NoDelete {
- if m.CallDelete {
-
- m.AddCleaner(func(ctxInner context.Context) error {
-
- log.Info().Msg("Waiting for task to start...")
-
- select {
- case <-ctxInner.Done():
- log.Warn().Msg("Task deletion cancelled")
-
- case <-time.After(m.StartDelay + (5 * time.Second)): // 5 second buffer
- /*
- for {
- stat, err := m.tsch.GetLastRunInfo(ctx, &itaskschedulerservice.GetLastRunInfoRequest{
- Path: path,
- })
- if err != nil {
- log.Warn().Err(err).Msg("Failed to get last run info. Assuming task was executed")
-
- } else if stat.LastRuntime.AsTime().IsZero() {
- log.Warn().Msg("Task was not yet executed. Waiting 5 additional seconds")
-
- time.Sleep(5 * time.Second)
- continue
- }
- break
- }
- */
- }
- return m.deleteTask(ctxInner, path)
- })
-
- } else {
- log.Info().Time("when", stopTime).Msg("Task is scheduled to delete")
- }
- }
- return
+ log := zerolog.Ctx(ctx).With().
+ Str("module", ModuleName).
+ Str("method", MethodCreate).
+ Str("task", m.TaskName).
+ Logger()
+
+ startTime := time.Now().UTC().Add(m.StartDelay)
+ stopTime := startTime.Add(m.StopDelay)
+
+ trigger := taskTimeTrigger{
+ StartBoundary: startTime.Format(TaskXmlDurationFormat),
+ Enabled: true,
+ }
+
+ var deleteAfter string
+
+ if !m.NoDelete && !m.CallDelete {
+
+ if m.StopDelay == 0 {
+ m.StopDelay = time.Second // value is required, 1 second by default
+ }
+ trigger.EndBoundary = stopTime.Format(TaskXmlDurationFormat)
+ deleteAfter = xmlDuration(m.DeleteDelay)
+ }
+
+ path, err := m.registerTask(ctx,
+ &registerOptions{
+ AllowStartOnDemand: true,
+ AllowHardTerminate: true,
+ Hidden: !m.NotHidden,
+ triggers: taskTriggers{
+ TimeTriggers: []taskTimeTrigger{trigger},
+ },
+ DeleteAfter: deleteAfter,
+ },
+ execIO,
+ )
+ if err != nil {
+ return err
+ }
+
+ if !m.NoDelete {
+ if m.CallDelete {
+
+ m.AddCleaner(func(ctxInner context.Context) error {
+
+ log.Info().Msg("Waiting for task to start...")
+
+ select {
+ case <-ctxInner.Done():
+ log.Warn().Msg("Task deletion cancelled")
+
+ case <-time.After(m.StartDelay + (5 * time.Second)): // 5 second buffer
+ /*
+ for {
+ stat, err := m.tsch.GetLastRunInfo(ctx, &itaskschedulerservice.GetLastRunInfoRequest{
+ Path: path,
+ })
+ if err != nil {
+ log.Warn().Err(err).Msg("Failed to get last run info. Assuming task was executed")
+
+ } else if stat.LastRuntime.AsTime().IsZero() {
+ log.Warn().Msg("Task was not yet executed. Waiting 5 additional seconds")
+
+ time.Sleep(5 * time.Second)
+ continue
+ }
+ break
+ }
+ */
+ }
+ return m.deleteTask(ctxInner, path)
+ })
+
+ } else {
+ log.Info().Time("when", stopTime).Msg("Task is scheduled to delete")
+ }
+ }
+ return
}