diff --git a/etcdclient/etcdclient.go b/etcdclient/etcdclient.go index 49b204b..2a0fa00 100644 --- a/etcdclient/etcdclient.go +++ b/etcdclient/etcdclient.go @@ -77,7 +77,7 @@ func GetClient() (*clientv3.Client,error){ return nil,err } - log.Println("connect to etcd success") + //log.Println("connect to etcd success") return cli,nil } diff --git a/handle/handle.go b/handle/handle.go index 090b550..f10f88d 100644 --- a/handle/handle.go +++ b/handle/handle.go @@ -88,15 +88,6 @@ func InitLocalWorkSpace(conn *websocket.Conn,userName,projectName string) (error log.Println("切换本地工作目录至 "+projectPath) - err = filepath.Walk(projectPath,watchWalkfunc) - if err != nil { - log.Println(err) - return err - } - config.GobalWatchChannelMap[projectPath]=make(chan string,100) - log.Println(projectPath+"添加文件监控") - - if err := conn.WriteMessage(websocket.TextMessage, []byte(fmt.Sprint(projectPath))); err != nil { log.Println(err) return err @@ -112,6 +103,7 @@ func watchWalkfunc(filePath string, info os.FileInfo, err error) error { } if info.IsDir()==true{ + //config.GobalWatch.Remove(filePath) err = config.GobalWatch.Add(filePath) if err != nil { log.Println(err) @@ -512,12 +504,14 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir,cu } log.Println("引导节点文件备份成功") - //本地文件夹拷贝 - err = sh.Get(prog.Hash,fmt.Sprint((absoluteDir+"\\"+fileName))) - if err != nil { - log.Println(err) - return err - } + //文件不存在则进行本地文件夹拷贝 + if !fileExist(fmt.Sprint((absoluteDir+"\\"+fileName))) { + err = sh.Get(prog.Hash,fmt.Sprint((absoluteDir+"\\"+fileName))) + if err != nil { + log.Println(err) + return err + } + } //记录历史 filenameall := path.Base(fileName) @@ -777,31 +771,41 @@ func fileExist(path string) bool { 获取本地文件列表 */ func SubscriptionFileChange(conn *websocket.Conn, projectName string) error{ - //getLocalFileListDir := fmt.Sprint(config.LocalWorkSpaceDir+gobalLoginUserName+"\\"+projectName) - log.Println("切换文件列表:"+getLocalFileListDir) + getLocalFileListDir = fmt.Sprint(config.LocalWorkSpaceDir+gobalLoginUserName+"\\"+projectName) + projectPath := getLocalFileListDir + log.Println("切换文件列表:"+projectPath) keyPrefix := gobalLoginUserName+"\\"+projectName+"\\" + //添加监控 + err := filepath.Walk(projectPath,watchWalkfunc) + if err != nil { + log.Println(err) + return err + } + //初始化通道 + if config.GobalWatchChannelMap[projectPath] != nil { + close(config.GobalWatchChannelMap[projectPath]) + } + config.GobalWatchChannelMap[projectPath]=make(chan string,100) + log.Println(projectPath+"添加文件监控") + log.Println(config.GobalWatchChannelMap[projectPath]) + //定期校验缓存的本地文件状态 - go func() { - for true { - time.Sleep(time.Duration(5)*time.Minute) - dataMap,err := etcdclient.QueryWithPrefix(keyPrefix) - if err != nil { - log.Println(err) - continue - } - if dataMap!=nil && len(dataMap)>0{ - for k,_ := range dataMap { - if !fileExist(config.LocalWorkSpaceDir+k){ - err = etcdclient.DeleteWithPrefix(k) - if err != nil { - log.Println(err) - } - } + dataMapa,err := etcdclient.QueryWithPrefix(keyPrefix) + if err != nil { + log.Println(err) + } + if dataMapa!=nil && len(dataMapa)>0{ + for k,_ := range dataMapa { + if !fileExist(config.LocalWorkSpaceDir+k){ + err = etcdclient.DeleteWithPrefix(k) + if err != nil { + log.Println(err) } } } - }() + } + //优先etcd查询 dataMap,err := etcdclient.QueryWithPrefix(keyPrefix) @@ -860,8 +864,10 @@ func SubscriptionFileChange(conn *websocket.Conn, projectName string) error{ return err } - ch :=config.GobalWatchChannelMap[getLocalFileListDir] - for actionAndModifyFilePathStr :=range ch { + //ch :=config.GobalWatchChannelMap[getLocalFileListDir] + log.Println(config.GobalWatchChannelMap[getLocalFileListDir]) + for actionAndModifyFilePathStr :=range config.GobalWatchChannelMap[getLocalFileListDir] { + log.Println(actionAndModifyFilePathStr) actionAndModifyFilePath := strings.Split(actionAndModifyFilePathStr,";") if actionAndModifyFilePath[0]=="remove"{ k := strings.Replace(actionAndModifyFilePath[1],config.LocalWorkSpaceDir,"",1) @@ -948,6 +954,8 @@ func sendFileListFromEtcd(keyPrefix,projectName string,conn *websocket.Conn) err return err } return nil + }else{ + log.Println("未查询到数据,keyPrefix:"+keyPrefix+",projectName:"+projectName) } return nil } diff --git a/main.go b/main.go index 0846d35..c409291 100644 --- a/main.go +++ b/main.go @@ -55,7 +55,7 @@ func main() { select { case ev := <-config.GobalWatch.Events: { - //log.Println(ev.Op.String()+":"+ev.Name) + log.Println(ev.Op.String()+":"+ev.Name) if filepath.Ext(ev.Name)==".commit"{ continue } @@ -80,6 +80,7 @@ func main() { if ch==nil{ continue } + log.Println("chan-->"+("create"+";"+ev.Name)) ch <- ("create"+";"+ev.Name) } @@ -98,6 +99,8 @@ func main() { if ch==nil{ continue } + log.Println("chan-->"+("write"+";"+ev.Name)) + log.Println(ch) ch <- ("write"+";"+ev.Name) } } @@ -113,11 +116,11 @@ func main() { abs := strings.Replace(filePath,config.LocalWorkSpaceDir,"",1) param :=strings.Split(abs,"\\") key :=config.LocalWorkSpaceDir+param[0]+"\\"+param[1] - log.Println("chan-->"+key) ch :=config.GobalWatchChannelMap[key] if ch==nil{ continue } + log.Println("chan-->"+("remove"+";"+ev.Name)) ch <- ("remove"+";"+ev.Name) } }