Commit a104a684 authored by Claudio Scafuri's avatar Claudio Scafuri 💬
Browse files

Merge branch 'port_log_from_config' into 'master'

Port log from config

See merge request !5
parents 8f9b4885 bbf7ec68
......@@ -5,6 +5,8 @@
# import string
import tango
import os.path as op
# module wide constants
okmsg = "Command execution OK"
errmsg_header = "*** ERROR"
......@@ -150,9 +152,12 @@ class ProxyContainer(object):
"""
@param string fname :
@return :
@return : [result , port, log_f]
@author
"""
port_n = "20000"
log_f = "/dev/null"
self.logger.debug("ProxyContainer.parse_conf_file() parsing: " + fname)
try:
conf_file = open(fname, "r")
......@@ -176,7 +181,7 @@ class ProxyContainer(object):
): # discard comment and empyt lines
continue
datum = line.split(" ")
if datum[0] != "GET" and datum[0] != "SET":
if not (datum[0] == "GET" or datum[0] == "SET" or datum[0] == "PORT_NUMBER" or datum[0] == "LOG_FILE"):
result = False
self.logger.error(
"ProxyContainer: parse_conf_file error on line "
......@@ -184,7 +189,37 @@ class ProxyContainer(object):
+ " "
+ datum[0]
)
return result
return [result, port_n, log_f]
if datum[0] == "PORT_NUMBER":
port_str = datum[-1]
try:
portint = int(port_str)
except ValueError as e:
portint = -1
if str(portint) != port_str:
result = False
self.logger.error(
"ProxyContainer: parse_conf_file error on line "
+ repr(count)
+ " : PORT_NUMBER "
+ datum[1]
)
return [result, port_n, log_f]
port_n = portint
if datum[0] == "LOG_FILE":
log_name = datum[-1]
if not op.exists(op.dirname(log_name)):
result = False
self.logger.error(
"ProxyContainer: parse_conf_file error on line "
+ repr(count)
+ " : LOG_FILE "
+ datum[1]
)
return [result, port_n, log_f]
log_f = log_name
if datum[0] == "GET":
if datum[1] not in self.get_dict:
tangostring = datum[-1]
......@@ -201,7 +236,7 @@ class ProxyContainer(object):
+ " : SET duplicate "
+ datum[1]
)
return result
return [result, port_n, log_f]
if datum[0] == "SET":
# create special keys for searching - must include also list of parameter names
......@@ -229,9 +264,9 @@ class ProxyContainer(object):
+ " : SET duplicate "
+ repr(datum)
)
return result
return [result, port_n, log_f]
return result
return [result, port_n, log_f]
def dispatch_call(self, data):
"""
......@@ -381,25 +416,41 @@ class ProxyAttribute(Proxy):
# resp='R'+','+'?'+','+rstat+','+0+term
return "R,?,BEN------,0" + term
try:
# self.logger.debug( 'ProxyAttribute.get(): reading : '+self.__devname)
self.logger.debug( 'ProxyAttribute.get(): reading : '+self.__devname + '/'+self.__attribute)
attr = self.__device.read_attribute(
self.__attribute
) # read_attribute_as_string ????
val = attr.value
# self.logger.debug( 'ProxyAttribute.get(): reading value ok')
if val is None: # some devices return INVALID if not correctly woarking - force to NaN and error
error = True
val = float("Nan")
except tango.DevFailed as myex:
des0 = myex[0].desc
des0 = myex.args[0].reason
self.logger.error(
"GET: "
+ self.__devname
+ "/"
+ self.__attribute
+ " failed with exception "
+ " failed with exception: "
+ des0
)
self.logger.debug('ProxyAttribute.GET(): reading value failed')
# print 'ProxyAttribute: get() '+self.__attribute+' ERROR'
val = 0
error = True
except Exception as e:
self.logger.error(
"GET: "
+ self.__devname
+ "/"
+ self.__attribute
+ " failed with Exception"
)
self.logger.debug('ProxyAttribute.get(): reading value excpetion')
val = 0
error = True
# analyze result and prepare answer
rtype = "?"
......@@ -483,8 +534,8 @@ class ProxyAttribute(Proxy):
if self.__attrinfo == 0:
try:
self.__attrinfo = self.__device.get_attribute_config(self.__attribute)
except tango.DevFailed as e:
des = e[0].desc
except tango.DevFailed as myex:
des = myex.args[0].reason
errmsg = errmsg_header + " in perform command : " + des
self.logger.error(
"ProxyAttribute.set(): failed to create self.__attrinfo for: "
......@@ -505,13 +556,15 @@ class ProxyAttribute(Proxy):
+ "/"
+ self.__attribute
)
self.logger.debug( 'writing '+self.__devname+'/'+self.__attribute)
self.__device.write_attribute(self.__attrinfo, val)
self.logger.info(
"SET: ACCEPT" + self.__devname + "/" + self.__attribute + " " + data[0]
)
return okmsg + term
except tango.DevFailed as myex:
des0 = myex[0].desc
self.logger.debug( 'excpetion writing '+self.__devname+'/'+self.__attribute)
des0 = myex.args[0].reason
self.logger.debug(
"SET: "
+ self.__devname
......
......@@ -5,6 +5,7 @@ from twisted.internet.protocol import Factory
from twisted.internet import reactor
# import time
import os.path as op
import sys
import TCPS2tango
import logging
......@@ -66,11 +67,85 @@ def makeTCPSFactory(
factory._timeout = timeout
factory.handler = TCPS2tango.ProxyContainer()
factory.handler.add_logger(logger)
factory.handler.parse_conf_file(fname)
[res, port, log] = factory.handler.parse_conf_file(fname)
# print(res)
# print(port)
# print(log)
return factory
def pre_parse_conf_file(fname):
"""
@extract port number , name of log file form configuration
@param string fname :
@return : [result , port, log_f]
"""
port_n = 20000 # default
log_f = "/dev/null"
result = True
try:
conf_file = open(fname, "r")
except Exception:
print(
"pre_parse_conf_file() fatal error opening conf_file: "
+ fname
)
raise # impossible to continue....
count = 0
result = True
for rawline in conf_file.readlines():
if not rawline.strip():
continue # discard empty lines
count = count + 1
line = " ".join(
rawline.split()
) # collapse multiple white spaces into single white space
if (
line[0] == "#" or line[0] == "*" or not line.strip()
): # discard comment and empyt lines
continue
datum = line.split(" ")
if not (datum[0] == "GET" or datum[0] == "SET" or datum[0] == "PORT_NUMBER" or datum[0] == "LOG_FILE"):
result = False
print(
"pre_parse_conf_file error on line "
+ repr(count)
+ " "
+ datum[0]
)
return [result, port_n, log_f]
if datum[0] == "PORT_NUMBER":
port_str = datum[-1]
try:
portint = int(port_str)
except ValueError as e:
portint = -1
if str(portint) != port_str:
result = False
print(
"pre_parse_conf_file error on line "
+ repr(count)
+ " : PORT_NUMBER "
+ datum[1]
)
return [result, port_n, log_f]
port_n = portint
if datum[0] == "LOG_FILE":
log_name = datum[-1]
if not op.exists(op.dirname(log_name)):
result = False
print(
"pre_parse_conf_file error on line "
+ repr(count)
+ " : LOG_FILE "
+ datum[1]
)
return [result, port_n, log_f]
log_f = log_name
return [result, port_n, log_f]
# -----------------------------------------------------------------
# remeber to switch use argparse for configuring cmd line options with python > 2.7
......@@ -98,13 +173,17 @@ def main(argv=None):
if options.port:
tcpport = int(options.port)
force_port = True
else:
tcpport = 20000
force_port = False
if options.logfile:
lfile = options.logfile
force_logfile = True
else:
lfile = "/dev/null"
force_logfile = False
if options.loglevel:
lev = options.loglevel
......@@ -135,6 +214,13 @@ def main(argv=None):
else:
verbose = False
# pre-parse the configuration file to extract port number and name of log gfile
[res, port_n, log_f] = pre_parse_conf_file(fname)
if not force_logfile:
lfile = log_f # if log file name is not forced on cmd line get it from config file (or default)
if not force_port:
tcpport = port_n # if port number is not forced on cmd line get it from config file (or default)
# Set up a specific logger with our desired output level
# use INFO for for tracking all SET operations
# use ERROR and CRITICAL for errors (non-fatal and fatal)
......
- analizzare "exception processing data"
- Transient CORBA excpetion:come si alza il timeout?
\ No newline at end of file
- Transient CORBA excpetion:come si alza il timeout?
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment