Skip to content

Commit 30004b1

Browse files
committed
Created 'murfey.util.logging' to store LogFilter and HTTPSHandler classes in; removed CustomHandler
1 parent ff1856b commit 30004b1

File tree

4 files changed

+35
-63
lines changed

4 files changed

+35
-63
lines changed

src/murfey/instrument_server/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ def start_instrument_server():
2525
from rich.logging import RichHandler
2626

2727
import murfey
28-
from murfey.client.customlogging import HTTPSHandler
29-
from murfey.util import LogFilter
3028
from murfey.util.api import url_path_for
3129
from murfey.util.client import read_config
30+
from murfey.util.logging import HTTPSHandler, LogFilter
3231

3332
parser = argparse.ArgumentParser(description="Start the Murfey server")
3433
parser.add_argument(

src/murfey/server/run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
import murfey.server
1717
from murfey.server.feedback import feedback_listen
1818
from murfey.server.ispyb import TransportManager
19-
from murfey.util import LogFilter
2019
from murfey.util.config import get_microscope, get_security_config
20+
from murfey.util.logging import LogFilter
2121

2222
logger = logging.getLogger("murfey.server.run")
2323

src/murfey/util/__init__.py

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -96,42 +96,6 @@ def wait(self):
9696
self.thread.join()
9797

9898

99-
class LogFilter(logging.Filter):
100-
"""A filter to limit messages going to Graylog"""
101-
102-
def __repr__(self):
103-
return "<murfey.server.LogFilter>"
104-
105-
def __init__(self):
106-
super().__init__()
107-
self._filter_levels = {
108-
"murfey": logging.DEBUG,
109-
"ispyb": logging.DEBUG,
110-
"zocalo": logging.DEBUG,
111-
"uvicorn": logging.INFO,
112-
"fastapi": logging.INFO,
113-
"starlette": logging.INFO,
114-
"sqlalchemy": logging.INFO,
115-
}
116-
117-
@staticmethod
118-
def install() -> LogFilter:
119-
logfilter = LogFilter()
120-
root_logger = logging.getLogger()
121-
for handler in root_logger.handlers:
122-
handler.addFilter(logfilter)
123-
return logfilter
124-
125-
def filter(self, record: logging.LogRecord) -> bool:
126-
logger_name = record.name
127-
while True:
128-
if logger_name in self._filter_levels:
129-
return record.levelno >= self._filter_levels[logger_name]
130-
if "." not in logger_name:
131-
return False
132-
logger_name = logger_name.rsplit(".", maxsplit=1)[0]
133-
134-
13599
def safe_run(
136100
func: Callable,
137101
args: list | tuple = [],
Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,40 @@
99
import requests
1010

1111

12-
class CustomHandler(logging.Handler):
13-
def __init__(self, callback):
14-
"""Set up a handler instance, record the callback function."""
15-
super().__init__()
16-
self._callback = callback
12+
class LogFilter(logging.Filter):
13+
"""A filter to limit messages going to Graylog"""
1714

18-
def prepare(self, record):
19-
self.format(record)
20-
record_dict = record.__dict__
21-
record_dict["type"] = "log"
22-
try:
23-
return json.dumps(record_dict)
24-
except TypeError:
25-
return json.dumps({str(k): str(v) for k, v in record_dict.items()})
15+
def __repr__(self):
16+
return "<murfey.server.LogFilter>"
2617

27-
def emit(self, record):
28-
try:
29-
self._callback(self.prepare(record))
30-
except Exception:
31-
self.handleError(record)
18+
def __init__(self):
19+
super().__init__()
20+
self._filter_levels = {
21+
"murfey": logging.DEBUG,
22+
"ispyb": logging.DEBUG,
23+
"zocalo": logging.DEBUG,
24+
"uvicorn": logging.INFO,
25+
"fastapi": logging.INFO,
26+
"starlette": logging.INFO,
27+
"sqlalchemy": logging.INFO,
28+
}
29+
30+
@staticmethod
31+
def install() -> LogFilter:
32+
logfilter = LogFilter()
33+
root_logger = logging.getLogger()
34+
for handler in root_logger.handlers:
35+
handler.addFilter(logfilter)
36+
return logfilter
37+
38+
def filter(self, record: logging.LogRecord) -> bool:
39+
logger_name = record.name
40+
while True:
41+
if logger_name in self._filter_levels:
42+
return record.levelno >= self._filter_levels[logger_name]
43+
if "." not in logger_name:
44+
return False
45+
logger_name = logger_name.rsplit(".", maxsplit=1)[0]
3246

3347

3448
class HTTPSHandler(logging.Handler):
@@ -89,9 +103,7 @@ def format_record(self, record: logging.LogRecord):
89103

90104
def _worker(self):
91105
"""
92-
Worker function that sends batches of logs to the URL endpoint specified,
93-
with logic to adjust how frequently it should batch and send logs depending
94-
on rate of incoming traffic
106+
The worker function when the handler is run as a thread.
95107
"""
96108

97109
batch: list[str] = []
@@ -130,9 +142,6 @@ def _worker(self):
130142
self._send_batch(batch)
131143

132144
def _send_batch(self, batch: list[str]):
133-
"""
134-
Submits the list of stringified log records to the URL endpoint specified.
135-
"""
136145
for attempt in range(1, self.max_retry + 1):
137146
try:
138147
response = requests.post(self.endpoint_url, json=batch, timeout=5)

0 commit comments

Comments
 (0)