feat: Add detailed logging for plot sessions and implement TabCoordinationDemo component for coordination status display

This commit is contained in:
Miguel 2025-08-15 19:41:01 +02:00
parent e4908396be
commit 609ae865de
4 changed files with 340 additions and 5 deletions

View File

@ -7160,8 +7160,273 @@
"trigger_variable": null,
"auto_started": true
}
},
{
"timestamp": "2025-08-15T19:21:26.768254",
"level": "info",
"event_type": "plot_session_created",
"message": "Plot session 'UR29' created and started",
"details": {
"session_id": "plot_1_1755278486768_11",
"variables": [
"UR29_Brix",
"UR29_ma",
"AUX Blink_1.0S",
"AUX Blink_1.6S"
],
"time_window": 36,
"trigger_variable": null,
"auto_started": true
}
},
{
"timestamp": "2025-08-15T19:21:50.617034",
"level": "info",
"event_type": "application_started",
"message": "Application initialization completed successfully",
"details": {}
},
{
"timestamp": "2025-08-15T19:21:50.682511",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: DAR",
"details": {
"dataset_id": "DAR",
"variables_count": 2,
"streaming_count": 2,
"prefix": "gateway_phoenix"
}
},
{
"timestamp": "2025-08-15T19:21:50.690509",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: Fast",
"details": {
"dataset_id": "Fast",
"variables_count": 2,
"streaming_count": 1,
"prefix": "fast"
}
},
{
"timestamp": "2025-08-15T19:21:50.700936",
"level": "info",
"event_type": "csv_recording_started",
"message": "CSV recording started: 2 datasets activated",
"details": {
"activated_datasets": 2,
"total_datasets": 3
}
},
{
"timestamp": "2025-08-15T19:22:31.628745",
"level": "info",
"event_type": "plot_session_created",
"message": "Plot session 'UR29' created and started",
"details": {
"session_id": "plot_1_1755278551628_2",
"variables": [
"UR29_Brix",
"UR29_ma",
"AUX Blink_1.0S",
"AUX Blink_1.6S"
],
"time_window": 36,
"trigger_variable": null,
"auto_started": true
}
},
{
"timestamp": "2025-08-15T19:22:55.516514",
"level": "info",
"event_type": "plot_session_created",
"message": "Plot session 'UR29' created and started",
"details": {
"session_id": "plot_1_1755278575515_3",
"variables": [
"UR29_Brix",
"UR29_ma",
"AUX Blink_1.0S",
"AUX Blink_1.6S"
],
"time_window": 36,
"trigger_variable": null,
"auto_started": true
}
},
{
"timestamp": "2025-08-15T19:25:04.730033",
"level": "info",
"event_type": "application_started",
"message": "Application initialization completed successfully",
"details": {}
},
{
"timestamp": "2025-08-15T19:25:04.779181",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: DAR",
"details": {
"dataset_id": "DAR",
"variables_count": 2,
"streaming_count": 2,
"prefix": "gateway_phoenix"
}
},
{
"timestamp": "2025-08-15T19:25:04.786391",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: Fast",
"details": {
"dataset_id": "Fast",
"variables_count": 2,
"streaming_count": 1,
"prefix": "fast"
}
},
{
"timestamp": "2025-08-15T19:25:04.795793",
"level": "info",
"event_type": "csv_recording_started",
"message": "CSV recording started: 2 datasets activated",
"details": {
"activated_datasets": 2,
"total_datasets": 3
}
},
{
"timestamp": "2025-08-15T19:28:14.264386",
"level": "info",
"event_type": "application_started",
"message": "Application initialization completed successfully",
"details": {}
},
{
"timestamp": "2025-08-15T19:28:14.328949",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: DAR",
"details": {
"dataset_id": "DAR",
"variables_count": 2,
"streaming_count": 2,
"prefix": "gateway_phoenix"
}
},
{
"timestamp": "2025-08-15T19:28:14.336952",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: Fast",
"details": {
"dataset_id": "Fast",
"variables_count": 2,
"streaming_count": 1,
"prefix": "fast"
}
},
{
"timestamp": "2025-08-15T19:28:14.346444",
"level": "info",
"event_type": "csv_recording_started",
"message": "CSV recording started: 2 datasets activated",
"details": {
"activated_datasets": 2,
"total_datasets": 3
}
},
{
"timestamp": "2025-08-15T19:33:01.899945",
"level": "info",
"event_type": "plot_session_created",
"message": "Plot session 'UR29' created and started",
"details": {
"session_id": "plot_1_1755279181898_2",
"variables": [
"UR29_Brix",
"UR29_ma",
"AUX Blink_1.0S",
"AUX Blink_1.6S"
],
"time_window": 36,
"trigger_variable": null,
"auto_started": true
}
},
{
"timestamp": "2025-08-15T19:35:23.574418",
"level": "info",
"event_type": "application_started",
"message": "Application initialization completed successfully",
"details": {}
},
{
"timestamp": "2025-08-15T19:35:23.621963",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: DAR",
"details": {
"dataset_id": "DAR",
"variables_count": 2,
"streaming_count": 2,
"prefix": "gateway_phoenix"
}
},
{
"timestamp": "2025-08-15T19:35:23.631481",
"level": "info",
"event_type": "dataset_activated",
"message": "Dataset activated: Fast",
"details": {
"dataset_id": "Fast",
"variables_count": 2,
"streaming_count": 1,
"prefix": "fast"
}
},
{
"timestamp": "2025-08-15T19:35:23.642043",
"level": "info",
"event_type": "csv_recording_started",
"message": "CSV recording started: 2 datasets activated",
"details": {
"activated_datasets": 2,
"total_datasets": 3
}
},
{
"timestamp": "2025-08-15T19:40:28.186263",
"level": "info",
"event_type": "config_reload",
"message": "Dataset configuration reloaded from files with CSV header validation",
"details": {
"datasets_count": 3,
"active_datasets_count": 3,
"csv_recording_active": true
}
},
{
"timestamp": "2025-08-15T19:40:55.642005",
"level": "info",
"event_type": "plot_session_created",
"message": "Plot session 'UR29' created and started",
"details": {
"session_id": "plot_1_1755279655640_2",
"variables": [
"UR29_Brix",
"UR29_ma",
"AUX Blink_1.0S",
"AUX Blink_1.6S"
],
"time_window": 36,
"trigger_variable": null,
"auto_started": true
}
}
],
"last_updated": "2025-08-15T19:06:20.284691",
"total_entries": 583
"last_updated": "2025-08-15T19:40:55.642005",
"total_entries": 605
}

View File

@ -0,0 +1,62 @@
import React from 'react'
import { Box, Text, Badge, VStack, HStack, useColorModeValue } from '@chakra-ui/react'
import { getTabCoordinator } from '../utils/TabCoordinator'
/**
* TabCoordinationDemo - Componente de demostración para mostrar el estado de coordinación
*/
export default function TabCoordinationDemo() {
const [coordinator, setCoordinator] = React.useState(null)
const [isLeader, setIsLeader] = React.useState(false)
const [tabInfo, setTabInfo] = React.useState({})
const bgColor = useColorModeValue('gray.50', 'gray.800')
React.useEffect(() => {
const coord = getTabCoordinator()
setCoordinator(coord)
setIsLeader(coord.getIsLeader())
setTabInfo({
tabId: coord.tabId,
isLeader: coord.getIsLeader()
})
// Subscribirse a cambios de liderazgo
const unsubscribe = coord.subscribe('demo', ({ type, data }) => {
if (type === 'leadership_change') {
setIsLeader(data.isLeader)
setTabInfo(prev => ({
...prev,
isLeader: data.isLeader
}))
}
})
return unsubscribe
}, [])
if (!coordinator) {
return <Text>Loading coordinator...</Text>
}
return (
<Box p={3} bg={bgColor} borderRadius="md" border="1px" borderColor="gray.200">
<VStack align="start" spacing={2}>
<HStack>
<Text fontWeight="bold">🔗 Tab Coordination Status</Text>
<Badge colorScheme={isLeader ? 'green' : 'blue'}>
{isLeader ? '👑 Leader' : '👥 Follower'}
</Badge>
</HStack>
<Text fontSize="sm" color="gray.600">
Tab ID: <code>{tabInfo.tabId}</code>
</Text>
<Text fontSize="sm" color="gray.600">
Role: {isLeader ? 'Making real connections to backend' : 'Receiving data from leader tab'}
</Text>
<Text fontSize="xs" color="gray.500">
Only the leader tab creates actual HTTP connections. Other tabs receive data via BroadcastChannel.
</Text>
</VStack>
</Box>
)
}

View File

@ -148,6 +148,14 @@ export function useCoordinatedSSE(source, url, dependencies = []) {
return useCoordinatedConnection(
source,
useCallback((onData) => {
// Don't create EventSource if URL is null or undefined
if (!url) {
console.log(`Skipping SSE connection - URL is ${url}`)
return {
close: () => {} // Return mock connection with close method
}
}
console.log(`Creating SSE connection to ${url}`)
const eventSource = new EventSource(url)

View File

@ -3,11 +3,11 @@
"should_connect": true,
"should_stream": false,
"active_datasets": [
"Fast",
"DAR",
"Test",
"Fast"
"Test"
]
},
"auto_recovery_enabled": true,
"last_update": "2025-08-15T18:51:36.158179"
"last_update": "2025-08-15T19:35:23.650095"
}