diff --git a/api/cluster/environment.go b/api/cluster/environment.go index 41d1968e..a471cad8 100644 --- a/api/cluster/environment.go +++ b/api/cluster/environment.go @@ -3,13 +3,12 @@ package cluster import ( "github.com/0xJacky/Nginx-UI/api" "github.com/0xJacky/Nginx-UI/internal/analytic" - "github.com/0xJacky/Nginx-UI/internal/environment" + "github.com/0xJacky/Nginx-UI/internal/cosy" "github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/query" "github.com/gin-gonic/gin" "github.com/spf13/cast" "net/http" - "regexp" ) func GetEnvironment(c *gin.Context) { @@ -27,99 +26,34 @@ func GetEnvironment(c *gin.Context) { } func GetEnvironmentList(c *gin.Context) { - data, err := environment.RetrieveEnvironmentList() - if err != nil { - api.ErrHandler(c, err) - return - } - c.JSON(http.StatusOK, gin.H{ - "data": data, - }) -} - -type EnvironmentManageJson struct { - Name string `json:"name" binding:"required"` - URL string `json:"url" binding:"required"` - Token string `json:"token" binding:"required"` - OperationSync bool `json:"operation_sync"` - SyncApiRegex string `json:"sync_api_regex"` -} - -func validateRegex(data EnvironmentManageJson) error { - if data.OperationSync { - _, err := regexp.Compile(data.SyncApiRegex) - return err - } - return nil + cosy.Core[model.Environment](c). + SetFussy("name"). + SetEqual("enabled"). + SetTransformer(func(m *model.Environment) any { + return analytic.GetNode(m) + }).PagingList() } func AddEnvironment(c *gin.Context) { - var json EnvironmentManageJson - if !api.BindAndValid(c, &json) { - return - } - if err := validateRegex(json); err != nil { - api.ErrHandler(c, err) - return - } - - env := model.Environment{ - Name: json.Name, - URL: json.URL, - Token: json.Token, - OperationSync: json.OperationSync, - SyncApiRegex: json.SyncApiRegex, - } - - envQuery := query.Environment - - err := envQuery.Create(&env) - if err != nil { - api.ErrHandler(c, err) - return - } - - go analytic.RestartRetrieveNodesStatus() - - c.JSON(http.StatusOK, env) + cosy.Core[model.Environment](c).SetValidRules(gin.H{ + "name": "required", + "url": "required,url", + "token": "required", + "enabled": "omitempty,boolean", + }).ExecutedHook(func(c *cosy.Ctx[model.Environment]) { + go analytic.RestartRetrieveNodesStatus() + }).Create() } func EditEnvironment(c *gin.Context) { - id := cast.ToInt(c.Param("id")) - - var json EnvironmentManageJson - if !api.BindAndValid(c, &json) { - return - } - if err := validateRegex(json); err != nil { - api.ErrHandler(c, err) - return - } - - envQuery := query.Environment - - env, err := envQuery.FirstByID(id) - if err != nil { - api.ErrHandler(c, err) - return - } - - _, err = envQuery.Where(envQuery.ID.Eq(env.ID)).Updates(&model.Environment{ - Name: json.Name, - URL: json.URL, - Token: json.Token, - OperationSync: json.OperationSync, - SyncApiRegex: json.SyncApiRegex, - }) - - if err != nil { - api.ErrHandler(c, err) - return - } - - go analytic.RestartRetrieveNodesStatus() - - GetEnvironment(c) + cosy.Core[model.Environment](c).SetValidRules(gin.H{ + "name": "required", + "url": "required,url", + "token": "required", + "enabled": "omitempty,boolean", + }).ExecutedHook(func(c *cosy.Ctx[model.Environment]) { + go analytic.RestartRetrieveNodesStatus() + }).Modify() } func DeleteEnvironment(c *gin.Context) { diff --git a/app.example.ini b/app.example.ini index 8657d406..2a609d2a 100644 --- a/app.example.ini +++ b/app.example.ini @@ -1,47 +1,50 @@ [server] HttpPort = 9000 RunMode = debug -JwtSecret = -Email = +JwtSecret = +Email = HTTPChallengePort = 9180 StartCmd = bash Database = database -CADir = -GithubProxy = -NodeSecret = +CADir = +GithubProxy = +NodeSecret = Demo = false PageSize = 10 HttpHost = 0.0.0.0 CertRenewalInterval = 7 -RecursiveNameservers = +RecursiveNameservers = SkipInstallation = false -Name = +Name = [nginx] AccessLogPath = /var/log/nginx/access.log ErrorLogPath = /var/log/nginx/error.log -ConfigDir = -PIDPath = -TestConfigCmd = -ReloadCmd = -RestartCmd = +ConfigDir = +PIDPath = +TestConfigCmd = +ReloadCmd = +RestartCmd = [openai] -Model = -BaseUrl = -Proxy = -Token = +Model = +BaseUrl = +Proxy = +Token = [casdoor] -Endpoint = -ClientId = -ClientSecret = -Certificate = -Organization = -Application = -RedirectUri = +Endpoint = +ClientId = +ClientSecret = +Certificate = +Organization = +Application = +RedirectUri = [logrotate] Enabled = false CMD = logrotate /etc/logrotate.d/nginx Interval = 1440 + +[cluster] +Node = diff --git a/app/src/components/ChatGPT/ChatGPT.vue b/app/src/components/ChatGPT/ChatGPT.vue index 952ff945..f34d7d5d 100644 --- a/app/src/components/ChatGPT/ChatGPT.vue +++ b/app/src/components/ChatGPT/ChatGPT.vue @@ -66,16 +66,21 @@ async function request() { let hasCodeBlockIndicator = false while (true) { - const { done, value } = await reader.read() - if (done) { - setTimeout(() => { - scrollToBottom() - }, 500) - loading.value = false - store_record() + try { + const { done, value } = await reader.read() + if (done) { + setTimeout(() => { + scrollToBottom() + }, 500) + loading.value = false + store_record() + break + } + apply(value!) + } + catch (e) { break } - apply(value!) } function apply(input: Uint8Array) { diff --git a/app/src/components/EnvIndicator/EnvIndicator.vue b/app/src/components/EnvIndicator/EnvIndicator.vue index 8630fbdb..0af86ca3 100644 --- a/app/src/components/EnvIndicator/EnvIndicator.vue +++ b/app/src/components/EnvIndicator/EnvIndicator.vue @@ -4,7 +4,6 @@ import { storeToRefs } from 'pinia' import { useRouter } from 'vue-router' import { computed, watch } from 'vue' import { useSettingsStore } from '@/pinia' -import settings from '@/api/settings' const settingsStore = useSettingsStore() @@ -28,10 +27,6 @@ watch(node_id, async () => { }) const { server_name } = storeToRefs(useSettingsStore()) - -settings.get_server_name().then(r => { - server_name.value = r.name -})