Exemple #1
0
        //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();
        }