⚡️ refactor: 小幅提升性能
This commit is contained in:
		
							parent
							
								
									67df0852f9
								
							
						
					
					
						commit
						d059835877
					
				@ -103,18 +103,20 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) {
 | 
				
			|||||||
	var isEdit bool
 | 
						var isEdit bool
 | 
				
			||||||
	err := c.ShouldBindJSON(&sf)
 | 
						err := c.ShouldBindJSON(&sf)
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		dao.ServerLock.Lock()
 | 
					 | 
				
			||||||
		defer dao.ServerLock.Unlock()
 | 
					 | 
				
			||||||
		s.Name = sf.Name
 | 
							s.Name = sf.Name
 | 
				
			||||||
		s.Secret = sf.Secret
 | 
							s.Secret = sf.Secret
 | 
				
			||||||
		s.DisplayIndex = sf.DisplayIndex
 | 
							s.DisplayIndex = sf.DisplayIndex
 | 
				
			||||||
		s.ID = sf.ID
 | 
							s.ID = sf.ID
 | 
				
			||||||
		s.Tag = sf.Tag
 | 
							s.Tag = sf.Tag
 | 
				
			||||||
		if sf.ID == 0 {
 | 
							if sf.ID == 0 {
 | 
				
			||||||
 | 
								dao.ServerLock.Lock()
 | 
				
			||||||
 | 
								defer dao.ServerLock.Unlock()
 | 
				
			||||||
			s.Secret = com.MD5(fmt.Sprintf("%s%s%d", time.Now(), sf.Name, admin.ID))
 | 
								s.Secret = com.MD5(fmt.Sprintf("%s%s%d", time.Now(), sf.Name, admin.ID))
 | 
				
			||||||
			s.Secret = s.Secret[:10]
 | 
								s.Secret = s.Secret[:10]
 | 
				
			||||||
			err = dao.DB.Create(&s).Error
 | 
								err = dao.DB.Create(&s).Error
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 | 
								dao.ServerLock.RLock()
 | 
				
			||||||
 | 
								defer dao.ServerLock.RUnlock()
 | 
				
			||||||
			isEdit = true
 | 
								isEdit = true
 | 
				
			||||||
			err = dao.DB.Save(&s).Error
 | 
								err = dao.DB.Save(&s).Error
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,12 +11,13 @@ import (
 | 
				
			|||||||
type Server struct {
 | 
					type Server struct {
 | 
				
			||||||
	Common
 | 
						Common
 | 
				
			||||||
	Name         string
 | 
						Name         string
 | 
				
			||||||
	DisplayIndex int    // 展示权重,越大越靠前
 | 
					 | 
				
			||||||
	Secret       string `json:"-"`
 | 
					 | 
				
			||||||
	Tag          string
 | 
						Tag          string
 | 
				
			||||||
	Host         *Host      `gorm:"-"`
 | 
						Secret       string `json:"-"`
 | 
				
			||||||
	State        *HostState `gorm:"-"`
 | 
						DisplayIndex int    // 展示权重,越大越靠前
 | 
				
			||||||
	LastActive   time.Time
 | 
					
 | 
				
			||||||
 | 
						Host       *Host      `gorm:"-"`
 | 
				
			||||||
 | 
						State      *HostState `gorm:"-"`
 | 
				
			||||||
 | 
						LastActive *time.Time `gorm:"-"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TaskClose  chan error                        `gorm:"-" json:"-"`
 | 
						TaskClose  chan error                        `gorm:"-" json:"-"`
 | 
				
			||||||
	TaskStream pb.NezhaService_RequestTaskServer `gorm:"-" json:"-"`
 | 
						TaskStream pb.NezhaService_RequestTaskServer `gorm:"-" json:"-"`
 | 
				
			||||||
 | 
				
			|||||||
@ -22,8 +22,6 @@ type AuthorizeOption struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func Authorize(opt AuthorizeOption) func(*gin.Context) {
 | 
					func Authorize(opt AuthorizeOption) func(*gin.Context) {
 | 
				
			||||||
	return func(c *gin.Context) {
 | 
						return func(c *gin.Context) {
 | 
				
			||||||
		token, err := c.Cookie(dao.Conf.Site.CookieName)
 | 
					 | 
				
			||||||
		token = strings.TrimSpace(token)
 | 
					 | 
				
			||||||
		var code uint64 = http.StatusForbidden
 | 
							var code uint64 = http.StatusForbidden
 | 
				
			||||||
		if opt.Guest {
 | 
							if opt.Guest {
 | 
				
			||||||
			code = http.StatusBadRequest
 | 
								code = http.StatusBadRequest
 | 
				
			||||||
@ -35,18 +33,21 @@ func Authorize(opt AuthorizeOption) func(*gin.Context) {
 | 
				
			|||||||
			Link:  opt.Redirect,
 | 
								Link:  opt.Redirect,
 | 
				
			||||||
			Btn:   opt.Btn,
 | 
								Btn:   opt.Btn,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if token != "" {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		var isLogin bool
 | 
							var isLogin bool
 | 
				
			||||||
		var u model.User
 | 
					
 | 
				
			||||||
		err = dao.DB.Where("token = ?", token).First(&u).Error
 | 
							token, _ := c.Cookie(dao.Conf.Site.CookieName)
 | 
				
			||||||
		if err == nil {
 | 
							token = strings.TrimSpace(token)
 | 
				
			||||||
			isLogin = u.TokenExpired.After(time.Now())
 | 
							if token != "" {
 | 
				
			||||||
		}
 | 
								var u model.User
 | 
				
			||||||
		if isLogin {
 | 
								if err := dao.DB.Where("token = ?", token).First(&u).Error; err == nil {
 | 
				
			||||||
			c.Set(model.CtxKeyAuthorizedUser, &u)
 | 
									isLogin = u.TokenExpired.After(time.Now())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if isLogin {
 | 
				
			||||||
 | 
									c.Set(model.CtxKeyAuthorizedUser, &u)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// 已登录且只能游客访问
 | 
							// 已登录且只能游客访问
 | 
				
			||||||
		if isLogin && opt.Guest {
 | 
							if isLogin && opt.Guest {
 | 
				
			||||||
			ShowErrorPage(c, commonErr, opt.IsPage)
 | 
								ShowErrorPage(c, commonErr, opt.IsPage)
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,6 @@
 | 
				
			|||||||
                                    <div class='ui content popup' style="margin-bottom: 0">
 | 
					                                    <div class='ui content popup' style="margin-bottom: 0">
 | 
				
			||||||
                                        系统:@#server.Host.Platform#@-@#server.Host.PlatformVersion#@ [<span
 | 
					                                        系统:@#server.Host.Platform#@-@#server.Host.PlatformVersion#@ [<span
 | 
				
			||||||
                                            v-if='server.Host.Virtualization'>@#server.Host.Virtualization#@:</span>@#server.Host.Arch#@]<br>
 | 
					                                            v-if='server.Host.Virtualization'>@#server.Host.Virtualization#@:</span>@#server.Host.Arch#@]<br>
 | 
				
			||||||
                                        CPU:@#server.Host.CPU#@<br>
 | 
					 | 
				
			||||||
                                        硬盘:@#formatByteSize(server.State.DiskUsed)#@/@#formatByteSize(server.Host.DiskTotal)#@<br>
 | 
					                                        硬盘:@#formatByteSize(server.State.DiskUsed)#@/@#formatByteSize(server.Host.DiskTotal)#@<br>
 | 
				
			||||||
                                        内存:@#formatByteSize(server.State.MemUsed)#@/@#formatByteSize(server.Host.MemTotal)#@<br>
 | 
					                                        内存:@#formatByteSize(server.State.MemUsed)#@/@#formatByteSize(server.Host.MemTotal)#@<br>
 | 
				
			||||||
                                        交换:@#formatByteSize(server.State.SwapUsed)#@/@#formatByteSize(server.Host.SwapTotal)#@<br>
 | 
					                                        交换:@#formatByteSize(server.State.SwapUsed)#@/@#formatByteSize(server.Host.SwapTotal)#@<br>
 | 
				
			||||||
@ -33,6 +32,7 @@
 | 
				
			|||||||
                                            class='arrow alternate circle down outline icon'></i>@#formatByteSize(server.State.NetInTransfer)#@<i
 | 
					                                            class='arrow alternate circle down outline icon'></i>@#formatByteSize(server.State.NetInTransfer)#@<i
 | 
				
			||||||
                                            class='arrow alternate circle up outline icon'></i>@#formatByteSize(server.State.NetOutTransfer)#@<br>
 | 
					                                            class='arrow alternate circle up outline icon'></i>@#formatByteSize(server.State.NetOutTransfer)#@<br>
 | 
				
			||||||
                                        启动:@# formatTimestamp(server.Host.BootTime) #@<br>
 | 
					                                        启动:@# formatTimestamp(server.Host.BootTime) #@<br>
 | 
				
			||||||
 | 
					                                        活动:@# new Date(server.LastActive).toLocaleString() #@<br>
 | 
				
			||||||
                                        版本:@#server.Host.Version#@<br>
 | 
					                                        版本:@#server.Host.Version#@<br>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                    <div class="ui divider" style="margin-bottom: 5px"></div>
 | 
					                                    <div class="ui divider" style="margin-bottom: 5px"></div>
 | 
				
			||||||
 | 
				
			|||||||
@ -69,10 +69,10 @@ func (s *NezhaHandler) RequestTask(h *pb.Host, stream pb.NezhaService_RequestTas
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	closeCh := make(chan error)
 | 
						closeCh := make(chan error)
 | 
				
			||||||
	dao.ServerLock.Lock()
 | 
						dao.ServerLock.RLock()
 | 
				
			||||||
	dao.ServerList[clientID].TaskStream = stream
 | 
						dao.ServerList[clientID].TaskStream = stream
 | 
				
			||||||
	dao.ServerList[clientID].TaskClose = closeCh
 | 
						dao.ServerList[clientID].TaskClose = closeCh
 | 
				
			||||||
	dao.ServerLock.Unlock()
 | 
						dao.ServerLock.RUnlock()
 | 
				
			||||||
	select {
 | 
						select {
 | 
				
			||||||
	case err = <-closeCh:
 | 
						case err = <-closeCh:
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@ -88,7 +88,8 @@ func (s *NezhaHandler) ReportSystemState(c context.Context, r *pb.State) (*pb.Re
 | 
				
			|||||||
	state := model.PB2State(r)
 | 
						state := model.PB2State(r)
 | 
				
			||||||
	dao.ServerLock.RLock()
 | 
						dao.ServerLock.RLock()
 | 
				
			||||||
	defer dao.ServerLock.RUnlock()
 | 
						defer dao.ServerLock.RUnlock()
 | 
				
			||||||
	dao.ServerList[clientID].LastActive = time.Now()
 | 
						now := time.Now()
 | 
				
			||||||
 | 
						dao.ServerList[clientID].LastActive = &now
 | 
				
			||||||
	dao.ServerList[clientID].State = &state
 | 
						dao.ServerList[clientID].State = &state
 | 
				
			||||||
	return &pb.Receipt{Proced: true}, nil
 | 
						return &pb.Receipt{Proced: true}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user