protected virtual void ProcessInternal(IProgressStatus progress) { // this bad-ass ASCII art is from http://www.ascii-art.de/ascii/uvw/unicorn.txt - original credit to 'sk' const string unicorn = @"<pre> / .7 \ , // |\.--._/|// /\ ) ) ).'/ /( \ // / _ _ _ _ ___ ____ ___ ____ _ _ /( J`((_/ \ | | | | \ | |_ _/ ___/ _ \| _ \| \ | | / ) | _\ / | | | | \| || | | | | | | |_) | \| | /|) \ eJ L | |_| | |\ || | |__| |_| | _ <| |\ | | \ L \ L L \___/|_| \_|___\____\___/|_| \_\_| \_| / \ J `. J L | ) L \/ \ / \ J (\ / | \ \ \``` </pre>"; // note: these logs are intentionally to progress and not loggingConsole as we don't need them in the Sitecore logs progress.ReportStatus(unicorn, MessageType.Warning); progress.ReportTransientStatus("Executing."); var heartbeat = new Timer(3000); var startTime = DateTime.Now; heartbeat.AutoReset = true; heartbeat.Elapsed += (sender, args) => { var elapsed = Math.Round((args.SignalTime - startTime).TotalSeconds); progress.ReportTransientStatus("Executing for {0} sec.", elapsed.ToString(CultureInfo.InvariantCulture)); }; heartbeat.Start(); try { using (new SecurityDisabler()) { using (new ItemFilterDisabler()) // disable all item filtering (if we're running in live mode we need this to get unadulterated items) { Process(progress); } } } finally { heartbeat.Stop(); } progress.Report(100); progress.ReportTransientStatus("Completed."); progress.ReportStatus(_isAutomatedTool ? "\r\n" : "<br>"); progress.ReportStatus("Completed. Want to <a href=\"?verb=\">return to the control panel?</a>"); }
protected override void ProcessInternal(IProgressStatus progress) { if (_headingService != null && !_isAutomatedTool) { progress.ReportStatus(_headingService.GetHeadingHtml()); } // note: these logs are intentionally to progress and not loggingConsole as we don't need them in the Sitecore logs progress.ReportTransientStatus("Executing."); var heartbeat = new Timer(3000); var timer = new Stopwatch(); timer.Start(); heartbeat.AutoReset = true; heartbeat.Elapsed += (sender, args) => { var elapsed = Math.Round(timer.ElapsedMilliseconds / 1000d); try { progress.ReportTransientStatus("Executing for {0} sec.", elapsed.ToString(CultureInfo.InvariantCulture)); } catch { // e.g. HTTP connection disconnected - prevent infinite looping heartbeat.Stop(); } }; heartbeat.Start(); try { using (new SecurityDisabler()) { _processAction(progress); } } finally { heartbeat.Stop(); } timer.Stop(); progress.Report(100); progress.ReportTransientStatus("Operation completed."); progress.ReportStatus(_isAutomatedTool ? "\r\n" : "<br>"); progress.ReportStatus(_isAutomatedTool ? $"Completed in {timer.ElapsedMilliseconds}ms." : $"Operation completed in {timer.ElapsedMilliseconds}ms. Want to <a href=\"?verb=\">return to the control panel?</a>"); }
protected virtual void ProcessInternal(IProgressStatus progress) { if (_headingService != null && !_isAutomatedTool) { progress.ReportStatus(_headingService.GetHeadingHtml()); } // note: these logs are intentionally to progress and not loggingConsole as we don't need them in the Sitecore logs progress.ReportTransientStatus("Executing."); var heartbeat = new Timer(3000); var startTime = DateTime.Now; heartbeat.AutoReset = true; heartbeat.Elapsed += (sender, args) => { var elapsed = Math.Round((args.SignalTime - startTime).TotalSeconds); try { progress.ReportTransientStatus("Executing for {0} sec.", elapsed.ToString(CultureInfo.InvariantCulture)); } catch { // e.g. HTTP connection disconnected - prevent infinite looping heartbeat.Stop(); } }; heartbeat.Start(); try { using (new SecurityDisabler()) { using (new ItemFilterDisabler()) // disable all item filtering (if we're running in live mode we need this to get unadulterated items) { Process(progress); } } } finally { heartbeat.Stop(); } progress.Report(100); progress.ReportTransientStatus("Completed."); progress.ReportStatus(_isAutomatedTool ? "\r\n" : "<br>"); progress.ReportStatus("Completed. Want to <a href=\"?verb=\">return to the control panel?</a>"); }
protected virtual void ProcessInternal(IProgressStatus progress) { if (_headingService != null && !_isAutomatedTool) { progress.ReportStatus(_headingService.GetHeadingHtml()); } // note: these logs are intentionally to progress and not loggingConsole as we don't need them in the Sitecore logs progress.ReportTransientStatus("Executing."); var heartbeat = new Timer(3000); var startTime = DateTime.Now; heartbeat.AutoReset = true; heartbeat.Elapsed += (sender, args) => { var elapsed = Math.Round((args.SignalTime - startTime).TotalSeconds); try { progress.ReportTransientStatus("Executing for {0} sec.", elapsed.ToString(CultureInfo.InvariantCulture)); } catch { // e.g. HTTP connection disconnected - prevent infinite looping heartbeat.Stop(); } }; heartbeat.Start(); try { using (new SecurityDisabler()) { _processAction(progress); } } finally { heartbeat.Stop(); } progress.Report(100); progress.ReportTransientStatus("Completed."); progress.ReportStatus(_isAutomatedTool ? "\r\n" : "<br>"); progress.ReportStatus(_isAutomatedTool ? "Completed." : "Completed. Want to <a href=\"?verb=\">return to the control panel?</a>"); }
protected override void Process(IProgressStatus progress) { progress.ReportStatus("Starting WebForms demonstration..."); for (int i = 0; i <= 100; i++) { // slight delay to see loading time System.Threading.Thread.Sleep(50); // advance the progress bar status (you can use x % as well as x of y total items) progress.Report(i); // demonstrate setting a substatus of the progress bar (e.g. "making database backup") if (i % 10 == 0) progress.ReportTransientStatus(string.Format("{0}/{1}", i, 100)); // write some stuff to the console to demonstrate detailed output progress.ReportStatus("At {0}", MessageType.Info, i); if (i == 90) progress.ReportStatus("Oops, fake error", MessageType.Error); if (i == 91) progress.ReportStatus("Warning: this can be harmful if misused.", MessageType.Warning); if (i == 92) { progress.ReportStatus("You can also {0} {1}", MessageType.Debug, "use", "string formatting"); } if (i == 95) { progress.ReportStatus("I'm about to throw an exception and write its data to the console!"); // code that can throw an exception should have it caught and written to the console // normally you might wrap the whole processing in a try-catch block try { throw new Exception("I'm giving it all she's got Jim!", new Exception("Warp core breach")); } catch(Exception ex) { progress.ReportException(ex); } } } progress.ReportStatus("WebForms demo complete. See the <a href=\"Tasks.aspx\">tasks demo</a> and the <a href=\"customized.aspx\">customization demo</a>"); }
protected void ExecuteTask(IProgressStatus progress) { for (int i = 0; i <= 100; i++) { // slight delay to see loading time Thread.Sleep(10); // demonstrate setting a substatus of the progress bar (e.g. "making database backup") if (i % 10 == 0) { progress.ReportTransientStatus(string.Format("{0}/{1}", i, 100)); // write some stuff to the console to demonstrate detailed output progress.ReportStatus("Task percent {0}", MessageType.Info, i); } // advance the progress bar status (you can use x % as well as x of y total items) progress.Report(i); } }
protected virtual void ProcessInternal(IProgressStatus progress) { // this bad-ass ASCII art is from http://www.ascii-art.de/ascii/uvw/unicorn.txt - original credit to 'sk' const string unicorn = @"<pre> / .7 \ , // |\.--._/|// /\ ) ) ).'/ /( \ // / _ _ _ _ ___ ____ ___ ____ _ _ /( J`((_/ \ | | | | \ | |_ _/ ___/ _ \| _ \| \ | | / ) | _\ / | | | | \| || | | | | | | |_) | \| | /|) \ eJ L | |_| | |\ || | |__| |_| | _ <| |\ | | \ L \ L L \___/|_| \_|___\____\___/|_| \_\_| \_| / \ J `. J L | ) L \/ \ / \ J (\ / | \ \ \``` </pre>"; // note: these logs are intentionally to progress and not loggingConsole as we don't need them in the Sitecore logs progress.ReportStatus(unicorn, MessageType.Warning); progress.ReportTransientStatus("Executing."); var heartbeat = new Timer(3000); var startTime = DateTime.Now; heartbeat.AutoReset = true; heartbeat.Elapsed += (sender, args) => { var elapsed = Math.Round((args.SignalTime - startTime).TotalSeconds); progress.ReportTransientStatus("Executing for {0} sec.", elapsed.ToString(CultureInfo.InvariantCulture)); }; heartbeat.Start(); try { using (new SecurityDisabler()) { using (new ItemFilterDisabler()) // disable all item filtering (if we're running in live mode we need this to get unadulterated items) { Process(progress); } } } finally { heartbeat.Stop(); } progress.Report(100); progress.ReportTransientStatus("Completed."); progress.ReportStatus(_isAutomatedTool ? "\r\n" : "<br>"); progress.ReportStatus("Completed. Want to <a href=\"?verb=\">return to the control panel?</a>"); }
public virtual void ReportTransientStatus(string statusMessage, params object[] formatParameters) { _mainTask.ReportTransientStatus(statusMessage, formatParameters); }