diff --git a/application_events.json b/application_events.json
index 0b073c2..023e394 100644
--- a/application_events.json
+++ b/application_events.json
@@ -18447,8 +18447,514 @@
"read_time_avg": 0.03063199520111084,
"csv_write_time_avg": 0.0
}
+ },
+ {
+ "timestamp": "2025-08-27T14:45:54.611177",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.021202087402344,
+ "points_saved": 20,
+ "points_rate": 1.9957685540681798,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02488781213760376,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:46:04.633274",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.02209734916687,
+ "points_saved": 20,
+ "points_rate": 1.995590274491056,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.025893700122833253,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:46:14.654865",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.02159070968628,
+ "points_saved": 20,
+ "points_rate": 1.9956911611516102,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.0258081316947937,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:46:24.677731",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.022866249084473,
+ "points_saved": 20,
+ "points_rate": 1.9954371836326636,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02811945676803589,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:46:34.703577",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.025846242904663,
+ "points_saved": 20,
+ "points_rate": 1.9948440775414935,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02674727439880371,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:46:44.727852",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.6% CPU",
+ "details": {
+ "duration": 10.023722410202026,
+ "points_saved": 20,
+ "points_rate": 1.9952667463779958,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.6,
+ "cpu_max": 0.6,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.026058709621429442,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:46:54.749475",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.0% CPU",
+ "details": {
+ "duration": 10.022175073623657,
+ "points_saved": 20,
+ "points_rate": 1.9955747981928558,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.0,
+ "cpu_max": 0.0,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.0281419038772583,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:47:04.770778",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.021302938461304,
+ "points_saved": 20,
+ "points_rate": 1.995748469317389,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02705467939376831,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:47:14.795986",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.025207996368408,
+ "points_saved": 20,
+ "points_rate": 1.9949710776319973,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.03037310838699341,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:47:24.818898",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.022911787033081,
+ "points_saved": 20,
+ "points_rate": 1.9954281175929887,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.028278648853302002,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:47:34.842175",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.0% CPU",
+ "details": {
+ "duration": 10.023277759552002,
+ "points_saved": 20,
+ "points_rate": 1.9953552600036812,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.0,
+ "cpu_max": 0.0,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.026952099800109864,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:47:44.864412",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.021728754043579,
+ "points_saved": 20,
+ "points_rate": 1.9956636714928426,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02594623565673828,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:47:54.886695",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.022790908813477,
+ "points_saved": 20,
+ "points_rate": 1.9954521831252738,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02918875217437744,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:48:04.909449",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.5% CPU",
+ "details": {
+ "duration": 10.022753715515137,
+ "points_saved": 20,
+ "points_rate": 1.9954595880212214,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.5,
+ "cpu_max": 0.5,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.025779426097869873,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:48:14.931798",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.021842241287231,
+ "points_saved": 20,
+ "points_rate": 1.9956410726169191,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02666689157485962,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:48:24.962713",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.03142237663269,
+ "points_saved": 20,
+ "points_rate": 1.9937352101321373,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02565774917602539,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:48:34.984508",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.5% CPU",
+ "details": {
+ "duration": 10.021795272827148,
+ "points_saved": 20,
+ "points_rate": 1.9956504254509682,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.5,
+ "cpu_max": 0.5,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.02610586881637573,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:48:45.011512",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 21 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.027003526687622,
+ "points_saved": 21,
+ "points_rate": 2.0943445311559854,
+ "variables_saved": 84,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.026610397157214936,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:48:55.039493",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.027981042861938,
+ "points_saved": 20,
+ "points_rate": 1.9944194065101757,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.024284172058105468,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:49:05.062227",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.022226572036743,
+ "points_saved": 20,
+ "points_rate": 1.9955645440906797,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.029187917709350586,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:49:15.084325",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.3% CPU",
+ "details": {
+ "duration": 10.022605180740356,
+ "points_saved": 20,
+ "points_rate": 1.9954891606857277,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.3,
+ "cpu_max": 0.3,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.0247170090675354,
+ "csv_write_time_avg": 0.0
+ }
+ },
+ {
+ "timestamp": "2025-08-27T14:49:25.108902",
+ "level": "info",
+ "event_type": "performance_report",
+ "message": "Performance report: 20 points saved, 0 lost, 0.2% CPU",
+ "details": {
+ "duration": 10.024576902389526,
+ "points_saved": 20,
+ "points_rate": 1.995096670387422,
+ "variables_saved": 80,
+ "udp_points_sent": 0,
+ "points_lost": 0,
+ "cpu_average": 0.2,
+ "cpu_max": 0.2,
+ "delay_average": 0.0,
+ "delay_max": 0.0,
+ "read_errors": 0,
+ "csv_errors": 0,
+ "udp_errors": 0,
+ "read_time_avg": 0.026402544975280762,
+ "csv_write_time_avg": 0.0
+ }
}
],
- "last_updated": "2025-08-27T14:45:44.589975",
- "total_entries": 839
+ "last_updated": "2025-08-27T14:49:25.108902",
+ "total_entries": 861
}
\ No newline at end of file
diff --git a/frontend/src/components/rjsf/widgets.jsx b/frontend/src/components/rjsf/widgets.jsx
index 1db8dc8..9dc2312 100644
--- a/frontend/src/components/rjsf/widgets.jsx
+++ b/frontend/src/components/rjsf/widgets.jsx
@@ -132,62 +132,79 @@ export const SelectWidget = ({ id, required, readonly, disabled, label, value, o
}
export const CheckboxWidget = ({ id, label, value, required, disabled, readonly, onChange, rawErrors = [] }) => (
- 0}>
- onChange(e.target.checked)}
- colorScheme="blue"
- alignItems="center"
- sx={{
- '& .chakra-checkbox__control': {
- alignSelf: 'flex-start',
- mt: '2px' // Small offset to align with text baseline
- },
- '& .chakra-checkbox__label': {
- fontSize: 'sm',
- lineHeight: '1.3',
- overflow: 'hidden',
- textOverflow: 'ellipsis',
- display: '-webkit-box',
- WebkitLineClamp: 1, // Force single line
- WebkitBoxOrient: 'vertical',
- wordBreak: 'break-word'
- }
- }}
- >
- {label}
-
- {rawErrors.length > 0 && (
- {rawErrors[0]}
- )}
-
-)
-
-export const SwitchWidget = ({ id, label, value, required, disabled, readonly, onChange, rawErrors = [] }) => (
0}
minH="40px" // Standard height to match other inputs
position="relative"
+ display="flex"
+ flexDirection="column"
+ justifyContent="flex-end" // Align to bottom of container
+ alignItems="center" // Center horizontally
>
+ {label}
+
+ onChange(e.target.checked)}
+ colorScheme="blue"
+ order={2} // Checkbox second
+ alignSelf="center" // Ensure checkbox is centered
+ sx={{
+ '& .chakra-checkbox__control': {
+ alignSelf: 'center'
+ }
+ }}
+ />
+ {rawErrors.length > 0 && (
+
+ {rawErrors[0]}
+
+ )}
+
+)
+
+export const SwitchWidget = ({ id, label, value, required, disabled, readonly, onChange, rawErrors = [] }) => (
+ 0}
+ minH="40px" // Standard height to match other inputs
+ position="relative"
+ display="flex"
+ flexDirection="column"
+ justifyContent="flex-end" // Align to bottom of container
+ alignItems="center" // Center horizontally
+ >
+
{label}
@@ -196,10 +213,11 @@ export const SwitchWidget = ({ id, label, value, required, disabled, readonly, o
isChecked={!!value}
onChange={(e) => onChange(e.target.checked)}
colorScheme="blue"
- flexShrink={0} // Prevent switch from shrinking
+ order={2} // Switch second
+ alignSelf="center" // Ensure switch is centered
/>
{rawErrors.length > 0 && (
-
+
{rawErrors[0]}
)}