#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Thu Feb 8 16:34:35 2018 @author: joao_loureiro """ import epics import time import os import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.ticker as mtick import mpld3 from mpld3 import plugins, utils import numpy as np import MySQLdb os.environ['EPICS_CA_ADDR_LIST']= '192.168.1.110 192.168.1.152' os.environ['EPICS_CA_AUTO_ADDR_LIST']= 'NO' class HelloWorld(mpld3.plugins.PluginBase): # inherit from PluginBase """Hello World plugin""" JAVASCRIPT = """ mpld3.register_plugin("helloworld", HelloWorld); HelloWorld.prototype = Object.create(mpld3.Plugin.prototype); HelloWorld.prototype.constructor = HelloWorld; function HelloWorld(fig, props){ mpld3.Plugin.call(this, fig, props); }; HelloWorld.prototype.draw = function(){ // FIXME: this is a very brittle way to select the y-axis element var ax = this.fig.axes[0].elements[1]; // see https://github.com/mbostock/d3/wiki/Formatting#d3_format // for d3js formating documentation ax.axis.tickFormat(d3.format(",.3e")); // TODO: use a function for tick values that // updates when values pan and zoom //ax.axis.tickValues([1,100,1000]); // HACK: use reset to redraw figure this.fig.reset(); } """ def __init__(self): self.dict_ = {"type": "helloworld"} style_tooltip = """ """ def text_with_tooltip(text, tooltip): html = '
'+text+'\n'\ ' '+tooltip+'
' return html def application(environ,start_response): status = '200 OK' valuePrimary1 = epics.caget('ISTTOK:central:RPump1-Pressure') valuePrimary2 = epics.caget('ISTTOK:central:RPump2-Pressure') valueChamber1 = epics.caget('ISTTOK:central:VVessel-Pressure') valueTMPadmission = epics.caget('ISTTOK:central:TMPump1-PressureAdmission') now = time.ctime() # Open database connection db = MySQLdb.connect(host = "192.168.1.152",user = "report", passwd="$report", db = "archive") # prepare a cursor object using cursor() method cursor = db.cursor() # 19 | ISTTOK:central:VVessel-Pressure sql_chamber ="SELECT `smpl_time`, `float_val` FROM `sample` WHERE `channel_id` = 19 ORDER BY `smpl_time` DESC LIMIT 250;" # 21 | ISTTOK:central:RPump1-Pressure sql_primary ="SELECT `smpl_time`, `float_val` FROM `sample` WHERE `channel_id` = 21 ORDER BY `smpl_time` DESC LIMIT 250;" # Execute the SQL command cursor.execute(sql_chamber) # Fetch all the rows in a list of lists. results = cursor.fetchall() data_chamber = [] for row in results: data_chamber.append([row[0],row[1]]) # Execute the SQL command cursor.execute(sql_primary) # Fetch all the rows in a list of lists. results = cursor.fetchall() data_primary = [] for row in results: data_primary.append([row[0],row[1]]) # disconnect from server db.close() # data_chamber = np.array(data_chamber) data_primary = np.array(data_primary) fig,axr = plt.subplots(1, sharex=True) axr.plot(data_chamber[:,0],data_chamber[:,1]) axr.plot(data_primary[:,0],data_primary[:,1]) axr.legend(['Tokamak Chamber', 'Primary pump'], loc =2) axr.set_xlabel('Time', fontsize = 15) axr.set_ylabel('Pressure [mbar]', fontsize = 15) axr.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.3e')) fig.set_size_inches(12,5, forward=True) fig.tight_layout() ax_fmt = HelloWorld() mpld3.plugins.connect(fig, ax_fmt) html2 = mpld3.fig_to_html(fig) html = '\n' \ '' \ 'ISTTOK EPICS WSGI Page' \ '\n' \ '\n' \ '
'+style_tooltip+'
\n'\ '
\n' \ 'mod_wsgi EPICS ISTTOK info Page\n' \ '
\n' \ '
\n' \ ' '+text_with_tooltip('Primary pump 1 pressure: '+ '{0:.3e}'.format(valuePrimary1)+ ' mBar','ISTTOK:vacuum:Pressure_Primary1')+'\n' \ '
\n' \ '
\n' \ ' '+text_with_tooltip('Turbopump 1 admission pressure: '+ '{0:.3e}'.format(valueTMPadmission)+ ' mBar','ISTTOK:vacuum:Pressure_TMP_admission')+'\n' \ '
\n' \ '
\n' \ ' '+text_with_tooltip('Tokamak Vessel pressure: '+ '{0:.3e}'.format(valueChamber1)+ ' mBar','ISTTOK:vacuum:Pressure_Chamber1')+'\n' \ '
\n' \ '
\n' \ 'Current Time: ' +now+ '\n' \ '
\n'+html2 +'
\n' \ '\n' \ '\n' response_header = [('Content-type','text/html')] start_response(status,response_header) html = bytes(html, encoding= 'utf-8') return [html] #'
\n'+html2.encode('utf8')+'
\n' \