You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

hubrequest.go 5.1 kB

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package models
  2. import (
  3. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  4. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  5. "gorm.io/gorm"
  6. "log"
  7. "time"
  8. )
  9. type HubRequest struct {
  10. RequestID int64 `gorm:"column:RequestID; primaryKey; type:bigint; autoIncrement" json:"RequestID"`
  11. SourceType string `gorm:"column:SourceType; type:varchar(255); not null" json:"sourceType"`
  12. SourceID cdssdk.HubID `gorm:"column:SourceID; type:bigint; not null" json:"sourceID"`
  13. TargetType string `gorm:"column:TargetType; type:varchar(255); not null" json:"targetType"`
  14. TargetID cdssdk.HubID `gorm:"column:TargetID; type:bigint; not null" json:"targetID"`
  15. DataTransferCount int64 `gorm:"column:DataTransferCount; type:bigint; not null" json:"dataTransferCount"`
  16. RequestCount int64 `gorm:"column:RequestCount; type:bigint; not null" json:"requestCount"`
  17. FailedRequestCount int64 `gorm:"column:FailedRequestCount; type:bigint; not null" json:"failedRequestCount"`
  18. AvgTransferCount int64 `gorm:"column:AvgTransferCount; type:bigint; not null" json:"avgTransferCount"`
  19. MaxTransferCount int64 `gorm:"column:MaxTransferCount; type:bigint; not null" json:"maxTransferCount"`
  20. MinTransferCount int64 `gorm:"column:MinTransferCount; type:bigint; not null" json:"minTransferCount"`
  21. StartTimestamp time.Time `gorm:"column:StartTimestamp; type:datatime; not null" json:"startTimestamp"`
  22. EndTimestamp time.Time `gorm:"column:EndTimestamp; type:datatime; not null" json:"endTimestamp"`
  23. }
  24. func (HubRequest) TableName() string { return "hubrequest" }
  25. type HubRequestRepository struct {
  26. repo *GormRepository
  27. }
  28. func NewHubRequestRepository(db *gorm.DB) *HubRequestRepository {
  29. return &HubRequestRepository{repo: NewGormRepository(db)}
  30. }
  31. func (r *HubRequestRepository) CreateHubRequest(request *HubRequest) error {
  32. return r.repo.Create(request)
  33. }
  34. func (r *HubRequestRepository) GetHubRequestByHubID(hubId int64) ([]HubRequest, error) {
  35. var hubRequests []HubRequest
  36. query := "SELECT * FROM hubrequest WHERE SourceHubID = ?"
  37. err := r.repo.db.Raw(query, hubId).Scan(&hubRequests).Error
  38. if err != nil {
  39. return nil, err
  40. }
  41. return hubRequests, nil
  42. }
  43. func (r *HubRequestRepository) GetAllHubRequests() ([]HubRequest, error) {
  44. var hubRequests []HubRequest
  45. err := r.repo.GetAll(&hubRequests)
  46. if err != nil {
  47. return nil, err
  48. }
  49. return hubRequests, nil
  50. }
  51. // ProcessHubTransfer mq推送各节点统计自身当天向外部各个节点传输的总数据量时的处理逻辑
  52. func ProcessHubTransfer(data stgmod.HubTransferStats) {
  53. repo := NewHubRequestRepository(DB)
  54. hubRequest := &HubRequest{
  55. SourceType: "hub",
  56. SourceID: cdssdk.HubID(data.Body.SourceHubID),
  57. TargetType: "hub",
  58. TargetID: cdssdk.HubID(data.Body.TargetHubID),
  59. DataTransferCount: data.Body.Send.TotalTransfer,
  60. RequestCount: data.Body.Send.RequestCount,
  61. FailedRequestCount: data.Body.Send.FailedRequestCount,
  62. AvgTransferCount: data.Body.Send.AvgTransfer,
  63. MaxTransferCount: data.Body.Send.MaxTransfer,
  64. MinTransferCount: data.Body.Send.MinTransfer,
  65. StartTimestamp: data.Body.StartTimestamp,
  66. EndTimestamp: data.Body.EndTimestamp,
  67. }
  68. err := repo.CreateHubRequest(hubRequest)
  69. if err != nil {
  70. log.Printf("Error update hubrequest: %v", err)
  71. }
  72. }
  73. // ProcessHubStorageTransfer 节点中心之间数据传输处理
  74. func ProcessHubStorageTransfer(data stgmod.HubStorageTransferStats) {
  75. repo := NewHubRequestRepository(DB)
  76. hubRequestSend := &HubRequest{
  77. SourceType: "hub",
  78. SourceID: cdssdk.HubID(data.Body.HubID),
  79. TargetType: "storage",
  80. TargetID: cdssdk.HubID(data.Body.StorageID),
  81. DataTransferCount: data.Body.Send.TotalTransfer,
  82. RequestCount: data.Body.Send.RequestCount,
  83. FailedRequestCount: data.Body.Send.FailedRequestCount,
  84. AvgTransferCount: data.Body.Send.AvgTransfer,
  85. MaxTransferCount: data.Body.Send.MaxTransfer,
  86. MinTransferCount: data.Body.Send.MinTransfer,
  87. StartTimestamp: data.Body.StartTimestamp,
  88. EndTimestamp: data.Body.EndTimestamp,
  89. }
  90. err := repo.CreateHubRequest(hubRequestSend)
  91. if err != nil {
  92. log.Printf("Error update hubrequest: %v", err)
  93. }
  94. hubRequestReceive := &HubRequest{
  95. SourceType: "storage",
  96. SourceID: cdssdk.HubID(data.Body.StorageID),
  97. TargetType: "hub",
  98. TargetID: cdssdk.HubID(data.Body.HubID),
  99. DataTransferCount: data.Body.Receive.TotalTransfer,
  100. RequestCount: data.Body.Receive.RequestCount,
  101. FailedRequestCount: data.Body.Receive.FailedRequestCount,
  102. AvgTransferCount: data.Body.Receive.AvgTransfer,
  103. MaxTransferCount: data.Body.Receive.MaxTransfer,
  104. MinTransferCount: data.Body.Receive.MinTransfer,
  105. StartTimestamp: data.Body.StartTimestamp,
  106. EndTimestamp: data.Body.EndTimestamp,
  107. }
  108. err = repo.CreateHubRequest(hubRequestReceive)
  109. if err != nil {
  110. log.Printf("Error update hubrequest: %v", err)
  111. }
  112. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。