//3 modes private void Experiment1(int mode) { LogWrite("Starting experiment mode " + mode.ToString()); workflows = 2; steps = 20; //max 20 int delay = 120; //150 var testpDescriptionReader = new DescriptionReader("testp.wf"); var bsmDescriptionReader = new DescriptionReader("bsm.wf"); foreach (var pair in bsmDescriptionReader.InputFiles) { var val = ConfigurationManager.AppSettings[pair.Key]; _api.BindFile(pair.Key, val); } var timer = new Timer(); int i = 1; timer.Elapsed += new ElapsedEventHandler((s, e) => { Random random = new Random(); if (i > workflows) { i = 0; timer.Stop(); } else if (i == 1) { StringBuilder sb = new StringBuilder(); sb.Append(testpDescriptionReader.Script); for (int step = 1; step <= 2 * steps; step++) { //if (step > amount/2) offset = 40; sb.Append("\n step s" + step + " runs testp (\n in0=" + i + step + ",\n in1=1,\n timeToWait=" + (delay / i + random.Next(0, 20)).ToString() + "\n)\n"); } _api.Script = sb.ToString(); jobMonitor = _api.CreateMonitor(); jobMonitor.UpdatePeriod = 1000 * 50; jobMonitor.Finished += JobMonitorOnFinishedExp1; jobMonitor.Active += JobMonitorOnActive; LogWrite(DateTime.Now.ToLongTimeString() + " " + steps + " testp pushed: " + i + "/" + "; id:" + jobMonitor.JobId); LogWrite(_api.Script.Substring(0, 57)); if (mode == 1 || mode == 3) { timer.Interval = 20 * 1000; LogWrite("Waiting 25 sec"); } jobMonitor.Run(); } else { StringBuilder sb = new StringBuilder(); //sb.Append(bsmDescriptionReader.Script); if (mode > 1) //2,3 { sb.Append("[flow:priority = @urgent]\n"); if (mode == 2) { sb.Append("[flow:MinTime = " + '"' + "0" + '"' + "]\n[flow:MaxTime = " + '"' + "0" + '"' + "]\n"); } } if (mode > 2) { sb.Append("[flow:MinTime = " + '"' + "0" + '"' + "]\n[flow:MaxTime = " + '"' + "0" + '"' + "]\n"); } for (int step = 1; step <= steps; step++) { sb.Append("\n step MaskedFullBSM_" + step + " runs bsm \n (\n inMeasurement = measurementFile,\n inHirlam = hirlam6,\n swan = swanFile,\n inBSH = BSHFile,\n useAssimilation = true,\n useSWAN = true,\n useBSH = true,\n useOldProject = false,\n useMask = false,\n startCalcDate = \"09/01/2007 12:00:00\",\n inAssFields = assFields,\n inProject = projects,\n controlPoints = inControlPoints,\n deleteDirs = true,\n ForecastSize = 3 \n)\n"); } _api.Script = sb.ToString(); jobMonitor = _api.CreateMonitor(); jobMonitor.UpdatePeriod = 1000 * 5; jobMonitor.Finished += JobMonitorOnFinishedExp1; jobMonitor.Active += JobMonitorOnActive; LogWrite(DateTime.Now.ToLongTimeString() + " " + steps + " bsm pushed: " + i + "/" + "; id:" + jobMonitor.JobId); LogWrite(_api.Script.Substring(0, 70)); jobMonitor.Run(); //timer.Interval = 120 * 1000; timer.Stop(); } i++; }); timer.Interval = 1000; timer.Start(); }