mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-11 03:13:12 +00:00
fix(cliproxy): tighten session affinity status handling
This commit is contained in:
1 parent
4309db89c3
commit
20f3916d55
2 files changed
+21
-11
No files matched your search
@@ -99,6 +99,8 @@ const MIN_STALE_HIGH_ONLY_GEMINI_MINOR_VERSIONS = 3;
|
|||||||
const MIN_STALE_GUESSED_GEMINI_AVERAGE_VARIANTS_PER_MINOR = 2;
|
const MIN_STALE_GUESSED_GEMINI_AVERAGE_VARIANTS_PER_MINOR = 2;
|
||||||
const LEGACY_GEMINI_STALE_ALIAS_MIGRATION_VERSION = 16;
|
const LEGACY_GEMINI_STALE_ALIAS_MIGRATION_VERSION = 16;
|
||||||
const MAX_LEGACY_MANUAL_GEMINI_MINOR_VERSION = 2;
|
const MAX_LEGACY_MANUAL_GEMINI_MINOR_VERSION = 2;
|
||||||
|
const GO_DURATION_SEGMENT = String.raw`(?:\d+(?:\.\d+)?(?:ns|us|µs|μs|ms|s|m|h))`;
|
||||||
|
const GO_DURATION_PATTERN = new RegExp(`^${GO_DURATION_SEGMENT}+$`);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get provider configuration
|
* Get provider configuration
|
||||||
@@ -139,7 +141,7 @@ function getSessionAffinityEnabled(): boolean {
|
|||||||
|
|
||||||
function getSessionAffinityTtl(): string {
|
function getSessionAffinityTtl(): string {
|
||||||
const ttl = loadOrCreateUnifiedConfig().cliproxy?.routing?.session_affinity_ttl?.trim();
|
const ttl = loadOrCreateUnifiedConfig().cliproxy?.routing?.session_affinity_ttl?.trim();
|
||||||
return ttl || '1h';
|
return ttl && GO_DURATION_PATTERN.test(ttl) ? ttl : '1h';
|
||||||
}
|
}
|
||||||
|
|
||||||
function sanitizeYamlScalar(rawValue: string): string {
|
function sanitizeYamlScalar(rawValue: string): string {
|
||||||
|
|||||||
@@ -168,12 +168,20 @@ export function ProxyStatusWidget() {
|
|||||||
} = useCliproxySessionAffinity();
|
} = useCliproxySessionAffinity();
|
||||||
const updateSessionAffinity = useUpdateCliproxySessionAffinity();
|
const updateSessionAffinity = useUpdateCliproxySessionAffinity();
|
||||||
const isSavingRoutingConfig = updateRouting.isPending || updateSessionAffinity.isPending;
|
const isSavingRoutingConfig = updateRouting.isPending || updateSessionAffinity.isPending;
|
||||||
const routingConfigError =
|
const routingConfigError = routingError instanceof Error ? routingError : null;
|
||||||
routingError instanceof Error
|
const effectiveSessionAffinityState =
|
||||||
? routingError
|
sessionAffinityState ??
|
||||||
: sessionAffinityError instanceof Error
|
(sessionAffinityError instanceof Error
|
||||||
? sessionAffinityError
|
? {
|
||||||
: null;
|
source: 'unsupported' as const,
|
||||||
|
target: (routingState?.target ?? (isRemoteMode ? 'remote' : 'local')) as
|
||||||
|
| 'local'
|
||||||
|
| 'remote',
|
||||||
|
reachable: false,
|
||||||
|
manageable: false,
|
||||||
|
message: sessionAffinityError.message,
|
||||||
|
}
|
||||||
|
: undefined);
|
||||||
const startProxy = useStartProxy();
|
const startProxy = useStartProxy();
|
||||||
const stopProxy = useStopProxy();
|
const stopProxy = useStopProxy();
|
||||||
const restartProxy = useRestartProxy();
|
const restartProxy = useRestartProxy();
|
||||||
@@ -330,11 +338,11 @@ export function ProxyStatusWidget() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<RoutingGuidanceCard
|
<RoutingGuidanceCard
|
||||||
key={`remote:${routingState?.strategy ?? 'round-robin'}:${sessionAffinityState?.enabled ?? 'na'}:${sessionAffinityState?.ttl ?? 'na'}:${sessionAffinityState?.manageable ?? 'na'}`}
|
key={`remote:${routingState?.strategy ?? 'round-robin'}:${effectiveSessionAffinityState?.enabled ?? 'na'}:${effectiveSessionAffinityState?.ttl ?? 'na'}:${effectiveSessionAffinityState?.manageable ?? 'na'}`}
|
||||||
compact
|
compact
|
||||||
className="mt-3"
|
className="mt-3"
|
||||||
state={routingState}
|
state={routingState}
|
||||||
sessionAffinityState={sessionAffinityState}
|
sessionAffinityState={effectiveSessionAffinityState}
|
||||||
isLoading={routingLoading || sessionAffinityLoading}
|
isLoading={routingLoading || sessionAffinityLoading}
|
||||||
isSaving={isSavingRoutingConfig}
|
isSaving={isSavingRoutingConfig}
|
||||||
error={routingConfigError}
|
error={routingConfigError}
|
||||||
@@ -488,11 +496,11 @@ export function ProxyStatusWidget() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<RoutingGuidanceCard
|
<RoutingGuidanceCard
|
||||||
key={`local:${routingState?.strategy ?? 'round-robin'}:${sessionAffinityState?.enabled ?? 'na'}:${sessionAffinityState?.ttl ?? 'na'}:${sessionAffinityState?.manageable ?? 'na'}`}
|
key={`local:${routingState?.strategy ?? 'round-robin'}:${effectiveSessionAffinityState?.enabled ?? 'na'}:${effectiveSessionAffinityState?.ttl ?? 'na'}:${effectiveSessionAffinityState?.manageable ?? 'na'}`}
|
||||||
compact
|
compact
|
||||||
className="mt-3"
|
className="mt-3"
|
||||||
state={routingState}
|
state={routingState}
|
||||||
sessionAffinityState={sessionAffinityState}
|
sessionAffinityState={effectiveSessionAffinityState}
|
||||||
isLoading={routingLoading || sessionAffinityLoading}
|
isLoading={routingLoading || sessionAffinityLoading}
|
||||||
isSaving={isSavingRoutingConfig}
|
isSaving={isSavingRoutingConfig}
|
||||||
error={routingConfigError}
|
error={routingConfigError}
|
||||||
|
|||||||
Reference in new issue
Block a user