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