50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
|
|
package tools
|
||
|
|
|
||
|
|
import "time"
|
||
|
|
|
||
|
|
// BehaviorSeverity qualifies the gravity of a peer misbehavior.
|
||
|
|
type BehaviorSeverity int
|
||
|
|
|
||
|
|
const (
|
||
|
|
// BehaviorWarn: minor inconsistency — slight trust penalty.
|
||
|
|
BehaviorWarn BehaviorSeverity = iota
|
||
|
|
// BehaviorFraud: deliberate data manipulation (e.g. fake peerless Ref,
|
||
|
|
// invalid booking) — significant trust penalty.
|
||
|
|
BehaviorFraud
|
||
|
|
// BehaviorCritical: severe abuse (secret exfiltration, data corruption,
|
||
|
|
// system-level attack) — heavy penalty, near-immediate blacklist.
|
||
|
|
BehaviorCritical
|
||
|
|
)
|
||
|
|
|
||
|
|
// scorePenalties maps each severity to a trust-score deduction (out of 100).
|
||
|
|
var scorePenalties = map[BehaviorSeverity]float64{
|
||
|
|
BehaviorWarn: 5,
|
||
|
|
BehaviorFraud: 20,
|
||
|
|
BehaviorCritical: 40,
|
||
|
|
}
|
||
|
|
|
||
|
|
// Penalty returns the trust-score deduction for this severity.
|
||
|
|
func (s BehaviorSeverity) Penalty() float64 {
|
||
|
|
if p, ok := scorePenalties[s]; ok {
|
||
|
|
return p
|
||
|
|
}
|
||
|
|
return 5
|
||
|
|
}
|
||
|
|
|
||
|
|
// PeerBehaviorReport is the payload carried by PEER_BEHAVIOR_EVENT.
|
||
|
|
// Any trusted service can emit it; oc-discovery is the sole consumer.
|
||
|
|
type PeerBehaviorReport struct {
|
||
|
|
// ReporterApp identifies the emitting service (e.g. "oc-scheduler", "oc-datacenter").
|
||
|
|
ReporterApp string `json:"reporter_app"`
|
||
|
|
// TargetPeerID is the MongoDB DID (_id) of the offending peer.
|
||
|
|
TargetPeerID string `json:"target_peer_id"`
|
||
|
|
// Severity drives how much the trust score drops.
|
||
|
|
Severity BehaviorSeverity `json:"severity"`
|
||
|
|
// Reason is a human-readable description shown in the blacklist warning.
|
||
|
|
Reason string `json:"reason"`
|
||
|
|
// Evidence is an optional reference (booking ID, resource Ref, …).
|
||
|
|
Evidence string `json:"evidence,omitempty"`
|
||
|
|
// At is the timestamp of the observed misbehavior.
|
||
|
|
At time.Time `json:"at"`
|
||
|
|
}
|