pkg/profiling/task/context.go (64 lines of code) (raw):

// Licensed to Apache Software Foundation (ASF) under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Apache Software Foundation (ASF) licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package task import ( "context" "fmt" "sort" "sync" "time" "k8s.io/utils/strings/slices" "github.com/apache/skywalking-rover/pkg/process/api" "github.com/apache/skywalking-rover/pkg/profiling/task/base" ) type RunningStatus uint8 const ( _ RunningStatus = iota NotRunning Running Stopped ) // Context of profiling task type Context struct { task *base.ProfilingTask processes []api.ProcessInterface runner base.ProfileTaskRunner status RunningStatus startRunningTime time.Time runningWg *sync.WaitGroup recalcDuration chan bool ctx context.Context cancel context.CancelFunc } // UpdateTime of the profiling task func (c *Context) UpdateTime() int64 { return c.task.UpdateTime } func (c *Context) TaskID() string { return c.task.TaskID } // BuildTaskIdentity for filter with same identity task func (c *Context) BuildTaskIdentity() string { // use processes id, target type, trigger type return fmt.Sprintf("%v_%s_%s", c.task.ProcessIDList, c.task.TargetType, c.task.TriggerType) } func (c *Context) IsSameTask(other *Context) bool { task1 := c.task task2 := other.task sort.Strings(task1.ProcessIDList) sort.Strings(task2.ProcessIDList) return task1.TaskID == task2.TaskID && slices.Equal(task1.ProcessIDList, task2.ProcessIDList) && task1.StartTime == task2.StartTime && task1.TriggerType == task2.TriggerType && task1.TargetType == task2.TargetType } // CheckTaskRunnable means checks the task could be running func (c *Context) CheckTaskRunnable() bool { // if running with FIXED_TIME type task, check the executing time range if c.task.TriggerType == base.TriggerTypeFixedTime { startTime := c.task.StartTime endTime := time.UnixMilli(startTime).Add(c.task.MaxRunningDuration).UnixMilli() now := time.Now().UnixMilli() if now > endTime { log.Infof("out of task executing time range. task id: %s", c.task.TaskID) return false } } return true } func (c *Context) IsRunning() bool { return c.status == Running } func (c *Context) RunningTime() time.Time { return c.startRunningTime }