2020-12-21 17:26:07 +00:00
|
|
|
// Copyright (C) 2020 Storj Labs, Inc.
|
|
|
|
// See LICENSE for copying information.
|
|
|
|
|
|
|
|
package overlay
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"time"
|
|
|
|
|
2020-12-11 21:15:17 +00:00
|
|
|
"storj.io/common/pb"
|
2020-12-21 17:26:07 +00:00
|
|
|
"storj.io/common/storj"
|
|
|
|
)
|
|
|
|
|
|
|
|
// AuditHistoryDB implements the database for audit history.
|
|
|
|
//
|
|
|
|
// architecture: Database
|
|
|
|
type AuditHistoryDB interface {
|
|
|
|
// UpdateAuditHistory updates a node's audit history with an online or offline audit.
|
|
|
|
UpdateAuditHistory(ctx context.Context, nodeID storj.NodeID, auditTime time.Time, online bool, config AuditHistoryConfig) (*UpdateAuditHistoryResponse, error)
|
|
|
|
// GetAuditHistory gets a node's audit history.
|
|
|
|
GetAuditHistory(ctx context.Context, nodeID storj.NodeID) (*AuditHistory, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// AuditHistory represents a node's audit history for the most recent tracking period.
|
|
|
|
type AuditHistory struct {
|
|
|
|
Score float64
|
|
|
|
Windows []*AuditWindow
|
|
|
|
}
|
|
|
|
|
|
|
|
// UpdateAuditHistoryResponse contains information returned by UpdateAuditHistory.
|
|
|
|
type UpdateAuditHistoryResponse struct {
|
|
|
|
NewScore float64
|
|
|
|
TrackingPeriodFull bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// AuditWindow represents the number of online and total audits a node received for a specific time period.
|
|
|
|
type AuditWindow struct {
|
|
|
|
WindowStart time.Time
|
|
|
|
TotalCount int32
|
|
|
|
OnlineCount int32
|
|
|
|
}
|
|
|
|
|
|
|
|
// UpdateAuditHistory updates a node's audit history with an online or offline audit.
|
|
|
|
func (service *Service) UpdateAuditHistory(ctx context.Context, nodeID storj.NodeID, auditTime time.Time, online bool) (res *UpdateAuditHistoryResponse, err error) {
|
|
|
|
defer mon.Task()(&ctx)(&err)
|
|
|
|
|
|
|
|
return service.db.UpdateAuditHistory(ctx, nodeID, auditTime, online, service.config.AuditHistory)
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetAuditHistory gets a node's audit history.
|
|
|
|
func (service *Service) GetAuditHistory(ctx context.Context, nodeID storj.NodeID) (auditHistory *AuditHistory, err error) {
|
|
|
|
defer mon.Task()(&ctx)(&err)
|
|
|
|
|
|
|
|
return service.db.GetAuditHistory(ctx, nodeID)
|
|
|
|
}
|
2020-12-11 21:15:17 +00:00
|
|
|
|
|
|
|
// AuditHistoryToPB converts an overlay.AuditHistory to a pb.AuditHistory.
|
|
|
|
func AuditHistoryToPB(auditHistory *AuditHistory) (historyPB *pb.AuditHistory) {
|
|
|
|
if auditHistory == nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
historyPB = &pb.AuditHistory{
|
|
|
|
Score: auditHistory.Score,
|
|
|
|
Windows: make([]*pb.AuditWindow, len(auditHistory.Windows)),
|
|
|
|
}
|
|
|
|
for i, window := range auditHistory.Windows {
|
|
|
|
historyPB.Windows[i] = &pb.AuditWindow{
|
|
|
|
TotalCount: window.TotalCount,
|
|
|
|
OnlineCount: window.OnlineCount,
|
|
|
|
WindowStart: window.WindowStart,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return historyPB
|
|
|
|
}
|