diff --git a/cameleer3-server-app/src/main/resources/application.yml b/cameleer3-server-app/src/main/resources/application.yml index 2d5f1375..e835877c 100644 --- a/cameleer3-server-app/src/main/resources/application.yml +++ b/cameleer3-server-app/src/main/resources/application.yml @@ -2,6 +2,10 @@ server: port: 8081 spring: + servlet: + multipart: + max-file-size: 200MB + max-request-size: 200MB datasource: url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/cameleer3?currentSchema=tenant_${cameleer.tenant.id}} username: ${SPRING_DATASOURCE_USERNAME:cameleer} diff --git a/ui/src/pages/AppsTab/AppsTab.tsx b/ui/src/pages/AppsTab/AppsTab.tsx index 637e949e..052694df 100644 --- a/ui/src/pages/AppsTab/AppsTab.tsx +++ b/ui/src/pages/AppsTab/AppsTab.tsx @@ -471,7 +471,7 @@ function ConfigSubTab({ app, environment }: { app: App; environment?: Environmen const { data: processorToRoute = {} } = useProcessorRouteMapping(app.slug); const isProd = environment?.production ?? false; const [editing, setEditing] = useState(false); - const [configTab, setConfigTab] = useState<'agent' | 'infra'>('agent'); + const [configTab, setConfigTab] = useState<'monitoring' | 'traces' | 'recording' | 'resources'>('monitoring'); const appRoutes: RouteSummary[] = useMemo(() => { if (!catalog) return []; @@ -664,78 +664,80 @@ function ConfigSubTab({ app, environment }: { app: App; environment?: Environmen )}
- - + + + +
- {configTab === 'agent' && ( - <> - {/* Observability Settings */} - Observability -
- Engine Level - setEngineLevel(e.target.value)} + options={[{ value: 'NONE', label: 'NONE' }, { value: 'MINIMAL', label: 'MINIMAL' }, { value: 'REGULAR', label: 'REGULAR' }, { value: 'COMPLETE', label: 'COMPLETE' }]} /> - Payload Capture - setPayloadCapture(e.target.value)} + options={[{ value: 'NONE', label: 'NONE' }, { value: 'INPUT', label: 'INPUT' }, { value: 'OUTPUT', label: 'OUTPUT' }, { value: 'BOTH', label: 'BOTH' }]} /> - Max Payload Size -
- setPayloadSize(e.target.value)} style={{ width: 70 }} /> - setAppLogLevel(e.target.value)} - options={['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'].map((l) => ({ value: l, label: l }))} /> - - Agent Log Level - setMetricsInterval(e.target.value)} style={{ width: 50 }} /> - s -
- - Sampling Rate - setSamplingRate(e.target.value)} style={{ width: 80 }} /> - - Compress Success -
- editing && setCompressSuccess(!compressSuccess)} disabled={!editing} /> - {compressSuccess ? 'Enabled' : 'Disabled'} -
- - Replay -
- editing && setReplayEnabled(!replayEnabled)} disabled={!editing} /> - {replayEnabled ? 'Enabled' : 'Disabled'} -
- - Route Control -
- editing && setRouteControlEnabled(!routeControlEnabled)} disabled={!editing} /> - {routeControlEnabled ? 'Enabled' : 'Disabled'} -
+ Max Payload Size +
+ setPayloadSize(e.target.value)} style={{ width: 70 }} /> + setAppLogLevel(e.target.value)} + options={['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'].map((l) => ({ value: l, label: l }))} /> + + Agent Log Level + setMetricsInterval(e.target.value)} style={{ width: 50 }} /> + s +
+ + Sampling Rate + setSamplingRate(e.target.value)} style={{ width: 80 }} /> + + Compress Success +
+ editing && setCompressSuccess(!compressSuccess)} disabled={!editing} /> + {compressSuccess ? 'Enabled' : 'Disabled'} +
+ + Replay +
+ editing && setReplayEnabled(!replayEnabled)} disabled={!editing} /> + {replayEnabled ? 'Enabled' : 'Disabled'} +
+ + Route Control +
+ editing && setRouteControlEnabled(!routeControlEnabled)} disabled={!editing} /> + {routeControlEnabled ? 'Enabled' : 'Disabled'} +
+
+ )} + + {configTab === 'traces' && ( + <> {tracedCount} traced · {tapCount} taps {tracedTapRows.length > 0 ? columns={tracedTapColumns} data={tracedTapRows} pageSize={20} flush /> :

No processor traces or taps configured.

} + + )} - {/* Route Recording */} - Route Recording + {configTab === 'recording' && ( + <> {recordingCount} of {routeRecordingRows.length} routes recording {routeRecordingRows.length > 0 ? columns={routeRecordingColumns} data={routeRecordingRows} pageSize={20} flush /> @@ -743,7 +745,7 @@ function ConfigSubTab({ app, environment }: { app: App; environment?: Environmen )} - {configTab === 'infra' && ( + {configTab === 'resources' && ( <> {/* Container Resources */} Container Resources