Move "slow-log" to it's own mixin
This commit is contained in:
parent
51fbd0698c
commit
b6b9c8e5cc
2
freqtrade/mixins/__init__.py
Normal file
2
freqtrade/mixins/__init__.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# flake8: noqa: F401
|
||||||
|
from freqtrade.mixins.logging_mixin import LoggingMixin
|
34
freqtrade/mixins/logging_mixin.py
Normal file
34
freqtrade/mixins/logging_mixin.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
|
||||||
|
from cachetools import TTLCache, cached
|
||||||
|
|
||||||
|
|
||||||
|
class LoggingMixin():
|
||||||
|
"""
|
||||||
|
Logging Mixin
|
||||||
|
Shows similar messages only once every `refresh_period`.
|
||||||
|
"""
|
||||||
|
def __init__(self, logger, refresh_period: int = 3600):
|
||||||
|
"""
|
||||||
|
:param refresh_period: in seconds - Show identical messages in this intervals
|
||||||
|
"""
|
||||||
|
self.logger = logger
|
||||||
|
self.refresh_period = refresh_period
|
||||||
|
self._log_cache: TTLCache = TTLCache(maxsize=1024, ttl=self.refresh_period)
|
||||||
|
|
||||||
|
def log_on_refresh(self, logmethod, message: str) -> None:
|
||||||
|
"""
|
||||||
|
Logs message - not more often than "refresh_period" to avoid log spamming
|
||||||
|
Logs the log-message as debug as well to simplify debugging.
|
||||||
|
:param logmethod: Function that'll be called. Most likely `logger.info`.
|
||||||
|
:param message: String containing the message to be sent to the function.
|
||||||
|
:return: None.
|
||||||
|
"""
|
||||||
|
@cached(cache=self._log_cache)
|
||||||
|
def _log_on_refresh(message: str):
|
||||||
|
logmethod(message)
|
||||||
|
|
||||||
|
# Log as debug first
|
||||||
|
self.logger.debug(message)
|
||||||
|
# Call hidden function.
|
||||||
|
_log_on_refresh(message)
|
@ -6,16 +6,15 @@ from abc import ABC, abstractmethod, abstractproperty
|
|||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
from cachetools import TTLCache, cached
|
|
||||||
|
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.exchange import market_is_active
|
from freqtrade.exchange import market_is_active
|
||||||
|
from freqtrade.mixins import LoggingMixin
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class IPairList(ABC):
|
class IPairList(LoggingMixin, ABC):
|
||||||
|
|
||||||
def __init__(self, exchange, pairlistmanager,
|
def __init__(self, exchange, pairlistmanager,
|
||||||
config: Dict[str, Any], pairlistconfig: Dict[str, Any],
|
config: Dict[str, Any], pairlistconfig: Dict[str, Any],
|
||||||
@ -36,7 +35,7 @@ class IPairList(ABC):
|
|||||||
self._pairlist_pos = pairlist_pos
|
self._pairlist_pos = pairlist_pos
|
||||||
self.refresh_period = self._pairlistconfig.get('refresh_period', 1800)
|
self.refresh_period = self._pairlistconfig.get('refresh_period', 1800)
|
||||||
self._last_refresh = 0
|
self._last_refresh = 0
|
||||||
self._log_cache: TTLCache = TTLCache(maxsize=1024, ttl=self.refresh_period)
|
LoggingMixin.__init__(self, logger, self.refresh_period)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
@ -46,24 +45,6 @@ class IPairList(ABC):
|
|||||||
"""
|
"""
|
||||||
return self.__class__.__name__
|
return self.__class__.__name__
|
||||||
|
|
||||||
def log_on_refresh(self, logmethod, message: str) -> None:
|
|
||||||
"""
|
|
||||||
Logs message - not more often than "refresh_period" to avoid log spamming
|
|
||||||
Logs the log-message as debug as well to simplify debugging.
|
|
||||||
:param logmethod: Function that'll be called. Most likely `logger.info`.
|
|
||||||
:param message: String containing the message to be sent to the function.
|
|
||||||
:return: None.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@cached(cache=self._log_cache)
|
|
||||||
def _log_on_refresh(message: str):
|
|
||||||
logmethod(message)
|
|
||||||
|
|
||||||
# Log as debug first
|
|
||||||
logger.debug(message)
|
|
||||||
# Call hidden function.
|
|
||||||
_log_on_refresh(message)
|
|
||||||
|
|
||||||
@abstractproperty
|
@abstractproperty
|
||||||
def needstickers(self) -> bool:
|
def needstickers(self) -> bool:
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user