Commit 18776250 authored by brent's avatar brent

add task type manager

parent 5efb81a1
[dev]
kongadminurl = "http://192.168.1.10:8001"
[test]
kongadminurl = "http://43.198.252.255:8001"
[prod]
kongadminurl = "http://172.31.12.187:8001"
\ No newline at end of file
......@@ -5,11 +5,12 @@ mysqlhost = "192.168.1.211"
mysqlport = 3306
mysqldb = "liuxuzhong"
; mysqluser = "ai"
; mysqlpass = "RFnnKHRar5xk7TEF"
; mysqlhost = "43.198.252.255"
; mysqlport = 3306
; mysqldb = "ai"
[test]
mysqluser = "ai"
mysqlpass = "RFnnKHRar5xk7TEF"
mysqlhost = "43.198.252.255"
mysqlport = 3306
mysqldb = "ai"
[prod]
mysqluser = "ai"
......
......@@ -5,6 +5,13 @@ postgreshost = "192.168.1.10"
postgresport = 8812
postgresdb = "qdb"
[test]
postgresuser = "admin"
postgrespass = "quest"
postgreshost = "43.198.252.255"
postgresport = 8812
postgresdb = "qdb"
[prod]
postgresuser = "admin"
postgrespass = "quest"
......
......@@ -7,6 +7,15 @@ balancehost = "192.168.1.10:6379"
balancedb = 0
balancepass = ""
[test]
tokenhost = "43.198.252.255:6379"
tokendb = 0
tokenpass = "iH0g2CqzjI6SfercGwsT"
balancehost = "43.198.252.255:6379"
balancedb = 0
balancepass = "iH0g2CqzjI6SfercGwsT"
[prod]
tokenhost = "172.31.12.187:6379"
......
This diff is collapsed.
......@@ -19,7 +19,7 @@ func (server *UserLevelController) Levels() {
server.respond(http.StatusUnauthorized, err.Error())
return
}
qs := mysql.GetMysqlInstace().Ormer.QueryTable("user_level")
qs := mysql.GetMysqlInstace().Ormer.QueryTable("user_level").Filter("deleted", 0)
count, err := qs.Count()
logs.Debug("Levels = ", count)
var levels []*models.UserLevel
......@@ -101,6 +101,8 @@ func (server *UserLevelController) UpdateLevel() {
return
}
request.CreatedTime = checkLevel.CreatedTime
request.UpdatedTime = time.Now()
_, err = mysql.GetMysqlInstace().Ormer.Update(&request)
if err != nil {
server.respond(models.BusinessFailed, "更新失败")
......@@ -135,7 +137,8 @@ func (server *UserLevelController) DelLevel() {
server.respond(models.MissingParameter, "默认等级不能删除")
return
}
request.Deleted = 1
mysql.GetMysqlInstace().Ormer.Delete(&request)
mysql.GetMysqlInstace().Ormer.Update(&request)
server.respond(http.StatusOK, "删除成功")
}
{"/Users/brent/Documents/wubanWork/ai_developer_admin/controllers":1708598583449330754}
\ No newline at end of file
package cronjob
import (
"ai_developer_admin/libs/odysseus"
"ai_developer_admin/libs/postgres"
"ai_developer_admin/libs/redis"
"ai_developer_admin/models"
......@@ -13,10 +12,14 @@ import (
var loopCronTask = cron.New(cron.WithSeconds())
var HeatKey = "task:heat"
func Start() {
//defer loopCronTask.Stop()
spec := "0 0 * * * ?" //"@every 1h"
//spec := "0 0 * * * ?" //"@every 1h"
spec := "@every 1h" //"@every 1h"
//spec := "*/1 * * * * ?" //"@every 1h"
loopCronTask.AddFunc(spec, func() {
logs.Debug("loopCronTask")
sql := "SELECT type,count(type) FROM bills GROUP BY type ORDER BY count DESC;"
......@@ -24,39 +27,107 @@ func Start() {
if err != nil {
return
}
dataString, err := redis.GetDataToString(HeatKey)
var response []models.TaskHeat
if err != nil {
return
}
err = json.Unmarshal([]byte(dataString), &response)
if err != nil {
return
}
for _, value := range tasks {
taskId, err := strconv.Atoi(value.Type)
if err != nil {
continue
}
taskType, err1 := odysseus.GetTaskType(int64(taskId))
if err1 != nil {
continue
}
var hardwareRequire models.Hardware
eer := json.Unmarshal([]byte(taskType.HardwareRequire), &hardwareRequire)
if eer != nil {
}
count, _ := strconv.Atoi(value.Count)
retask := models.TaskHeat{
TaskId: taskId,
User: taskType.Username,
Pwd: taskType.Password,
Repository: taskType.ImageUrl,
SignUrl: taskType.SignUrl,
ImageName: taskType.ImageName,
ImageId: taskType.ImageId,
HardwareRequire: hardwareRequire,
Count: int64(count),
for _, taskType := range response {
if taskType.TaskId == taskId {
taskType.Count = int64(count)
}
}
response = append(response, retask)
}
//for _, value := range tasks {
// taskId, err := strconv.Atoi(value.Type)
// if err != nil {
// continue
// }
// taskType, err1 := odysseus.GetTaskType(int64(taskId))
// if err1 != nil {
// continue
// }
// var hardwareRequire models.Hardware
// eer := json.Unmarshal([]byte(taskType.HardwareRequire), &hardwareRequire)
// if eer != nil {
//
// }
// count, _ := strconv.Atoi(value.Count)
// retask := models.TaskHeat{
// TaskId: taskId,
// User: taskType.Username,
// Pwd: taskType.Password,
// Repository: taskType.ImageUrl,
// SignUrl: taskType.SignUrl,
// ImageName: taskType.ImageName,
// ImageId: taskType.ImageId,
// HardwareRequire: hardwareRequire,
// Count: int64(count),
// }
// response = append(response, retask)
//}
data, err := json.Marshal(response)
if err == nil {
redis.SetKeyAndData("task:heat", string(data), 0)
redis.SetKeyAndData(HeatKey, string(data), 0)
}
})
loopCronTask.Start()
}
//func Start() {
// //defer loopCronTask.Stop()
//
// spec := "*/1 * * * * ?" //"@every 1h"
// loopCronTask.AddFunc(spec, func() {
// logs.Debug("loopCronTask")
// //sql := "SELECT type,count(type) FROM bills GROUP BY type ORDER BY count DESC;"
// //tasks, err := postgres.CountTasks(sql)
// //if err != nil {
// // return
// //}
// var response []models.TaskHeat
// //for _, value := range tasks {
// // taskId, err := strconv.Atoi(value.Type)
// // if err != nil {
// // continue
// // }
// taskType, err1 := odysseus.GetTaskType(int64(12))
// if err1 != nil {
// //continue
// }
// var hardwareRequire models.Hardware
// eer := json.Unmarshal([]byte(taskType.HardwareRequire), &hardwareRequire)
// if eer != nil {
//
// }
// //count, _ := strconv.Atoi(value.Count)
// retask := models.TaskHeat{
// TaskId: 12,
// User: taskType.Username,
// Pwd: taskType.Password,
// Repository: taskType.ImageUrl,
// SignUrl: taskType.SignUrl,
// ImageName: taskType.ImageName,
// ImageId: taskType.ImageId,
// HardwareRequire: hardwareRequire,
// Count: int64(0),
// }
// response = append(response, retask)
// //}
// data, err := json.Marshal(response)
// if err == nil {
// redis.SetKeyAndData("task:heat", string(data), 0)
// }
// })
// loopCronTask.Start()
//}
......@@ -28,6 +28,7 @@ func GetMysqlInstace() *Singleton {
func init() {
logs.Debug("mysql lib init")
//return
orm.Debug = true
if err := orm.RegisterDriver("mysql", orm.DRMySQL); err != nil {
logs.Error(err.Error())
......
......@@ -15,6 +15,7 @@ import (
var syncinfo *cachedata.CacheData
func init() {
//return
host, _ := beego.AppConfig.String("balancehost")
db, _ := beego.AppConfig.Int("balancedb")
pass, _ := beego.AppConfig.String("balancepass")
......@@ -60,3 +61,7 @@ func GetUserBalance(id int64) (int64, error) {
func GetTaskType(id int64) (*model.TaskType, error) {
return syncinfo.GetTaskWithId(id)
}
func PublichTaskUpdate(path string) error {
return syncinfo.PublichTaskUpdate(path)
}
......@@ -13,6 +13,7 @@ import (
var ormpost orm.Ormer
func init() {
//return
logs.Debug("postgres lib init")
orm.Debug = true
if err := orm.RegisterDriver("postgres", orm.DRPostgres); err != nil {
......@@ -55,6 +56,28 @@ func init() {
}
}
func QueryTset(sql string, args ...interface{}) ([]models.Bills, error) {
logs.Debug("QueryBills = ", sql)
qs := ormpost.Raw(sql, args)
var params []orm.Params
_, err := qs.Values(&params)
if err != nil {
return nil, err
}
arr, err := json.Marshal(params)
if err != nil {
return nil, err
}
var containers []models.Bills
logs.Debug("QueryBills = ", string(arr))
err = json.Unmarshal(arr, &containers)
if err != nil {
return nil, err
}
return containers, nil
}
func QueryBills(sql string) ([]models.Bills, error) {
logs.Debug("QueryBills = ", sql)
qs := ormpost.Raw(sql)
......
package redis
import (
"fmt"
"github.com/beego/beego/v2/core/logs"
beego "github.com/beego/beego/v2/server/web"
"github.com/google/uuid"
"gopkg.in/redis.v5"
"strconv"
"strings"
"time"
)
var redisCache *redis.Client
func init() {
//return
host, _ := beego.AppConfig.String("tokenhost")
db, _ := beego.AppConfig.Int("tokendb")
pass, _ := beego.AppConfig.String("tokenpass")
......@@ -31,6 +36,59 @@ func createClient(redisHost string, password string, dataBase int) *redis.Client
return client
}
func tryAcquire(rs *redis.Client, lockKey string, lockTimeout time.Duration) (acquired bool, release func(), _ error) {
timeout := time.Now().Add(lockTimeout).UnixNano()
lockToken := fmt.Sprintf("%d,%s", timeout, uuid.New().String())
release = func() {
// Best effort to check we're releasing the lock we think we have. Note that it
// is still technically possible the lock token has changed between the GET and
// DEL since these are two separate operations, i.e. when the current lock happen
// to be expired at this very moment.
get, _ := rs.Get(lockKey).Result()
if get == lockToken {
_ = rs.Del(lockKey)
}
}
set, err := rs.SetNX(lockKey, lockToken, lockTimeout).Result()
if err != nil {
return false, nil, err
} else if set {
return true, release, nil
}
// We didn't get the lock, but we can check if the lock is expired.
currentLockToken, err := rs.Get(lockKey).Result()
if err == redis.Nil {
// Someone else got the lock and released it already.
return false, nil, nil
} else if err != nil {
return false, nil, err
}
currentTimeout, _ := strconv.ParseInt(strings.SplitN(currentLockToken, ",", 2)[0], 10, 64)
if currentTimeout > time.Now().UnixNano() {
// The lock is still valid.
return false, nil, nil
}
// The lock has expired, try to acquire it.
get, err := rs.GetSet(lockKey, lockToken).Result()
if err != nil {
return false, nil, err
} else if get != currentLockToken {
// Someone else got the lock
return false, nil, nil
}
// We got the lock.
return true, release, nil
}
func SetHeat(key string, value interface{}, time time.Duration) {
}
func SetKeyAndData(key string, value interface{}, time time.Duration) error {
err := redisCache.Set(key, value, time).Err()
if err != nil {
......
package utils
import "time"
func InSameDay(t1, t2 time.Time) bool {
y1, m1, d1 := t1.Date()
y2, m2, d2 := t2.Date()
return y1 == y2 && m1 == m2 && d1 == d2
}
func SplitDate(beginDate, endDate, format string) []string {
bDate, _ := time.ParseInLocation(format, beginDate, time.Local)
eDate, _ := time.ParseInLocation(format, endDate, time.Local)
day := int(eDate.Sub(bDate).Hours() / 24)
dlist := make([]string, 0)
dlist = append(dlist, beginDate)
for i := 1; i < day; i++ {
result := bDate.AddDate(0, 0, i)
dlist = append(dlist, result.Format(format))
}
dlist = append(dlist, endDate)
return dlist
}
......@@ -4,9 +4,11 @@ import (
"ai_developer_admin/libs/cronjob"
"ai_developer_admin/libs/mysql"
_ "ai_developer_admin/routers"
"fmt"
beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/filter/cors"
_ "github.com/beego/beego/v2/server/web/session/redis"
"time"
)
func init() {
......@@ -34,6 +36,28 @@ func main() {
// logs.SetLogger(logs.AdapterFile, config)
//}
str := "2024-02-01T18:41:30"
layout := "2006-01-02T15:04:05"
t, _ := time.Parse(layout, str)
fmt.Print("t = %s", t)
//currentTime := time.Now()
////if appRequest.EndTime == nil {
//tempendTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 23, 59, 59, 0, currentTime.Location())
//endTime := &tempendTime
////}
////if appRequest.StartTime == nil {
//temp := fmt.Sprintf("-%dh", 24*7)
//m, _ := time.ParseDuration(temp)
//tempTime := currentTime.Add(m)
//tempTime = time.Date(tempTime.Year(), tempTime.Month(), tempTime.Day(), 0, 0, 0, 0, tempTime.Location())
//startTime := &tempTime
////}
//startTimeStr := fmt.Sprintf(startTime.Format("2006-01-02T15:04:05.000000Z"))
//endTimeStr := fmt.Sprintf(endTime.Format("2006-01-02T15:04:05.000000Z"))
//
//dates := utils.SplitDate(startTimeStr, endTimeStr, "2006-01-02T15:04:05.000000Z")
//logs.Debug("dates = ", dates)
cronjob.Start()
mysql.GetMysqlInstace()
//postgres.Query("")
......
......@@ -39,12 +39,12 @@ type JwtToken struct {
}
type AppRequest struct {
Id int `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Page int64 `json:"page,omitempty"`
Size int64 `json:"size,omitempty"`
StartTime *time.Time `json:"start_time,omitempty"`
EndTime *time.Time `json:"end_time,omitempty"`
ProfitAcc string `json:"profit_acc,omitempty"`
WorkerAcc string `json:"worker_acc,omitempty"`
Id int `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Page int64 `json:"page,omitempty"`
Size int64 `json:"size,omitempty"`
StartTime string `json:"start_time,omitempty"`
EndTime string `json:"end_time,omitempty"`
ProfitAcc string `json:"profit_acc,omitempty"`
WorkerAcc string `json:"worker_acc,omitempty"`
}
This diff is collapsed.
......@@ -60,7 +60,7 @@ type UserLevel struct {
}
type UserLevelTaskType struct {
ID int `orm:"column(id);auto"`
Id int `orm:"column(id);auto"`
FreeCallCountDay int `json:"free_call_count_day"orm:"column(free_call_count_day)"`
FreeCallCountMonth int `json:"free_call_count_month"orm:"column(free_call_count_month)"`
FreeCallCountYear int `json:"free_call_count_year"orm:"column(free_call_count_year)"`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment