public void Assert_that_disabled_queries_are_ignored() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] { typeof(QueryTypeDisabled) }); Assert.That(queries, Is.Empty); }
public void Assert_resource_with_partial_resource_name_is_located() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] {typeof (QueryTypeWithPartialResourceName)}); Assert.That(queries, Is.Not.Null); var queryNames = queries.Select(q => q.ResultTypeName).ToArray(); Assert.That(queryNames, Is.EqualTo(new[] {typeof (QueryTypeWithPartialResourceName).Name})); }
public void Assert_that_only_enabled_queries_are_found() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] { typeof(QueryTypeSomeEnabled) }) .Select(q => q.QueryName) .ToArray(); Assert.That(queries, Is.EqualTo(new[] { "This is enabled" })); }
public void Assert_multiple_query_attributes_yield_multiple_queries() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] {typeof (QueryTypeWithTwoQueries)}); Assert.That(queries, Is.Not.Null); var queryNames = queries.Select(q => q.ResourceName).ToArray(); var expected = new[] {"AnotherQuery.sql", "Queries.ExampleEmbeddedFile.sql"}; Assert.That(queryNames, Is.EquivalentTo(expected)); }
public void Assert_funcs_are_correctly_configured() { var dapperWrapper = Substitute.For<IDapperWrapper>(); var queries = new QueryLocator(dapperWrapper).PrepareQueries(); foreach (var query in queries) { var results = query.Query(null, Substitute.For<ISqlEndpoint>()); Assert.That(results, Is.EqualTo(new object[0])); } }
public void Assert_resource_with_only_file_name_is_located() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] { typeof(QueryTypeWithJustFileName) }); Assert.That(queries, Is.Not.Null); var queryNames = queries.Select(q => q.ResultTypeName).ToArray(); Assert.That(queryNames, Is.EqualTo(new[] { typeof(QueryTypeWithJustFileName).Name })); }
public void Assert_funcs_are_correctly_configured() { var dapperWrapper = Substitute.For <IDapperWrapper>(); var queries = new QueryLocator(dapperWrapper).PrepareQueries(); foreach (var query in queries) { var results = query.Query(null, Substitute.For <ISqlEndpoint>()); Assert.That(results, Is.EqualTo(new object[0])); } }
public void Assert_multiple_query_attributes_yield_multiple_queries() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] { typeof(QueryTypeWithTwoQueries) }); Assert.That(queries, Is.Not.Null); var queryNames = queries.Select(q => q.ResourceName).ToArray(); var expected = new[] { "AnotherQuery.sql", "Queries.ExampleEmbeddedFile.sql" }; Assert.That(queryNames, Is.EquivalentTo(expected)); }
public override void ToLog(ILog log) { base.ToLog(log); // Attempt to connect to the server and get basic details about the server and the databases. Dictionary<string, DatabaseDetails> databaseDetailsByName; try { var queryLocator = new QueryLocator(new DapperWrapper()); SqlQuery serverDetailsQuery = queryLocator.PrepareQueries(new[] {typeof (SqlServerDetails),}, false).Single(); SqlQuery databasesDetailsQuery = queryLocator.PrepareQueries(new[] {typeof (DatabaseDetails),}, false).Single(); using (var conn = new SqlConnection(ConnectionString)) { // Log the server details SqlServerDetails serverDetails = serverDetailsQuery.Query<SqlServerDetails>(conn, this).Single(); LogVerboseSqlResults(serverDetailsQuery, new[] {serverDetails}); log.InfoFormat(" {0} {1} {2} ({3})", serverDetails.SQLTitle, serverDetails.Edition, serverDetails.ProductLevel, serverDetails.ProductVersion); // Sotre these for reporting below DatabaseDetails[] databasesDetails = databasesDetailsQuery.DatabaseMetricQuery<DatabaseDetails>(conn, this).ToArray(); LogVerboseSqlResults(databasesDetailsQuery, databasesDetails); databaseDetailsByName = databasesDetails.ToDictionary(d => d.DatabaseName); } } catch (Exception e) { // Just log some details here. The subsequent queries for metrics yields more error details. log.ErrorFormat(" Unable to connect: {0}", e.Message); databaseDetailsByName = null; } bool hasExplicitIncludedDatabases = IncludedDatabaseNames.Any(); if (hasExplicitIncludedDatabases) { // Show the user the databases we'll be working from foreach (Database database in IncludedDatabases) { string message = " Including DB: " + database.Name; // When the details are reachable, show them if (databaseDetailsByName != null) { DatabaseDetails details; if (databaseDetailsByName.TryGetValue(database.Name, out details)) { message += string.Format(" [CompatibilityLevel={0};State={1}({2});CreateDate={3:yyyy-MM-dd};UserAccess={4}({5})]", details.compatibility_level, details.state_desc, details.state, details.create_date, details.user_access_desc, details.user_access); } else { // More error details are reported with metric queries message += " [Unable to find database information]"; } } log.Info(message); } } else if (databaseDetailsByName != null) { // The user didn't specifically include any databases // Report details for all of the DBs we expect to gather metrics against foreach (DatabaseDetails details in databaseDetailsByName.Values) { log.InfoFormat(" Including DB: {0} [CompatibilityLevel={1};State={2}({3});CreateDate={4:yyyy-MM-dd};UserAccess={5}({6})]", details.DatabaseName, details.compatibility_level, details.state_desc, details.state, details.create_date, details.user_access_desc, details.user_access); } } // If there are included DB's, log the Excluded DB's as DEBUG info. Action<string> logger = hasExplicitIncludedDatabases ? (Action<string>) log.Debug : log.Info; foreach (string database in ExcludedDatabaseNames) { logger(" Excluding DB: " + database); } }
public override void ToLog(ILog log) { base.ToLog(log); // Attempt to connect to the server and get basic details about the server and the databases. Dictionary <string, DatabaseDetails> databaseDetailsByName; try { var queryLocator = new QueryLocator(new DapperWrapper()); SqlQuery serverDetailsQuery = queryLocator.PrepareQueries(new[] { typeof(SqlServerDetails), }, false).Single(); SqlQuery databasesDetailsQuery = queryLocator.PrepareQueries(new[] { typeof(DatabaseDetails), }, false).Single(); using (var conn = new SqlConnection(ConnectionString)) { // Log the server details SqlServerDetails serverDetails = serverDetailsQuery.Query <SqlServerDetails>(conn, this).Single(); LogVerboseSqlResults(serverDetailsQuery, new[] { serverDetails }); log.InfoFormat(" {0} {1} {2} ({3})", serverDetails.SQLTitle, serverDetails.Edition, serverDetails.ProductLevel, serverDetails.ProductVersion); // Sotre these for reporting below DatabaseDetails[] databasesDetails = databasesDetailsQuery.DatabaseMetricQuery <DatabaseDetails>(conn, this).ToArray(); LogVerboseSqlResults(databasesDetailsQuery, databasesDetails); databaseDetailsByName = databasesDetails.ToDictionary(d => d.DatabaseName); } } catch (Exception e) { // Just log some details here. The subsequent queries for metrics yields more error details. log.ErrorFormat(" Unable to connect: {0}", e.Message); databaseDetailsByName = null; } bool hasExplicitIncludedDatabases = IncludedDatabaseNames.Any(); if (hasExplicitIncludedDatabases) { // Show the user the databases we'll be working from foreach (Database database in IncludedDatabases) { string message = " Including DB: " + database.Name; // When the details are reachable, show them if (databaseDetailsByName != null) { DatabaseDetails details; if (databaseDetailsByName.TryGetValue(database.Name, out details)) { message += string.Format(" [CompatibilityLevel={0};State={1}({2});CreateDate={3:yyyy-MM-dd};UserAccess={4}({5})]", details.compatibility_level, details.state_desc, details.state, details.create_date, details.user_access_desc, details.user_access); } else { // More error details are reported with metric queries message += " [Unable to find database information]"; } } log.Info(message); } } else if (databaseDetailsByName != null) { // The user didn't specifically include any databases // Report details for all of the DBs we expect to gather metrics against foreach (DatabaseDetails details in databaseDetailsByName.Values) { log.InfoFormat(" Including DB: {0} [CompatibilityLevel={1};State={2}({3});CreateDate={4:yyyy-MM-dd};UserAccess={5}({6})]", details.DatabaseName, details.compatibility_level, details.state_desc, details.state, details.create_date, details.user_access_desc, details.user_access); } } // If there are included DB's, log the Excluded DB's as DEBUG info. Action <string> logger = hasExplicitIncludedDatabases ? (Action <string>)log.Debug : log.Info; foreach (string database in ExcludedDatabaseNames) { logger(" Excluding DB: " + database); } }
/// <summary> /// Runs a query against a connection to the master DB on this Azure SQL Server /// </summary> /// <param name="log"></param> /// <returns></returns> internal IEnumerable<IQueryContext> PerformThrottlingQuery(ILog log) { var queries = new QueryLocator(new DapperWrapper()).PrepareQueries(new[] {typeof (AzureServiceInterruptionEvents)}, false).ToArray(); return ExecuteQueries(queries, _masterConnectionString, log); }
public void Assert_that_queries_are_located() { var queries = new QueryLocator(new DapperWrapper(), Assembly.GetExecutingAssembly()).PrepareQueries(); Assert.That(queries, Is.Not.Empty, "Expected some queries to be returned"); }
public void Assert_that_queries_are_located() { var queries = new QueryLocator(new DapperWrapper(), Assembly.GetExecutingAssembly()).PrepareQueries(); Assert.That(queries, Is.Not.Empty, "Expected some queries to be returned"); }
public void Assert_that_only_enabled_queries_are_found() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] {typeof (QueryTypeSomeEnabled)}) .Select(q => q.QueryName) .ToArray(); Assert.That(queries, Is.EqualTo(new[] {"This is enabled"})); }
public void Assert_that_disabled_queries_are_ignored() { var assembly = Assembly.GetExecutingAssembly(); var queryLocator = new QueryLocator(null, assembly); var queries = queryLocator.PrepareQueries(new[] {typeof (QueryTypeDisabled)}); Assert.That(queries, Is.Empty); }
/// <summary> /// Runs a query against a connection to the master DB on this Azure SQL Server /// </summary> /// <param name="log"></param> /// <returns></returns> internal IEnumerable <IQueryContext> PerformThrottlingQuery(ILog log) { var queries = new QueryLocator(new DapperWrapper()).PrepareQueries(new[] { typeof(AzureServiceInterruptionEvents) }, false).ToArray(); return(ExecuteQueries(queries, _masterConnectionString, log)); }