From 69ae61c7a916d9aa4729f978fb36c29ff4842d0f Mon Sep 17 00:00:00 2001 From: Lorenzo Pivetta <lorenzo.pivetta@elettra.eu> Date: Mon, 29 May 2023 15:22:51 +0200 Subject: [PATCH] First import --- gen_seq_starter_monitor.m | 93 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 gen_seq_starter_monitor.m diff --git a/gen_seq_starter_monitor.m b/gen_seq_starter_monitor.m new file mode 100644 index 0000000..d32533c --- /dev/null +++ b/gen_seq_starter_monitor.m @@ -0,0 +1,93 @@ +clear all; + +for num_sequences=1:32 + +seq_name = sprintf('seq_starter_monitor_%d.txt',num_sequences); + +header{1} = '#'; +header{2} = '# Description: Monitor tango server instances managed by $devstarter'; +header{3} = '# Author: Giulio Gaio'; +header{4} = '# Date: 01/10/2020'; +header{5} = '#'; +header{6} = sprintf('# This script monitor %d servers controlled by Starter',num_sequences); +header{7} = '#'; + +cnt = 0; + +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;read(this/Enable%02d) == 1 ? (write(this/ErrorCounter%02d) = 0) && goto(%d) : goto(%d);Resetting error counter;Failed to reset error counter;-1',cnt,seq,seq,cnt+1,cnt+5); + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;sleep($sleep_monitor) && (read($dev%02d$/State) == FAULT) ? goto(%d) : goto(%d);Checking $dev%02d state;Error checking $dev%02d state;-1;tangoerror=goto(%d)',cnt,seq,cnt+4,cnt+4,seq,seq,cnt+1); + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;(write(this/ErrorCounter%02d) = (read(this/ErrorCounter%02d) + 1)) && (read(this/ErrorCounter%02d) > read(this/MaxErrorCounter)) ? goto(%d) : goto(%d);Retrying reading $dev%02d;Error retrying reading $dev%02d;-1',cnt,seq,seq,seq,cnt+1,cnt-1,seq,seq); + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;(command($devstarter/HardKillServer) = $instance%02d$) && sleep($sleep_kill) && goto(%d);Stopping $bin%02d $dev%02d server;Error stopping $bin%02d $dev%02d server;-1;tangoerror=goto(%d)',cnt,seq,cnt+1,seq,seq,seq,seq,cnt+1); + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;(command($devstarter/DevStart) = $instance%02d$) && sleep($sleep_start) && goto(%d);Starting $bin%02d $dev%02d server;Error stopping $bin%02d $dev%02d server;-1;tangoerror=goto(%d)',cnt,seq,cnt+1,seq,seq,seq,seq,cnt+1); +end + +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;read(this/LoopMode) == 1 ? goto(1) : goto(%d);Cycling;Cycling;-1',cnt,cnt+1); + +% dynamic attributes +cnt = 0; +cnt = cnt + 1; +footer{cnt} = 'attr;MaxErrorCounter;long;3'; +cnt = cnt + 1; +footer{cnt} = 'attr;LoopMode;bool;1'; + +for seq=1:num_sequences + cnt = cnt + 1; + footer{cnt} = sprintf('attr;Enable%02d;bool;1',seq); + cnt = cnt + 1; + footer{cnt} = sprintf('attr;ErrorCounter%02d;long;0',seq); +end + +fileID = fopen(seq_name,'w'); +for i=1:size(header,2) + fprintf(fileID,'%s\n',header{i}); +end +for i=1:size(blk,2) + fprintf(fileID,'%s\n',blk{i}); +end +for i=1:size(footer,2) + fprintf(fileID,'%s\n',footer{i}); +end + +fclose(fileID); + +end + +% Dynamic R/W attributes +% +% User +% attr;Enable01;bool;0 +% attr;Enable02;bool;0 +% attr;MaxErrorCounter;long;3 + +% ......... +% Internal +% attr;ErrorCounter01;long;0 +% attr;ErrorCounter01;long;0 + +% Wildcards +% $devstarter= +% sleep_monitor=2 +% $sleep_kill=10 +% $sleep_start=10 +% $dev01$=slu/diagnostics/ccd_slu.01 +% $instance01$='gigecam-srv/ccd-slu-ehf-01' +% $dev02$=slu/diagnostics/ccd_slu.02 +% $instance02$='gigecam-srv/ccd-slu-ehf-02' +% ......... + + + + + + + + + + -- GitLab