/// <summary> /// Test data source /// </summary> public IEnumerable <TestCaseData> GetTestData( ) { return(TenantHealthHelpers.GetTenants( ).Select( tenant => new TestCaseData(tenant) .SetCategory(tenant.TenantName) .SetCategory("Tenants") )); }
/// <summary> /// Fetch list of all apps across all tenants. /// </summary> public IEnumerable <TestCaseData> InstalledApps_GetTestData( ) { // Must return TenantId,EntityId,Name for all calculated fields string customSql = @" select isOfTypeRel.TenantId, isOfTypeRel.FromId, name.Data + ' (' + solutionVersion.Data + ')' from Relationship isOfTypeRel join Data_Alias isOfTypeAlias on isOfTypeRel.TypeId = isOfTypeAlias.EntityId and isOfTypeRel.TenantId = isOfTypeAlias.TenantId and isOfTypeAlias.Data='isOfType' join Data_Alias typeAlias on isOfTypeRel.ToId = typeAlias.EntityId and isOfTypeRel.TenantId = typeAlias.TenantId and typeAlias.Data='solution' and typeAlias.Namespace='core' join Data_Alias nameAlias on isOfTypeRel.TenantId = nameAlias.TenantId and nameAlias.Data='name' join Data_Alias solutionVersionStringAlias on isOfTypeRel.TenantId = solutionVersionStringAlias.TenantId and solutionVersionStringAlias.Data='solutionVersionString' left join Data_NVarChar name on isOfTypeRel.FromId = name.EntityId and isOfTypeRel.TenantId = name.TenantId and name.FieldId = nameAlias.EntityId left join Data_NVarChar solutionVersion on isOfTypeRel.FromId = solutionVersion.EntityId and isOfTypeRel.TenantId = solutionVersion.TenantId and solutionVersion.FieldId = solutionVersionStringAlias.EntityId where isOfTypeRel.TenantId <> 0"; return(TenantHealthHelpers.GetInstancesAsTestData(null, AppsToIgnore, customSql)); }
/// <summary> /// Releases unmanaged and - optionally - managed resources. /// </summary> public void Dispose( ) { FinalPrivateBytes = Process.GetCurrentProcess( ).PrivateMemorySize64; string message = string.Empty; if (Arguments != null && Arguments.Length > 0) { message = string.Join(", ", Arguments.Select(arg => $"{arg.Key}: {arg.Value}")); message += ", "; } message += $"Initial Memory: {TenantHealthHelpers.ToPrettySize( InitialPrivateBytes, 2 )}, Final Memory: {TenantHealthHelpers.ToPrettySize( FinalPrivateBytes, 2 )}, Difference: {TenantHealthHelpers.ToPrettySize( FinalPrivateBytes - InitialPrivateBytes, 2 )}"; Trace.WriteLine(message); }
/// <summary> /// Fetch list of all workflows across all tenants. /// </summary> public IEnumerable <TestCaseData> CompileCalculation_GetTestData( ) { // Must return TenantId,EntityId,Name for all calculated fields string customSql = @" select icfData.TenantId, icfData.EntityId, name.Data + ' (on ' + typeName.Data + ')' from Data_Bit icfData join Data_Alias nameAlias on icfData.TenantId = nameAlias.TenantId and nameAlias.Data='name' join Data_Alias fieldIsOnTypeAlias on icfData.TenantId = fieldIsOnTypeAlias.TenantId and fieldIsOnTypeAlias.Data='fieldIsOnType' join Data_Alias icfAlias on icfData.TenantId = icfAlias.TenantId and icfData.FieldId = icfAlias.EntityId and icfAlias.Data='isCalculatedField' and icfAlias.Namespace='core' left join Data_NVarChar name on icfData.EntityId = name.EntityId and icfData.TenantId = name.TenantId and name.FieldId = nameAlias.EntityId left join Relationship fieldType on icfData.EntityId = fieldType.FromId and icfData.TenantId = fieldType.TenantId and fieldType.TypeId = fieldIsOnTypeAlias.EntityId left join Data_NVarChar typeName on fieldType.ToId = typeName.EntityId and fieldType.TenantId = typeName.TenantId and typeName.FieldId = nameAlias.EntityId where icfData.TenantId <> 0 and icfData.Data = 1 --isCalculatedField=true order by icfData.TenantId, name.Data"; return(TenantHealthHelpers.GetInstancesAsTestData(null, CalculatedFieldsToIgnore, customSql)); }
/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> public void Dispose( ) { long completePrivateBytes = Process.GetCurrentProcess( ).PrivateMemorySize64; if (completePrivateBytes > Threshold) { Trace.WriteLine($"Private bytes exceeded {TenantHealthHelpers.ToPrettySize( Threshold, 2 )}. Running cleanup action..."); Action.Invoke( ); if (CollectGarbage) { GC.Collect( ); } } Action = null; }
/// <summary> /// Fetch list of all reports across all tenants. /// </summary> public IEnumerable <TestCaseData> RunReport_GetTestData( ) { return(TenantHealthHelpers.GetInstancesAsTestData("core:report", ReportsToIgnore)); }
/// <summary> /// Fetch list of all workflows across all tenants. /// </summary> public IEnumerable <TestCaseData> CompileWorkflow_GetTestData( ) { return(TenantHealthHelpers.GetInstancesAsTestData("core:workflow", WorkflowsToIgnore)); }