|
- package etcdclient
-
- import (
- "context"
- "errors"
- "fmt"
- "fts/config"
- shell "github.com/ipfs/go-ipfs-api"
- "go.etcd.io/etcd/clientv3"
- "log"
- "os"
- "path/filepath"
- "strings"
- "time"
- )
-
-
-
-
- func main() {
- //deleteAndAdd("C:\\Users\\yuan_rh\\easycloud\\330031270501289985\\2020双11")
- //getFileHash()
- err :=filepath.Walk("C:\\Users\\yuan_rh\\easycloud\\330031270501289985\\2020双11",walkfunc)
- if err!=nil{
- log.Println(err)
- return
- }
-
- err = BatchAdd(gobalFileMap)
- if err!=nil{
- log.Println(err)
- return
- }
- }
-
- func getFileHash() error{
-
- cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{config.EtcdUrl},
- DialTimeout: 5 * time.Second,
- })
- if err != nil {
- // handle error!
- log.Printf("connect to etcd failed, err:%v\n", err)
- return err
- }
- log.Println("connect to etcd success")
- defer cli.Close()
-
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*60)
- resp, err := cli.Get(ctx, "key:330031270501289985:2020双11:file")
- cancel()
- if err != nil {
- fmt.Printf("get from etcd failed, err:%v\n", err)
- return err
- }
-
- for _, ev := range resp.Kvs {
- log.Print(string(ev.Value))
- }
-
- return nil
- }
-
- /**
- 获取客户端连接
- */
- func GetClient() (*clientv3.Client,error){
-
- cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{config.EtcdUrl},
- DialTimeout: 5 * time.Second,
- })
- if err != nil {
- // handle error!
- log.Printf("connect to etcd failed, err:%v\n", err)
- return nil,err
- }
-
- //log.Println("connect to etcd success")
- return cli,nil
- }
-
- /**
- 删除包含该前缀的所有Key
- */
- func DeleteWithPrefix(prefix string) error{
-
- if len(prefix)==0{
- return errors.New("参数prefix不能为空")
- }
-
- client,err := GetClient()
- if err!=nil{
- return err
- }
- defer client.Close()
-
- _, err = client.KV.Delete(context.Background(),prefix, clientv3.WithPrefix())
- if err!=nil{
- log.Println(err)
- return err
- }
-
- return err
- }
-
- /**
- 批量增加
- */
- func BatchAdd(dataMap map[string] string) error{
-
- if dataMap==nil || len(dataMap)==0{
- return errors.New("dataMap为空")
- }
-
- client,err := GetClient()
- if err!=nil{
- return err
- }
- defer client.Close()
-
- for k, v := range dataMap {
-
- _, err = client.KV.Put(context.Background(), k, v)
-
- if err!=nil{
- log.Println(err)
- return err
- }
- }
-
- return nil
- }
-
- /**
- 替换k,v
- */
- func ReplaceInto(k, v string) error{
-
- client,err := GetClient()
- if err!=nil{
- return err
- }
- defer client.Close()
-
- _,err =client.KV.Put(context.Background(), k, v)
- if err!=nil{
- log.Println(err)
- return err
- }
-
- return nil
- }
-
- /**
- 根据后缀查询
- */
- func QueryWithPrefix(prefix string) (map[string] string,error){
- client,err := GetClient()
- if err!=nil{
- log.Println(err)
- return nil,err
- }
- defer client.Close()
-
- resp,err :=client.KV.Get(context.Background(),prefix, clientv3.WithPrefix())
- if err!=nil{
- log.Println(err)
- return nil,err
- }
- var gobalFileMap = make(map[string] string)
- for _,v := range resp.Kvs{
- gobalFileMap[string(v.Key)]=string(v.Value)
- }
- return gobalFileMap,nil;
- }
-
-
- func deleteAndAdd(path string) error{
-
- cli, err := clientv3.New(clientv3.Config{
- Endpoints: []string{config.EtcdUrl},
- DialTimeout: 5 * time.Second,
- })
- if err != nil {
- // handle error!
- log.Printf("connect to etcd failed, err:%v\n", err)
- return err
- }
- log.Println("connect to etcd success")
- defer cli.Close()
-
- err =filepath.Walk(path,walkfunc)
- if err!=nil{
- log.Println(err)
- return err
- }
-
- //jsonByte,err :=json.Marshal(gobalFileMap)
- //jsonString :=string(jsonByte)
-
- //ctx, cancel := context.WithTimeout(context.Background(), time.Second*120)
-
- _,err =cli.Delete(context.Background(),"进入采购",clientv3.WithPrefix())
- log.Println(err)
- /*for k, v := range gobalFileMap {
- //log.Print(string(v))
- _, err = cli.Put(ctx, k, v)
-
- if err!=nil{
- log.Println(err)
- }
- }*/
- //_, err = cli.Put(ctx, "key:330031270501289985:2020双11:file", jsonString)
-
- //cancel()
- if err != nil {
- log.Printf("put to etcd failed, err:%v\n", err)
- return err
- }
- return nil
- }
-
- var gobalFileMap = make(map[string] string)
- var getLocalFileListDir string = "C:\\Users\\yuan_rh\\easycloud\\330031270501289985\\2020双11\\"
-
-
- func walkfunc(path string, info os.FileInfo, err error) error {
-
- if info.IsDir()==false{
-
- sh := shell.NewShell(config.GobalIpfsUrl)
- file,err :=os.Open(path)
-
- if err != nil{
- log.Println(err)
- return err
- }
-
- defer file.Close()
-
- hash,err :=sh.Add(file)
- if err != nil {
- log.Println(err)
- return err
- }
-
- dir :=strings.Replace(fmt.Sprint(path),fmt.Sprint(getLocalFileListDir),"",1)
-
- gobalFileMap[dir]=hash
-
- }
- return nil
- }
|