15 Commits

Author SHA1 Message Date
7a8f5dd0c6 Added function for reading a catalog 2025-05-28 10:17:51 +02:00
213aa363c5 Merge pull request 'feature/ISL-4832-przepisac-catalogeditor-do-pythona' (#2) from ymlesni/shared-snippets:feature/ISL-4832-przepisac-catalogeditor-do-pythona into main
Reviewed-on: episodes-platform/shared-snippets#2
Reviewed-by: asia <asia@noreply.example.org>
2025-02-19 14:52:22 +01:00
d9a962e3bb ISL-4832 Removed standalone sort by time script and added information to sort by time script that it requires find catalog column script 2025-02-19 13:52:18 +01:00
9770709a81 ISL-4832 Adjusted descriptions 2025-01-13 18:42:29 +01:00
9fa094a2dc ISL-4832 Adjusted description in find_catalog_column.py, sort_by_time.py and sort_by_time_standalone.py 2025-01-13 12:44:44 +01:00
60e52884f4 ISL-4832 Adjusted sort_by_time.py script 2025-01-13 12:27:50 +01:00
e8ed57e2a0 ISL-4832 Added find_catalog_column.py 2025-01-13 11:13:45 +01:00
1fa3edf796 ISL-4832 Added sort_by_time.py 2025-01-13 11:13:30 +01:00
d917a329e0 Merge pull request 'ISEPOS-2280 Added base loggers scripts' (#1) from ymlesni/shared-snippets:feature/ISEPOS-2280-mechanizm-raportowania-informacji-z-aplikacji-do-pliku-z-logami into main
Reviewed-on: episodes-platform/shared-snippets#1
Reviewed-by: h.siejkowski <h.siejkowski@noreply.example.org>
Reviewed-by: asia <asia@noreply.example.org>
2024-10-25 12:09:49 +02:00
be2d4ffa36 ISEPOS-2280 Adjusted javadoc of newer matlab and octave logger versions 2024-10-15 20:43:18 +02:00
d4a248df3b Merge pull request 'ISEPOS-2280 Adjusted fallback log name' (#3) from feature/ISEPOS-2280-mechanizm-raportowania-informacji-z-aplikacji-do-pliku-z-logami into main
Reviewed-on: #3
2024-10-15 17:00:58 +02:00
7ba8869df0 ISEPOS-2280 Adjusted fallback log name 2024-10-15 16:50:30 +02:00
d0bffa2aad Merge pull request 'feature/ISEPOS-2280-mechanizm-raportowania-informacji-z-aplikacji-do-pliku-z-logami' (#2) from feature/ISEPOS-2280-mechanizm-raportowania-informacji-z-aplikacji-do-pliku-z-logami into main
Reviewed-on: #2
2024-10-15 12:01:43 +02:00
13e4fa808f ISEPOS-2280 Added fallback paths for base loggers 2024-10-15 11:55:59 +02:00
0d0285a296 ISEPOS-2280 Adjusted log file name in comment 2024-10-15 08:38:55 +02:00
6 changed files with 151 additions and 32 deletions

View File

@@ -10,6 +10,9 @@
% It follows the Singleton pattern to ensure that only one instance of the logger % It follows the Singleton pattern to ensure that only one instance of the logger
% exists throughout the application. % exists throughout the application.
% %
% The log file is specified by the environment variable 'APP_LOG_FILE'. If
% the variable is not set, a default file 'base-logger-log.log' is used.
%
% Properties: % Properties:
% fid - (private) The file identifier for the log file. This is used to write logs. % fid - (private) The file identifier for the log file. This is used to write logs.
% %
@@ -17,20 +20,20 @@
% %
% getInstance() - Retrieves the singleton instance of the logger. % getInstance() - Retrieves the singleton instance of the logger.
% %
% trace(message) - Logs a message with TRACE level. % trace(varargin) - Logs one or more messages with TRACE level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% debug(message) - Logs a message with DEBUG level. % debug(varargin) - Logs one or more messages with DEBUG level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% info(message) - Logs a message with INFO level. % info(varargin) - Logs one or more messages with INFO level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% warning(message) - Logs a message with WARNING level. % warning(varargin) - Logs one or more messages with WARNING level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% error(message) - Logs a message with ERROR level. % error(varargin) - Logs one or more messages with ERROR level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% delete() - Destructor method that closes the file identifier when the logger is deleted. % delete() - Destructor method that closes the file identifier when the logger is deleted.
% %
@@ -63,7 +66,11 @@ classdef base_logger < handle
methods(Access=private) methods(Access=private)
function this = base_logger() function this = base_logger()
this.fid = fopen(getenv("APP_LOG_FILE"), 'a'); logFileName = getenv("APP_LOG_FILE");
if isempty(logFileName)
logFileName = 'base-logger-log.log';
end
this.fid = fopen(logFileName, 'a');
if this.fid == -1 if this.fid == -1
error('Failed to open log file'); error('Failed to open log file');
end end

View File

@@ -10,6 +10,9 @@
% It follows the Singleton pattern to ensure that only one instance of the logger % It follows the Singleton pattern to ensure that only one instance of the logger
% exists throughout the application. % exists throughout the application.
% %
% The log file is specified by the environment variable 'APP_LOG_FILE'. If
% the variable is not set, a default file 'base-logger-log.log' is used.
%
% Properties: % Properties:
% fid - (private) The file identifier for the log file. This is used to write logs. % fid - (private) The file identifier for the log file. This is used to write logs.
% %
@@ -17,20 +20,20 @@
% %
% getInstance() - Retrieves the singleton instance of the logger. % getInstance() - Retrieves the singleton instance of the logger.
% %
% trace(message) - Logs a message with TRACE level. % trace(varargin) - Logs one or more messages with TRACE level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% debug(message) - Logs a message with DEBUG level. % debug(varargin) - Logs one or more messages with DEBUG level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% info(message) - Logs a message with INFO level. % info(varargin) - Logs one or more messages with INFO level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% warning(message) - Logs a message with WARNING level. % warning(varargin) - Logs one or more messages with WARNING level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% error(message) - Logs a message with ERROR level. % error(varargin) - Logs one or more messages with ERROR level.
% @param message The message to log. % @param varargin The messages to log. Can be strings, numbers, or MException objects.
% %
% delete() - Destructor method that closes the file identifier when the logger is deleted. % delete() - Destructor method that closes the file identifier when the logger is deleted.
% %
@@ -63,7 +66,11 @@ classdef base_logger < handle
methods methods
function this = base_logger() function this = base_logger()
this.fid = fopen(getenv("APP_LOG_FILE"), 'a'); logFileName = getenv("APP_LOG_FILE");
if isempty(logFileName)
logFileName = 'base-logger-log.log';
end
this.fid = fopen(logFileName, 'a');
if this.fid == -1 if this.fid == -1
error('Failed to open log file'); error('Failed to open log file');
end end

View File

@@ -0,0 +1,36 @@
# -----------------
# Copyright © 2024 ACK Cyfronet AGH, Poland.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This work was partially funded by DT-GEO Project.
# -----------------
def find_catalog_column(catalog, field_name):
"""
Finds the index of a column in the catalog based on its field name.
Parameters:
catalog (np.ndarray): A structured NumPy array representing a catalog in EPISODES Platform format:
https://docs.cyfronet.pl/display/ISDOC/Catalogs
field_name (str): The field name of the entry to search for.
Returns:
int: The index of the entry matching the given field name.
Raises:
ValueError: If the specified field name is not found in the catalog.
"""
for idx, col in enumerate(catalog):
if col['field'] == field_name:
return idx
raise ValueError(f'No {field_name} field found in the catalog.')

View File

@@ -0,0 +1,22 @@
# -----------------
# Copyright © 2025 ACK Cyfronet AGH, Poland.
# -----------------
from scipy.io import loadmat, whosmat
def read_catalog(catalog_path):
"""
Reads the provided catalog in EPISODES Platform format (https://docs.cyfronet.pl/display/ISDOC/Catalogs)
Parameters:
catalog_path: Path to the catalog file to be read.
Returns:
catalog (np.ndarray): A structured NumPy array representing the catalog.
Raises:
ValueError: If the specified field name is not found in the catalog.
"""
catalog_contents = loadmat(catalog_path, mat_dtype=True)
catalog_field_name = whosmat(catalog_path)[0][0] # Getting the name of first non-metadata field
catalog = catalog_contents[catalog_field_name][0]
return catalog

View File

@@ -0,0 +1,44 @@
# -----------------
# Copyright © 2024 ACK Cyfronet AGH, Poland.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This work was partially funded by DT-GEO Project.
# -----------------
import numpy as np
from find_catalog_column import find_catalog_column
def sort_by_time(catalog):
"""
Sorts the given catalog based on the 'Time' column. Requires find_catalog_column script to work.
Parameters:
catalog (np.ndarray): A structured NumPy array representing a seismic catalog in EPISODES Platform format:
https://docs.cyfronet.pl/display/ISDOC/Seismic+catalog
Returns:
np.ndarray: The sorted catalog, where rows in 'val' fields are ordered by ascending 'Time' values.
Raises:
ValueError: If the 'Time' column is not found in the catalog.
"""
time_col_index = find_catalog_column(catalog, 'Time')
time_values = catalog[time_col_index]['val'].flatten()
sorted_indexes = np.argsort(time_values)
sorted_catalog = catalog.copy()
for field in sorted_catalog:
field['val'] = field['val'][sorted_indexes]
return sorted_catalog

View File

@@ -11,8 +11,10 @@ def getDefaultLogger(name):
Retrieves or creates a logger with the specified name and sets it up with a file handler. Retrieves or creates a logger with the specified name and sets it up with a file handler.
The logger is configured to write log messages to the file path specified by the The logger is configured to write log messages to the file path specified by the
'DEFAULT_LOG_PATH' environment variable. It uses the 'INFO' level as the default 'APP_LOG_FILE' environment variable. If the environment variable is not set,
logging level and writes log entries in the following format: the logger will write to the file 'base-logger-log.log' in the current
working directory. The logger uses the 'INFO' level as the default logging level
and writes log entries in the following format:
'YYYY-MM-DD HH:MM:SS,ms LEVEL logger_name message' 'YYYY-MM-DD HH:MM:SS,ms LEVEL logger_name message'
@@ -30,13 +32,9 @@ def getDefaultLogger(name):
-------- --------
logger : logging.Logger logger : logging.Logger
A logger instance with the specified name. The logger is configured with a A logger instance with the specified name. The logger is configured with a
file handler that writes to the file specified by the 'DEFAULT_LOG_PATH' file handler that writes to the file specified by the 'APP_LOG_FILE'
environment variable. environment variable, or to 'base-logger-log.log' if the environment
variable is not set.
Raises:
-------
KeyError:
If the 'DEFAULT_LOG_PATH' environment variable is not set.
Example: Example:
-------- --------
@@ -47,10 +45,15 @@ def getDefaultLogger(name):
except Exception: except Exception:
logger.exception('An error occurred') logger.exception('An error occurred')
Notes:
------
- The 'APP_LOG_FILE' environment variable should specify the full path to the log file.
- If 'APP_LOG_FILE' is not set, logs will be written to 'base-logger-log.log'.
""" """
logger = logging.getLogger(name) logger = logging.getLogger(name)
if not logger.hasHandlers(): if not logger.hasHandlers():
file_handler = logging.FileHandler(os.environ['APP_LOG_FILE'], mode='a') file_handler = logging.FileHandler(os.environ.get('APP_LOG_FILE', 'base-logger-log.log'), mode='a')
formatter = logging.Formatter('%(asctime)s,%(msecs)d %(levelname)s %(name)s %(message)s') formatter = logging.Formatter('%(asctime)s,%(msecs)d %(levelname)s %(name)s %(message)s')
file_handler.setFormatter(formatter) file_handler.setFormatter(formatter)
logger.addHandler(file_handler) logger.addHandler(file_handler)