private ScriptStatus GetScriptStateStatus() { if (state != null) { switch (state.Status) { case TaskStatus.RanToCompletion: status = ScriptStatus.Completed; break; case TaskStatus.Running: status = ScriptStatus.Running; break; case TaskStatus.Faulted: status = ScriptStatus.ThrowedException; break; case TaskStatus.Canceled: status = ScriptStatus.Cancelled; break; } } else { status = ScriptStatus.Unknown; } return(status); }
private void Save(object sender, EventArgs e) { if (ValidateBeforeSaving()) { ScriptType scriptType = EnumUtils.Parse <ScriptType>(cbxScriptType.SelectedValue); ScriptStatus scriptStatus = _script?.ScriptStatus ?? ScriptStatus.Stopped; _script = ScriptAbs.GetInstance(_script, scriptType); _script.ScriptName = tbxScriptName.Text; _script.ScriptPath = tbxScriptPath.Text; _script.ScriptStatus = scriptStatus; switch (scriptType) { case ScriptType.OneOff: break; case ScriptType.Scheduled: DateTime dt = DateTime.Parse(tbxScriptScheduled.Text); TimeSpan st = new TimeSpan(dt.Hour, dt.Minute, dt.Second); ((ScriptScheduled)_script).ScheduledHour = st; break; case ScriptType.ListenKey: ((ScriptListenKey)_script).TriggerKey = (KeyPressed)tbxKeyPressed.Tag; break; default: break; } DialogResult = DialogResult.OK; Close(); } }
private void ApplyScript(ChangeScript script, string scriptContent, ScriptStatus scriptStatusSucess) { RecordScriptStatus(script, ScriptStatus.Started); // Begin transaction //queryExecuter.BeginTransaction(); infoTextWriter.WriteLine(script); infoTextWriter.WriteLine("----------------------------------------------------------"); // Apply changes and update ChangeLog table var output = new StringBuilder(); try { ApplyChangeScript(script, scriptContent, output); RecordScriptStatus(script, scriptStatusSucess, output.ToString()); } catch (Exception ex) { if (ex.InnerException != null) { infoTextWriter.WriteLine(ex.ToString()); output.AppendLine(ex.Message); } RecordScriptStatus(script, ScriptStatus.Failure, output.ToString()); throw; } }
public async Task <bool> ChangeScriptStatus(ScriptAbs script) { ScriptStatus oldStatus = script.ScriptStatus; script.ScriptStatus = GetNewScriptStatus(oldStatus); Log.Debug("Change {@ScriptName} ({@ScriptType}) Script Status from {@OldStatus} to {@NewStatus}", script.ScriptName, script.ScriptType, oldStatus, script.ScriptStatus); if (script.ScriptStatus == ScriptStatus.Running) { if (script is ScriptListenKey) { _listenKeysService.Run(); } else { await _runScriptService.RunScript(script); } } else { if (script is ScriptListenKey && !IsListenKeyServiceNecessary()) { _listenKeysService.Stop(); } else { await _runScriptService.StopScript(script); } } _settingsService.SaveScripts(_scripts); return(script.ScriptStatus != oldStatus); }
public void retornar_que_script_foi_executado_com_sucesso(ScriptStatus scriptStatus) { var changeEntry = new ChangeEntry("Folder", 1) { Status = scriptStatus }; changeEntry.ExecutedSuccessfully.Should().BeTrue(); }
public void Update(string file, ScriptStatus status, string storePath) { var first = this.FirstOrDefault(x => x.File == file); if (first != null) { first.Status = status; first.StoreFile = storePath; } }
public ScriptExecutionResult ExecuteAsync(string script, ScriptOptions opt, INotifier notifier, CancellationToken cancellationToken = default(CancellationToken)) { var result = new ScriptExecutionResult { Variables = new List <VariableInfo>(), Errors = new List <ErrorInfo>() }; status = ScriptStatus.PrepareToRun; //new Thread(() => ThreadPool.QueueUserWorkItem(_ => { try { state = CSharpScript.RunAsync <int>(script, opt, null, null, cancellationToken); status = GetScriptStateStatus(); result.Status = status; if (state.Exception != null && state.Exception.InnerExceptions.Count > 0) { result.Exception = state.Exception.InnerExceptions[0]; } state.ContinueWith(t => { result.Status = GetScriptStateStatus(); notifier.SendScriptExecutionResults(result); return(t); }, cancellationToken); } catch (CompilationErrorException e) { status = ScriptStatus.CompiledWithErrors; result.Status = status; foreach (var err in e.Diagnostics) { result.Errors.Add(new ErrorInfo { Info = err.ToString() }); } notifier.SendScriptExecutionResults(result); } catch (Exception e) { status = ScriptStatus.ThrowedException; result.Exception = e; notifier.SendScriptExecutionResults(result); } });//.Start(); result.Status = status; notifier.SendScriptExecutionResults(result); return(result); }
/// <summary> /// 执行脚本内容 /// </summary> /// <param name="script_str">脚本的字符串内容</param> public void Execute_Script_Text(string script_str) { var ss = new ScriptStatus(); ss.version = 1; ss.env_arg = new Dictionary<string, string>(); foreach (string item in script_str.Split('\n')) { Parse_Single_Command(item.Replace("\r", "").Trim(), ref ss); } }
/// <summary> /// 执行脚本内容 /// </summary> /// <param name="script_str">脚本的字符串内容</param> public void Execute_Script_Text(string script_str) { var ss = new ScriptStatus(); ss.version = 1; ss.env_arg = new Dictionary <string, string>(); foreach (string item in script_str.Split('\n')) { Parse_Single_Command(item.Replace("\r", "").Trim(), ref ss); } }
public override void SetStatus(ScriptStatus desiredStatus) { var currentName = currentScript.Value; for (var i = 0; i < executionStates.Length; i++) { var state = executionStates[i]; if (state.Description == currentName) { SetStatus((ushort)i, desiredStatus); } executionStates[i] = state; } }
/// <summary> /// Records the script status. /// </summary> /// <param name="script">The script.</param> /// <param name="status">The status.</param> /// <param name="output">The output of the script.</param> /// <exception cref="SchemaVersionTrackingException">Could not update change log because: + e.Message</exception> public virtual void RecordScriptStatus(ChangeScript script, ScriptStatus status, string output = null) { try { // Insert or update based on if there is a change ID. // Update complete date for all but started. var completeDateValue = status != ScriptStatus.Started ? this.syntax.CurrentTimestamp : "NULL"; if (script.ChangeId == 0) { var sql = string.Format( CultureInfo.InvariantCulture, @"INSERT INTO {0} (Folder, ScriptNumber, ScriptName, StartDate, CompleteDate, AppliedBy, ScriptStatus, ScriptOutput) VALUES (@1, @2, @3, {1}, {2}, {3}, @4, @5) SELECT ChangeId FROM {0} WHERE Folder = @1 and ScriptNumber = @2", this.changeLogTableName, this.syntax.CurrentTimestamp, completeDateValue, this.syntax.CurrentUser); // Execute insert and set change id so it can be updated. using (var reader = this.queryExecuter.ExecuteQuery(sql, script.Folder, script.ScriptNumber, script.ScriptName, (int)status, output ?? string.Empty)) { reader.Read(); script.ChangeId = reader.GetInt32(0); } } else { // Update existing entry. var sql = string.Format( CultureInfo.InvariantCulture, "UPDATE {0} SET Folder = @1, ScriptNumber = @2, ScriptName = @3, {1}CompleteDate = {2}, AppliedBy = {3}, ScriptStatus = @4, ScriptOutput = @5 WHERE ChangeId = @6", this.changeLogTableName, status == ScriptStatus.Started ? string.Format(CultureInfo.InvariantCulture, "StartDate = {0}, ", this.syntax.CurrentTimestamp) : string.Empty, completeDateValue, this.syntax.CurrentUser); this.queryExecuter.Execute(sql, script.Folder, script.ScriptNumber, script.ScriptName, (int)status, output ?? string.Empty, script.ChangeId); } } catch (DbException e) { throw new SchemaVersionTrackingException("Could not update change log because: " + e.Message, e); } }
public void Run(int[] arguments, bool resetScriptCursor) { #if !COMPARE this.logFile.WriteLine("---------- Running Script {0} -----------", this.ResourceId); #endif if (scriptManager.ActiveScripts.Contains(this) == false) { scriptManager.ActiveScripts.Add(this); } this.Status = ScriptStatus.Running; // Init local variables this.LocalVariables = new int[25]; if (arguments.Length > 0) { for (int i = 0; i < arguments.Length; i++) { this.LocalVariables[i] = arguments[i]; } } // Run the script if (resetScriptCursor) { this.DataReader.BaseStream.Position = 0; } while (this.DataReader.BaseStream.Position < this.DataReader.BaseStream.Length && this.Status == ScriptStatus.Running) { this.ExecuteInstruction(); } if (this.Status == ScriptStatus.Running) { this.Status = ScriptStatus.Stopped; } #if !COMPARE this.logFile.WriteLine("---------- Script {0} stopped -----------", this.ResourceId); #endif }
private ScriptStatus GetNewScriptStatus(ScriptStatus oldStatus) { ScriptStatus newStatus = ScriptStatus.Undefined; switch (oldStatus) { case ScriptStatus.Running: newStatus = ScriptStatus.Stopped; break; case ScriptStatus.Undefined: case ScriptStatus.Stopped: newStatus = ScriptStatus.Running; break; default: break; } return(newStatus); }
public void SetGlobalStatusMessage(ScriptStatus gs) { switch (gs) { case ScriptStatus.Editing: globalStatusMessage.Message = "Editing"; break; case ScriptStatus.Running: globalStatusMessage.Message = "Running"; break; case ScriptStatus.Paused: globalStatusMessage.Message = "Paused"; break; case ScriptStatus.ExecutionError: globalStatusMessage.Message = "Execution Error"; break; } }
public new void RecordScriptStatus(ChangeScript changeScript, ScriptStatus status, string output) { base.RecordScriptStatus(changeScript, status, output); }
private void UpdateScriptList(int index, string content, ScriptStatus status) { // change index to 1-base index++; if (index > scriptDisplay.Items.Count) { string displayStatus; if (status == ScriptStatus.Untracked) { displayStatus = TextCollection.RecorderScriptStatusNoAudio; } else { displayStatus = status.ToString(); } ListViewItem item = scriptDisplay.Items.Add(displayStatus); item.SubItems.Add(content); } else { if (status != ScriptStatus.Default) { string displayStatus; if (status == ScriptStatus.Untracked) { displayStatus = TextCollection.RecorderScriptStatusNoAudio; } else { displayStatus = status.ToString(); } scriptDisplay.Items[index - 1].SubItems[0].Text = displayStatus; } if (content != null) { scriptDisplay.Items[index - 1].SubItems[1].Text = content; } } }
/// <summary> /// Records the script status. /// </summary> /// <param name="script">The script.</param> /// <param name="status">The status.</param> /// <param name="output">The output of the script.</param> /// <exception cref="SchemaVersionTrackingException">Could not update change log because: + e.Message</exception> public virtual void RecordScriptStatus(ChangeScript script, ScriptStatus status, string output = null) { try { output = string.IsNullOrEmpty(output) ? " " : RemoveInvalidCharacters(output); var completeDateValue = status != ScriptStatus.Started ? syntax.CurrentTimestamp : "NULL"; queryExecuter.BeginTransaction(); if (string.IsNullOrWhiteSpace(script.ChangeId)) { var sqlInsert = string.Format( CultureInfo.InvariantCulture, @"INSERT INTO {0} (ChangeId, Folder, ScriptNumber, ScriptName, StartDate, CompleteDate, AppliedBy, ScriptStatus, ScriptOutput) VALUES ('{1}', '{2}', {3}, '{4}', {5}, {6}, {7}, {8}, '{9}')", changeLogTableName, Guid.NewGuid(), script.Folder, script.ScriptNumber, script.ScriptName, syntax.CurrentTimestamp, completeDateValue, syntax.CurrentUser, (int)status, output); queryExecuter.Execute(sqlInsert); var sqlSelect = string.Format("SELECT ChangeId FROM {0} WHERE Folder = '{1}' and ScriptNumber = {2}", changeLogTableName, script.Folder, script.ScriptNumber); using (var reader = queryExecuter.ExecuteQuery(sqlSelect)) { reader.Read(); script.ChangeId = (reader.GetString(0)); } } else { var sql = string.Format( CultureInfo.InvariantCulture, "UPDATE {0} SET Folder = '{1}', ScriptNumber = {2}, ScriptName = '{3}', {4}CompleteDate = {5}, AppliedBy = {6}, ScriptStatus = {7}, ScriptOutput = '{8}' WHERE ChangeId = '{9}'", changeLogTableName, script.Folder, script.ScriptNumber, script.ScriptName, status == ScriptStatus.Started ? string.Format(CultureInfo.InvariantCulture, "StartDate = {0}, ", syntax.CurrentTimestamp) : string.Empty, completeDateValue, syntax.CurrentUser, (int)status, output, script.ChangeId); queryExecuter.Execute(sql); } } catch (DbException e) { throw new SchemaVersionTrackingException("Could not update change log because: " + e.Message, e); } finally { queryExecuter.CommitTransaction(); } }
private void EnableDropDownItemsPerStatus(ToolStripItemCollection dropDownItems, ScriptStatus scriptStatus) { dropDownItems[0].Enabled = scriptStatus == ScriptStatus.Running; dropDownItems[1].Enabled = scriptStatus != ScriptStatus.Running; }
public abstract void SetStatus(ScriptStatus desiredStatus);
/// <summary> /// Records details about a change script in the database. /// </summary> /// <param name="changeScript">The change script.</param> /// <param name="status">Status of the script execution.</param> /// <param name="output">The output from running the script.</param> protected void RecordScriptStatus(ChangeScript changeScript, ScriptStatus status, string output = null) { this.schemaVersionManager.RecordScriptStatus(changeScript, status, output); }
public abstract void SetStatus(ushort methodId, ScriptStatus desiredStatus);
public void Stop() { this.Status = ScriptStatus.Stopped; scriptManager.ActiveScripts.Remove(this); }
/// <summary> /// Records details about a change changeScript in the database. /// </summary> /// <param name="changeScript">The change changeScript.</param> /// <param name="status">Status of the changeScript execution.</param> /// <param name="output">The output from running the changeScript.</param> protected void RecordScriptStatus(ChangeScript changeScript, ScriptStatus status, string output = null) { schemaVersionManager.RecordScriptStatus(changeScript, status, output); }
/// <summary> /// 解析并执行单个指令 /// </summary> /// <param name="cmd">指令的字符串</param> /// <param name="stat">脚本参数</param> private void Parse_Single_Command(string cmd, ref ScriptStatus stat) { string[] cmd_arg = Split_command(cmd); if (cmd_arg.Length == 0) return; //忽略调用函数的大小写 switch (cmd_arg[0].ToLower()) { //指令: version #region version command case "version": //参数不为两个,报错 if (cmd_arg.Length != 2) throw new ArgumentNullException("参数错误"); int test_version; //版本号不为数字,同样报错 if (!int.TryParse(cmd_arg[1], out test_version)) throw new ArgumentException("版本号为非数字"); //最后一个作死的,还是报错 if (test_version <= 0 || test_version > 1) throw new ArgumentOutOfRangeException("版本号超出范围(只为1)"); stat.version = test_version; break; #endregion //指令: sync #region sync command case "sync": //会不会switch - case语句有点多.... if (cmd_arg.Length < 3) throw new ArgumentNullException("参数错误"); //指令的附加参数 var inc_ext = new List<string>(); var esc_ext = new List<string>(); bool hd_included = false; int stachk_flag = FLAG_STACHK_DIRECT_SYNC_DEFAULT; for (int i = 3; i < cmd_arg.Length; i++) { switch (cmd_arg[i]) { case "--ext": i++; if (i >= cmd_arg.Length) throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]); foreach (string item in cmd_arg[i].Split(';')) esc_ext.Add(item.Trim()); break; case "-+ext": i++; if (i >= cmd_arg.Length) throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]); foreach (string item in cmd_arg[i].Split(';')) { if (item == "*") //全包括 { inc_ext.Clear(); break; } inc_ext.Add(item.Trim()); } break; case "-H": case "-hidden": hd_included = true; break; case "-stachk": i++; if (i >= cmd_arg.Length) throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]); stachk_flag = 0; foreach (string item in cmd_arg[i].Split(';')) switch (item) { case "stachk_md5": stachk_flag |= FLAG_STACHK_MD5; break; case "stachk_length": stachk_flag |= FLAG_STACHK_LENGTH; break; case "stachk_last_modified": stachk_flag |= FLAG_STACHK_LAST_MODIFIED_TIME; break; case "stachk_created": stachk_flag |= FLAG_STACHK_CREATED_TIME; break; case "stachk_last_accessed": stachk_flag |= FLAG_STACHK_LAST_ACCESSED_TIME; break; default: throw new ArgumentException("未知指令参数: " + item); } break; default: throw new ArgumentException("未知指令参数: " + cmd_arg[i]); } } Direct_Sync_File(cmd_arg[1], cmd_arg[2], stachk_flag, hd_included, inc_ext, esc_ext); break; #endregion //指令:script #region script command case "script": if (cmd_arg.Length != 2) throw new ArgumentException("参数错误"); if (string.IsNullOrEmpty(cmd_arg[1])) throw new ArgumentNullException("脚本文件为空"); Execute_Script(cmd_arg[1]); break; #endregion default: throw new ArgumentException("未知指令: " + cmd_arg[0]); } }
/// <summary> /// 解析并执行单个指令 /// </summary> /// <param name="cmd">指令的字符串</param> /// <param name="stat">脚本参数</param> private void Parse_Single_Command(string cmd, ref ScriptStatus stat) { string[] cmd_arg = Split_command(cmd); if (cmd_arg.Length == 0) { return; } //忽略调用函数的大小写 switch (cmd_arg[0].ToLower()) { //指令: version #region version command case "version": //参数不为两个,报错 if (cmd_arg.Length != 2) { throw new ArgumentNullException("参数错误"); } int test_version; //版本号不为数字,同样报错 if (!int.TryParse(cmd_arg[1], out test_version)) { throw new ArgumentException("版本号为非数字"); } //最后一个作死的,还是报错 if (test_version <= 0 || test_version > 1) { throw new ArgumentOutOfRangeException("版本号超出范围(只为1)"); } stat.version = test_version; break; #endregion //指令: sync #region sync command case "sync": //会不会switch - case语句有点多.... if (cmd_arg.Length < 3) { throw new ArgumentNullException("参数错误"); } //指令的附加参数 var inc_ext = new List <string>(); var esc_ext = new List <string>(); bool hd_included = false; int stachk_flag = FLAG_STACHK_DIRECT_SYNC_DEFAULT; for (int i = 3; i < cmd_arg.Length; i++) { switch (cmd_arg[i]) { case "--ext": i++; if (i >= cmd_arg.Length) { throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]); } foreach (string item in cmd_arg[i].Split(';')) { esc_ext.Add(item.Trim()); } break; case "-+ext": i++; if (i >= cmd_arg.Length) { throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]); } foreach (string item in cmd_arg[i].Split(';')) { if (item == "*") //全包括 { inc_ext.Clear(); break; } inc_ext.Add(item.Trim()); } break; case "-H": case "-hidden": hd_included = true; break; case "-stachk": i++; if (i >= cmd_arg.Length) { throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]); } stachk_flag = 0; foreach (string item in cmd_arg[i].Split(';')) { switch (item) { case "stachk_md5": stachk_flag |= FLAG_STACHK_MD5; break; case "stachk_length": stachk_flag |= FLAG_STACHK_LENGTH; break; case "stachk_last_modified": stachk_flag |= FLAG_STACHK_LAST_MODIFIED_TIME; break; case "stachk_created": stachk_flag |= FLAG_STACHK_CREATED_TIME; break; case "stachk_last_accessed": stachk_flag |= FLAG_STACHK_LAST_ACCESSED_TIME; break; default: throw new ArgumentException("未知指令参数: " + item); } } break; default: throw new ArgumentException("未知指令参数: " + cmd_arg[i]); } } Direct_Sync_File(cmd_arg[1], cmd_arg[2], stachk_flag, hd_included, inc_ext, esc_ext); break; #endregion //指令:script #region script command case "script": if (cmd_arg.Length != 2) { throw new ArgumentException("参数错误"); } if (string.IsNullOrEmpty(cmd_arg[1])) { throw new ArgumentNullException("脚本文件为空"); } Execute_Script(cmd_arg[1]); break; #endregion default: throw new ArgumentException("未知指令: " + cmd_arg[0]); } }
public override void SetStatus(ushort methodId, ScriptStatus desiredStatus) { ref var state = ref executionStates[methodId];