Task progress on omnifocus 2

Hi guys, is any way to work with task progress on omnifocus 2?

Thanks!

@jago_ff - I find it works best to treat each task/action as a unit of work. If itā€™s something thatā€™s going to be completed over time, itā€™s best to create multiple actions. If you give some specific examples, Iā€™m happy to comment further.

2 Likes

Hi tim, thanks for your reply

Task like ā€œupdate all serversā€ for example, I canā€™t make a list of task like ā€œupdate server 1ā€ ā€œupdate server 2ā€ when I have 200 servers.

Is most like, percent of advance 30%.

1 Like

The simplest would be to have the single task ā€œUpdate all serversā€ and append progress to the task title, i.e. ā€œUpdate all servers - racks 1-3 completed.ā€

If you need something more granular, and this is a recurring type of task, I would suggest putting in the effort to list all the servers that need to be updated. Thankfully, AppleScript can be your helper. Hereā€™s a script I grabbed from somewhere (@joebuhlig has a version that sets reading tasks to complete on a given series of days) that you could modify from ā€œRead a Bookā€ to ā€œUpdate Serversā€ and instead of chapters, number the servers you want to track.

-- assumes no subfolders

on appIsRunning(GTDAppName)
	tell application "System Events"
		return (count of (application processes whose name is GTDAppName)) is not 0
	end tell
end appIsRunning

repeat
	display dialog "Enter Name of Book" default answer "Title"
	try
		if the text returned of result is not "" then
			set the _bookname to the text returned of the result
			exit repeat
		end if
	on error
		beep
	end try
end repeat

repeat
	display dialog "Enter Name of Author" default answer "Author"
	try
		if the text returned of result is not "" then
			set the _authorname to the text returned of the result
			exit repeat
		end if
	on error
		beep
	end try
end repeat

repeat
	display dialog "Beginning Chapter" default answer "1"
	try
		if the text returned of result is not "" then
			set the _begin to the text returned of the result as number
			exit repeat
		end if
	on error
		beep
	end try
end repeat

repeat
	display dialog "Ending Chapter" default answer "2"
	try
		if the text returned of result is not "" then
			set the _end to the text returned of the result as number
			exit repeat
		end if
	on error
		beep
	end try
end repeat

display dialog ("Create Reading List Actions for " & _bookname & " from Chapters " & _begin & " to " & _end) Ā¬
	buttons {"Create Actions", "Cancel"} default button 1
if button returned of the result is "Create Actions" then
	if appIsRunning("OmniFocus") then
		tell application "OmniFocus"
			tell default document
				set _ri to {unit:(week), steps:(2), fixed:(false)}
				set _projectName to "Read " & _bookname & " by " & _authorname
				make project with properties {name:(_projectName), status:(active), sequential:(true), review interval:(_ri), completed by children:(true), note:("Chapters " & _begin & " to " & _end)}
				set theProject to project named _projectName
				tell theProject
					repeat with chapter from _begin to _end
						make task with properties {name:("Read Chapter " & chapter), flagged:true}
					end repeat
				end tell
			end tell
		end tell
		
		-- if OmniFocus is not running, launch it first and then create the Quick Entry
	else
		tell application "OmniFocus"
			activate
			tell default document
				set _ri to {unit:(day), steps:(2), fixed:(false)}
				set _projectName to "Read " & _bookname
				make project with properties {name:(_projectName), status:(active), sequential:(true), review interval:(_ri), completed by children:(true), note:("Chapters " & _begin & " to " & _end)}
				set theProject to project named _projectName
				tell theProject
					repeat with chapter from _begin to _end
						make task with properties {name:("Read Chapter " & chapter)}
					end repeat
				end tell
			end tell
		end tell
	end if
end if
2 Likes

Youā€™re welcome @jago_ff. I would create an ā€œUpdate All Serversā€ project and create actions that get to the level of granularity you want. If itā€™s not practical/efficient to have an action for each of your 200 servers you could group multiple servers into one action (e.g. ā€œUpdate Servers 1-9ā€ and ā€œUpdate Servers 10-19ā€). Given that you have so many servers to update, it might also be worth putting some time and energy into seeing how you could automate the server update process.

If you have the list of servers in text format, just drag it under the top level task ā€˜Update all serversā€™: it will create a bunch of subtasks one for each line in your list ;)

1 Like

Hi @jago_ff

I can share what works for me. If it is more than 1 action, I consider it a project so Iā€™d call ā€œUpdate all serversā€ a project and put the individual actions to accomplish it within it (1-download software, 2- schedule time in my calendar to actually install it, etc). Since you have 200 of them, Iā€™d also add a link within the project to a text file / evernote file / word file with a checklist of all 200 of them. I would then have it within a task such as ā€œ3-update next serverā€ and remember to update it with a 4th task called ā€œupdate checklist for progressā€. This is just me though.

Since this is a time-intensive task I think actually scheduling it in your calendar would be more useful to ensure you get it done.

Thank you! I will try

Nice trick! thanks

Sure! Hope it helps you

You shouldnā€™t be doing that in any todo/scheduling app. What you put in OmniFocus is simply a list of tasks that you need to do to update the servers. Something like:

  1. Schedule maintenance
  2. Inform engineers/customers/etc.
  3. Set monitoring system not to send alerts for servers that are being updated
  4. Rollout updates
  5. Reboot database servers
  6. Reboot application servers
  7. Check if all updated without issues
  8. Fix and log issues

For updating 200 servers youā€™d use tooling like Ansible/Chef/Puppet and so on so you can not only push out the updates to the servers you want but you also reboot them all at once in the right order. That means you reboot database servers first, application servers next which will prevent issues like applications not being able to find the database on time and thus causing issues. This also allows you to group servers so you can update all servers of a particular customer, or your accept environment, orā€¦ If you do this right then it will make the checklist a lot more clearer too and it be short (thus easy to enter in OmniFocus).

In other words, if you have to administer 200 servers you should be looking into tooling and ways that eases that task (if you can automate it, automate it!). The entire process of updating them is something that you can manage with OmniFocus since it is a project that consists of several steps (read: a checklist). At work we use Ansible and Spacewalk for administering and updating our servers and a simple checklist to make sure we do all the steps correctly. Last time we did this it only took us 1,5 hours incl. fixing some issues.

1 Like