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