anchor.diff:  |PingFederateJWTTokenServices
   |-
   
  +|genie.security.oauth2.pingFederate.authentication.timer
  +|Time taken to process authentication token and obtain OAuth2 for an API request
  +|nanoseconds
  +|PingFederateRemoteTokenServices
  +|-
  +
   |genie.security.oauth2.pingFederate.tokenValidation.error.rate
   |Counts the number of token validation errors from the backend
   |nanoseconds
   |PingFederateRemoteTokenServices
   |status
   
  -|genie.security.oauth2.pingFederate.authentication.timer
  -|Time taken to process authentication token and obtain OAuth2 for an API request
  -|nanoseconds
  -|PingFederateRemoteTokenServices
  -|-
  -
   |genie.security.oauth2.pingFederate.api.timer
   |?
   |nanoseconds
  
positive.code: |AgentMetricsServiceImpl
  |-
  
  |genie.jobs.submit.timer
  |Time taken initialize the job environment (working directory, script) and fork the children
  |nanoseconds
  |JobLauncher
  |status, exceptionClass
  
  |genie.jobs.tasks.applicationTask.timer
  |Time taken to stage all applications that a job depends on
  |nanoseconds
  |ApplicationTask
  |status, applicationId, exceptionClass
  
  |genie.jobs.tasks.applicationTask.applicationSetup.timer
  |Time taken to set up individual applications (creating folders, staging dependencies and configurations)
  |nanoseconds
  |ApplicationTask
  |applicationId, applicationName
  
  |genie.jobs.tasks.clusterTask.timer
  |Time taken to set up cluster a job runs on (creating folders, staging dependencies and configurations)
  |nanoseconds
  |ClusterTask
  |clusterId, clusterName, status, exceptionClass
  
  |genie.jobs.tasks.commmandTask.timer
  |Time taken to set up commmand a job runs (creating folders, staging dependencies and configurations)
  |nanoseconds
  |CommmandTask
  |commmandId, commmandName, status, exceptionClass
  
  |genie.jobs.tasks.initialSetupTask.timer
  |Time taken to set up job environment (creating folder structure, shell environment script)
  |nanoseconds
  |InitialSetupTask
  |status, exceptionClass
  
  |genie.jobs.tasks.jobFailureAndKillHandlerLogicTask.timer
  |Time taken to set up run script section that deals with child process termination
  |nanoseconds
  |JobFailureAndKillHandlerLogicTask
  |status, exceptionClass
  
  |genie.jobs.tasks.jobKickoffTask.timer
  |Time taken to complete job launch
  |nanoseconds
  |JobKickoffTask
  |status, exceptionClass
  
  |genie.jobs.tasks.jobTask.timer
  |Time taken to set up job-specific environment (creating folders, staging attachments, dependencies)
  |nanoseconds
  |JobTask
  |status, exceptionClass
  
  |genie.jobs.file.cache.hitRate
  |File cache hit ratio
  
negative.code: |SAMLUserDetailsServiceImpl
  |-
  
  |genie.services.agentJob.handshake.counter
  |Counter for calls to the 'handshake' protocol of the Genie Agent Job Service
  |count
  |AgentJobServiceImpl
  |status, exceptionClass, agentVersion, agentHost, handshakeDecision
  
  |genie.services.jobResolver.clusterCommandQuery.timer
  |Time taken to query the database and find clusters and commands matching the supplied criteria.
  |nanoseconds
  |JobResolverServiceImpl
  |status, exceptionClass
  
  |genie.services.jobResolver.loadBalancer.counter
  |Counter for cluster load balancer algorithms invocations
  |count
  |JobResolverServiceImpl
  |class, status, clusterName, clusterId, loadBalancerClass
  
  |genie.services.jobResolver.resolve.timer
  |Time taken to completely resolve the job
  |nanoseconds
  |JobResolverServiceImpl
  |status, exceptionClass, saved
  
  |genie.services.jobResolver.selectApplications.timer
  |Time taken to retrieve applications information for this task
  |nanoseconds
  |JobResolverServiceImpl
  |status, exceptionClass
  
  |genie.services.jobResolver.selectCluster.noneFound.counter
  |Number of times the criteria for cluster selection does not match any cluster
  |count
  |JobResolverServiceImpl
  |-
  
  |genie.services.jobResolver.selectCluster.noneSelected.counter
  |Number of times the cluster load balancing terminated without selecting a cluster
  |count
  |JobResolverServiceImpl
  |-
  
  |genie.services.jobResolver.selectCluster.timer
  |Time taken to select a cluster using the load balancing strategy
  |nanoseconds
  |JobResolverServiceImpl
  |status, exceptionClass
  
  |genie.services.jobResolver.selectCommand.timer
  |Time taken to resolve a command based on criteria and cluster
  |nanoseconds
  |JobResolverServiceImpl
  |status, exceptionClass
  
  |genie.tasks.clusterChecker.failedHealthCheck.counter
  |Counts the number of time the leader retrieved health status of a remote node and one of the (non-ignored) indicators
  had a status different than UP
  |count
  |ClusterCheckerTask
  |host, healthIndicator, healthStatus
  
  |genie.tasks.clusterChecker.invalidResponse.counter
  |Counts the number of time the leader retrieved health status of a remote node and failed to parse the response
  |count
  |ClusterCheckerTask
  |host
  
  |genie.tasks.clusterChecker.jobsMarkedFailed.counter
  |Number of jobs marked as "lost" due to a consistent failure to contact the Genie node hosting them
  |count
  |ClusterCheckerTask
  |status, host, exceptionClass
  
  |genie.tasks.clusterChecker.unhealthyHosts.gauge
  |Number of Genie nodes that the leader has currently marked unhealthy
  |Current amount
  |ClusterCheckerTask
  