增加单一源保护全局策略

This commit is contained in:
2026-06-15 00:14:40 +08:00
parent bffd4ecb98
commit b860ef37e8
12 changed files with 210 additions and 14 deletions
+1
View File
@@ -277,6 +277,7 @@ type RunnerPolicy struct {
FailoverPolicy map[string]any `json:"failoverPolicy,omitempty"`
HardStopPolicy map[string]any `json:"hardStopPolicy,omitempty"`
PriorityDemotePolicy map[string]any `json:"priorityDemotePolicy,omitempty"`
SingleSourcePolicy map[string]any `json:"singleSourcePolicy,omitempty"`
Metadata map[string]any `json:"metadata,omitempty"`
Status string `json:"status"`
CreatedAt time.Time `json:"createdAt"`
+17 -4
View File
@@ -11,7 +11,7 @@ import (
const runnerPolicyColumns = `
id::text, policy_key, name, COALESCE(description, ''), failover_policy,
hard_stop_policy, priority_demote_policy, metadata, status, created_at, updated_at`
hard_stop_policy, priority_demote_policy, single_source_policy, metadata, status, created_at, updated_at`
type RunnerPolicyInput struct {
PolicyKey string `json:"policyKey"`
@@ -20,6 +20,7 @@ type RunnerPolicyInput struct {
FailoverPolicy map[string]any `json:"failoverPolicy"`
HardStopPolicy map[string]any `json:"hardStopPolicy"`
PriorityDemotePolicy map[string]any `json:"priorityDemotePolicy"`
SingleSourcePolicy map[string]any `json:"singleSourcePolicy"`
Metadata map[string]any `json:"metadata"`
Status string `json:"status"`
}
@@ -50,23 +51,25 @@ func (s *Store) UpsertDefaultRunnerPolicy(ctx context.Context, input RunnerPolic
failoverPolicy, _ := json.Marshal(emptyObjectIfNil(input.FailoverPolicy))
hardStopPolicy, _ := json.Marshal(emptyObjectIfNil(input.HardStopPolicy))
priorityDemotePolicy, _ := json.Marshal(emptyObjectIfNil(input.PriorityDemotePolicy))
singleSourcePolicy, _ := json.Marshal(emptyObjectIfNil(input.SingleSourcePolicy))
metadata, _ := json.Marshal(emptyObjectIfNil(input.Metadata))
return scanRunnerPolicy(s.pool.QueryRow(ctx, `
INSERT INTO gateway_runner_policies (
policy_key, name, description, failover_policy, hard_stop_policy, priority_demote_policy, metadata, status
policy_key, name, description, failover_policy, hard_stop_policy, priority_demote_policy, single_source_policy, metadata, status
)
VALUES ($1, $2, NULLIF($3, ''), $4, $5, $6, $7, $8)
VALUES ($1, $2, NULLIF($3, ''), $4, $5, $6, $7, $8, $9)
ON CONFLICT (policy_key) DO UPDATE
SET name = EXCLUDED.name,
description = EXCLUDED.description,
failover_policy = EXCLUDED.failover_policy,
hard_stop_policy = EXCLUDED.hard_stop_policy,
priority_demote_policy = EXCLUDED.priority_demote_policy,
single_source_policy = EXCLUDED.single_source_policy,
metadata = EXCLUDED.metadata,
status = EXCLUDED.status,
updated_at = now()
RETURNING `+runnerPolicyColumns,
input.PolicyKey, input.Name, input.Description, failoverPolicy, hardStopPolicy, priorityDemotePolicy, metadata, input.Status,
input.PolicyKey, input.Name, input.Description, failoverPolicy, hardStopPolicy, priorityDemotePolicy, singleSourcePolicy, metadata, input.Status,
))
}
@@ -75,6 +78,7 @@ func scanRunnerPolicy(scanner runnerPolicyScanner) (RunnerPolicy, error) {
var failoverPolicy []byte
var hardStopPolicy []byte
var priorityDemotePolicy []byte
var singleSourcePolicy []byte
var metadata []byte
if err := scanner.Scan(
&item.ID,
@@ -84,6 +88,7 @@ func scanRunnerPolicy(scanner runnerPolicyScanner) (RunnerPolicy, error) {
&failoverPolicy,
&hardStopPolicy,
&priorityDemotePolicy,
&singleSourcePolicy,
&metadata,
&item.Status,
&item.CreatedAt,
@@ -94,6 +99,7 @@ func scanRunnerPolicy(scanner runnerPolicyScanner) (RunnerPolicy, error) {
item.FailoverPolicy = decodeObject(failoverPolicy)
item.HardStopPolicy = decodeObject(hardStopPolicy)
item.PriorityDemotePolicy = decodeObject(priorityDemotePolicy)
item.SingleSourcePolicy = decodeObject(singleSourcePolicy)
item.Metadata = decodeObject(metadata)
return item, nil
}
@@ -124,6 +130,7 @@ func defaultRunnerPolicy() RunnerPolicy {
FailoverPolicy: defaultRunnerFailoverPolicy(),
HardStopPolicy: defaultRunnerHardStopPolicy(),
PriorityDemotePolicy: defaultRunnerPriorityDemotePolicy(),
SingleSourcePolicy: defaultRunnerSingleSourcePolicy(),
Metadata: map[string]any{"source": "code-default"},
Status: "active",
CreatedAt: now,
@@ -141,6 +148,12 @@ func defaultRunnerPriorityDemotePolicy() map[string]any {
}
}
func defaultRunnerSingleSourcePolicy() map[string]any {
return map[string]any{
"enabled": true,
}
}
func defaultRunnerFailoverPolicy() map[string]any {
return map[string]any{
"enabled": true,