115 lines
2.3 KiB
Tcl
Executable File
115 lines
2.3 KiB
Tcl
Executable File
#!/usr/bin/tclsh
|
|
|
|
foreach {adr obj} {
|
|
IKA-GAMA:Luft_S10 luft
|
|
IKA-GAMA:Luft_S2 luft_wlga
|
|
} {
|
|
set values($adr) -1
|
|
set objects($adr) $obj
|
|
}
|
|
|
|
proc readpipe {} {
|
|
global sea values
|
|
|
|
set line [gets $sea(pipe)]
|
|
if {$sea(debug)} {
|
|
puts stdout "> $line"
|
|
}
|
|
if {[eof $sea(pipe)]} {
|
|
puts stdout EOF
|
|
exit
|
|
}
|
|
lassign $line adr date time value
|
|
set values($adr) $value
|
|
send_to_sea
|
|
}
|
|
|
|
proc seacom {line} {
|
|
global sea
|
|
|
|
puts $sea(sock) $line
|
|
flush $sea(sock)
|
|
if {$sea(debug)} {
|
|
puts stdout "> $line"
|
|
}
|
|
}
|
|
|
|
proc send_to_sea {} {
|
|
global sea values objects
|
|
|
|
foreach adr [array names values] {
|
|
if {$values($adr) >= 0} {
|
|
seacom "$objects($adr) confirm $sea(heartbeat) $values($adr)"
|
|
}
|
|
}
|
|
catch {after cancel $sea(afterid)}
|
|
set sea(afterid) [after [expr int(1000 * $sea(heartbeat))] send_to_sea]
|
|
}
|
|
|
|
proc readsea {} {
|
|
global sea values
|
|
|
|
set line [gets $sea(sock)]
|
|
if {[eof $sea(sock)]} {
|
|
exit
|
|
}
|
|
if {$sea(debug)} {
|
|
puts stdout "< $line"
|
|
}
|
|
# if {[scan $line {HEARTBEAT %d %s} sea(heartbeat) values($adr)]} {
|
|
# send_to_sea
|
|
# }
|
|
}
|
|
|
|
set env(EPICS_CA_ADDR_LIST) cryo-cagw:5062
|
|
set env(EPICS_CA_AUTO_ADDR_LIST) NO
|
|
set env(PATH) $env(PATH):/afs/psi.ch/project/sinq/rhel7/stow/base-3.15.5/bin/linux-x86_64-debug/
|
|
|
|
set sea(debug) [lindex "$argv 0" 0]
|
|
if {$sea(debug) eq "1"} {
|
|
set sea(heartbeat) 20
|
|
} else {
|
|
set sea(heartbeat) 300
|
|
set sea(debug) 0
|
|
}
|
|
|
|
# connect to sea server prep0
|
|
set sea(sock) [socket samenv.psi.ch 8640]
|
|
fileevent $sea(sock) readable readsea
|
|
if {$sea(debug)} {
|
|
seacom "seauser seaser"
|
|
} else {
|
|
seacom "Spy 007"
|
|
}
|
|
set cmd "/afs/psi.ch/project/sinq/rhel7/stow/base-3.15.5/bin/linux-x86_64-debug/camonitor [array names values]"
|
|
|
|
set ret [catch {set proc [exec ps ax -o pid,args | grep $cmd]} msg]
|
|
set killed [list]
|
|
if {$ret == 0} {
|
|
foreach line [split $proc "\n"] {
|
|
set l [split [string trim $line]]
|
|
set c [lrange $l 1 end]
|
|
if {"$c" eq "$cmd"} {
|
|
# process was still running
|
|
lappend killed [lindex $l 0]
|
|
exec kill -9 [lindex $l 0]
|
|
}
|
|
}
|
|
}
|
|
|
|
set sea(pipe) [open "|$cmd" r]
|
|
fileevent $sea(pipe) readable readpipe
|
|
|
|
set mypid [pid $sea(pipe)]
|
|
set f [open $env(HOME)/monitfiles/luft_camonitor.pid w]
|
|
puts $f $mypid
|
|
close $f
|
|
|
|
puts stdout $mypid
|
|
if {[llength $killed] > 0 && $sea(debug)} {
|
|
puts stdout "killed $killed"
|
|
}
|
|
|
|
seacom "clientlog luft started"
|
|
vwait forever
|