package priority import ( "os" "pbx-api-gin/pkg/utils" "strconv" "sync" "gopkg.in/ini.v1" ) // 是否有任务正在创建 var TaskCreating = "" var filePath = "/etc/asterisk/priority.conf" type TaskInfo struct { RunChannel string `json:"runChannel"` LocalChan string `json:"localChan"` RunType string `json:"runType"` Priority int `json:"priority"` ConfbridgeID string `json:"confbridgeID"` Running bool } type TaskPriority struct { Priority int `json:"priority"` } type Tasks struct { PA TaskPriority `json:"pa"` C2C TaskPriority `json:"c2c"` C2P TaskPriority `json:"c2p"` PADICP TaskPriority `json:"padicp"` PADTMS TaskPriority `json:"padtms"` PADOCC TaskPriority `json:"padocc"` PMC TaskPriority `json:"pmc"` SVM TaskPriority `json:"svm"` SVA TaskPriority `json:"sva"` DCS TaskPriority `json:"dcs"` STNA TaskPriority `json:"stna"` STNS TaskPriority `json:"stns"` } var AllTasks Tasks func GetPriority() { utils.LoggerDebug.Printf("Init system priority !") _, err := os.Stat(filePath) if err != nil { utils.LoggerDebug.Printf("GetPriority err :%+v", err) return } iniFile, err := ini.Load(filePath) if err != nil { utils.LoggerDebug.Printf("GetPriority err :%+v", err) return } AllTasks.STNA.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("STNA").Value()) AllTasks.STNS.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("STNS").Value()) AllTasks.DCS.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("DCS").Value()) AllTasks.SVA.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("SVA").Value()) AllTasks.SVM.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("SVM").Value()) AllTasks.PMC.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("PMC").Value()) AllTasks.PADOCC.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("PAD-OCC").Value()) AllTasks.PADTMS.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("PAD-TMS").Value()) AllTasks.PADICP.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("PAD-ICP").Value()) AllTasks.C2C.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("C2C").Value()) AllTasks.PA.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("PA").Value()) AllTasks.C2P.Priority, _ = strconv.Atoi(iniFile.Section("general").Key("C2P").Value()) } func GetPriorityByKey(key string) int { switch key { case "STNS": return AllTasks.STNS.Priority case "STNA": return AllTasks.STNA.Priority case "DCS": return AllTasks.DCS.Priority case "SVA": return AllTasks.SVA.Priority case "SVM": return AllTasks.SVM.Priority case "PMC": return AllTasks.PMC.Priority case "PAD-OCC": return AllTasks.PADOCC.Priority case "PAD-TMS": return AllTasks.PADTMS.Priority case "PAD-ICP": return AllTasks.PADICP.Priority case "C2C": return AllTasks.C2C.Priority case "PA": return AllTasks.PA.Priority default: return 0 } } var checkMutex sync.Mutex // check priority , if the running priority is lowwer than the to run priority func CheckPriority(runType string) bool { utils.LoggerDebug.Printf("CheckPriority TorunType:%s", runType) checkMutex.Lock() defer checkMutex.Unlock() var taskRuning TaskInfo //var runingtaskName string var ok bool //Get the to run priority number in the config file toRunpriority := GetPriorityByKey(runType) //获取当前优先级最高的任务信息 _, taskRuning, ok = RegistryTask.HighestPriorityRunningTask() if !ok { //无其他任务正在执行 return true } else { utils.LoggerDebug.Printf("CheckPriority TorunType:%s toRunpriority:%d runingpriority:%d ", runType, toRunpriority, taskRuning.Priority) //if the running task priority is lowwer if toRunpriority < taskRuning.Priority && toRunpriority != 0 { return true } } return false }