Browse Source

调整目录结构

gitlink
Sydonian 1 year ago
parent
commit
05d348e3f2
23 changed files with 16 additions and 231 deletions
  1. +0
    -0
      agent/internal/grpc/io.go
  2. +0
    -0
      agent/internal/grpc/service.go
  3. +0
    -0
      agent/internal/mq/agent.go
  4. +0
    -0
      agent/internal/mq/cache.go
  5. +0
    -0
      agent/internal/mq/io.go
  6. +0
    -0
      agent/internal/mq/object.go
  7. +0
    -0
      agent/internal/mq/service.go
  8. +0
    -0
      agent/internal/mq/storage.go
  9. +2
    -61
      agent/main.go
  10. +0
    -74
      common/utils/config.go
  11. +0
    -82
      common/utils/ping.go
  12. +1
    -1
      coordinator/internal/mq/agent.go
  13. +1
    -1
      coordinator/internal/mq/bucket.go
  14. +1
    -1
      coordinator/internal/mq/cache.go
  15. +1
    -1
      coordinator/internal/mq/node.go
  16. +1
    -1
      coordinator/internal/mq/object.go
  17. +1
    -1
      coordinator/internal/mq/package.go
  18. +1
    -1
      coordinator/internal/mq/service.go
  19. +1
    -1
      coordinator/internal/mq/storage.go
  20. +2
    -2
      coordinator/main.go
  21. +1
    -1
      scanner/internal/mq/event.go
  22. +1
    -1
      scanner/internal/mq/service.go
  23. +2
    -2
      scanner/main.go

agent/internal/services/grpc/io.go → agent/internal/grpc/io.go View File


agent/internal/services/grpc/service.go → agent/internal/grpc/service.go View File


agent/internal/services/mq/agent.go → agent/internal/mq/agent.go View File


agent/internal/services/mq/cache.go → agent/internal/mq/cache.go View File


agent/internal/services/mq/io.go → agent/internal/mq/io.go View File


agent/internal/services/mq/object.go → agent/internal/mq/object.go View File


agent/internal/services/mq/service.go → agent/internal/mq/service.go View File


agent/internal/services/mq/storage.go → agent/internal/mq/storage.go View File


+ 2
- 61
agent/main.go View File

@@ -5,7 +5,6 @@ import (
"net"
"os"
"sync"
"time"

log "gitlink.org.cn/cloudream/common/pkgs/logger"
"gitlink.org.cn/cloudream/storage/agent/internal/config"
@@ -20,14 +19,10 @@ import (

"google.golang.org/grpc"

"gitlink.org.cn/cloudream/storage/common/consts"
"gitlink.org.cn/cloudream/storage/common/utils"

agtmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/agent"
coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"

grpcsvc "gitlink.org.cn/cloudream/storage/agent/internal/services/grpc"
cmdsvc "gitlink.org.cn/cloudream/storage/agent/internal/services/mq"
grpcsvc "gitlink.org.cn/cloudream/storage/agent/internal/grpc"
cmdsvc "gitlink.org.cn/cloudream/storage/agent/internal/mq"
)

// TODO 此数据是否在运行时会发生变化?
@@ -136,57 +131,3 @@ func serveDistLock(svc *distlock.Service) {

log.Info("distlock stopped")
}

func reportStatus(wg *sync.WaitGroup) {
coorCli, err := coormq.NewClient(&config.Cfg().RabbitMQ)
if err != nil {
wg.Done()
log.Error("new coordinator client failed, err: %w", err)
return
}

// TODO 增加退出死循环的方法
for {
//挨个ping其他agent(AgentIpList),记录延迟到AgentDelay
// TODO AgentIP考虑放到配置文件里或者启动时从coor获取
ips := utils.GetAgentIps()
agentDelay := make([]int, len(ips))
waitG := sync.WaitGroup{}
waitG.Add(len(ips))
for i := 0; i < len(ips); i++ {
go func(i int, wg *sync.WaitGroup) {
connStatus, err := utils.GetConnStatus(ips[i])
if err != nil {
wg.Done()
log.Warnf("ping %s failed, err: %s", ips[i], err.Error())
return
}

log.Debugf("connection status to %s: %+v", ips[i], connStatus)

if connStatus.IsReachable {
agentDelay[i] = int(connStatus.Delay.Milliseconds()) + 1
} else {
agentDelay[i] = -1
}

wg.Done()
}(i, &waitG)
}
waitG.Wait()
//TODO: 查看本地IPFS daemon是否正常,记录到ipfsStatus
ipfsStatus := consts.IPFSStateOK
//TODO:访问自身资源目录(配置文件中获取路径),记录是否正常,记录到localDirStatus
localDirStatus := consts.StorageDirectoryStateOK

//发送心跳
// TODO 由于数据结构未定,暂时不发送真实数据
coorCli.AgentStatusReport(coormq.NewAgentStatusReportBody(config.Cfg().ID, []int64{}, []int{}, ipfsStatus, localDirStatus))

time.Sleep(time.Minute * 5)
}

coorCli.Close()

wg.Done()
}

+ 0
- 74
common/utils/config.go View File

@@ -1,74 +0,0 @@
package utils

import (
"fmt"
"regexp"
"strconv"

"github.com/beevik/etree"
)

type EcConfig struct {
ecid string `xml:"ecid"`
class string `xml:"class"`
n int `xml:"n"`
k int `xml:"k"`
w int `xml:"w"`
opt int `xml:"opt"`
}

func (r *EcConfig) GetK() int {
return r.k
}

func (r *EcConfig) GetN() int {
return r.n
}

func GetEcPolicy() *map[string]EcConfig {
doc := etree.NewDocument()
if err := doc.ReadFromFile("../confs/sysSetting.xml"); err != nil {
panic(err)
}
ecMap := make(map[string]EcConfig, 20)
root := doc.SelectElement("setting")
for _, attr := range root.SelectElements("attribute") {
if name := attr.SelectElement("name"); name.Text() == "ec.policy" {
for _, eci := range attr.SelectElements("value") {
tt := EcConfig{}
tt.ecid = eci.SelectElement("ecid").Text()
tt.class = eci.SelectElement("class").Text()
tt.n, _ = strconv.Atoi(eci.SelectElement("n").Text())
tt.k, _ = strconv.Atoi(eci.SelectElement("k").Text())
tt.w, _ = strconv.Atoi(eci.SelectElement("w").Text())
tt.opt, _ = strconv.Atoi(eci.SelectElement("opt").Text())
ecMap[tt.ecid] = tt
}
}
}
fmt.Println(ecMap)
return &ecMap
//
}

func GetAgentIps() []string {
doc := etree.NewDocument()
if err := doc.ReadFromFile("../confs/sysSetting.xml"); err != nil {
panic(err)
}
root := doc.SelectElement("setting")
var ips []string // 定义存储 IP 的字符串切片

for _, attr := range root.SelectElements("attribute") {
if name := attr.SelectElement("name"); name.Text() == "agents.addr" {
for _, ip := range attr.SelectElements("value") {
ipRegex := regexp.MustCompile(`\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b`)
match := ipRegex.FindString(ip.Text())
print(match)
ips = append(ips, match)
}
}
}

return ips
}

+ 0
- 82
common/utils/ping.go View File

@@ -1,82 +0,0 @@
package utils

import (
//"fmt"
"github.com/go-ping/ping"
//"net"
"io/ioutil"
"net/http"
"strings"
"time"
)

type ConnStatus struct {
Addr string
IsReachable bool
Delay time.Duration
TTL int
}

// 获取本地主机 IP 地址
func getLocalIP() string {
resp, err := http.Get("https://api.ipify.org")
if err != nil {
panic(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}

ip := strings.TrimSpace(string(body))
return ip
}

func GetConnStatus(remoteIP string) (*ConnStatus, error) {
// 本地主机 IP 地址
//localIP := getLocalIP()
//print("!@#@#!")
//print(localIP)
conn := ConnStatus{
Addr: remoteIP,
IsReachable: false,
}
pinger, err := ping.NewPinger(remoteIP)

if err != nil {
return nil, err
}
pinger.Count = 5 // 设置 ping 次数为 5
// pinger.Interval = 1 // 设置 ping 时间间隔为 1 秒
//pinger.Timeout = 2 // 设置 ping 超时时间为 2 秒
//pinger.SetPrivileged(true) // 设置使用特权模式以获取 TTL 值
pinger.OnRecv = func(pkt *ping.Packet) {
//fmt.Printf("%d bytes from %s: icmp_seq=%d time=%v ttl=%v (DUP!)\n",
// pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt, pkt.Ttl)
conn.TTL = pkt.Ttl
}

/*pinger.OnDuplicateRecv = func(pkt *ping.Packet) {
fmt.Printf("%d bytes from %s: icmp_seq=%d time=%v ttl=%v (DUP!)\n",
pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt, pkt.Ttl)
}*/

pinger.OnFinish = func(stats *ping.Statistics) {
//fmt.Printf("\n--- %s ping statistics ---\n", stats.Addr)
//fmt.Printf("%d packets transmitted, %d packets received, %v%% packet loss\n",
// stats.PacketsSent, stats.PacketsRecv, stats.PacketLoss)
//fmt.Printf("round-trip min/avg/max/stddev = %v/%v/%v/%v\n",
// stats.MinRtt, stats.AvgRtt, stats.MaxRtt, stats.StdDevRtt)
if stats.PacketLoss == 0.0 {
conn.IsReachable = true
}
conn.Delay = stats.AvgRtt
}
err = pinger.Run() // Blocks until finished.
if err != nil {
return nil, err
}
return &conn, nil
}

coordinator/internal/services/agent.go → coordinator/internal/mq/agent.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"

coordinator/internal/services/bucket.go → coordinator/internal/mq/bucket.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"database/sql"

coordinator/internal/services/cache.go → coordinator/internal/mq/cache.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"database/sql"

coordinator/internal/services/node.go → coordinator/internal/mq/node.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"gitlink.org.cn/cloudream/common/consts/errorcode"

coordinator/internal/services/object.go → coordinator/internal/mq/object.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"database/sql"

coordinator/internal/services/package.go → coordinator/internal/mq/package.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"database/sql"

coordinator/internal/services/service.go → coordinator/internal/mq/service.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
mydb "gitlink.org.cn/cloudream/storage/common/pkgs/db"

coordinator/internal/services/storage.go → coordinator/internal/mq/storage.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"database/sql"

+ 2
- 2
coordinator/main.go View File

@@ -9,7 +9,7 @@ import (
coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
scmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/scanner"
"gitlink.org.cn/cloudream/storage/coordinator/internal/config"
"gitlink.org.cn/cloudream/storage/coordinator/internal/services"
"gitlink.org.cn/cloudream/storage/coordinator/internal/mq"
)

func main() {
@@ -35,7 +35,7 @@ func main() {
logger.Fatalf("new scanner client failed, err: %s", err.Error())
}

coorSvr, err := coormq.NewServer(services.NewService(db, scanner), &config.Cfg().RabbitMQ)
coorSvr, err := coormq.NewServer(mq.NewService(db, scanner), &config.Cfg().RabbitMQ)
if err != nil {
logger.Fatalf("new coordinator server failed, err: %s", err.Error())
}


scanner/internal/services/event.go → scanner/internal/mq/event.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"gitlink.org.cn/cloudream/common/pkgs/logger"

scanner/internal/services/service.go → scanner/internal/mq/service.go View File

@@ -1,4 +1,4 @@
package services
package mq

import (
"gitlink.org.cn/cloudream/storage/scanner/internal/event"

+ 2
- 2
scanner/main.go View File

@@ -12,7 +12,7 @@ import (
scmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/scanner"
"gitlink.org.cn/cloudream/storage/scanner/internal/config"
"gitlink.org.cn/cloudream/storage/scanner/internal/event"
"gitlink.org.cn/cloudream/storage/scanner/internal/services"
"gitlink.org.cn/cloudream/storage/scanner/internal/mq"
"gitlink.org.cn/cloudream/storage/scanner/internal/tickevent"
)

@@ -49,7 +49,7 @@ func main() {
eventExecutor := event.NewExecutor(db, distlockSvc)
go serveEventExecutor(&eventExecutor, &wg)

agtSvr, err := scmq.NewServer(services.NewService(&eventExecutor), &config.Cfg().RabbitMQ)
agtSvr, err := scmq.NewServer(mq.NewService(&eventExecutor), &config.Cfg().RabbitMQ)
if err != nil {
logger.Fatalf("new agent server failed, err: %s", err.Error())
}


Loading…
Cancel
Save