internal HealthCheckRuleResult createHealthCheckRuleResult( JobTarget jobTarget, string entityType, string entityName, long entityID, HealthCheckRuleDescription hcrd) { HealthCheckRuleResult healthCheckRuleResult = new HealthCheckRuleResult(); healthCheckRuleResult.Controller = jobTarget.Controller; healthCheckRuleResult.Application = jobTarget.Application; healthCheckRuleResult.ApplicationID = jobTarget.ApplicationID; healthCheckRuleResult.EntityType = entityType; healthCheckRuleResult.EntityName = entityName; healthCheckRuleResult.EntityID = entityID; healthCheckRuleResult.Category = hcrd.Category; healthCheckRuleResult.Code = hcrd.Code; healthCheckRuleResult.Name = hcrd.Name; healthCheckRuleResult.Grade = 0; healthCheckRuleResult.EvaluationTime = DateTime.Now; return(healthCheckRuleResult); }
private HealthCheckRuleResult evaluate_Controller_Setting_Performance_Profile( HealthCheckRuleDescription hcrd, JobTarget jobTarget, Dictionary <string, HealthCheckSettingMapping> healthCheckSettingsDictionary, List <ControllerSetting> controllerSettingsList) { logger.Trace("Evaluating {0}", hcrd); HealthCheckRuleResult healthCheckRuleResult = createHealthCheckRuleResult(jobTarget, "Controller", jobTarget.Controller, 0, hcrd); healthCheckRuleResult.Application = "[ALL APPS]"; if (controllerSettingsList != null) { ControllerSetting controllerSettingProfile = controllerSettingsList.Where(s => s.Name == "performance.profile").FirstOrDefault(); if (controllerSettingProfile == null) { healthCheckRuleResult.Grade = 1; healthCheckRuleResult.Description = "Controller performance profile is unknown"; } else { healthCheckRuleResult.Description = String.Format("Controller performance profile is '{0}'", controllerSettingProfile.Value); // Defined in Enterprise Console via various // C:\AppDynamics\Platform\platform-admin\archives\controller\4.5.4.15417\playbooks\controller-<size>.groovy switch (controllerSettingProfile.Value.ToLower()) { case "internal": case "dev": case "demo": healthCheckRuleResult.Grade = 1; break; case "small": healthCheckRuleResult.Grade = 2; break; case "medium": healthCheckRuleResult.Grade = 3; break; case "large": healthCheckRuleResult.Grade = 4; break; case "extra-large": healthCheckRuleResult.Grade = 5; break; default: healthCheckRuleResult.Grade = 1; break; } } } return(healthCheckRuleResult); }
/// <summary> /// Version of Controller should be reasonably latest /// </summary> /// <param name="jobTarget"></param> /// <param name="healthCheckSettingsDictionary"></param> /// <param name="controllerSummariesList"></param> /// <returns></returns> private HealthCheckRuleResult evaluate_Controller_Version( HealthCheckRuleDescription hcrd, JobTarget jobTarget, Dictionary <string, HealthCheckSettingMapping> healthCheckSettingsDictionary, List <ControllerSummary> controllerSummariesList) { logger.Trace("Evaluating {0}", hcrd); HealthCheckRuleResult healthCheckRuleResult = createHealthCheckRuleResult(jobTarget, "Controller", jobTarget.Controller, 0, hcrd); healthCheckRuleResult.Application = "[ALL APPS]"; if (controllerSummariesList != null && controllerSummariesList.Count > 0) { ControllerSummary controllerSummary = controllerSummariesList[0]; Version versionThisController = new Version(jobTarget.ControllerVersion); healthCheckRuleResult.Description = String.Format("The Controller version '{0}'", jobTarget.ControllerVersion, getVersionSetting(healthCheckSettingsDictionary, "ControllerVersionGrade5", "4.5")); if (versionThisController >= getVersionSetting(healthCheckSettingsDictionary, "ControllerVersionGrade5", "4.5")) { healthCheckRuleResult.Grade = 5; } else if (versionThisController >= getVersionSetting(healthCheckSettingsDictionary, "ControllerVersionGrade4", "4.4")) { healthCheckRuleResult.Grade = 4; } else if (versionThisController >= getVersionSetting(healthCheckSettingsDictionary, "ControllerVersionGrade3", "4.3")) { healthCheckRuleResult.Grade = 3; } else if (versionThisController >= getVersionSetting(healthCheckSettingsDictionary, "ControllerVersionGrade2", "4.2")) { healthCheckRuleResult.Grade = 2; } else { healthCheckRuleResult.Grade = 1; } } else { healthCheckRuleResult.Grade = 1; healthCheckRuleResult.Description = "No information about Controller version available"; } return(healthCheckRuleResult); }
/// <summary> /// We like SaaS controllers more than on premises /// </summary> /// <param name="jobTarget"></param> /// <param name="healthCheckSettingsDictionary"></param> /// <returns></returns> private HealthCheckRuleResult evaluate_Controller_SaaS_OnPrem( HealthCheckRuleDescription hcrd, JobTarget jobTarget, Dictionary <string, HealthCheckSettingMapping> healthCheckSettingsDictionary) { logger.Trace("Evaluating {0}", hcrd); HealthCheckRuleResult healthCheckRuleResult = createHealthCheckRuleResult(jobTarget, "Controller", jobTarget.Controller, 0, hcrd); healthCheckRuleResult.Application = "[ALL APPS]"; if (jobTarget.Controller.ToLower().Contains("saas.appdynamics") == true) { healthCheckRuleResult.Grade = 5; healthCheckRuleResult.Description = "Controller is running in AppDynamics SaaS cloud"; } else { healthCheckRuleResult.Grade = 3; healthCheckRuleResult.Description = "Controller is running in OnPremises configuration"; } return(healthCheckRuleResult); }
/// <summary> /// https://community.appdynamics.com/t5/Knowledge-Base/Controller-and-Agent-ADD-Limit-Notifications-Explanations/ta-p/23273#CONTROLLER_ASYNC_ADD_REG_LIMIT_REACHED /// </summary> /// <param name="hcrd"></param> /// <param name="jobTarget"></param> /// <param name="healthCheckSettingsDictionary"></param> /// <param name="controllerSettingsList"></param> /// <returns></returns> private List <HealthCheckRuleResult> evaluate_Controller_Setting_ADD_Limits( HealthCheckRuleDescription hcrd, JobTarget jobTarget, Dictionary <string, HealthCheckSettingMapping> healthCheckSettingsDictionary, List <ControllerSetting> controllerSettingsList) { logger.Trace("Evaluating {0}", hcrd); HealthCheckRuleResult healthCheckRuleResult = createHealthCheckRuleResult(jobTarget, "Controller", jobTarget.Controller, 0, hcrd); healthCheckRuleResult.Application = "[ALL APPS]"; List <HealthCheckRuleResult> healthCheckRuleResults = new List <HealthCheckRuleResult>(); if (controllerSettingsList != null) { // Defined in Enterprise Console via various // C:\AppDynamics\Platform\platform-admin\archives\controller\4.5.4.15417\playbooks\controller-<size>.groovy ControllerSetting controllerSettingProfile = controllerSettingsList.Where(s => s.Name == "performance.profile").FirstOrDefault(); if (controllerSettingProfile != null) { List <ControllerSetting> controllerSettingsLimits = controllerSettingsList.Where(s => s.Name.Contains(".registration.limit")).ToList(); if (controllerSettingsLimits != null) { foreach (ControllerSetting controllerSetting in controllerSettingsLimits) { string lookupSettingName = String.Format("ControllerSetting.{0}.{1}", controllerSettingProfile.Value, controllerSetting.Name); int settingCurrentValue = -1; int settingDefaultValue = -1; int settingRecommendedValue = -1; if (Int32.TryParse(controllerSetting.Value, out settingCurrentValue) == true) { HealthCheckRuleResult healthCheckRuleResult1 = healthCheckRuleResult.Clone(); healthCheckRuleResult1.Name = String.Format("{0} ({1})", healthCheckRuleResult.Name, controllerSetting.Name); healthCheckRuleResult1.Grade = -1; // All settings are taken // from C:\AppDynamics\Platform\platform-admin\archives\controller\4.5.4.15417\playbooks\controller-<size>.groovy in EC // And from careful review of significant number of controllers switch (controllerSetting.Name) { case "application.custom.metric.registration.limit": case "application.metric.registration.limit": case "async.thread.tracking.registration.limit": case "metric.registration.limit": case "sep.ADD.registration.limit": case "stacktrace.ADD.registration.limit": case "error.registration.limit": // maxStacktracePerAccountLimit = 4000 // maxSepPerAccountLimit = 4000 // maxErrorsPerAccountLimit = 4000 settingRecommendedValue = getIntegerSetting(healthCheckSettingsDictionary, lookupSettingName, -1); if (settingRecommendedValue != -1) { if (settingCurrentValue == settingRecommendedValue) { healthCheckRuleResult1.Grade = 5; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', at recommended value", controllerSetting.Name, settingCurrentValue); } else if (settingCurrentValue < settingRecommendedValue) { healthCheckRuleResult1.Grade = 3; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (<) less than recommended value '{2}'", controllerSetting.Name, settingCurrentValue, settingRecommendedValue); } else if (settingCurrentValue > settingRecommendedValue) { healthCheckRuleResult1.Grade = 5; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (>) greater than recommended value '{2}'", controllerSetting.Name, settingCurrentValue, settingRecommendedValue); } } break; case "collections.ADD.registration.limit": // maxCollectionsPerAccountLimit = 4000 settingDefaultValue = getIntegerSetting(healthCheckSettingsDictionary, lookupSettingName, 4000); if (settingCurrentValue == settingDefaultValue) { healthCheckRuleResult1.Grade = 3; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', at default value", controllerSetting.Name, settingCurrentValue); } else if (settingCurrentValue < settingDefaultValue) { healthCheckRuleResult1.Grade = 2; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (<) less than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } else if (settingCurrentValue > settingDefaultValue) { healthCheckRuleResult1.Grade = 5; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (>) greater than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } break; case "tracked.object.ADD.registration.limit": // maxTrackedObjectAccountLimit = 4000 settingDefaultValue = getIntegerSetting(healthCheckSettingsDictionary, lookupSettingName, 4000); if (settingCurrentValue == settingDefaultValue) { healthCheckRuleResult1.Grade = 3; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', at default value", controllerSetting.Name, settingCurrentValue); } else if (settingCurrentValue < settingDefaultValue) { healthCheckRuleResult1.Grade = 2; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (<) less than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } else if (settingCurrentValue > settingDefaultValue) { healthCheckRuleResult1.Grade = 5; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (>) greater than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } break; case "memory.ADD.registration.limit": // maxMemoryPointsPerAccountLimit = 4000 settingDefaultValue = getIntegerSetting(healthCheckSettingsDictionary, lookupSettingName, 4000); if (settingCurrentValue == settingDefaultValue) { healthCheckRuleResult1.Grade = 3; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', at default value", controllerSetting.Name, settingCurrentValue); } else if (settingCurrentValue < settingDefaultValue) { healthCheckRuleResult1.Grade = 2; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (<) less than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } else if (settingCurrentValue > settingDefaultValue) { healthCheckRuleResult1.Grade = 5; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (>) greater than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } break; case "backend.registration.limit": // maxBackendsPerAccountLimit = 100000 settingDefaultValue = getIntegerSetting(healthCheckSettingsDictionary, lookupSettingName, 10000); if (settingCurrentValue == settingDefaultValue) { healthCheckRuleResult1.Grade = 3; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', at default value", controllerSetting.Name, settingCurrentValue); } else if (settingCurrentValue < settingDefaultValue) { healthCheckRuleResult1.Grade = 2; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (<) less than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } else if (settingCurrentValue > settingDefaultValue) { healthCheckRuleResult1.Grade = 5; healthCheckRuleResult1.Description = String.Format("Controller setting '{0}'='{1}', (>) greater than default value '{2}'", controllerSetting.Name, settingCurrentValue, settingDefaultValue); } break; case "controller.metric.registration.limit": // Don't know what this one means default: break; } if (healthCheckRuleResult1.Grade != -1) { healthCheckRuleResults.Add(healthCheckRuleResult1); } } } } } } return(healthCheckRuleResults); }
/// <summary> /// https://community.appdynamics.com/t5/Knowledge-Base/Why-am-I-receiving-the-error-quot-Controller-Metric-Data-Buffer/ta-p/14653 /// https://community.appdynamics.com/t5/Knowledge-Base/Why-are-snapshots-missing-in-the-Controller/ta-p/19047 /// </summary> /// <param name="hcrd"></param> /// <param name="jobTarget"></param> /// <param name="healthCheckSettingsDictionary"></param> /// <param name="controllerSettingsList"></param> /// <returns></returns> private List <HealthCheckRuleResult> evaluate_Controller_Setting_Buffer_Sizes( HealthCheckRuleDescription hcrd, JobTarget jobTarget, Dictionary <string, HealthCheckSettingMapping> healthCheckSettingsDictionary, List <ControllerSetting> controllerSettingsList) { logger.Trace("Evaluating {0}", hcrd); HealthCheckRuleResult healthCheckRuleResult = createHealthCheckRuleResult(jobTarget, "Controller", jobTarget.Controller, 0, hcrd); healthCheckRuleResult.Application = "[ALL APPS]"; List <HealthCheckRuleResult> healthCheckRuleResults = new List <HealthCheckRuleResult>(); if (controllerSettingsList != null) { // Defined in Enterprise Console via various // C:\AppDynamics\Platform\platform-admin\archives\controller\4.5.4.15417\playbooks\controller-<size>.groovy ControllerSetting controllerSettingProfile = controllerSettingsList.Where(s => s.Name == "performance.profile").FirstOrDefault(); if (controllerSettingProfile != null) { List <ControllerSetting> controllerSettingsBuffers = controllerSettingsList.Where(s => s.Name.Contains(".buffer.size")).ToList(); if (controllerSettingsBuffers != null) { foreach (ControllerSetting controllerSetting in controllerSettingsBuffers) { // Dealing with only these: // events.buffer.size // metrics.buffer.size // process.snapshots.buffer.size // snapshots.buffer.size string lookupSettingName = String.Format("ControllerSetting.{0}.{1}", controllerSettingProfile.Value, controllerSetting.Name); int settingCurrentValue = -1; Int32.TryParse(controllerSetting.Value, out settingCurrentValue); int settingDefaultValue = getIntegerSetting(healthCheckSettingsDictionary, lookupSettingName, -1); if (settingDefaultValue != -1 && settingCurrentValue != -1) { HealthCheckRuleResult healthCheckRuleResult1 = healthCheckRuleResult.Clone(); healthCheckRuleResult1.Name = String.Format("{0} ({1})", healthCheckRuleResult.Name, controllerSetting.Name); if (settingCurrentValue == settingDefaultValue) { healthCheckRuleResult1.Grade = 5; healthCheckRuleResult1.Description = String.Format("Controller performance profile is '{0}', setting '{1}'='{2}', at default value", controllerSettingProfile.Value, controllerSetting.Name, settingCurrentValue); } else if (settingCurrentValue < settingDefaultValue) { healthCheckRuleResult1.Grade = 3; healthCheckRuleResult1.Description = String.Format("Controller performance profile is '{0}', setting '{1}'='{2}', (<) less than default value '{3}'", controllerSettingProfile.Value, controllerSetting.Name, settingCurrentValue, settingDefaultValue); } else if (settingCurrentValue > settingDefaultValue) { healthCheckRuleResult1.Grade = 4; healthCheckRuleResult1.Description = String.Format("Controller performance profile is '{0}', setting '{1}'='{2}', (>) greater than default value '{3}'", controllerSettingProfile.Value, controllerSetting.Name, settingCurrentValue, settingDefaultValue); } healthCheckRuleResults.Add(healthCheckRuleResult1); } } } } } return(healthCheckRuleResults); }