Commit 18776250 authored by brent's avatar brent

add task type manager

parent 5efb81a1
[dev] [dev]
kongadminurl = "http://192.168.1.10:8001" kongadminurl = "http://192.168.1.10:8001"
[test]
kongadminurl = "http://43.198.252.255:8001"
[prod] [prod]
kongadminurl = "http://172.31.12.187:8001" kongadminurl = "http://172.31.12.187:8001"
\ No newline at end of file
...@@ -5,11 +5,12 @@ mysqlhost = "192.168.1.211" ...@@ -5,11 +5,12 @@ mysqlhost = "192.168.1.211"
mysqlport = 3306 mysqlport = 3306
mysqldb = "liuxuzhong" mysqldb = "liuxuzhong"
; mysqluser = "ai" [test]
; mysqlpass = "RFnnKHRar5xk7TEF" mysqluser = "ai"
; mysqlhost = "43.198.252.255" mysqlpass = "RFnnKHRar5xk7TEF"
; mysqlport = 3306 mysqlhost = "43.198.252.255"
; mysqldb = "ai" mysqlport = 3306
mysqldb = "ai"
[prod] [prod]
mysqluser = "ai" mysqluser = "ai"
......
...@@ -5,6 +5,13 @@ postgreshost = "192.168.1.10" ...@@ -5,6 +5,13 @@ postgreshost = "192.168.1.10"
postgresport = 8812 postgresport = 8812
postgresdb = "qdb" postgresdb = "qdb"
[test]
postgresuser = "admin"
postgrespass = "quest"
postgreshost = "43.198.252.255"
postgresport = 8812
postgresdb = "qdb"
[prod] [prod]
postgresuser = "admin" postgresuser = "admin"
postgrespass = "quest" postgrespass = "quest"
......
...@@ -7,6 +7,15 @@ balancehost = "192.168.1.10:6379" ...@@ -7,6 +7,15 @@ balancehost = "192.168.1.10:6379"
balancedb = 0 balancedb = 0
balancepass = "" balancepass = ""
[test]
tokenhost = "43.198.252.255:6379"
tokendb = 0
tokenpass = "iH0g2CqzjI6SfercGwsT"
balancehost = "43.198.252.255:6379"
balancedb = 0
balancepass = "iH0g2CqzjI6SfercGwsT"
[prod] [prod]
tokenhost = "172.31.12.187:6379" tokenhost = "172.31.12.187:6379"
......
This diff is collapsed.
...@@ -19,7 +19,7 @@ func (server *UserLevelController) Levels() { ...@@ -19,7 +19,7 @@ func (server *UserLevelController) Levels() {
server.respond(http.StatusUnauthorized, err.Error()) server.respond(http.StatusUnauthorized, err.Error())
return return
} }
qs := mysql.GetMysqlInstace().Ormer.QueryTable("user_level") qs := mysql.GetMysqlInstace().Ormer.QueryTable("user_level").Filter("deleted", 0)
count, err := qs.Count() count, err := qs.Count()
logs.Debug("Levels = ", count) logs.Debug("Levels = ", count)
var levels []*models.UserLevel var levels []*models.UserLevel
...@@ -101,6 +101,8 @@ func (server *UserLevelController) UpdateLevel() { ...@@ -101,6 +101,8 @@ func (server *UserLevelController) UpdateLevel() {
return return
} }
request.CreatedTime = checkLevel.CreatedTime
request.UpdatedTime = time.Now()
_, err = mysql.GetMysqlInstace().Ormer.Update(&request) _, err = mysql.GetMysqlInstace().Ormer.Update(&request)
if err != nil { if err != nil {
server.respond(models.BusinessFailed, "更新失败") server.respond(models.BusinessFailed, "更新失败")
...@@ -135,7 +137,8 @@ func (server *UserLevelController) DelLevel() { ...@@ -135,7 +137,8 @@ func (server *UserLevelController) DelLevel() {
server.respond(models.MissingParameter, "默认等级不能删除") server.respond(models.MissingParameter, "默认等级不能删除")
return return
} }
request.Deleted = 1
mysql.GetMysqlInstace().Ormer.Delete(&request) mysql.GetMysqlInstace().Ormer.Update(&request)
server.respond(http.StatusOK, "删除成功") server.respond(http.StatusOK, "删除成功")
} }
{"/Users/brent/Documents/wubanWork/ai_developer_admin/controllers":1708598583449330754}
\ No newline at end of file
package cronjob package cronjob
import ( import (
"ai_developer_admin/libs/odysseus"
"ai_developer_admin/libs/postgres" "ai_developer_admin/libs/postgres"
"ai_developer_admin/libs/redis" "ai_developer_admin/libs/redis"
"ai_developer_admin/models" "ai_developer_admin/models"
...@@ -13,10 +12,14 @@ import ( ...@@ -13,10 +12,14 @@ import (
var loopCronTask = cron.New(cron.WithSeconds()) var loopCronTask = cron.New(cron.WithSeconds())
var HeatKey = "task:heat"
func Start() { func Start() {
//defer loopCronTask.Stop() //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() { loopCronTask.AddFunc(spec, func() {
logs.Debug("loopCronTask") logs.Debug("loopCronTask")
sql := "SELECT type,count(type) FROM bills GROUP BY type ORDER BY count DESC;" sql := "SELECT type,count(type) FROM bills GROUP BY type ORDER BY count DESC;"
...@@ -24,39 +27,107 @@ func Start() { ...@@ -24,39 +27,107 @@ func Start() {
if err != nil { if err != nil {
return return
} }
dataString, err := redis.GetDataToString(HeatKey)
var response []models.TaskHeat var response []models.TaskHeat
if err != nil {
return
}
err = json.Unmarshal([]byte(dataString), &response)
if err != nil {
return
}
for _, value := range tasks { for _, value := range tasks {
taskId, err := strconv.Atoi(value.Type) taskId, err := strconv.Atoi(value.Type)
if err != nil { if err != nil {
continue 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) count, _ := strconv.Atoi(value.Count)
retask := models.TaskHeat{ for _, taskType := range response {
TaskId: taskId, if taskType.TaskId == taskId {
User: taskType.Username, taskType.Count = int64(count)
Pwd: taskType.Password, }
Repository: taskType.ImageUrl,
SignUrl: taskType.SignUrl,
ImageName: taskType.ImageName,
ImageId: taskType.ImageId,
HardwareRequire: hardwareRequire,
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) data, err := json.Marshal(response)
if err == nil { if err == nil {
redis.SetKeyAndData("task:heat", string(data), 0) redis.SetKeyAndData(HeatKey, string(data), 0)
} }
}) })
loopCronTask.Start() 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 { ...@@ -28,6 +28,7 @@ func GetMysqlInstace() *Singleton {
func init() { func init() {
logs.Debug("mysql lib init") logs.Debug("mysql lib init")
//return
orm.Debug = true orm.Debug = true
if err := orm.RegisterDriver("mysql", orm.DRMySQL); err != nil { if err := orm.RegisterDriver("mysql", orm.DRMySQL); err != nil {
logs.Error(err.Error()) logs.Error(err.Error())
......
...@@ -15,6 +15,7 @@ import ( ...@@ -15,6 +15,7 @@ import (
var syncinfo *cachedata.CacheData var syncinfo *cachedata.CacheData
func init() { func init() {
//return
host, _ := beego.AppConfig.String("balancehost") host, _ := beego.AppConfig.String("balancehost")
db, _ := beego.AppConfig.Int("balancedb") db, _ := beego.AppConfig.Int("balancedb")
pass, _ := beego.AppConfig.String("balancepass") pass, _ := beego.AppConfig.String("balancepass")
...@@ -60,3 +61,7 @@ func GetUserBalance(id int64) (int64, error) { ...@@ -60,3 +61,7 @@ func GetUserBalance(id int64) (int64, error) {
func GetTaskType(id int64) (*model.TaskType, error) { func GetTaskType(id int64) (*model.TaskType, error) {
return syncinfo.GetTaskWithId(id) return syncinfo.GetTaskWithId(id)
} }
func PublichTaskUpdate(path string) error {
return syncinfo.PublichTaskUpdate(path)
}
...@@ -13,6 +13,7 @@ import ( ...@@ -13,6 +13,7 @@ import (
var ormpost orm.Ormer var ormpost orm.Ormer
func init() { func init() {
//return
logs.Debug("postgres lib init") logs.Debug("postgres lib init")
orm.Debug = true orm.Debug = true
if err := orm.RegisterDriver("postgres", orm.DRPostgres); err != nil { if err := orm.RegisterDriver("postgres", orm.DRPostgres); err != nil {
...@@ -55,6 +56,28 @@ func init() { ...@@ -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) { func QueryBills(sql string) ([]models.Bills, error) {
logs.Debug("QueryBills = ", sql) logs.Debug("QueryBills = ", sql)
qs := ormpost.Raw(sql) qs := ormpost.Raw(sql)
......
package redis package redis
import ( import (
"fmt"
"github.com/beego/beego/v2/core/logs" "github.com/beego/beego/v2/core/logs"
beego "github.com/beego/beego/v2/server/web" beego "github.com/beego/beego/v2/server/web"
"github.com/google/uuid"
"gopkg.in/redis.v5" "gopkg.in/redis.v5"
"strconv"
"strings"
"time" "time"
) )
var redisCache *redis.Client var redisCache *redis.Client
func init() { func init() {
//return
host, _ := beego.AppConfig.String("tokenhost") host, _ := beego.AppConfig.String("tokenhost")
db, _ := beego.AppConfig.Int("tokendb") db, _ := beego.AppConfig.Int("tokendb")
pass, _ := beego.AppConfig.String("tokenpass") pass, _ := beego.AppConfig.String("tokenpass")
...@@ -31,6 +36,59 @@ func createClient(redisHost string, password string, dataBase int) *redis.Client ...@@ -31,6 +36,59 @@ func createClient(redisHost string, password string, dataBase int) *redis.Client
return 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 { func SetKeyAndData(key string, value interface{}, time time.Duration) error {
err := redisCache.Set(key, value, time).Err() err := redisCache.Set(key, value, time).Err()
if err != nil { 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 ( ...@@ -4,9 +4,11 @@ import (
"ai_developer_admin/libs/cronjob" "ai_developer_admin/libs/cronjob"
"ai_developer_admin/libs/mysql" "ai_developer_admin/libs/mysql"
_ "ai_developer_admin/routers" _ "ai_developer_admin/routers"
"fmt"
beego "github.com/beego/beego/v2/server/web" beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/filter/cors" "github.com/beego/beego/v2/server/web/filter/cors"
_ "github.com/beego/beego/v2/server/web/session/redis" _ "github.com/beego/beego/v2/server/web/session/redis"
"time"
) )
func init() { func init() {
...@@ -34,6 +36,28 @@ func main() { ...@@ -34,6 +36,28 @@ func main() {
// logs.SetLogger(logs.AdapterFile, config) // 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() cronjob.Start()
mysql.GetMysqlInstace() mysql.GetMysqlInstace()
//postgres.Query("") //postgres.Query("")
......
...@@ -39,12 +39,12 @@ type JwtToken struct { ...@@ -39,12 +39,12 @@ type JwtToken struct {
} }
type AppRequest struct { type AppRequest struct {
Id int `json:"id,omitempty"` Id int `json:"id,omitempty"`
Name string `json:"name,omitempty"` Name string `json:"name,omitempty"`
Page int64 `json:"page,omitempty"` Page int64 `json:"page,omitempty"`
Size int64 `json:"size,omitempty"` Size int64 `json:"size,omitempty"`
StartTime *time.Time `json:"start_time,omitempty"` StartTime string `json:"start_time,omitempty"`
EndTime *time.Time `json:"end_time,omitempty"` EndTime string `json:"end_time,omitempty"`
ProfitAcc string `json:"profit_acc,omitempty"` ProfitAcc string `json:"profit_acc,omitempty"`
WorkerAcc string `json:"worker_acc,omitempty"` WorkerAcc string `json:"worker_acc,omitempty"`
} }
This diff is collapsed.
...@@ -60,7 +60,7 @@ type UserLevel struct { ...@@ -60,7 +60,7 @@ type UserLevel struct {
} }
type UserLevelTaskType 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)"` 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)"` 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)"` 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