Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
cs
cli
bcsbridge
Commits
a104a684
Commit
a104a684
authored
Apr 28, 2022
by
Claudio Scafuri
💬
Browse files
Merge branch 'port_log_from_config' into 'master'
Port log from config See merge request
!5
parents
8f9b4885
bbf7ec68
Changes
3
Hide whitespace changes
Inline
Side-by-side
TCPSserver/TCPS2tango.py
View file @
a104a684
...
...
@@ -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
...
...
TCPSserver/TCPStwserver.py
View file @
a104a684
...
...
@@ -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)
...
...
TCPSserver/TODO
View file @
a104a684
- 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?
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment