From c6906c3b6664d0d869ee86adce0a6fb3a98fb0ec Mon Sep 17 00:00:00 2001 From: Karl Burtram Date: Wed, 27 Jun 2018 08:25:19 -0700 Subject: [PATCH] Add Get Schedules request handler (#646) --- .../Agent/AgentService.cs | 44 ++++++++++++++++++- .../Agent/Contracts/AgentScheduleInfo.cs | 2 +- .../Agent/AgentScheduleTests.cs | 24 ++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs b/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs index e0e43587..c3e0010d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs @@ -607,7 +607,49 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent internal async Task HandleAgentSchedulesRequest(AgentSchedulesParams parameters, RequestContext requestContext) { - await requestContext.SendResult(null); + await Task.Run(async () => + { + var result = new AgentSchedulesResult(); + try + { + ConnectionInfo connInfo; + ConnectionServiceInstance.TryFindConnection(parameters.OwnerUri, out connInfo); + CDataContainer dataContainer = CDataContainer.CreateDataContainer(connInfo, databaseExists: true); + + int scheduleCount = dataContainer.Server.JobServer.SharedSchedules.Count; + var schedules = new AgentScheduleInfo[scheduleCount]; + for (int i = 0; i < scheduleCount; ++i) + { + var schedule = dataContainer.Server.JobServer.SharedSchedules[i]; + schedules[i] = new AgentScheduleInfo(); + schedules[i].Id = schedule.ID; + schedules[i].Name = schedule.Name; + schedules[i].IsEnabled = schedule.IsEnabled; + schedules[i].FrequencyTypes = (Contracts.FrequencyTypes)schedule.FrequencyTypes; + schedules[i].FrequencySubDayTypes = (Contracts.FrequencySubDayTypes)schedule.FrequencySubDayTypes; + schedules[i].FrequencySubDayInterval = schedule.FrequencySubDayInterval; + schedules[i].FrequencyRelativeIntervals = (Contracts.FrequencyRelativeIntervals)schedule.FrequencyRelativeIntervals; + schedules[i].FrequencyRecurrenceFactor = schedule.FrequencyRecurrenceFactor; + schedules[i].FrequencyInterval = schedule.FrequencyInterval; + schedules[i].DateCreated = schedule.DateCreated; + schedules[i].ActiveStartTimeOfDay = schedule.ActiveStartTimeOfDay; + schedules[i].ActiveStartDate = schedule.ActiveStartDate; + schedules[i].ActiveEndTimeOfDay = schedule.ActiveEndTimeOfDay; + schedules[i].JobCount = schedule.JobCount; + schedules[i].ActiveEndDate = schedule.ActiveEndDate; + schedules[i].ScheduleUid = schedule.ScheduleUid; + } + result.Schedules = schedules; + result.Success = true; + } + catch (Exception ex) + { + result.Success = false; + result.ErrorMessage = ex.ToString(); + } + + await requestContext.SendResult(result); + }); } internal async Task HandleCreateAgentScheduleRequest(CreateAgentScheduleParams parameters, RequestContext requestContext) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentScheduleInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentScheduleInfo.cs index a487e282..6dabd2fa 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentScheduleInfo.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentScheduleInfo.cs @@ -47,7 +47,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent.Contracts /// public class AgentScheduleInfo { - public int ID { get; set; } + public int Id { get; set; } public string Name { get; set; } public string JobName { get; set; } public bool IsEnabled { get; set; } diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentScheduleTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentScheduleTests.cs index 74eb220e..3fbc6c77 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentScheduleTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentScheduleTests.cs @@ -18,6 +18,30 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.Agent { public class AgentScheduleTests { + /// + /// HandleAgentSchedulesRequest + /// + [Fact] + public async Task HandleAgentSchedulesRequest() + { + using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile()) + { + // setup + var connectionResult = await LiveConnectionHelper.InitLiveConnectionInfoAsync("master", queryTempFile.FilePath); + var service = new AgentService(); + + // test + var context = new Mock>(); + await service.HandleAgentSchedulesRequest(new AgentSchedulesParams + { + OwnerUri = connectionResult.ConnectionInfo.OwnerUri + }, context.Object); + context.VerifyAll(); + } + } + + + /// /// TestHandleCreateAgentScheduleRequest ///