コード例 #1
0
        /// <summary>
        /// Enumerate infos of all cloud service schedules.
        /// </summary>
        public List <CloudServiceSchedulingInfo> GetSchedules()
        {
            // TODO: Redesign to make it self-contained (so that we don't need to pass the name as well)

            return(_blobs.ListBlobNames(ScheduledServiceStateName.GetPrefix())
                   .Select(name => Tuple.Create(name, _blobs.GetBlob(name, _runtimeSerializer)))
                   .Where(pair => pair.Item2.HasValue)
                   .Select(pair =>
            {
                var state = pair.Item2.Value;
                var info = new CloudServiceSchedulingInfo
                {
                    ServiceName = pair.Item1.ServiceName,
                    TriggerInterval = state.TriggerInterval,
                    LastExecuted = state.LastExecuted,
                    WorkerScoped = state.SchedulePerWorker,
                    LeasedBy = Maybe <string> .Empty,
                    LeasedSince = Maybe <DateTimeOffset> .Empty,
                    LeasedUntil = Maybe <DateTimeOffset> .Empty
                };

                if (state.Lease != null)
                {
                    info.LeasedBy = state.Lease.Owner;
                    info.LeasedSince = state.Lease.Acquired;
                    info.LeasedUntil = state.Lease.Timeout;
                }

                return info;
            })
                   .ToList());
        }
コード例 #2
0
		/// <summary>
		/// Forcibly remove the synchronization lease of a periodic cloud service
		/// </summary>
		public void ReleaseLease(string serviceName)
		{
			var blobRef = new ScheduledServiceStateName(serviceName);
			_blobProvider.UpdateIfNotModified(
				blobRef,
				currentState =>
				{
					if (!currentState.HasValue)
					{
						return Result<ScheduledServiceState>.CreateError("No service state available.");
					}

					var state = currentState.Value;

					// remove lease
					state.Lease = null;
					return Result.CreateSuccess(state);
				});
		}
コード例 #3
0
		/// <summary>
		/// Remove the scheduling information of a cloud service
		/// </summary>
		public void ResetSchedule(string serviceName)
		{
			var blobRef = new ScheduledServiceStateName(serviceName);
			_blobProvider.DeleteBlob(blobRef);
		}
コード例 #4
0
		/// <summary>
		/// Set the trigger interval of a cloud service.
		/// </summary>
		public void SetTriggerInterval(string serviceName, TimeSpan triggerInterval)
		{
			var blobRef = new ScheduledServiceStateName(serviceName);
			_blobProvider.UpdateIfNotModified(blobRef,
				blob =>
				{
					var state = blob.Value;
					state.TriggerInterval = triggerInterval;
					return state;
				});
		}
コード例 #5
0
 /// <summary>
 /// Enumerate the names of all scheduled cloud service.
 /// </summary>
 public List <string> GetScheduledServiceNames()
 {
     return(_blobs.ListBlobNames(ScheduledServiceStateName.GetPrefix())
            .Select(reference => reference.ServiceName).ToList());
 }