diff --git a/util/Function/DatabaseMaintenance.cs b/util/Function/DatabaseMaintenance.cs new file mode 100644 index 000000000..aca69e707 --- /dev/null +++ b/util/Function/DatabaseMaintenance.cs @@ -0,0 +1,39 @@ +using System; +using System.Configuration; +using System.Data; +using System.Data.SqlClient; +using Microsoft.Azure.WebJobs; +using Microsoft.Azure.WebJobs.Host; + +namespace Bit.Function +{ + public static class DatabaseMaintenance + { + [FunctionName("DatabaseMaintenance")] + public static void Run([TimerTrigger("0 0 * * *")]TimerInfo myTimer, TraceWriter log) + { + var connectionString = ConfigurationManager.ConnectionStrings["vault_db"].ConnectionString; + using(var connection = new SqlConnection(connectionString)) + { + connection.Open(); + + // ref: http://bit.ly/2zFNcZo + var cmd = new SqlCommand("[dbo].[AzureSQLMaintenance]", connection) + { + CommandType = CommandType.StoredProcedure + }; + + // Options: "all", "index", "statistics" + cmd.Parameters.Add("@operation", SqlDbType.NVarChar).Value = "all"; + // Options: "smart", "dummy" + cmd.Parameters.Add("@mode", SqlDbType.NVarChar).Value = "smart"; + // Options: 0, 1 + cmd.Parameters.Add("@LogToTable", SqlDbType.Bit).Value = 1; + + // Asynchronous BeginExecuteNonQuery for this long running sproc to avoid timeouts + var result = cmd.BeginExecuteNonQuery(); + cmd.EndExecuteNonQuery(result); + } + } + } +} diff --git a/util/Function/KeepAlive.cs b/util/Function/KeepAlive.cs index a21a31c17..4c4c4950a 100644 --- a/util/Function/KeepAlive.cs +++ b/util/Function/KeepAlive.cs @@ -7,9 +7,7 @@ namespace Bit.Function public static class KeepAlive { [FunctionName("KeepAlive")] - public static void Run( - [TimerTrigger("0 */15 * * * *")]TimerInfo myTimer, - TraceWriter log) + public static void Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer, TraceWriter log) { log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); }