def api_websocket(accessor=None): """Meant for use with the websocket and API. Make a connection to this function, and then pass it the API path you wish to receive. Function returns only the raw value and unit in list form. """ sane_args = dict(request.args) sane_args['accessor'] = accessor # Refresh the root node before creating the websocket psapi.refresh() if request.environ.get('wsgi.websocket'): config = listener.config['iconfig'] ws = request.environ['wsgi.websocket'] while True: try: message = ws.receive() node = psapi.getter(message, config, request.path, cache=True) prop = node.name val = node.walk(first=True, **sane_args) jval = json.dumps(val[prop]) ws.send(jval) except Exception as e: # Socket was probably closed by the browser changing pages logging.debug(e) ws.close() break return ''
def graph(accessor=None): """ Accessor method for fetching the HTML for the real-time graphing. :param accessor: The API path to be accessed (see /api) :type accessor: unicode :rtype: flask.Response """ info = {'graph_path': accessor, 'graph_hash': hash(accessor)} # Refresh the root node before creating the websocket psapi.refresh() node = psapi.getter(accessor, listener.config['iconfig'], cache=True) prop = node.name if request.values.get('delta'): info['delta'] = 1 else: info['delta'] = 0 info['graph_prop'] = prop query_string = request.query_string info['query_string'] = urllib.quote(query_string) return render_template('graph.html', **info)
def graph(accessor=None): """ Accessor method for fetching the HTML for the real-time graphing. :param accessor: The API path to be accessed (see /api) :type accessor: unicode :rtype: flask.Response """ info = {'graph_path': accessor, 'graph_hash': hash(accessor)} # Refresh the root node before creating the websocket psapi.refresh() node = psapi.getter(accessor, listener.config['iconfig'], request.path, cache=True) prop = node.name if request.values.get('delta'): info['delta'] = 1 else: info['delta'] = 0 info['graph_prop'] = prop query_string = request.query_string info['query_string'] = urllib.quote(query_string) url = urlparse.urlparse(request.url) info['load_from'] = url.scheme + '://' + url.netloc info['load_websocket'] = url.netloc # Generate page and add cross-domain loading response = make_response(render_template('graph.html', **info)) response.headers['Access-Control-Allow-Origin'] = '*' return response
def api_websocket(accessor=None): """Meant for use with the websocket and API. Make a connection to this function, and then pass it the API path you wish to receive. Function returns only the raw value and unit in list form. """ sane_args = dict(request.args) sane_args['accessor'] = accessor # Refresh the root node before creating the websocket psapi.refresh() if request.environ.get('wsgi.websocket'): config = listener.config['iconfig'] ws = request.environ['wsgi.websocket'] while True: try: message = ws.receive() node = psapi.getter(message, config, cache=True) prop = node.name val = node.walk(first=True, **sane_args) jval = json.dumps(val[prop]) ws.send(jval) except (AttributeError, geventwebsocket.WebSocketError) as e: # Socket was probably closed by the browser changing pages logging.debug(e) break return ''