From 64bef64076333d4cceb07944aad6d692167d32c1 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 11 Aug 2022 10:48:36 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=96=87=E5=AD=97=E8=AF=B4=E6=98=8E=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- options/locale/locale_en-US.ini | 9 +++++---- options/locale/locale_zh-CN.ini | 9 +++++---- templates/home.tmpl | 3 ++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 8732ea889..0fecf7de2 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -253,10 +253,11 @@ page_dev_env_desc2_desc=Associate the model with the code version, you can adjus page_dev_env_desc3_title=Once Configuration, Multiple Reuse page_dev_env_desc3_desc=Provide execution environment sharing, Once Configuration, Multiple Reuse. Lower the threshold of model development, and avoid spending repetitive time configuring complex environments. page_dev_yunlao=OpenI AI Collaboration Platform -page_dev_yunlao_desc1=OpenI AI collaboration platform has been connected with Pengcheng CloudBrain and China computing network (c2net) in phase I, and can use the rich computing resources of Pengcheng CloudBrain and China computing network to complete AI development tasks. -page_dev_yunlao_desc2=Pengcheng CloudBrain's existing AI computing power is 100p FLOPS@FP16 (billions of half precision floating-point calculations per second), the main hardware infrastructure is composed of GPU servers equipped with NVIDIA Tesla V100 and A100, and Atlas 900 AI clusters equipped with Kunpeng and shengteng processors; China computing network (c2net) phase I can realize the high-speed network interconnection between different AI computing centers, realize the reasonable scheduling of computing power and the flexible allocation of resources. At present, it has been connected to 11 intelligent computing centers, with a total scale of 1924p. -page_dev_yunlao_desc3=OpenI AI collaboration platform has been connected to Pengcheng Cloud Computing Institute, Chengdu Intelligent Computing Center, Zhongyuan Intelligent Computing Center, Hefei brain and other nodes. Developers can freely choose the corresponding computing resources according to their use needs, and can test the adaptability, performance, stability, etc. of the model in different hardware environments. -page_dev_yunlao_desc4=If your model requires more computing resources, you can also apply for it separately. +page_dev_yunlao_desc1=OpenI AI collaboration platform has cooperated with Pengcheng cloud brain and China computing power network (c ² Net) can be used to complete AI development tasks by using the rich computing resources of Pengcheng cloud brain and China computing network. +page_dev_yunlao_desc2=Pengcheng CloudBrain's existing AI computing power is 100p FLOPS@FP16 (billions of half precision floating-point calculations per second), the main hardware infrastructure consists of GPU servers equipped with NVIDIA Tesla V100 and A100, and Atlas 900 AI clusters equipped with Kunpeng and shengteng processors. +page_dev_yunlao_desc3=China computing power network (c ² Net) phase I can realize high-speed network interconnection between different artificial intelligence computing centers, and realize reasonable scheduling of computing power and flexible allocation of resources. At present, 11 intelligent computing centers have been connected, and the total scale of computing power is 1924p OPS@FP16 。 Qizhi AI collaboration platform has been connected to Pengcheng Cloud Computing Institute, Chengdu Intelligent Computing Center, Zhongyuan Intelligent Computing Center, Hefei brain and other nodes. +page_dev_yunlao_desc4=Developers can freely select the corresponding computing resources according to the use needs, and can test the adaptability, performance, stability, etc. of the model in different hardware environments. +page_dev_yunlao_desc5=If your model requires more computing resources, you can also apply for it separately. page_dev_yunlao_apply=Apply Separately search=Search diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 032cb04d1..2878627e2 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -255,10 +255,11 @@ page_dev_env_desc2_desc=将模型与代码版本建立关联,可以基于代 page_dev_env_desc3_title=一次配置,多次使用 page_dev_env_desc3_desc=提供执行环境共享,一次配置,多次使用,降低模型开发门槛,避免花费重复的时间配置复杂的环境 page_dev_yunlao=启智AI协作平台 -page_dev_yunlao_desc1=启智AI协作平台已经与鹏城云脑、中国算力网(C2Net)一期打通,可以利用鹏城云脑和中国算力网的丰富算力资源,完成AI开发任务。 -page_dev_yunlao_desc2=鹏城云脑现有AI算力100P FLOPS@FP16(每秒十亿亿次半精度浮点计算),主要硬件基础设施由搭载英伟达Tesla V100 和A100 的GPU服务器,以及搭载鲲鹏、昇腾处理器的Atlas 900 AI集群构成;中国算力网(C2Net)一期可实现不同人工智能计算中心之间高速网络互联,实现算力合理调度和资源弹性分配,目前已接入11家智算中心,算力总规模1924P。 -page_dev_yunlao_desc3=启智AI协作平台已接入其中的鹏城云计算所、成都智算中心、中原智算中心、合肥类脑等节点,开发者可以根据使用需求,自由选择相应计算资源,可以测试模型在不同硬件环境下的适配能力、性能、稳定性等。 -page_dev_yunlao_desc4=如果您的模型需要更多的计算资源,也可以单独申请。 +page_dev_yunlao_desc1=启智AI协作平台已经与鹏城云脑、中国算力网(C²NET)一期打通,可以利用鹏城云脑和中国算力网的丰富算力资源,完成AI开发任务。 +page_dev_yunlao_desc2=鹏城云脑现有AI算力100P FLOPS@FP16(每秒十亿亿次半精度浮点计算),主要硬件基础设施由搭载英伟达Tesla V100 和A100 的GPU服务器,以及搭载鲲鹏、昇腾处理器的Atlas 900 AI集群构成。 +page_dev_yunlao_desc3=中国算力网(C²NET)一期可实现不同人工智能计算中心之间高速网络互联,实现算力合理调度和资源弹性分配。目前已接入11家智算中心,算力总规模1924P OPS@FP16。启智AI协作平台已接入其中的鹏城云计算所、成都智算中心、中原智算中心、合肥类脑等节点。 +page_dev_yunlao_desc4=开发者可以根据使用需求,自由选择相应计算资源,可以测试模型在不同硬件环境下的适配能力、性能、稳定性等。 +page_dev_yunlao_desc5=如果您的模型需要更多的计算资源,也可以单独申请。 page_dev_yunlao_apply=单独申请 search=搜索 diff --git a/templates/home.tmpl b/templates/home.tmpl index 9f52eb19e..914c43418 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -206,7 +206,8 @@ {{.page_dev_yunlao_desc1}}
{{.page_dev_yunlao_desc2}}
{{.page_dev_yunlao_desc3}}
- {{.page_dev_yunlao_desc4}}
+ {{.page_dev_yunlao_desc4}}
+ {{.page_dev_yunlao_desc5}}

{{if .IsSigned}} From bff4faab8200ccdb8c14473288b1475b0b63b676 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 11 Aug 2022 11:05:56 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=96=87=E5=AD=97=E8=AF=B4=E6=98=8E=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/home.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/routers/home.go b/routers/home.go index 85057c3a1..1a697946a 100755 --- a/routers/home.go +++ b/routers/home.go @@ -40,7 +40,7 @@ const ( tplExploreImages base.TplName = "explore/images" tplExploreExploreDataAnalysis base.TplName = "explore/data_analysis" tplHomeTerm base.TplName = "terms" - tplHomePrivacy base.TplName = "privacy" + tplHomePrivacy base.TplName = "privacy" ) // Home render home page @@ -93,6 +93,7 @@ func setRecommendURL(ctx *context.Context) { ctx.Data["page_dev_yunlao_desc2"] = ctx.Tr("home.page_dev_yunlao_desc2") ctx.Data["page_dev_yunlao_desc3"] = ctx.Tr("home.page_dev_yunlao_desc3") ctx.Data["page_dev_yunlao_desc4"] = ctx.Tr("home.page_dev_yunlao_desc4") + ctx.Data["page_dev_yunlao_desc5"] = ctx.Tr("home.page_dev_yunlao_desc5") ctx.Data["page_dev_yunlao_apply"] = ctx.Tr("home.page_dev_yunlao_apply") ctx.Data["page_recommend_activity"] = ctx.Tr("home.page_recommend_activity") ctx.Data["page_recommend_activity_desc"] = ctx.Tr("home.page_recommend_activity_desc") From 879d29594ce694a628b824583abfdb156c9f36b6 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Thu, 11 Aug 2022 12:01:23 +0800 Subject: [PATCH 3/5] #2631 add cloudbrain task stop template msg --- modules/auth/wechat/client.go | 2 +- modules/auth/wechat/cloudbrain.go | 155 ++++++++++++++++++++++++++ modules/auth/wechat/template.go | 119 +++----------------- modules/notification/wechat/wechat.go | 15 +-- modules/setting/setting.go | 12 ++ 5 files changed, 187 insertions(+), 116 deletions(-) create mode 100644 modules/auth/wechat/cloudbrain.go diff --git a/modules/auth/wechat/client.go b/modules/auth/wechat/client.go index bb6db09d0..367a80c3a 100644 --- a/modules/auth/wechat/client.go +++ b/modules/auth/wechat/client.go @@ -61,7 +61,7 @@ type TemplateValue struct { Color string `json:"color"` } -type CloudbrainTaskData struct { +type DefaultWechatTemplate struct { First TemplateValue `json:"first"` Keyword1 TemplateValue `json:"keyword1"` Keyword2 TemplateValue `json:"keyword2"` diff --git a/modules/auth/wechat/cloudbrain.go b/modules/auth/wechat/cloudbrain.go new file mode 100644 index 000000000..9af091f15 --- /dev/null +++ b/modules/auth/wechat/cloudbrain.go @@ -0,0 +1,155 @@ +package wechat + +import ( + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" + "fmt" + "time" +) + +type JobOperateType string + +const ( + JobOperateTypeStart JobOperateType = "start" + JobOperateTypeStop JobOperateType = "stop" +) + +type CloudbrainStartMsg struct { +} + +func (CloudbrainStartMsg) Data(ctx *TemplateContext) *DefaultWechatTemplate { + return &DefaultWechatTemplate{ + First: TemplateValue{Value: setting.CloudbrainStartedTitle}, + Keyword1: TemplateValue{Value: ctx.Cloudbrain.DisplayJobName}, + Keyword2: TemplateValue{Value: getJobTypeDisplayName(ctx.Cloudbrain.JobType)}, + Keyword3: TemplateValue{Value: time.Unix(int64(ctx.Cloudbrain.CreatedUnix), 0).Format("2006-01-02 15:04:05")}, + Remark: TemplateValue{Value: setting.CloudbrainStartedRemark}, + } +} + +func (CloudbrainStartMsg) ShouldSend(ctx *TemplateContext) bool { + if len(setting.CloudbrainStartedNotifyList) == 0 { + return false + } + for _, v := range setting.CloudbrainStartedNotifyList { + if v == ctx.Cloudbrain.JobType { + return true + } + } + return false +} + +func (CloudbrainStartMsg) MsgId(ctx *TemplateContext) string { + return string(JobOperateTypeStart) + "_" + fmt.Sprint(ctx.Cloudbrain.ID) +} + +func (CloudbrainStartMsg) Url(ctx *TemplateContext) string { + repo, err := models.GetRepositoryByID(ctx.Cloudbrain.RepoID) + if err != nil { + log.Error("CloudbrainStartMsg GetRepositoryByID error,%v", err) + return "" + } + return getCloudbrainTemplateUrl(*ctx.Cloudbrain, repo) +} + +type CloudbrainStopMsg struct { +} + +func (CloudbrainStopMsg) Data(ctx *TemplateContext) *DefaultWechatTemplate { + return &DefaultWechatTemplate{ + First: TemplateValue{Value: setting.CloudbrainStoppedTitle}, + Keyword1: TemplateValue{Value: ctx.Cloudbrain.DisplayJobName}, + Keyword2: TemplateValue{Value: getJobTypeDisplayName(ctx.Cloudbrain.JobType)}, + Keyword3: TemplateValue{Value: time.Unix(int64(ctx.Cloudbrain.CreatedUnix), 0).Format("2006-01-02 15:04:05")}, + Remark: TemplateValue{Value: setting.CloudbrainStoppedRemark}, + } +} + +func (CloudbrainStopMsg) ShouldSend(ctx *TemplateContext) bool { + if len(setting.CloudbrainStoppedNotifyList) == 0 { + return false + } + for _, v := range setting.CloudbrainStoppedNotifyList { + if v == ctx.Cloudbrain.JobType { + return true + } + } + return false +} + +func (CloudbrainStopMsg) MsgId(ctx *TemplateContext) string { + return string(JobOperateTypeStop) + "_" + fmt.Sprint(ctx.Cloudbrain.ID) +} + +func (CloudbrainStopMsg) Url(ctx *TemplateContext) string { + repo, err := models.GetRepositoryByID(ctx.Cloudbrain.RepoID) + if err != nil { + log.Error("CloudbrainStopMsg GetRepositoryByID error,%v", err) + return "" + } + return getCloudbrainTemplateUrl(*ctx.Cloudbrain, repo) +} + +var startMsg = &CloudbrainStartMsg{} +var stopMsg = &CloudbrainStopMsg{} + +func GetTemplateFromOperateType(operate JobOperateType) Template { + switch operate { + case JobOperateTypeStart: + return startMsg + case JobOperateTypeStop: + return stopMsg + } + return nil +} + +func GetJobOperateTypeFromCloudbrainStatus(cloudbrain *models.Cloudbrain) JobOperateType { + if cloudbrain.IsTerminal() { + return JobOperateTypeStop + } + if cloudbrain.IsRunning() { + return JobOperateTypeStart + } + return "" +} + +func getCloudbrainTemplateUrl(cloudbrain models.Cloudbrain, repo *models.Repository) string { + url := setting.AppURL + repo.FullName() + + switch cloudbrain.JobType { + case string(models.JobTypeDebug): + if cloudbrain.ComputeResource == "CPU/GPU" { + url += "/cloudbrain/" + fmt.Sprint(cloudbrain.ID) + } else { + url += "/modelarts/notebook/" + fmt.Sprint(cloudbrain.ID) + } + case string(models.JobTypeBenchmark): + url += "/cloudbrain/benchmark/" + fmt.Sprint(cloudbrain.ID) + case string(models.JobTypeTrain): + if cloudbrain.Type == models.TypeCloudBrainOne { + url += "/cloudbrain/train-job/" + fmt.Sprint(cloudbrain.JobID) + } else if cloudbrain.Type == models.TypeCloudBrainTwo { + url += "/modelarts/train-job/" + fmt.Sprint(cloudbrain.JobID) + } else if cloudbrain.Type == models.TypeC2Net { + url += "/grampus/train-job/" + fmt.Sprint(cloudbrain.JobID) + } + case string(models.JobTypeInference): + url += "/modelarts/inference-job/" + fmt.Sprint(cloudbrain.JobID) + } + return url +} + +func getJobTypeDisplayName(jobType string) string { + switch jobType { + case string(models.JobTypeDebug): + return "调试任务" + case string(models.JobTypeBenchmark): + return "评测任务" + case string(models.JobTypeTrain): + return "训练任务" + case string(models.JobTypeInference): + return "推理任务" + } + return "" +} diff --git a/modules/auth/wechat/template.go b/modules/auth/wechat/template.go index 6c19651a6..bc206e3b2 100644 --- a/modules/auth/wechat/template.go +++ b/modules/auth/wechat/template.go @@ -6,140 +6,55 @@ import ( "code.gitea.io/gitea/modules/setting" "errors" "fmt" - "time" ) -type JobOperateType string - -const ( - JobOperateTypeStart JobOperateType = "start" - JobOperateTypeStop JobOperateType = "stop" -) +type Template interface { + ShouldSend(ctx *TemplateContext) bool + Data(ctx *TemplateContext) *DefaultWechatTemplate + MsgId(ctx *TemplateContext) string + Url(ctx *TemplateContext) string +} -func GetJobOperateTypeFromCloudbrainStatus(cloudbrain *models.Cloudbrain) JobOperateType { - if cloudbrain.IsTerminal() { - return JobOperateTypeStop - } - if cloudbrain.IsRunning() { - return JobOperateTypeStart - } - return "" +type TemplateContext struct { + Cloudbrain *models.Cloudbrain } -func SendCloudbrainStartedMsg(operateType JobOperateType, cloudbrain models.Cloudbrain) error { +func SendTemplateMsg(template Template, ctx *TemplateContext, userId int64) error { defer func() { if err := recover(); err != nil { combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2)) log.Error("PANIC:", combinedErr) } }() - repo, err := models.GetRepositoryByID(cloudbrain.RepoID) - if err != nil { - log.Error("SendCloudbrainStartedMsg GetRepositoryByID error,%v", err) - } - - if setting.CloudbrainStartedTemplateId == "" { + if !template.ShouldSend(ctx) { return nil } - openId := models.GetUserWechatOpenId(cloudbrain.UserID) + openId := models.GetUserWechatOpenId(userId) if openId == "" { return errors.New("Wechat openId not exist") } - data := CloudbrainTaskData{ - First: TemplateValue{Value: getCloudbrainTemplateTitle(operateType)}, - Keyword1: TemplateValue{Value: cloudbrain.DisplayJobName}, - Keyword2: TemplateValue{Value: getJobTypeDisplayName(cloudbrain.JobType)}, - Keyword3: TemplateValue{Value: time.Unix(int64(cloudbrain.CreatedUnix), 0).Format("2006-01-02 15:04:05")}, - Remark: TemplateValue{Value: getCloudbrainTemplateRemark(operateType)}, - } req := TemplateMsgRequest{ ToUser: openId, TemplateId: setting.CloudbrainStartedTemplateId, - Url: getCloudbrainTemplateUrl(cloudbrain, repo), - ClientMsgId: string(operateType) + "_" + fmt.Sprint(cloudbrain.ID), - Data: data, + Url: template.Url(ctx), + ClientMsgId: template.MsgId(ctx), + Data: template.Data(ctx), } err, retryFlag := sendTemplateMsg(req) if retryFlag { - log.Info("retrySendCloudbrainTemplateMsg calling") + log.Info("SendTemplateMsg calling") refreshAccessToken() err, _ = sendTemplateMsg(req) if err != nil { - log.Error("SendCloudbrainStartedMsg err. %v", err) + log.Error("SendTemplateMsg err. %v", err) return err } return nil } if err != nil { - log.Error("SendCloudbrainStartedMsg err. %v", err) + log.Error("SendTemplateMsg err. %v", err) return err } return nil } - -func getCloudbrainTemplateUrl(cloudbrain models.Cloudbrain, repo *models.Repository) string { - url := setting.AppURL + repo.FullName() - - switch cloudbrain.JobType { - case string(models.JobTypeDebug): - if cloudbrain.ComputeResource == "CPU/GPU" { - url += "/cloudbrain/" + fmt.Sprint(cloudbrain.ID) - } else { - url += "/modelarts/notebook/" + fmt.Sprint(cloudbrain.ID) - } - case string(models.JobTypeBenchmark): - url += "/cloudbrain/benchmark/" + fmt.Sprint(cloudbrain.ID) - case string(models.JobTypeTrain): - if cloudbrain.Type == models.TypeCloudBrainOne { - url += "/cloudbrain/train-job/" + fmt.Sprint(cloudbrain.JobID) - } else if cloudbrain.Type == models.TypeCloudBrainTwo { - url += "/modelarts/train-job/" + fmt.Sprint(cloudbrain.JobID) - } else if cloudbrain.Type == models.TypeC2Net { - url += "/grampus/train-job/" + fmt.Sprint(cloudbrain.JobID) - } - case string(models.JobTypeInference): - url += "/modelarts/inference-job/" + fmt.Sprint(cloudbrain.JobID) - } - return url -} - -func getCloudbrainTemplateTitle(operateType JobOperateType) string { - var title string - switch operateType { - case JobOperateTypeStart: - title = "您好,您提交的算力资源申请已通过,任务已启动,请您关注运行情况。" - case JobOperateTypeStop: - title = "您好,您提交的任务已运行结束。" - } - - return title - -} - -func getCloudbrainTemplateRemark(operateType JobOperateType) string { - var remark string - switch operateType { - case JobOperateTypeStart: - remark = "感谢您的耐心等待。" - case JobOperateTypeStop: - remark = "点击可查看运行结果" - } - - return remark - -} - -func getJobTypeDisplayName(jobType string) string { - switch jobType { - case string(models.JobTypeDebug): - return "调试任务" - case string(models.JobTypeBenchmark): - return "评测任务" - case string(models.JobTypeTrain): - return "训练任务" - case string(models.JobTypeInference): - return "推理任务" - } - return "" -} diff --git a/modules/notification/wechat/wechat.go b/modules/notification/wechat/wechat.go index f77bfe741..81c697fc9 100644 --- a/modules/notification/wechat/wechat.go +++ b/modules/notification/wechat/wechat.go @@ -8,7 +8,6 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth/wechat" "code.gitea.io/gitea/modules/notification/base" - "code.gitea.io/gitea/modules/setting" ) type wechatNotifier struct { @@ -29,16 +28,6 @@ func (*wechatNotifier) NotifyChangeCloudbrainStatus(cloudbrain *models.Cloudbrai if operateType == "" { return } - switch operateType { - case wechat.JobOperateTypeStart: - if len(setting.CloudbrainStartedNotifyList) == 0 { - return - } - for _, v := range setting.CloudbrainStartedNotifyList { - if v == cloudbrain.JobType { - go wechat.SendCloudbrainStartedMsg(operateType, *cloudbrain) - return - } - } - } + template := wechat.GetTemplateFromOperateType(operateType) + go wechat.SendTemplateMsg(template, &wechat.TemplateContext{Cloudbrain: cloudbrain}, cloudbrain.UserID) } diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 8a8a4a052..f26640ca9 100755 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -586,6 +586,12 @@ var ( //wechat template msg config CloudbrainStartedTemplateId string CloudbrainStartedNotifyList []string + CloudbrainStartedTitle string + CloudbrainStartedRemark string + CloudbrainStoppedTemplateId string + CloudbrainStoppedNotifyList []string + CloudbrainStoppedTitle string + CloudbrainStoppedRemark string //nginx proxy PROXYURL string @@ -1448,6 +1454,12 @@ func NewContext() { TreePathOfSubscribe = sec.Key("SUBSCRIBE_TREE_PATH").MustString("wechat/subscribe_reply.json") CloudbrainStartedTemplateId = sec.Key("CLOUDBRAIN_STARTED_TEMPLATE_ID").MustString("") CloudbrainStartedNotifyList = strings.Split(sec.Key("CLOUDBRAIN_STARTED_NOTIFY_LIST").MustString("DEBUG"), ",") + CloudbrainStartedTitle = sec.Key("CLOUDBRAIN_STARTED_TITLE").MustString("您好,您提交的算力资源申请已通过,任务已启动,请您关注运行情况。") + CloudbrainStartedRemark = sec.Key("CLOUDBRAIN_STARTED_REMARK").MustString("感谢您的耐心等待。") + CloudbrainStoppedTemplateId = sec.Key("CLOUDBRAIN_STOPPED_TEMPLATE_ID").MustString("") + CloudbrainStoppedNotifyList = strings.Split(sec.Key("CLOUDBRAIN_STOPPED_NOTIFY_LIST").MustString("TRAIN"), ",") + CloudbrainStoppedTitle = sec.Key("CLOUDBRAIN_STOPPED_TITLE").MustString("您好,您申请的算力资源已结束使用,任务已完成运行,请您关注运行结果。") + CloudbrainStoppedRemark = sec.Key("CLOUDBRAIN_STOPPED_REMARK").MustString("感谢您的耐心等待。") SetRadarMapConfig() From 6fd2ad8e133f2b4b8f0f4589fbd64893ca9b81c4 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 11 Aug 2022 14:22:55 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=96=87=E5=AD=97=E8=AF=B4=E6=98=8E=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- templates/home.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/home.tmpl b/templates/home.tmpl index 914c43418..a5e24a44e 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -200,7 +200,7 @@
-
+

{{.page_dev_yunlao}}

{{.page_dev_yunlao_desc1}}
From 3622ec3a06f05b692f5e5b36cb6e7caa6a176673 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 11 Aug 2022 14:45:29 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- templates/home.tmpl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/home.tmpl b/templates/home.tmpl index a5e24a44e..8de647d75 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -211,12 +211,12 @@

{{if .IsSigned}} - {{.page_use}} + {{.page_use}} {{else}} - {{.page_use}} + {{.page_use}} {{end}} - {{.page_dev_yunlao_apply}} + {{.page_dev_yunlao_apply}}