diff --git a/assets/python/data.py b/assets/python/data.py
index 652954a4743f7e871431f8652d986a2f03fbc511..7f4624fa8c2b8208b0d3d35d3e5ed21e3c67b403 100755
--- a/assets/python/data.py
+++ b/assets/python/data.py
@@ -195,7 +195,8 @@ def data_endpoint():
             # Convert timestamps to string for JSON serialization
             if 'start_time' in df.columns:
                 logger.info("Converting timestamps...")
-                df['start_time'] = pd.to_datetime(df['start_time']).astype(str)
+                # Most flexible approach:
+                df['start_time'] = pd.to_datetime(df['start_time'], format='mixed', errors='coerce').astype(str)
             
             # Convert to records and handle NaN values
             logger.info("Converting to records...")
diff --git a/assets/python/latency_viewer.log b/assets/python/latency_viewer.log
index eb5f4fec277653f03915035b79180cda004efdec..fed982ad91936780498ae81dfb8bd81636ca43bb 100644
--- a/assets/python/latency_viewer.log
+++ b/assets/python/latency_viewer.log
@@ -396,3 +396,692 @@ ValueError: time data "2025-03-18T00:00:06.900000+00:00" doesn't match format "%
 2025-03-18 20:18:51,826 - INFO - Converting to records...
 2025-03-18 20:18:51,855 - INFO - Created 2928 result records
 2025-03-18 20:18:51,857 - INFO - Returning response with status code 200 and 2928 records
+2025-03-18 20:26:22,802 - INFO - ================================================================================
+2025-03-18 20:26:22,803 - INFO - Data.py script starting
+2025-03-18 20:26:22,803 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:26:22,803 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:26:22,803 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:26:22,803 - INFO - User running script: Unknown
+2025-03-18 20:26:22,803 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:26:22,803 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:26:22,897 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:26:22,897 - INFO - Calling data_endpoint function...
+2025-03-18 20:26:22,897 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:26:22,897 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:26:22,897 - INFO - Getting canonical form for: 4B
+2025-03-18 20:26:22,897 - INFO - Canonical ID: 4B
+2025-03-18 20:26:22,897 - INFO - All variants: ['4B']
+2025-03-18 20:26:22,897 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:26:22,897 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:26:22,897 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:26:22,897 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:26:22,897 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:26:22,897 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:26:22,898 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:26:23,193 - INFO - Successfully converted data: 2955 records found
+2025-03-18 20:26:23,195 - INFO - Query returned: 2955 records
+2025-03-18 20:26:23,195 - INFO - Converting to DataFrame...
+2025-03-18 20:26:23,199 - INFO - DataFrame created with shape: (2955, 12)
+2025-03-18 20:26:23,199 - INFO - Processing DataFrame...
+2025-03-18 20:26:23,200 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:26:23,200 - INFO - Cleaning latency data...
+2025-03-18 20:26:23,202 - INFO - DataFrame shape after cleaning: (2955, 12)
+2025-03-18 20:26:23,206 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:26:23,207 - INFO - Converting timestamps...
+2025-03-18 20:26:23,224 - INFO - Converting to records...
+2025-03-18 20:26:23,251 - INFO - Created 2955 result records
+2025-03-18 20:26:23,252 - INFO - Returning response with status code 200 and 2955 records
+2025-03-18 20:27:13,679 - INFO - ================================================================================
+2025-03-18 20:27:13,679 - INFO - Data.py script starting
+2025-03-18 20:27:13,679 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:27:13,679 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:27:13,679 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:27:13,679 - INFO - User running script: Unknown
+2025-03-18 20:27:13,680 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:27:13,680 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:27:13,769 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:27:13,769 - INFO - Calling data_endpoint function...
+2025-03-18 20:27:13,769 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:27:13,769 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:27:13,769 - INFO - Getting canonical form for: 4B
+2025-03-18 20:27:13,769 - INFO - Canonical ID: 4B
+2025-03-18 20:27:13,769 - INFO - All variants: ['4B']
+2025-03-18 20:27:13,769 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:27:13,769 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:27:13,769 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:27:13,769 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:27:13,769 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:27:13,770 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:27:13,770 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:27:14,055 - INFO - Successfully converted data: 2958 records found
+2025-03-18 20:27:14,057 - INFO - Query returned: 2958 records
+2025-03-18 20:27:14,057 - INFO - Converting to DataFrame...
+2025-03-18 20:27:14,061 - INFO - DataFrame created with shape: (2958, 12)
+2025-03-18 20:27:14,061 - INFO - Processing DataFrame...
+2025-03-18 20:27:14,061 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:27:14,061 - INFO - Cleaning latency data...
+2025-03-18 20:27:14,064 - INFO - DataFrame shape after cleaning: (2958, 12)
+2025-03-18 20:27:14,067 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:27:14,069 - INFO - Converting timestamps...
+2025-03-18 20:27:14,086 - INFO - Converting to records...
+2025-03-18 20:27:14,112 - INFO - Created 2958 result records
+2025-03-18 20:27:14,113 - INFO - Returning response with status code 200 and 2958 records
+2025-03-18 20:28:56,989 - INFO - ================================================================================
+2025-03-18 20:28:56,989 - INFO - Data.py script starting
+2025-03-18 20:28:56,989 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:28:56,989 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:28:56,989 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:28:56,990 - INFO - User running script: Unknown
+2025-03-18 20:28:56,990 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:28:56,990 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:28:57,077 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:28:57,077 - INFO - Calling data_endpoint function...
+2025-03-18 20:28:57,077 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:28:57,077 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:28:57,077 - INFO - Getting canonical form for: 4B
+2025-03-18 20:28:57,077 - INFO - Canonical ID: 4B
+2025-03-18 20:28:57,077 - INFO - All variants: ['4B']
+2025-03-18 20:28:57,077 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:28:57,077 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:28:57,077 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:28:57,077 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:28:57,078 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:28:57,078 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:28:57,078 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:28:57,371 - INFO - Successfully converted data: 2966 records found
+2025-03-18 20:28:57,373 - INFO - Query returned: 2966 records
+2025-03-18 20:28:57,373 - INFO - Converting to DataFrame...
+2025-03-18 20:28:57,377 - INFO - DataFrame created with shape: (2966, 12)
+2025-03-18 20:28:57,377 - INFO - Processing DataFrame...
+2025-03-18 20:28:57,377 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:28:57,377 - INFO - Cleaning latency data...
+2025-03-18 20:28:57,379 - INFO - DataFrame shape after cleaning: (2966, 12)
+2025-03-18 20:28:57,383 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:28:57,384 - INFO - Converting timestamps...
+2025-03-18 20:28:57,401 - INFO - Converting to records...
+2025-03-18 20:28:57,427 - INFO - Created 2966 result records
+2025-03-18 20:28:57,428 - INFO - Returning response with status code 200 and 2966 records
+2025-03-18 20:29:11,045 - INFO - ================================================================================
+2025-03-18 20:29:11,045 - INFO - Data.py script starting
+2025-03-18 20:29:11,045 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:29:11,045 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:29:11,045 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:29:11,045 - INFO - User running script: Unknown
+2025-03-18 20:29:11,045 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:29:11,045 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:29:11,134 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:29:11,134 - INFO - Calling data_endpoint function...
+2025-03-18 20:29:11,135 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:29:11,135 - INFO - Filter parameters: satellite_id=G16, coverage=None, instrument=ABI
+2025-03-18 20:29:11,135 - INFO - Getting canonical form for: G16
+2025-03-18 20:29:11,135 - INFO - Canonical ID: G16
+2025-03-18 20:29:11,135 - INFO - All variants: ['G16', 'g16']
+2025-03-18 20:29:11,135 - INFO - Expanded satellite ID G16 to variants: ['G16', 'g16']
+2025-03-18 20:29:11,135 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['G16', 'g16'], 'instrument': 'ABI'}
+2025-03-18 20:29:11,135 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:29:11,135 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:29:11,135 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:29:11,135 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:29:11,135 - INFO - Filters: satellite_ids=['g16', 'G16'], coverage=None, instrument=['ABI']
+2025-03-18 20:29:15,970 - INFO - Successfully converted data: 280045 records found
+2025-03-18 20:29:16,046 - INFO - Query returned: 280045 records
+2025-03-18 20:29:16,046 - INFO - Converting to DataFrame...
+2025-03-18 20:29:16,437 - INFO - DataFrame created with shape: (280045, 12)
+2025-03-18 20:29:16,437 - INFO - Processing DataFrame...
+2025-03-18 20:29:16,438 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:29:16,438 - INFO - Cleaning latency data...
+2025-03-18 20:29:16,520 - INFO - DataFrame shape after cleaning: (280045, 12)
+2025-03-18 20:29:16,701 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:29:16,761 - INFO - Converting timestamps...
+2025-03-18 20:29:16,801 - ERROR - Error during data processing: time data "2025-03-18T00:01:16+00:00" doesn't match format "%Y-%m-%dT%H:%M:%S.%f%z", at position 15. You might want to try:
+    - passing `format` if your strings have a consistent format;
+    - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;
+    - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.
+2025-03-18 20:29:16,802 - ERROR - Traceback (most recent call last):
+  File "/var/www/html/web_internal/students/ygao/latency/assets/python/data.py", line 198, in data_endpoint
+    df['start_time'] = pd.to_datetime(df['start_time']).astype(str)
+  File "/home/ygao/miniconda/envs/py39env/lib/python3.9/site-packages/pandas/core/tools/datetimes.py", line 1063, in to_datetime
+    cache_array = _maybe_cache(arg, format, cache, convert_listlike)
+  File "/home/ygao/miniconda/envs/py39env/lib/python3.9/site-packages/pandas/core/tools/datetimes.py", line 247, in _maybe_cache
+    cache_dates = convert_listlike(unique_dates, format)
+  File "/home/ygao/miniconda/envs/py39env/lib/python3.9/site-packages/pandas/core/tools/datetimes.py", line 433, in _convert_listlike_datetimes
+    return _array_strptime_with_fallback(arg, name, utc, format, exact, errors)
+  File "/home/ygao/miniconda/envs/py39env/lib/python3.9/site-packages/pandas/core/tools/datetimes.py", line 467, in _array_strptime_with_fallback
+    result, tz_out = array_strptime(arg, fmt, exact=exact, errors=errors, utc=utc)
+  File "strptime.pyx", line 501, in pandas._libs.tslibs.strptime.array_strptime
+  File "strptime.pyx", line 451, in pandas._libs.tslibs.strptime.array_strptime
+  File "strptime.pyx", line 583, in pandas._libs.tslibs.strptime._parse_with_format
+ValueError: time data "2025-03-18T00:01:16+00:00" doesn't match format "%Y-%m-%dT%H:%M:%S.%f%z", at position 15. You might want to try:
+    - passing `format` if your strings have a consistent format;
+    - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;
+    - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.
+
+2025-03-18 20:29:16,969 - WARNING - Returning error with status code 500: {'message': 'Data processing error: time data "2025-03-18T00:01:16+00:00" doesn\'t match format "%Y-%m-%dT%H:%M:%S.%f%z", at position 15. You might want to try:\n    - passing `format` if your strings have a consistent format;\n    - passing `format=\'ISO8601\'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n    - passing `format=\'mixed\'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.', 'data': []}
+2025-03-18 20:29:16,969 - INFO - Returning response with status code 500 and 0 records
+2025-03-18 20:31:58,794 - INFO - ================================================================================
+2025-03-18 20:31:58,794 - INFO - Data.py script starting
+2025-03-18 20:31:58,794 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:31:58,794 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:31:58,794 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:31:58,794 - INFO - User running script: Unknown
+2025-03-18 20:31:58,794 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:31:58,794 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:31:58,885 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:31:58,885 - INFO - Calling data_endpoint function...
+2025-03-18 20:31:58,886 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:31:58,886 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:31:58,886 - INFO - Getting canonical form for: 4B
+2025-03-18 20:31:58,886 - INFO - Canonical ID: 4B
+2025-03-18 20:31:58,886 - INFO - All variants: ['4B']
+2025-03-18 20:31:58,886 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:31:58,886 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:31:58,886 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:31:58,886 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:31:58,886 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:31:58,886 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:31:58,886 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:31:59,181 - INFO - Successfully converted data: 2980 records found
+2025-03-18 20:31:59,182 - INFO - Query returned: 2980 records
+2025-03-18 20:31:59,182 - INFO - Converting to DataFrame...
+2025-03-18 20:31:59,186 - INFO - DataFrame created with shape: (2980, 12)
+2025-03-18 20:31:59,186 - INFO - Processing DataFrame...
+2025-03-18 20:31:59,187 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:31:59,187 - INFO - Cleaning latency data...
+2025-03-18 20:31:59,189 - INFO - DataFrame shape after cleaning: (2980, 12)
+2025-03-18 20:31:59,192 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:31:59,194 - INFO - Converting timestamps...
+2025-03-18 20:31:59,209 - INFO - Converting to records...
+2025-03-18 20:31:59,236 - INFO - Created 2980 result records
+2025-03-18 20:31:59,238 - INFO - Returning response with status code 200 and 2980 records
+2025-03-18 20:32:01,976 - INFO - ================================================================================
+2025-03-18 20:32:01,976 - INFO - Data.py script starting
+2025-03-18 20:32:01,976 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:32:01,976 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:32:01,976 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:32:01,976 - INFO - User running script: Unknown
+2025-03-18 20:32:01,976 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:32:01,976 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:32:02,070 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:32:02,071 - INFO - Calling data_endpoint function...
+2025-03-18 20:32:02,071 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:32:02,071 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:32:02,071 - INFO - Getting canonical form for: 4B
+2025-03-18 20:32:02,071 - INFO - Canonical ID: 4B
+2025-03-18 20:32:02,071 - INFO - All variants: ['4B']
+2025-03-18 20:32:02,071 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:32:02,071 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:32:02,071 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:32:02,071 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:32:02,071 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:32:02,071 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:32:02,071 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:32:02,373 - INFO - Successfully converted data: 2980 records found
+2025-03-18 20:32:02,374 - INFO - Query returned: 2980 records
+2025-03-18 20:32:02,374 - INFO - Converting to DataFrame...
+2025-03-18 20:32:02,378 - INFO - DataFrame created with shape: (2980, 12)
+2025-03-18 20:32:02,378 - INFO - Processing DataFrame...
+2025-03-18 20:32:02,378 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:32:02,378 - INFO - Cleaning latency data...
+2025-03-18 20:32:02,381 - INFO - DataFrame shape after cleaning: (2980, 12)
+2025-03-18 20:32:02,384 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:32:02,386 - INFO - Converting timestamps...
+2025-03-18 20:32:02,400 - INFO - Converting to records...
+2025-03-18 20:32:02,427 - INFO - Created 2980 result records
+2025-03-18 20:32:02,428 - INFO - Returning response with status code 200 and 2980 records
+2025-03-18 20:32:06,230 - INFO - ================================================================================
+2025-03-18 20:32:06,230 - INFO - Data.py script starting
+2025-03-18 20:32:06,230 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:32:06,230 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:32:06,230 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:32:06,230 - INFO - User running script: Unknown
+2025-03-18 20:32:06,230 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:32:06,230 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:32:06,320 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:32:06,320 - INFO - Calling data_endpoint function...
+2025-03-18 20:32:06,321 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:32:06,321 - INFO - Filter parameters: satellite_id=G16, coverage=None, instrument=ABI
+2025-03-18 20:32:06,321 - INFO - Getting canonical form for: G16
+2025-03-18 20:32:06,321 - INFO - Canonical ID: G16
+2025-03-18 20:32:06,321 - INFO - All variants: ['G16', 'g16']
+2025-03-18 20:32:06,321 - INFO - Expanded satellite ID G16 to variants: ['G16', 'g16']
+2025-03-18 20:32:06,321 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['G16', 'g16'], 'instrument': 'ABI'}
+2025-03-18 20:32:06,321 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:32:06,321 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:32:06,321 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:32:06,321 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:32:06,321 - INFO - Filters: satellite_ids=['g16', 'G16'], coverage=None, instrument=['ABI']
+2025-03-18 20:32:11,426 - INFO - Successfully converted data: 280815 records found
+2025-03-18 20:32:11,505 - INFO - Query returned: 280815 records
+2025-03-18 20:32:11,505 - INFO - Converting to DataFrame...
+2025-03-18 20:32:11,893 - INFO - DataFrame created with shape: (280815, 12)
+2025-03-18 20:32:11,893 - INFO - Processing DataFrame...
+2025-03-18 20:32:11,893 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:32:11,893 - INFO - Cleaning latency data...
+2025-03-18 20:32:11,978 - INFO - DataFrame shape after cleaning: (280815, 12)
+2025-03-18 20:32:12,162 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:32:12,225 - INFO - Converting timestamps...
+2025-03-18 20:32:13,524 - INFO - Converting to records...
+2025-03-18 20:32:16,223 - INFO - Created 280815 result records
+2025-03-18 20:32:16,397 - INFO - Returning response with status code 200 and 280815 records
+2025-03-18 20:34:55,006 - INFO - ================================================================================
+2025-03-18 20:34:55,006 - INFO - Data.py script starting
+2025-03-18 20:34:55,006 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:34:55,006 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:34:55,006 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:34:55,006 - INFO - User running script: Unknown
+2025-03-18 20:34:55,006 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:34:55,006 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:34:55,093 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:34:55,093 - INFO - Calling data_endpoint function...
+2025-03-18 20:34:55,093 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:34:55,093 - INFO - Filter parameters: satellite_id=g2, coverage=None, instrument=imager
+2025-03-18 20:34:55,093 - INFO - Getting canonical form for: g2
+2025-03-18 20:34:55,093 - INFO - Canonical ID: g2
+2025-03-18 20:34:55,093 - INFO - All variants: ['g2']
+2025-03-18 20:34:55,093 - INFO - Expanded satellite ID g2 to variants: ['g2']
+2025-03-18 20:34:55,093 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['g2'], 'instrument': 'imager'}
+2025-03-18 20:34:55,093 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:34:55,093 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:34:55,093 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:34:55,093 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:34:55,093 - INFO - Filters: satellite_ids=['g2'], coverage=None, instrument=['imager']
+2025-03-18 20:34:55,343 - INFO - Successfully converted data: 84 records found
+2025-03-18 20:34:55,343 - INFO - Query returned: 84 records
+2025-03-18 20:34:55,343 - INFO - Converting to DataFrame...
+2025-03-18 20:34:55,344 - INFO - DataFrame created with shape: (84, 12)
+2025-03-18 20:34:55,344 - INFO - Processing DataFrame...
+2025-03-18 20:34:55,344 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:34:55,344 - INFO - Cleaning latency data...
+2025-03-18 20:34:55,347 - INFO - DataFrame shape after cleaning: (84, 12)
+2025-03-18 20:34:55,349 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:34:55,350 - INFO - Converting timestamps...
+2025-03-18 20:34:55,351 - INFO - Converting to records...
+2025-03-18 20:34:55,355 - INFO - Created 84 result records
+2025-03-18 20:34:55,356 - INFO - Returning response with status code 200 and 84 records
+2025-03-18 20:35:01,533 - INFO - ================================================================================
+2025-03-18 20:35:01,533 - INFO - Data.py script starting
+2025-03-18 20:35:01,533 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:35:01,533 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:35:01,533 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:35:01,533 - INFO - User running script: Unknown
+2025-03-18 20:35:01,533 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:35:01,533 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:35:01,627 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:35:01,627 - INFO - Calling data_endpoint function...
+2025-03-18 20:35:01,627 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:35:01,627 - INFO - Filter parameters: satellite_id=NOAA-18, coverage=None, instrument=amsu
+2025-03-18 20:35:01,627 - INFO - Getting canonical form for: NOAA-18
+2025-03-18 20:35:01,628 - INFO - Canonical ID: NOAA-18
+2025-03-18 20:35:01,628 - INFO - All variants: ['NOAA-18']
+2025-03-18 20:35:01,628 - INFO - Expanded satellite ID NOAA-18 to variants: ['NOAA-18']
+2025-03-18 20:35:01,628 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['NOAA-18'], 'instrument': 'amsu'}
+2025-03-18 20:35:01,628 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:35:01,628 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:35:01,628 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:35:01,628 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:35:01,628 - INFO - Filters: satellite_ids=['NOAA-18'], coverage=None, instrument=['amsu']
+2025-03-18 20:35:01,872 - INFO - Successfully converted data: 9 records found
+2025-03-18 20:35:01,872 - INFO - Query returned: 9 records
+2025-03-18 20:35:01,872 - INFO - Converting to DataFrame...
+2025-03-18 20:35:01,873 - INFO - DataFrame created with shape: (9, 12)
+2025-03-18 20:35:01,873 - INFO - Processing DataFrame...
+2025-03-18 20:35:01,873 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:35:01,873 - INFO - Cleaning latency data...
+2025-03-18 20:35:01,875 - INFO - DataFrame shape after cleaning: (9, 12)
+2025-03-18 20:35:01,877 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:35:01,878 - INFO - Converting timestamps...
+2025-03-18 20:35:01,880 - INFO - Converting to records...
+2025-03-18 20:35:01,883 - INFO - Created 9 result records
+2025-03-18 20:35:01,884 - INFO - Returning response with status code 200 and 9 records
+2025-03-18 20:35:05,542 - INFO - ================================================================================
+2025-03-18 20:35:05,543 - INFO - Data.py script starting
+2025-03-18 20:35:05,543 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:35:05,543 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:35:05,543 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:35:05,543 - INFO - User running script: Unknown
+2025-03-18 20:35:05,543 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:35:05,543 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:35:05,632 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:35:05,632 - INFO - Calling data_endpoint function...
+2025-03-18 20:35:05,633 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:35:05,633 - INFO - Filter parameters: satellite_id=S3B, coverage=None, instrument=SLSTR
+2025-03-18 20:35:05,633 - INFO - Getting canonical form for: S3B
+2025-03-18 20:35:05,633 - INFO - Canonical ID: S3B
+2025-03-18 20:35:05,633 - INFO - All variants: ['S3B']
+2025-03-18 20:35:05,633 - INFO - Expanded satellite ID S3B to variants: ['S3B']
+2025-03-18 20:35:05,633 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['S3B'], 'instrument': 'SLSTR'}
+2025-03-18 20:35:05,633 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:35:05,633 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:35:05,633 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:35:05,633 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:35:05,633 - INFO - Filters: satellite_ids=['S3B'], coverage=None, instrument=['SLSTR']
+2025-03-18 20:35:05,876 - INFO - Successfully converted data: 91 records found
+2025-03-18 20:35:05,876 - INFO - Query returned: 91 records
+2025-03-18 20:35:05,876 - INFO - Converting to DataFrame...
+2025-03-18 20:35:05,877 - INFO - DataFrame created with shape: (91, 12)
+2025-03-18 20:35:05,877 - INFO - Processing DataFrame...
+2025-03-18 20:35:05,877 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:35:05,877 - INFO - Cleaning latency data...
+2025-03-18 20:35:05,880 - INFO - DataFrame shape after cleaning: (91, 12)
+2025-03-18 20:35:05,882 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:35:05,883 - INFO - Converting timestamps...
+2025-03-18 20:35:05,884 - INFO - Converting to records...
+2025-03-18 20:35:05,888 - INFO - Created 91 result records
+2025-03-18 20:35:05,888 - INFO - Returning response with status code 200 and 91 records
+2025-03-18 20:35:10,360 - INFO - ================================================================================
+2025-03-18 20:35:10,360 - INFO - Data.py script starting
+2025-03-18 20:35:10,360 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:35:10,360 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:35:10,360 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:35:10,360 - INFO - User running script: Unknown
+2025-03-18 20:35:10,360 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:35:10,360 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:35:10,454 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:35:10,454 - INFO - Calling data_endpoint function...
+2025-03-18 20:35:10,454 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:35:10,454 - INFO - Filter parameters: satellite_id=snpp, coverage=None, instrument=ATMS
+2025-03-18 20:35:10,454 - INFO - Getting canonical form for: snpp
+2025-03-18 20:35:10,454 - INFO - Canonical ID: snpp
+2025-03-18 20:35:10,454 - INFO - All variants: ['snpp']
+2025-03-18 20:35:10,454 - INFO - Expanded satellite ID snpp to variants: ['snpp']
+2025-03-18 20:35:10,454 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['snpp'], 'instrument': 'ATMS'}
+2025-03-18 20:35:10,454 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:35:10,454 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:35:10,454 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:35:10,455 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:35:10,455 - INFO - Filters: satellite_ids=['snpp'], coverage=None, instrument=['ATMS']
+2025-03-18 20:35:10,652 - INFO - Successfully converted data: 734 records found
+2025-03-18 20:35:10,653 - INFO - Query returned: 734 records
+2025-03-18 20:35:10,653 - INFO - Converting to DataFrame...
+2025-03-18 20:35:10,654 - INFO - DataFrame created with shape: (734, 12)
+2025-03-18 20:35:10,654 - INFO - Processing DataFrame...
+2025-03-18 20:35:10,655 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:35:10,655 - INFO - Cleaning latency data...
+2025-03-18 20:35:10,657 - INFO - DataFrame shape after cleaning: (734, 12)
+2025-03-18 20:35:10,659 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:35:10,660 - INFO - Converting timestamps...
+2025-03-18 20:35:10,665 - INFO - Converting to records...
+2025-03-18 20:35:10,674 - INFO - Created 734 result records
+2025-03-18 20:35:10,674 - INFO - Returning response with status code 200 and 734 records
+2025-03-18 20:35:26,917 - INFO - ================================================================================
+2025-03-18 20:35:26,917 - INFO - Data.py script starting
+2025-03-18 20:35:26,918 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:35:26,918 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:35:26,918 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:35:26,918 - INFO - User running script: Unknown
+2025-03-18 20:35:26,918 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:35:26,918 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:35:27,009 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:35:27,009 - INFO - Calling data_endpoint function...
+2025-03-18 20:35:27,009 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:35:27,009 - INFO - Filter parameters: satellite_id=M10, coverage=None, instrument=seviri
+2025-03-18 20:35:27,009 - INFO - Getting canonical form for: M10
+2025-03-18 20:35:27,009 - INFO - Canonical ID: M10
+2025-03-18 20:35:27,009 - INFO - All variants: ['M10']
+2025-03-18 20:35:27,009 - INFO - Expanded satellite ID M10 to variants: ['M10']
+2025-03-18 20:35:27,009 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['M10'], 'instrument': 'seviri'}
+2025-03-18 20:35:27,009 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:35:27,009 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:35:27,009 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:35:27,009 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:35:27,009 - INFO - Filters: satellite_ids=['M10'], coverage=None, instrument=['seviri']
+2025-03-18 20:35:27,538 - INFO - Successfully converted data: 18528 records found
+2025-03-18 20:35:27,543 - INFO - Query returned: 18528 records
+2025-03-18 20:35:27,543 - INFO - Converting to DataFrame...
+2025-03-18 20:35:27,564 - INFO - DataFrame created with shape: (18528, 12)
+2025-03-18 20:35:27,564 - INFO - Processing DataFrame...
+2025-03-18 20:35:27,564 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:35:27,564 - INFO - Cleaning latency data...
+2025-03-18 20:35:27,568 - INFO - DataFrame shape after cleaning: (18528, 12)
+2025-03-18 20:35:27,577 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:35:27,581 - INFO - Converting timestamps...
+2025-03-18 20:35:27,680 - INFO - Converting to records...
+2025-03-18 20:35:27,833 - INFO - Created 18528 result records
+2025-03-18 20:35:27,840 - INFO - Returning response with status code 200 and 18528 records
+2025-03-18 20:35:32,910 - INFO - ================================================================================
+2025-03-18 20:35:32,910 - INFO - Data.py script starting
+2025-03-18 20:35:32,910 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:35:32,910 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:35:32,910 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:35:32,910 - INFO - User running script: Unknown
+2025-03-18 20:35:32,910 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:35:32,910 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:35:33,003 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:35:33,003 - INFO - Calling data_endpoint function...
+2025-03-18 20:35:33,003 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:35:33,003 - INFO - Filter parameters: satellite_id=S3A, coverage=None, instrument=SLSTR
+2025-03-18 20:35:33,003 - INFO - Getting canonical form for: S3A
+2025-03-18 20:35:33,003 - INFO - Canonical ID: S3A
+2025-03-18 20:35:33,003 - INFO - All variants: ['S3A']
+2025-03-18 20:35:33,003 - INFO - Expanded satellite ID S3A to variants: ['S3A']
+2025-03-18 20:35:33,003 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['S3A'], 'instrument': 'SLSTR'}
+2025-03-18 20:35:33,003 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:35:33,003 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:35:33,003 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:35:33,003 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:35:33,003 - INFO - Filters: satellite_ids=['S3A'], coverage=None, instrument=['SLSTR']
+2025-03-18 20:35:33,274 - INFO - Successfully converted data: 351 records found
+2025-03-18 20:35:33,275 - INFO - Query returned: 351 records
+2025-03-18 20:35:33,275 - INFO - Converting to DataFrame...
+2025-03-18 20:35:33,276 - INFO - DataFrame created with shape: (351, 12)
+2025-03-18 20:35:33,276 - INFO - Processing DataFrame...
+2025-03-18 20:35:33,276 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:35:33,276 - INFO - Cleaning latency data...
+2025-03-18 20:35:33,278 - INFO - DataFrame shape after cleaning: (351, 12)
+2025-03-18 20:35:33,280 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:35:33,281 - INFO - Converting timestamps...
+2025-03-18 20:35:33,284 - INFO - Converting to records...
+2025-03-18 20:35:33,290 - INFO - Created 351 result records
+2025-03-18 20:35:33,290 - INFO - Returning response with status code 200 and 351 records
+2025-03-18 20:38:54,589 - INFO - ================================================================================
+2025-03-18 20:38:54,589 - INFO - Data.py script starting
+2025-03-18 20:38:54,589 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:38:54,589 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:38:54,589 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:38:54,589 - INFO - User running script: Unknown
+2025-03-18 20:38:54,589 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:38:54,589 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:38:54,675 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:38:54,675 - INFO - Calling data_endpoint function...
+2025-03-18 20:38:54,675 - INFO - Query parameters: start_date=2025-03-18, end_date=2025-03-18, start_hour=00:00, end_hour=23:59
+2025-03-18 20:38:54,675 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:38:54,676 - INFO - Getting canonical form for: 4B
+2025-03-18 20:38:54,676 - INFO - Canonical ID: 4B
+2025-03-18 20:38:54,676 - INFO - All variants: ['4B']
+2025-03-18 20:38:54,676 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:38:54,676 - INFO - Data request - Period: 2025-03-18T00:00:00 to 2025-03-18T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:38:54,676 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:38:54,676 - INFO - Querying satellite latency data from 2025-03-18T00:00:00 to 2025-03-18T23:59:59
+2025-03-18 20:38:54,676 - INFO - Converted timestamps: 2025-03-18 00:00:00+00:00 to 2025-03-18 23:59:59+00:00
+2025-03-18 20:38:54,676 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-18 00:00:00+00:00, end_date=2025-03-18 23:59:59+00:00
+2025-03-18 20:38:54,676 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:38:54,959 - INFO - Successfully converted data: 2996 records found
+2025-03-18 20:38:54,960 - INFO - Query returned: 2996 records
+2025-03-18 20:38:54,960 - INFO - Converting to DataFrame...
+2025-03-18 20:38:54,964 - INFO - DataFrame created with shape: (2996, 12)
+2025-03-18 20:38:54,964 - INFO - Processing DataFrame...
+2025-03-18 20:38:54,964 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:38:54,964 - INFO - Cleaning latency data...
+2025-03-18 20:38:54,967 - INFO - DataFrame shape after cleaning: (2996, 12)
+2025-03-18 20:38:54,970 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:38:54,971 - INFO - Converting timestamps...
+2025-03-18 20:38:54,987 - INFO - Converting to records...
+2025-03-18 20:38:55,014 - INFO - Created 2996 result records
+2025-03-18 20:38:55,015 - INFO - Returning response with status code 200 and 2996 records
+2025-03-18 20:39:00,749 - INFO - ================================================================================
+2025-03-18 20:39:00,750 - INFO - Data.py script starting
+2025-03-18 20:39:00,750 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:39:00,750 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:39:00,750 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:39:00,750 - INFO - User running script: Unknown
+2025-03-18 20:39:00,750 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:39:00,750 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:39:00,836 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:39:00,837 - INFO - Calling data_endpoint function...
+2025-03-18 20:39:00,837 - INFO - Query parameters: start_date=2025-03-12, end_date=2025-03-12, start_hour=00:00, end_hour=23:59
+2025-03-18 20:39:00,837 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:39:00,837 - INFO - Getting canonical form for: 4B
+2025-03-18 20:39:00,837 - INFO - Canonical ID: 4B
+2025-03-18 20:39:00,837 - INFO - All variants: ['4B']
+2025-03-18 20:39:00,837 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:39:00,837 - INFO - Data request - Period: 2025-03-12T00:00:00 to 2025-03-12T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:39:00,837 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:39:00,837 - INFO - Querying satellite latency data from 2025-03-12T00:00:00 to 2025-03-12T23:59:59
+2025-03-18 20:39:00,837 - INFO - Converted timestamps: 2025-03-12 00:00:00+00:00 to 2025-03-12 23:59:59+00:00
+2025-03-18 20:39:00,837 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-12 00:00:00+00:00, end_date=2025-03-12 23:59:59+00:00
+2025-03-18 20:39:00,838 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:39:02,615 - INFO - Successfully converted data: 3523 records found
+2025-03-18 20:39:02,616 - INFO - Query returned: 3523 records
+2025-03-18 20:39:02,616 - INFO - Converting to DataFrame...
+2025-03-18 20:39:02,621 - INFO - DataFrame created with shape: (3523, 12)
+2025-03-18 20:39:02,621 - INFO - Processing DataFrame...
+2025-03-18 20:39:02,621 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:39:02,621 - INFO - Cleaning latency data...
+2025-03-18 20:39:02,623 - INFO - DataFrame shape after cleaning: (3523, 12)
+2025-03-18 20:39:02,627 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:39:02,628 - INFO - Converting timestamps...
+2025-03-18 20:39:02,646 - INFO - Converting to records...
+2025-03-18 20:39:02,677 - INFO - Created 3523 result records
+2025-03-18 20:39:02,678 - INFO - Returning response with status code 200 and 3523 records
+2025-03-18 20:39:03,395 - INFO - ================================================================================
+2025-03-18 20:39:03,395 - INFO - Data.py script starting
+2025-03-18 20:39:03,395 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:39:03,395 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:39:03,395 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:39:03,396 - INFO - User running script: Unknown
+2025-03-18 20:39:03,396 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:39:03,396 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:39:03,481 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:39:03,481 - INFO - Calling data_endpoint function...
+2025-03-18 20:39:03,482 - INFO - Query parameters: start_date=2025-03-12, end_date=2025-03-12, start_hour=00:00, end_hour=23:59
+2025-03-18 20:39:03,482 - INFO - Filter parameters: satellite_id=MetOp-1, coverage=None, instrument=GIIRS
+2025-03-18 20:39:03,482 - INFO - Getting canonical form for: MetOp-1
+2025-03-18 20:39:03,482 - INFO - Canonical ID: MetOp-1
+2025-03-18 20:39:03,482 - INFO - All variants: ['MetOp-1']
+2025-03-18 20:39:03,482 - INFO - Expanded satellite ID MetOp-1 to variants: ['MetOp-1']
+2025-03-18 20:39:03,482 - INFO - Data request - Period: 2025-03-12T00:00:00 to 2025-03-12T23:59:59, Filters: {'satellite-id': ['MetOp-1'], 'instrument': 'GIIRS'}
+2025-03-18 20:39:03,482 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:39:03,482 - INFO - Querying satellite latency data from 2025-03-12T00:00:00 to 2025-03-12T23:59:59
+2025-03-18 20:39:03,482 - INFO - Converted timestamps: 2025-03-12 00:00:00+00:00 to 2025-03-12 23:59:59+00:00
+2025-03-18 20:39:03,482 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-12 00:00:00+00:00, end_date=2025-03-12 23:59:59+00:00
+2025-03-18 20:39:03,482 - INFO - Filters: satellite_ids=['MetOp-1'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:39:03,628 - INFO - Successfully converted data: 0 records found
+2025-03-18 20:39:03,628 - INFO - Query returned: 0 records
+2025-03-18 20:39:03,628 - INFO - Query returned no data
+2025-03-18 20:39:03,628 - INFO - Returning response with status code 200 and 0 records
+2025-03-18 20:39:04,870 - INFO - ================================================================================
+2025-03-18 20:39:04,870 - INFO - Data.py script starting
+2025-03-18 20:39:04,870 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:39:04,870 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:39:04,870 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:39:04,870 - INFO - User running script: Unknown
+2025-03-18 20:39:04,870 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:39:04,870 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:39:04,956 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:39:04,956 - INFO - Calling data_endpoint function...
+2025-03-18 20:39:04,956 - INFO - Query parameters: start_date=2025-03-12, end_date=2025-03-12, start_hour=00:00, end_hour=23:59
+2025-03-18 20:39:04,957 - INFO - Filter parameters: satellite_id=MetOp-1, coverage=None, instrument=GIIRS
+2025-03-18 20:39:04,957 - INFO - Getting canonical form for: MetOp-1
+2025-03-18 20:39:04,957 - INFO - Canonical ID: MetOp-1
+2025-03-18 20:39:04,957 - INFO - All variants: ['MetOp-1']
+2025-03-18 20:39:04,957 - INFO - Expanded satellite ID MetOp-1 to variants: ['MetOp-1']
+2025-03-18 20:39:04,957 - INFO - Data request - Period: 2025-03-12T00:00:00 to 2025-03-12T23:59:59, Filters: {'satellite-id': ['MetOp-1'], 'instrument': 'GIIRS'}
+2025-03-18 20:39:04,957 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:39:04,957 - INFO - Querying satellite latency data from 2025-03-12T00:00:00 to 2025-03-12T23:59:59
+2025-03-18 20:39:04,957 - INFO - Converted timestamps: 2025-03-12 00:00:00+00:00 to 2025-03-12 23:59:59+00:00
+2025-03-18 20:39:04,957 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-12 00:00:00+00:00, end_date=2025-03-12 23:59:59+00:00
+2025-03-18 20:39:04,957 - INFO - Filters: satellite_ids=['MetOp-1'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:39:05,084 - INFO - Successfully converted data: 0 records found
+2025-03-18 20:39:05,084 - INFO - Query returned: 0 records
+2025-03-18 20:39:05,084 - INFO - Query returned no data
+2025-03-18 20:39:05,084 - INFO - Returning response with status code 200 and 0 records
+2025-03-18 20:39:07,907 - INFO - ================================================================================
+2025-03-18 20:39:07,907 - INFO - Data.py script starting
+2025-03-18 20:39:07,907 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:39:07,908 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:39:07,908 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:39:07,908 - INFO - User running script: Unknown
+2025-03-18 20:39:07,908 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:39:07,908 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:39:07,998 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:39:07,998 - INFO - Calling data_endpoint function...
+2025-03-18 20:39:07,998 - INFO - Query parameters: start_date=2025-03-12, end_date=2025-03-12, start_hour=00:00, end_hour=23:59
+2025-03-18 20:39:07,998 - INFO - Filter parameters: satellite_id=MetOp-3, coverage=None, instrument=amsu
+2025-03-18 20:39:07,998 - INFO - Getting canonical form for: MetOp-3
+2025-03-18 20:39:07,998 - INFO - Canonical ID: MetOp-3
+2025-03-18 20:39:07,998 - INFO - All variants: ['MetOp-3']
+2025-03-18 20:39:07,998 - INFO - Expanded satellite ID MetOp-3 to variants: ['MetOp-3']
+2025-03-18 20:39:07,998 - INFO - Data request - Period: 2025-03-12T00:00:00 to 2025-03-12T23:59:59, Filters: {'satellite-id': ['MetOp-3'], 'instrument': 'amsu'}
+2025-03-18 20:39:07,998 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:39:07,998 - INFO - Querying satellite latency data from 2025-03-12T00:00:00 to 2025-03-12T23:59:59
+2025-03-18 20:39:07,998 - INFO - Converted timestamps: 2025-03-12 00:00:00+00:00 to 2025-03-12 23:59:59+00:00
+2025-03-18 20:39:07,998 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-12 00:00:00+00:00, end_date=2025-03-12 23:59:59+00:00
+2025-03-18 20:39:07,999 - INFO - Filters: satellite_ids=['MetOp-3'], coverage=None, instrument=['amsu']
+2025-03-18 20:39:08,358 - INFO - Successfully converted data: 20 records found
+2025-03-18 20:39:08,358 - INFO - Query returned: 20 records
+2025-03-18 20:39:08,359 - INFO - Converting to DataFrame...
+2025-03-18 20:39:08,359 - INFO - DataFrame created with shape: (20, 12)
+2025-03-18 20:39:08,359 - INFO - Processing DataFrame...
+2025-03-18 20:39:08,360 - INFO - Columns after normalization: ['topic', 'band', 'coverage', 'ingest_source', 'instrument', 'satellite_id', 'section', 'reception_time', 'start_time', 'end_time', 'create_time', 'latency']
+2025-03-18 20:39:08,360 - INFO - Cleaning latency data...
+2025-03-18 20:39:08,362 - INFO - DataFrame shape after cleaning: (20, 12)
+2025-03-18 20:39:08,363 - INFO - Adding canonical_satellite_id column...
+2025-03-18 20:39:08,364 - INFO - Converting timestamps...
+2025-03-18 20:39:08,365 - INFO - Converting to records...
+2025-03-18 20:39:08,368 - INFO - Created 20 result records
+2025-03-18 20:39:08,368 - INFO - Returning response with status code 200 and 20 records
+2025-03-18 20:39:15,373 - INFO - ================================================================================
+2025-03-18 20:39:15,373 - INFO - Data.py script starting
+2025-03-18 20:39:15,374 - INFO - Current working directory: /home/ygao/latency/assets/python
+2025-03-18 20:39:15,374 - INFO - Script path: /var/www/html/web_internal/students/ygao/latency/assets/python/data.py
+2025-03-18 20:39:15,374 - INFO - Python version: 3.9.21 (main, Dec 11 2024, 16:24:11) 
+[GCC 11.2.0]
+2025-03-18 20:39:15,374 - INFO - User running script: Unknown
+2025-03-18 20:39:15,374 - INFO - Looking for sat_db_functions in: /var/www/html/web_internal/students/ygao/latency/assets/python and /var/www/html/web_internal/students/ygao/latency/assets
+2025-03-18 20:39:15,374 - INFO - Directory contents: ['satellite_relationships.json', '.htaccess', 'test.py', 'test_log', 'latency_viewer.log', 'data.py', 'metadata.py', 'sat_db_functions.py', 'satellites.py']
+2025-03-18 20:39:15,460 - INFO - Successfully imported from sat_db_functions
+2025-03-18 20:39:15,460 - INFO - Calling data_endpoint function...
+2025-03-18 20:39:15,460 - INFO - Query parameters: start_date=2025-03-26, end_date=2025-03-26, start_hour=00:00, end_hour=23:59
+2025-03-18 20:39:15,460 - INFO - Filter parameters: satellite_id=4B, coverage=None, instrument=GIIRS
+2025-03-18 20:39:15,460 - INFO - Getting canonical form for: 4B
+2025-03-18 20:39:15,460 - INFO - Canonical ID: 4B
+2025-03-18 20:39:15,460 - INFO - All variants: ['4B']
+2025-03-18 20:39:15,460 - INFO - Expanded satellite ID 4B to variants: ['4B']
+2025-03-18 20:39:15,460 - INFO - Data request - Period: 2025-03-26T00:00:00 to 2025-03-26T23:59:59, Filters: {'satellite-id': ['4B'], 'instrument': 'GIIRS'}
+2025-03-18 20:39:15,461 - INFO - About to call run_sat_latency_query...
+2025-03-18 20:39:15,461 - INFO - Querying satellite latency data from 2025-03-26T00:00:00 to 2025-03-26T23:59:59
+2025-03-18 20:39:15,461 - INFO - Converted timestamps: 2025-03-26 00:00:00+00:00 to 2025-03-26 23:59:59+00:00
+2025-03-18 20:39:15,461 - INFO - Query parameters: database=/data/sat_latency, start_date=2025-03-26 00:00:00+00:00, end_date=2025-03-26 23:59:59+00:00
+2025-03-18 20:39:15,461 - INFO - Filters: satellite_ids=['4B'], coverage=None, instrument=['GIIRS']
+2025-03-18 20:39:15,463 - ERROR - Error executing satellite latency query: Must pass schema, or at least one RecordBatch
+2025-03-18 20:39:15,464 - ERROR - Traceback (most recent call last):
+  File "/home/ygao/latency/assets/python/sat_db_functions.py", line 255, in run_sat_latency_query
+    data = satellite_data_from_filters(
+  File "/home/ygao/miniconda/envs/py39env/lib/python3.9/site-packages/sat_latency/interface.py", line 266, in satellite_data_from_filters
+    df = read_satellite_data(
+  File "/home/ygao/miniconda/envs/py39env/lib/python3.9/site-packages/sat_latency/pipeline/load.py", line 101, in read_satellite_data
+    tbl = pa.Table.from_batches(
+  File "pyarrow/table.pxi", line 4987, in pyarrow.lib.Table.from_batches
+ValueError: Must pass schema, or at least one RecordBatch
+
+2025-03-18 20:39:15,464 - INFO - Query returned: 0 records
+2025-03-18 20:39:15,464 - INFO - Query returned no data
+2025-03-18 20:39:15,464 - INFO - Returning response with status code 200 and 0 records