package group import ( "gitea.anxinyun.cn/container/common_models/constant/iotaScheme" "log" "math" "time" ) const ( data_active_expire_sec int = 900 data_report_expire_sec int = 3600 ) // TimeStrategy 测点组合计算 超时时间判断策略 type TimeStrategy struct { activeExpiredSecs int reportExpiredSecs int } func DefaultExpire() int { return data_report_expire_sec } // FromDimension 返回超期时间(s) func FromDimension(dimension string) int { if dimension == "" { return DefaultExpire() } scheme, err := GetConfigHelper().GetIotaScheme(dimension) if err != nil { log.Printf("Get IOTA Scheme ERR:%v", err) } if scheme.Mode == iotaScheme.ModeResponse { return int(math.Min(float64(data_active_expire_sec), float64(scheme.IntervalSecs()))) } return DefaultExpire() } type IDueTask interface { // 设置超期时长 SetTimeout() int } type BaseDueTask struct { // 数据注入时间(任务创建时间) InjectTime time.Time // 超期时间 DeadlineTime time.Time } func NewBaseDueTask() *BaseDueTask { return &BaseDueTask{ InjectTime: time.Now(), } } // IsTimeout 是否超期 func (t *BaseDueTask) IsTimeout() bool { return !t.DeadlineTime.IsZero() && t.DeadlineTime.Before(time.Now()) } // ElapsedSecs 当前流逝时间 func (t *BaseDueTask) ElapsedSecs() float64 { return time.Since(t.InjectTime).Seconds() } // SetDeadLineTime 设置超期时间线 func (t *BaseDueTask) SetDeadLineTime(secs int) { t.DeadlineTime = t.InjectTime.Add(time.Second * time.Duration(secs)) } func (t *BaseDueTask) SetTimeout() int { return 0 } //// GroupDueTask 分组超时任务 //type GroupDueTask struct { // *BaseDueTask //} // //func NewGroupDueTask() *GroupDueTask { // return &GroupDueTask{ // BaseDueTask: NewBaseDueTask(), // } //} // //func (c *GroupDueTask) SetTimeout() int { // return 0 //} // //func main() { // // 创建分组超时任务对象 // dt := NewGroupDueTask() // fmt.Println("Is Timeout:", dt.IsTimeout()) // fmt.Println("Elapsed Seconds:", dt.ElapsedSecs()) // dt.SetTimeout() //}