Language: C#

View on GitHub to download or comment.

See the Client API Examples Introduction for additional information and prerequisites.

Samples index

This script looks at all groups, jobs, and steps to find places where Job Variables defined at a higher level have been overridden.

The script finds all places where a group, job, or step overrides a variable that is defined at a higher level (server, group, queue, or job).

The script does not compare the variable value to the higher-level value: it only checks whether the variable has been defined at the lower level. That is, if a group has variable "Environment" defined as "Production" and a job in the group has variable "Environment" defined as "Production" that is still reported as an override, because the job has an explicit value for the variable, and if the variable is changed at the group level the job will not get the new value.

See Also:

sample.cs
void Main()
{
	using (var session = Scheduler.Connect(".", LoginAuthenticationType.Windows, "", ""))
	{
		using (var context = session.NewDataContext())
		{

			//create a dictionary to track the variables we have seen and the location where we saw each
			var seenVariables = new Dictionary(StringComparer.OrdinalIgnoreCase);

			//add the server-level variables
			AddVariables(seenVariables, context.GetServerSettings().JobVariables, "Server");

			//fetch the root group
			var root = context.GetJobGroup(null);
			
			//go look for overrides
			CheckVariables(root, seenVariables);
		}
	}
}


//copy variables from a JobVariableCollection to the seenVariables dictionary
void AddVariables(Dictionary target, ArcanaDevelopment.adTempus.Client.Collections.JobVariableCollection source, string location)
{
	//we don't care about the value of the variable in this dictionary; we store the location where the variable was defined.
	foreach(var item in source)
	{
		target[item.Name] = location;
	}	
}


//check variables in a group (and children) for overrides
void CheckVariables(JobGroup group,Dictionary parentSeenVariables)
{
	var location = string.Format("Group \"{0}\"", group.FullyQualifiedName);

	//check for variables overridden at this level
	CheckVariables(group.JobVariables, parentSeenVariables, location);
	
	//make a copy of the seenVariables from the parent level(s) so we can add new variables from this level
	var seenVariables = parentSeenVariables.ToDictionary(entry => entry.Key,entry => entry.Value,StringComparer.OrdinalIgnoreCase);
	
	//add the variables from this level to the seenVariables collection
	AddVariables(seenVariables, group.JobVariables, location);

	//check all the jobs in this group
	var jobs=group.GetJobs(ObjectFetchOptions.FullFetch,false);
	foreach(var item in jobs)
	{
		CheckVariables(item,seenVariables);	
	}
	
	//check the child groups
	var childGroups=group.GetGroups(ObjectFetchOptions.FullFetch,false);
	foreach(var item in childGroups)
	{
		CheckVariables(item,seenVariables);
	}
}

//checks to see if a job or its steps override variables defined at a higher level
void CheckVariables(Job job,Dictionary parentSeenVariables)
{
	//make a copy of the seenVariables from the parent level(s)
	var seenVariables = parentSeenVariables.ToDictionary(entry => entry.Key, entry => entry.Value, StringComparer.OrdinalIgnoreCase);
	
	//add the variables from the job's Queue so we can see if the job has overridden any of those
	AddVariables(seenVariables, job.JobQueue.JobVariables, string.Format("Job Queue \"{0}\"",job.JobQueue.Name));
	
	var location=string.Format("Job \"{0}\"",job.FullyQualifiedName);
	
	//see if the job has overridden anything
	CheckVariables(job.JobVariables,seenVariables,location);


	//add the job's variables to the list so we can see if the steps override them
	AddVariables(seenVariables, job.JobVariables, location);

	//check the steps
	foreach(var item in job.Steps)
	{
		CheckVariables(item.JobVariables, seenVariables, string.Format("Job \"{0}\" step {1}", job.FullyQualifiedName,item.StepNumber));
	}
}

//checkes to see if any item in a JobVariableCollection overrides variables defined at a higher level
void CheckVariables(ArcanaDevelopment.adTempus.Client.Collections.JobVariableCollection variables, Dictionary seenVariables, string locationDescription)
{
	foreach (var item in variables)
	{
		string seenLocation;

		if (seenVariables.TryGetValue(item.Name, out seenLocation))
		{
			WriteOutput(string.Format("{0} overrides variable \"{1}\" from {2}", locationDescription, item.Name, seenLocation));
		}
		else
		{
			seenVariables.Add(item.Name, locationDescription);
		}
	}
}

void WriteOutput(string output)
{
	Debug.WriteLine(output);	
}

Comments

View on GitHub to comment.