diff --git a/.flake8 b/.flake8 index 44b8a5e3..51b7df2b 100644 --- a/.flake8 +++ b/.flake8 @@ -1,2 +1,4 @@ [flake8] -exclude = .git,__pycache__,build,dist,versioneer.py,nslsii/_version.py,docs/source/conf.py +ignore = E402,W504 +exclude = .git,__pycache__,doc/source/conf.py,build,dist,versioneer.py +max-line-length = 115 diff --git a/nslsii/__init__.py b/nslsii/__init__.py index b5d85732..ac12dfae 100644 --- a/nslsii/__init__.py +++ b/nslsii/__init__.py @@ -1,5 +1,6 @@ from IPython import get_ipython from ._version import get_versions +from .loggers import configure_elastic __version__ = get_versions()['version'] del get_versions @@ -148,6 +149,9 @@ def configure_base(user_ns, broker_name, *, ch.setLevel(logging.ERROR) ophyd.ophydobj.logger.addHandler(ch) + configure_elastic(broker_name) + #Configure elastic log handler including bluesky, carproto and ophyd + # convenience imports # some of the * imports are for 'back-compatibility' of a sort -- we have # taught BL staff to expect LiveTable and LivePlot etc. to be in their diff --git a/nslsii/common/ipynb/animation.py b/nslsii/common/ipynb/animation.py index fc34ceb6..a4365d2b 100644 --- a/nslsii/common/ipynb/animation.py +++ b/nslsii/common/ipynb/animation.py @@ -52,7 +52,7 @@ def view_frame(i, vmin, vmax): plt.show() - interact(view_frame, i=(0, n-1), vmin=minmax, vmax=minmax) + interact(view_frame, i=(0, n - 1), vmin=minmax, vmax=minmax) def image_stack_to_movie(images, frames=None, vmin=None, vmax=None, diff --git a/nslsii/common/ipynb/info.py b/nslsii/common/ipynb/info.py index 1af3af0b..818d8a0d 100644 --- a/nslsii/common/ipynb/info.py +++ b/nslsii/common/ipynb/info.py @@ -16,11 +16,11 @@ def get_sys_info(): mem = psutil.virtual_memory() html += 'Total System Memory' - html += '{:.4} Mb'.format(mem.total/1024**3) + html += '{:.4} Mb'.format(mem.total / 1024**3) html += 'Total Memory Used' - html += '{:.4} Mb'.format(mem.used/1024**3) + html += '{:.4} Mb'.format(mem.used / 1024**3) html += 'Total Memory Free' - html += '{:.4} Mb'.format(mem.free/1024**3) + html += '{:.4} Mb'.format(mem.free / 1024**3) html += 'Number of CPU Cores{}'.format( psutil.cpu_count()) diff --git a/nslsii/loggers.py b/nslsii/loggers.py new file mode 100644 index 00000000..db6ba3f5 --- /dev/null +++ b/nslsii/loggers.py @@ -0,0 +1,59 @@ +import logging +import requests +import json + +class ElasticHandler(logging.Handler): + ''' + Logging handler that submits data to Elastic + + Parameters + ---------- + url: string + url to Elastic server + + level: Logging Levels, optional + Handler logging level + ''' + def __init__(self, url, level=logging.INFO): + self.url = url + self.level = level + super().__init__(self.level) + + def emit(self, record): + ''' + method is used to send the message to its destination and + logging for debug + ''' + # Extract useful info from the record and put them into a dict. + try: + record_dict = {'name': record.name, + 'levelname': record.levelname, + 'pathname': record.pathname, + 'lineno': record.lineno, + 'msg': self.format(record), + 'args': list(map(str, record.args)), + 'threadName': record.threadName} + + if hasattr(record, 'pv'): record_dict['pv'] = record.pv + if hasattr(record, 'address'): record_dict['address'] = record.address[0]+':'+str(record.address[1]) + if hasattr(record, 'role'): record_dict['role'] = record.role + response = requests.post(self.url, json=record_dict) + response.raise_for_status() + except Exception: + self.handleError(record) + +def configure_elastic(beamline): + url = 'http://elasticsearch.cs.nsls2.local/' + beamline + '.blueksy' + local_url = 'http://localhost:9200/test1/_doc' + + bluesky_logger = logging.getLogger('bluesky') + bluesky_elastic_hdr = ElasticHandler(url, level = logging.DEBUG) + bluesky_logger.addHandler(elastic_hdr) + + carproto_logger = logging.getLogger('carproto') + carproto_elastic_hdr = ElasticHandler(local_url, level = logging.DEBUG) + carproto_logger.addHandler(elastic_hdr) + + ophyd_logger = logging.getLogger('ophyd') + ophyd_elastic_hdr = ElasticHandler(url, level = logging.INFO) + ophyd_logger.addHandler(elastic_hdr) diff --git a/requirements.txt b/requirements.txt index 17f26884..507762c5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ numpy ophyd psutil pyolog +requests