#!/bin/sh
# \
exec oagtclsh "$0" "$@"

set auto_path [linsert $auto_path 0 /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]
APSStandardSetup

#Input files: /home/helios/oagData/deviceConfig/IOCs.sdds
#Output files: injIOC.mon
#               srIOC.mon

if {[catch {exec sdds2stream /home/helios/oagData/deviceConfig/IOCs.sdds -col=Name,Operational,Tag} results]} {
    puts "ERROR: $results"
    exit
}
set data(ParameterNames) "InstallLocation"
set data(ColumnNames) "ControlName ReadbackName ReadbackUnits Provider ExpectNumeric ExpectFieldType ExpectElements"
set data(ParameterInfo.InstallLocation) "type SDDS_STRING"
set data(ColumnInfo.ControlName) "type SDDS_STRING"
set data(ColumnInfo.ReadbackName) "type SDDS_STRING"
set data(ColumnInfo.ReadbackUnits) "type SDDS_STRING"
set data(ColumnInfo.Provider) "type SDDS_STRING"
set data(ColumnInfo.ExpectNumeric) "type SDDS_CHARACTER"
set data(ColumnInfo.ExpectFieldType) "type SDDS_STRING"
set data(ColumnInfo.ExpectElements) "type SDDS_LONG"

set data(Parameter.InstallLocation) "/home/helios/oagData/monitoring/injIOC/injIOC.mon"

foreach "name operational tag" $results {
    set machine [lindex [split $tag ,] 0]
    if {$operational && ($machine != "SR")} {
        if {(($tag == "Booster,BPM") && ([string match iocb?c?bpm $name])) || \
              (($tag == "Booster,Diagnostic") && (($name == "iocbdiag1") || ($name == "iocbtune")))} {
            append data(Column.ControlName) "${name}:load "
            append data(Column.ControlName) "${name}:memoryFree "
            append data(Column.ControlName) "${name}:casCcCount "
            append data(Column.ControlName) "${name}:casChCount "
            
            append data(Column.ReadbackName) "${name}:load "
            append data(Column.ReadbackName) "${name}:memoryFree "
            append data(Column.ReadbackName) "${name}:casCcCount "
            append data(Column.ReadbackName) "${name}:casChCount "

            append data(Column.ReadbackUnits) {"percent" "bytes" "" "" }
            append data(Column.Provider) "ca ca ca ca "
            append data(Column.ExpectNumeric) "y y y y "
            append data(Column.ExpectFieldType) "scalar scalar scalar scalar "
            append data(Column.ExpectElements) "1 1 1 1 "
        } else {
            append data(Column.ControlName) "${name}:IOC_CPU_LOAD "
            append data(Column.ControlName) "${name}:MEM_FREE "
            append data(Column.ControlName) "${name}:FD_FREE "
            append data(Column.ControlName) "${name}:CA_CLNT_CNT "
            append data(Column.ControlName) "${name}:CA_CONN_CNT "
            
            append data(Column.ReadbackName) "${name}:IOC_CPU_LOAD "
            append data(Column.ReadbackName) "${name}:MEM_FREE "
            append data(Column.ReadbackName) "${name}:FD_FREE "
            append data(Column.ReadbackName) "${name}:CA_CLNT_CNT "
            append data(Column.ReadbackName) "${name}:CA_CONN_CNT "
            
            append data(Column.ReadbackUnits) {"percent" "bytes" "" "" "" }
            append data(Column.Provider) "ca ca ca ca ca "
            append data(Column.ExpectNumeric) "y y y y y "
            append data(Column.ExpectFieldType) "scalar scalar scalar scalar scalar "
            append data(Column.ExpectElements) "1 1 1 1 1 "
        }
    }
}
set data(Column.ControlName) [list $data(Column.ControlName)]
set data(Column.ReadbackName) [list $data(Column.ReadbackName)]
set data(Column.ReadbackUnits) [list $data(Column.ReadbackUnits)]
set data(Column.Provider) [list $data(Column.Provider)]
set data(Column.ExpectNumeric) [list $data(Column.ExpectNumeric)]
set data(Column.ExpectFieldType) [list $data(Column.ExpectFieldType)]
set data(Column.ExpectElements) [list $data(Column.ExpectElements)]

sdds save ../DataLogging/injIOC.mon data

exec sddssort ../DataLogging/injIOC.mon -col=ControlName -num -nowarn

set data(Column.ControlName) ""
set data(Column.ReadbackName) ""
set data(Column.ReadbackUnits) ""
set data(Column.Provider) ""
set data(Column.ExpectNumeric) ""
set data(Column.ExpectFieldType) ""
set data(Column.ExpectElements) ""

set data(Parameter.InstallLocation) "/home/helios/oagData/monitoring/srIOC/srIOC.mon"

foreach "name operational tag" $results {
    set machine [lindex [split $tag ,] 0]
    if {$operational && ($machine == "SR")} {
        if {0} {
            append data(Column.ControlName) "${name}:load "
            append data(Column.ControlName) "${name}:memoryFree "
            append data(Column.ControlName) "${name}:casCcCount "
            append data(Column.ControlName) "${name}:casChCount "
            
            append data(Column.ReadbackName) "${name}:load "
            append data(Column.ReadbackName) "${name}:memoryFree "
            append data(Column.ReadbackName) "${name}:casCcCount "
            append data(Column.ReadbackName) "${name}:casChCount "

            append data(Column.ReadbackUnits) {"percent" "bytes" "" "" }
            append data(Column.Provider) "ca ca ca ca "
            append data(Column.ExpectNumeric) "y y y y "
            append data(Column.ExpectFieldType) "scalar scalar scalar scalar "
            append data(Column.ExpectElements) "1 1 1 1 "
        } else {
            append data(Column.ControlName) "${name}:IOC_CPU_LOAD "
            append data(Column.ControlName) "${name}:MEM_FREE "
            append data(Column.ControlName) "${name}:FD_FREE "
            append data(Column.ControlName) "${name}:CA_CLNT_CNT "
            append data(Column.ControlName) "${name}:CA_CONN_CNT "
            
            append data(Column.ReadbackName) "${name}:IOC_CPU_LOAD "
            append data(Column.ReadbackName) "${name}:MEM_FREE "
            append data(Column.ReadbackName) "${name}:FD_FREE "
            append data(Column.ReadbackName) "${name}:CA_CLNT_CNT "
            append data(Column.ReadbackName) "${name}:CA_CONN_CNT "
            
            append data(Column.ReadbackUnits) {"percent" "bytes" "" "" "" }
            append data(Column.Provider) "ca ca ca ca ca "
            append data(Column.ExpectNumeric) "y y y y y "
            append data(Column.ExpectFieldType) "scalar scalar scalar scalar scalar "
            append data(Column.ExpectElements) "1 1 1 1 1 "
        }
    }
}
set data(Column.ControlName) [list $data(Column.ControlName)]
set data(Column.ReadbackName) [list $data(Column.ReadbackName)]
set data(Column.ReadbackUnits) [list $data(Column.ReadbackUnits)]
set data(Column.Provider) [list $data(Column.Provider)]
set data(Column.ExpectNumeric) [list $data(Column.ExpectNumeric)]
set data(Column.ExpectFieldType) [list $data(Column.ExpectFieldType)]
set data(Column.ExpectElements) [list $data(Column.ExpectElements)]

sdds save ../DataLogging/srIOC.mon data

exec sddssort ../DataLogging/srIOC.mon -col=ControlName -num -nowarn



