-- Add upstream error events list (JSONB) to ops_error_logs for per-request correlation.
--
-- This is intentionally idempotent.
ALTERTABLEops_error_logs
ADDCOLUMNIFNOTEXISTSupstream_errorsJSONB;
COMMENTONCOLUMNops_error_logs.upstream_errorsIS
'Sanitized upstream error events list (JSON array), correlated per gateway request (request_id/client_request_id); used for per-request upstream debugging.';
invalidEmail:'Please enter a valid email address',
optional:'optional',
optional:'optional',
selectOption:'Select an option',
selectOption:'Select an option',
searchPlaceholder:'Search...',
searchPlaceholder:'Search...',
noOptionsFound:'No options found',
noOptionsFound:'No options found',
noGroupsAvailable:'No groups available',
noGroupsAvailable:'No groups available',
unknownError:'Unknown error occurred',
unknownError:'Unknown error occurred',
...
@@ -178,6 +181,7 @@ export default {
...
@@ -178,6 +181,7 @@ export default {
accounts:'Accounts',
accounts:'Accounts',
proxies:'Proxies',
proxies:'Proxies',
redeemCodes:'Redeem Codes',
redeemCodes:'Redeem Codes',
ops:'Ops',
promoCodes:'Promo Codes',
promoCodes:'Promo Codes',
settings:'Settings',
settings:'Settings',
myAccount:'My Account',
myAccount:'My Account',
...
@@ -364,6 +368,12 @@ export default {
...
@@ -364,6 +368,12 @@ export default {
note:'Make sure the config directory exists. macOS/Linux users can run mkdir -p ~/.codex to create it.',
note:'Make sure the config directory exists. macOS/Linux users can run mkdir -p ~/.codex to create it.',
noteWindows:'Press Win+R and enter %userprofile%\\.codex to open the config directory. Create it manually if it does not exist.',
noteWindows:'Press Win+R and enter %userprofile%\\.codex to open the config directory. Create it manually if it does not exist.',
},
},
cliTabs:{
claudeCode:'Claude Code',
geminiCli:'Gemini CLI',
codexCli:'Codex CLI',
opencode:'OpenCode',
},
antigravity:{
antigravity:{
description:'Configure API access for Antigravity group. Select the configuration method based on your client.',
description:'Configure API access for Antigravity group. Select the configuration method based on your client.',
claudeCode:'Claude Code',
claudeCode:'Claude Code',
...
@@ -376,6 +386,11 @@ export default {
...
@@ -376,6 +386,11 @@ export default {
modelComment:'If you have Gemini 3 access, you can use: gemini-3-pro-preview',
modelComment:'If you have Gemini 3 access, you can use: gemini-3-pro-preview',
note:'These environment variables will be active in the current terminal session. For permanent configuration, add them to ~/.bashrc, ~/.zshrc, or the appropriate configuration file.',
note:'These environment variables will be active in the current terminal session. For permanent configuration, add them to ~/.bashrc, ~/.zshrc, or the appropriate configuration file.',
},
},
opencode:{
title:'OpenCode Example',
subtitle:'opencode.json',
hint:'This is a group configuration example. Adjust model and options as needed.',
},
},
},
customKeyLabel:'Custom Key',
customKeyLabel:'Custom Key',
customKeyPlaceholder:'Enter your custom key (min 16 chars)',
customKeyPlaceholder:'Enter your custom key (min 16 chars)',
...
@@ -1826,6 +1841,524 @@ export default {
...
@@ -1826,6 +1841,524 @@ export default {
ipAddress:'IP'
ipAddress:'IP'
},
},
// Ops Monitoring
ops:{
title:'Ops Monitoring',
description:'Operational monitoring and troubleshooting',
// Dashboard
systemHealth:'System Health',
overview:'Overview',
noSystemMetrics:'No system metrics collected yet.',
collectedAt:'Collected at:',
window:'window',
cpu:'CPU',
memory:'Memory',
db:'DB',
redis:'Redis',
goroutines:'Goroutines',
jobs:'Jobs',
jobsHelp:'Click “Details” to view job heartbeats and recent errors',
reportHint:'Schedules use cron syntax; leave empty to use defaults.',
validation:{
title:'Please fix the following issues',
invalid:'Invalid email notification config',
alertRecipientsRequired:'Alert emails are enabled but no recipients are configured',
reportRecipientsRequired:'Report emails are enabled but no recipients are configured',
invalidRecipients:'One or more recipient emails are invalid',
rateLimitRange:'Rate limit per hour must be a number ≥ 0',
batchWindowRange:'Batch window must be between 0 and 86400 seconds',
cronRequired:'A cron expression is required when schedule is enabled',
cronFormat:'Cron expression format looks invalid (expected at least 5 parts)',
digestMinCountRange:'Min errors for digest must be a number ≥ 0',
accountHealthThresholdRange:'Account health threshold must be between 0 and 100'
}
},
concurrency:{
title:'Concurrency / Queue',
byPlatform:'By Platform',
byGroup:'By Group',
byAccount:'By Account',
totalRows:'{count} rows',
disabledHint:'Realtime monitoring is disabled in settings.',
empty:'No data',
queued:'Queue {count}',
rateLimited:'Rate-limited {count}',
errorAccounts:'Errors {count}',
loadFailed:'Failed to load concurrency data'
},
realtime:{
title:'Realtime',
connected:'Realtime connected',
connecting:'Realtime connecting',
reconnecting:'Realtime reconnecting',
offline:'Realtime offline',
closed:'Realtime closed',
reconnectIn:'retry in {seconds}s'
},
queryMode:{
auto:'Auto',
raw:'Raw',
preagg:'Preagg'
},
accountAvailability:{
available:'Available',
unavailable:'Unavailable',
accountError:'Error'
},
tooltips:{
throughputTrend:'Requests/QPS + Tokens/TPS in the selected window.',
latencyHistogram:'Latency distribution (duration_ms) for successful requests.',
errorTrend:'Error counts over time (SLA scope excludes business limits; upstream excludes 429/529).',
errorDistribution:'Error distribution by status code.',
goroutines:
'Number of Go runtime goroutines (lightweight threads). There is no absolute “safe” number—use your historical baseline. Heuristic: <2k is common; 2k–8k watch; >8k plus rising queue/latency often suggests blocking/leaks.',
cpu:'CPU usage percentage, showing system processor load.',
memory:'Memory usage, including used and total available memory.',
db:'Database connection pool status, including active, idle, and waiting connections.',
redis:'Redis connection pool status, showing active and idle connections.',
jobs:'Background job execution status, including last run time, success time, and error information.',
qps:'Queries Per Second (QPS) and Tokens Per Second (TPS), real-time system throughput.',
tokens:'Total number of tokens processed in the current time window.',