/// <inheritdoc/> public Task DeleteWebhookAsync(ScalingGroupId groupId, PolicyId policyId, WebhookId webhookId, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } if (policyId == null) { throw new ArgumentNullException("policyId"); } if (webhookId == null) { throw new ArgumentNullException("webhookId"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}/policies/{policyId}/webhooks/{webhookId}"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value }, { "policyId", policyId.Value }, { "webhookId", webhookId.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.DELETE, template, parameters); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <QueuedMessage> GetMessageAsync(QueueName queueName, MessageId messageId, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (messageId == null) { throw new ArgumentNullException("messageId"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/messages/{message_id}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, { "message_id", messageId.Value }, }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <HttpWebRequest>, Task <QueuedMessage> > requestResource = GetResponseAsyncFunc <QueuedMessage>(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task UpdateClaimAsync(QueueName queueName, Claim claim, TimeSpan timeToLive, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (claim == null) { throw new ArgumentNullException("claim"); } if (timeToLive <= TimeSpan.Zero) { throw new ArgumentOutOfRangeException("timeToLive"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/claims/{claim_id}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, { "claim_id", claim.Id.Value } }; JObject request = new JObject(new JProperty("ttl", new JValue((int)timeToLive.TotalSeconds))); Func <Task <Tuple <IdentityToken, Uri> >, Task <HttpWebRequest> > prepareRequest = PrepareRequestAsyncFunc(HttpMethod.PATCH, template, parameters, request); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Then(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task DeleteGroupAsync(ScalingGroupId groupId, bool?force, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}?force={force}"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value } }; if (force ?? false) { parameters.Add("force", force.ToString().ToLowerInvariant()); } Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.DELETE, template, parameters); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <ReadOnlyCollectionPage <ScalingGroup> > ListScalingGroupsAsync(ScalingGroupId marker, int?limit, CancellationToken cancellationToken) { if (limit <= 0) { throw new ArgumentOutOfRangeException("limit"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/?marker={marker}&limit={limit}"); var parameters = new Dictionary <string, string>(); if (marker != null) { parameters.Add("marker", marker.Value); } if (limit != null) { parameters.Add("limit", limit.ToString()); } Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <HttpWebRequest>, Task <JObject> > requestResource = GetResponseAsyncFunc <JObject>(cancellationToken); Func <Task <JObject>, ReadOnlyCollectionPage <ScalingGroup> > resultSelector = task => { JObject result = task.Result; if (result == null) { return(null); } JToken valuesToken = result["groups"]; if (valuesToken == null) { return(null); } JToken linksToken = result["groups_links"]; Link[] links = linksToken != null?linksToken.ToObject <Link[]>() : null; ScalingGroup[] values = valuesToken.ToObject <ScalingGroup[]>(); ScalingGroupId nextMarker = values.Any() && (links == null || links.Any(i => string.Equals(i.Rel, "next", StringComparison.OrdinalIgnoreCase))) ? values.Last().Id : null; Func <CancellationToken, Task <ReadOnlyCollectionPage <ScalingGroup> > > getNextPageAsync = null; if (nextMarker != null) { getNextPageAsync = nextCancellationToken => ListScalingGroupsAsync(nextMarker, limit, cancellationToken); } return(new BasicReadOnlyCollectionPage <ScalingGroup>(values, getNextPageAsync)); }; return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task ReleaseClaimAsync(QueueName queueName, Claim claim, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (claim == null) { throw new ArgumentNullException("claim"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/claims/{claim_id}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, { "claim_id", claim.Id.Value }, }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.DELETE, template, parameters); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <HomeDocument> GetHomeAsync(CancellationToken cancellationToken) { if (_homeDocument != null) { return(InternalTaskExtensions.CompletedTask(_homeDocument)); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/"); Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, new Dictionary <string, string>()); Func <Task <HttpWebRequest>, Task <HomeDocument> > requestResource = GetResponseAsyncFunc <HomeDocument>(cancellationToken); Func <Task <HomeDocument>, HomeDocument> cacheResult = task => { _homeDocument = task.Result; return(task.Result); }; return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(cacheResult)); }
/// <inheritdoc/> public Task SetPolicyAsync(ScalingGroupId groupId, PolicyId policyId, PolicyConfiguration configuration, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } if (policyId == null) { throw new ArgumentNullException("policyId"); } if (configuration == null) { throw new ArgumentNullException("configuration"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}/policies/{policyId}"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value }, { "policyId", policyId.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, Task <HttpWebRequest> > prepareRequest = PrepareRequestAsyncFunc(HttpMethod.PUT, template, parameters, configuration); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Then(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <bool> QueueExistsAsync(QueueName queueName, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.HEAD, template, parameters); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); Func <Task <string>, bool> interpretResult = task => { // a WebException would have been thrown if the queue didn't exist if (task.Status == TaskStatus.RanToCompletion) { return(true); } task.Exception.Flatten().Handle( ex => { WebException webException = ex as WebException; if (webException == null) { return(false); } HttpWebResponse response = webException.Response as HttpWebResponse; if (response == null) { return(false); } if (response.StatusCode != HttpStatusCode.NotFound) { return(false); } // a 404 error means the queue does not exist return(true); }); return(false); }; return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(interpretResult, true)); }
/// <inheritdoc/> public Task <ReadOnlyCollection <Webhook> > CreateWebhookRangeAsync(ScalingGroupId groupId, PolicyId policyId, IEnumerable <NewWebhookConfiguration> configurations, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } if (policyId == null) { throw new ArgumentNullException("policyId"); } if (configurations == null) { throw new ArgumentNullException("configurations"); } NewWebhookConfiguration[] configurationsArray = configurations.ToArray(); if (configurationsArray.Contains(null)) { throw new ArgumentException("configurations cannot contain any null values", "configurations"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}/policies/{policyId}/webhooks"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value }, { "policyId", policyId.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, Task <HttpWebRequest> > prepareRequest = PrepareRequestAsyncFunc(HttpMethod.POST, template, parameters, configurations); Func <Task <HttpWebRequest>, Task <JObject> > requestResource = GetResponseAsyncFunc <JObject>(cancellationToken); Func <Task <JObject>, ReadOnlyCollection <Webhook> > resultSelector = task => { JObject result = task.Result; if (result == null) { return(null); } JToken valueToken = result["webhooks"]; if (valueToken == null) { return(null); } ReadOnlyCollection <Webhook> webhooks = valueToken.ToObject <ReadOnlyCollection <Webhook> >(); return(webhooks); }; return(AuthenticateServiceAsync(cancellationToken) .Then(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task GetNodeHealthAsync(CancellationToken cancellationToken) { UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/health"); Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.HEAD, template, new Dictionary <string, string>()); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <Webhook> CreateWebhookAsync(ScalingGroupId groupId, PolicyId policyId, NewWebhookConfiguration configuration, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } if (policyId == null) { throw new ArgumentNullException("policyId"); } if (configuration == null) { throw new ArgumentNullException("configuration"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}/policies/{policyId}/webhooks"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value }, { "policyId", policyId.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, Task <HttpWebRequest> > prepareRequest = PrepareRequestAsyncFunc(HttpMethod.POST, template, parameters, new[] { configuration }); Func <Task <HttpWebRequest>, Task <JObject> > requestResource = GetResponseAsyncFunc <JObject>(cancellationToken); Func <Task <JObject>, Webhook> resultSelector = task => { JObject result = task.Result; if (result == null) { return(null); } JToken valueToken = result["webhooks"]; if (valueToken == null) { return(null); } Webhook[] webhooks = valueToken.ToObject <Webhook[]>(); return(webhooks[0]); }; return(AuthenticateServiceAsync(cancellationToken) .Then(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task <ReadOnlyCollectionPage <CloudQueue> > ListQueuesAsync(QueueName marker, int?limit, bool detailed, CancellationToken cancellationToken) { if (limit <= 0) { throw new ArgumentOutOfRangeException("limit"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues?marker={marker}&limit={limit}&detailed={detailed}"); var parameters = new Dictionary <string, string> { { "detailed", detailed.ToString().ToLowerInvariant() }, }; if (marker != null) { parameters.Add("marker", marker.Value); } if (limit.HasValue) { parameters.Add("limit", limit.ToString()); } Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <HttpWebRequest>, Task <ListCloudQueuesResponse> > requestResource = GetResponseAsyncFunc <ListCloudQueuesResponse>(cancellationToken); Func <Task <ListCloudQueuesResponse>, ReadOnlyCollectionPage <CloudQueue> > resultSelector = task => { ReadOnlyCollectionPage <CloudQueue> page = null; if (task.Result != null && task.Result.Queues != null) { CloudQueue lastQueue = task.Result.Queues.LastOrDefault(); QueueName nextMarker = lastQueue != null ? lastQueue.Name : marker; Func <CancellationToken, Task <ReadOnlyCollectionPage <CloudQueue> > > getNextPageAsync = nextCancellationToken => ListQueuesAsync(nextMarker, limit, detailed, nextCancellationToken); page = new BasicReadOnlyCollectionPage <CloudQueue>(task.Result.Queues, getNextPageAsync); } return(page ?? ReadOnlyCollectionPage <CloudQueue> .Empty); }; return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task <Claim> QueryClaimAsync(QueueName queueName, Claim claim, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (claim == null) { throw new ArgumentNullException("claim"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/claims/{claim_id}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, { "claim_id", claim.Id.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <Tuple <HttpWebResponse, string> >, Task <Tuple <Uri, TimeSpan, TimeSpan, IEnumerable <QueuedMessage> > > > parseResult = task => { // this response uses ContentLocation instead of Location string location = task.Result.Item1.Headers[HttpResponseHeader.ContentLocation]; Uri locationUri = location != null ? new Uri(_baseUri, location) : null; JObject result = JsonConvert.DeserializeObject <JObject>(task.Result.Item2); TimeSpan age = TimeSpan.FromSeconds((int)result["age"]); TimeSpan ttl = TimeSpan.FromSeconds((int)result["ttl"]); IEnumerable <QueuedMessage> messages = result["messages"].ToObject <IEnumerable <QueuedMessage> >(); return(InternalTaskExtensions.CompletedTask(Tuple.Create(locationUri, ttl, age, messages))); }; Func <Task <HttpWebRequest>, Task <Tuple <Uri, TimeSpan, TimeSpan, IEnumerable <QueuedMessage> > > > requestResource = GetResponseAsyncFunc(cancellationToken, parseResult); Func <Task <Tuple <Uri, TimeSpan, TimeSpan, IEnumerable <QueuedMessage> > >, Claim> resultSelector = task => new Claim(this, queueName, task.Result.Item1, task.Result.Item2, task.Result.Item3, false, task.Result.Item4); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task <Policy> GetPolicyAsync(ScalingGroupId groupId, PolicyId policyId, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } if (policyId == null) { throw new ArgumentNullException("policyId"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}/policies/{policyId}"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value }, { "policyId", policyId.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <HttpWebRequest>, Task <JObject> > requestResource = GetResponseAsyncFunc <JObject>(cancellationToken); Func <Task <JObject>, Policy> resultSelector = task => { JObject result = task.Result; if (result == null) { return(null); } JToken valueToken = result["policy"]; if (valueToken == null) { return(null); } return(valueToken.ToObject <Policy>()); }; return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task <LaunchConfiguration> GetLaunchConfigurationAsync(ScalingGroupId groupId, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}/launch"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <HttpWebRequest>, Task <JObject> > requestResource = GetResponseAsyncFunc <JObject>(cancellationToken); Func <Task <JObject>, LaunchConfiguration> resultSelector = task => { JObject result = task.Result; if (result == null) { return(null); } JObject valueToken = result["launchConfiguration"] as JObject; if (valueToken == null) { return(null); } return(LaunchConfiguration.FromJObject(valueToken)); }; return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task <MessagesEnqueued> PostMessagesAsync <T>(QueueName queueName, CancellationToken cancellationToken, params Message <T>[] messages) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (messages == null) { throw new ArgumentNullException("messages"); } if (messages.Contains(null)) { throw new ArgumentException("messages cannot contain any null values"); } if (messages.Length == 0) { return(QueueExistsAsync(queueName, cancellationToken) .Select(_ => MessagesEnqueued.Empty)); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/messages"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, }; Func <Task <Tuple <IdentityToken, Uri> >, Task <HttpWebRequest> > prepareRequest = PrepareRequestAsyncFunc(HttpMethod.POST, template, parameters, messages); Func <Task <HttpWebRequest>, Task <MessagesEnqueued> > requestResource = GetResponseAsyncFunc <MessagesEnqueued>(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Then(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task ResumeGroupAsync(ScalingGroupId groupId, CancellationToken cancellationToken) { if (groupId == null) { throw new ArgumentNullException("groupId"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups/{groupId}/resume"); var parameters = new Dictionary <string, string> { { "groupId", groupId.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.POST, template, parameters); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <ScalingGroup> CreateGroupAsync(ScalingGroupConfiguration configuration, CancellationToken cancellationToken) { if (configuration == null) { throw new ArgumentNullException("configuration"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/groups"); var parameters = new Dictionary <string, string>(); Func <Task <Tuple <IdentityToken, Uri> >, Task <HttpWebRequest> > prepareRequest = PrepareRequestAsyncFunc(HttpMethod.POST, template, parameters, configuration); Func <Task <HttpWebRequest>, Task <JObject> > requestResource = GetResponseAsyncFunc <JObject>(cancellationToken); Func <Task <JObject>, ScalingGroup> resultSelector = task => { JObject result = task.Result; if (result == null) { return(null); } JToken valueToken = result["group"]; if (valueToken == null) { return(null); } return(valueToken.ToObject <ScalingGroup>()); }; return(AuthenticateServiceAsync(cancellationToken) .Then(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task DeleteMessagesAsync(QueueName queueName, IEnumerable <MessageId> messageIds, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (messageIds == null) { throw new ArgumentNullException("messageIds"); } if (messageIds.Contains(null)) { throw new ArgumentException("messageIds cannot contain any null values"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/messages?ids={ids}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, { "ids", string.Join(",", messageIds.Select(i => i.Value).ToArray()) }, }; Func <Uri, Uri> uriTransform = uri => new Uri(uri.GetLeftPart(UriPartial.Path) + uri.Query.Replace("%2c", ",")); Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.DELETE, template, parameters, uriTransform); Func <Task <HttpWebRequest>, Task <string> > requestResource = GetResponseAsyncFunc(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <bool> CreateQueueAsync(QueueName queueName, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}"); var parameters = new Dictionary <string, string> { { "queue_name", queueName.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.PUT, template, parameters); Func <Task <Tuple <HttpWebResponse, string> >, Task <bool> > parseResult = task => { if (task.Result.Item1.StatusCode == HttpStatusCode.Created) { return(InternalTaskExtensions.CompletedTask(true)); } else { return(InternalTaskExtensions.CompletedTask(false)); } }; Func <Task <HttpWebRequest>, Task <bool> > requestResource = GetResponseAsyncFunc(cancellationToken, parseResult); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
/// <inheritdoc/> public Task <T> GetQueueMetadataAsync <T>(QueueName queueName, CancellationToken cancellationToken) where T : class { if (queueName == null) { throw new ArgumentNullException("queueName"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/metadata"); var parameters = new Dictionary <string, string> { { "queue_name", queueName.Value } }; Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <HttpWebRequest>, Task <T> > requestResource = GetResponseAsyncFunc <T>(cancellationToken); return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource)); }
public FooIdPage(IWebDriver driver, int id) : base(driver) { PageUriTemplate = new UriTemplate.UriTemplate("foo/{id}"); SetPageUrl(new Uri(PageManager.Current.BaseUrl, id.ToString()).ToString()); }
/// <inheritdoc/> /// <remarks> /// This method calls <see cref="ProviderBase{TProvider}.PrepareRequestImpl"/> to create the /// initial <see cref="HttpWebRequest"/>, and then sets the <c>Client-Id</c> header according /// to the Marconi (Cloud Queues) specification before returning. /// </remarks> protected override HttpWebRequest PrepareRequestImpl(HttpMethod method, IdentityToken identityToken, UriTemplate.UriTemplate template, Uri baseUri, IDictionary <string, string> parameters, Func <Uri, Uri> uriTransform) { HttpWebRequest request = base.PrepareRequestImpl(method, identityToken, template, baseUri, parameters, uriTransform); request.Headers["Client-Id"] = _clientId.ToString("D"); return(request); }
/// <inheritdoc/> public Task <QueuedMessageList> ListMessagesAsync(QueueName queueName, QueuedMessageListId marker, int?limit, bool echo, bool includeClaimed, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (limit <= 0) { throw new ArgumentOutOfRangeException("limit"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/messages?marker={marker}&limit={limit}&echo={echo}&include_claimed={include_claimed}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, { "echo", echo.ToString() }, { "include_claimed", includeClaimed.ToString() } }; if (marker != null) { parameters["marker"] = marker.Value; } if (limit != null) { parameters["limit"] = limit.ToString(); } Func <Task <Tuple <IdentityToken, Uri> >, HttpWebRequest> prepareRequest = PrepareRequestAsyncFunc(HttpMethod.GET, template, parameters); Func <Task <HttpWebRequest>, Task <ListCloudQueueMessagesResponse> > requestResource = GetResponseAsyncFunc <ListCloudQueueMessagesResponse>(cancellationToken); Func <Task <ListCloudQueueMessagesResponse>, QueuedMessageList> resultSelector = task => { ReadOnlyCollection <QueuedMessage> messages = null; if (task.Result != null) { messages = task.Result.Messages; } QueuedMessageListId nextMarker = null; if (task.Result != null && task.Result.Links != null) { Link nextLink = task.Result.Links.FirstOrDefault(i => string.Equals(i.Rel, "next", StringComparison.OrdinalIgnoreCase)); if (nextLink != null) { Uri baseUri = new Uri("https://example.com"); Uri absoluteUri; if (nextLink.Href.StartsWith("/v1")) { absoluteUri = new Uri(baseUri, nextLink.Href.Substring("/v1".Length)); } else { absoluteUri = new Uri(baseUri, nextLink.Href); } UriTemplate.UriTemplateMatch match = template.Match(baseUri, absoluteUri); if (!string.IsNullOrEmpty(match.BoundVariables["marker"])) { nextMarker = new QueuedMessageListId(match.BoundVariables["marker"]); } } } if (messages == null || messages.Count == 0) { // use the same marker again messages = messages ?? new ReadOnlyCollection <QueuedMessage>(new QueuedMessage[0]); nextMarker = marker; } Func <CancellationToken, Task <ReadOnlyCollectionPage <QueuedMessage> > > getNextPageAsync = null; if (nextMarker != null || messages.Count == 0) { getNextPageAsync = nextCancellationToken => ListMessagesAsync(queueName, nextMarker, limit, echo, includeClaimed, nextCancellationToken) .Select(t => (ReadOnlyCollectionPage <QueuedMessage>)t.Result); } return(new QueuedMessageList(messages, getNextPageAsync, nextMarker)); }; return(AuthenticateServiceAsync(cancellationToken) .Select(prepareRequest) .Then(requestResource) .Select(resultSelector)); }
/// <inheritdoc/> public Task <Claim> ClaimMessageAsync(QueueName queueName, int?limit, TimeSpan timeToLive, TimeSpan gracePeriod, CancellationToken cancellationToken) { if (queueName == null) { throw new ArgumentNullException("queueName"); } if (limit < 0) { throw new ArgumentOutOfRangeException("limit"); } if (timeToLive <= TimeSpan.Zero) { throw new ArgumentOutOfRangeException("timeToLive"); } if (gracePeriod < TimeSpan.Zero) { throw new ArgumentOutOfRangeException("gracePeriod"); } UriTemplate.UriTemplate template = new UriTemplate.UriTemplate("/queues/{queue_name}/claims?limit={limit}"); var parameters = new Dictionary <string, string>() { { "queue_name", queueName.Value }, }; if (limit != null) { parameters["limit"] = limit.ToString(); } var request = new ClaimMessagesRequest(timeToLive, gracePeriod); Func <Task <Tuple <IdentityToken, Uri> >, Task <HttpWebRequest> > prepareRequest = PrepareRequestAsyncFunc(HttpMethod.POST, template, parameters, request); Func <Task <Tuple <HttpWebResponse, string> >, Task <Tuple <Uri, IEnumerable <QueuedMessage> > > > parseResult = task => { string location = task.Result.Item1.Headers[HttpResponseHeader.Location]; Uri locationUri = location != null ? new Uri(_baseUri, location) : null; if (task.Result.Item1.StatusCode == HttpStatusCode.NoContent) { // the queue did not contain any messages to claim Tuple <Uri, IEnumerable <QueuedMessage> > result = Tuple.Create(locationUri, Enumerable.Empty <QueuedMessage>()); return(InternalTaskExtensions.CompletedTask(result)); } IEnumerable <QueuedMessage> messages = JsonConvert.DeserializeObject <IEnumerable <QueuedMessage> >(task.Result.Item2); return(InternalTaskExtensions.CompletedTask(Tuple.Create(locationUri, messages))); }; Func <Task <HttpWebRequest>, Task <Tuple <Uri, IEnumerable <QueuedMessage> > > > requestResource = GetResponseAsyncFunc <Tuple <Uri, IEnumerable <QueuedMessage> > >(cancellationToken, parseResult); Func <Task <Tuple <Uri, IEnumerable <QueuedMessage> > >, Claim> resultSelector = task => new Claim(this, queueName, task.Result.Item1, timeToLive, TimeSpan.Zero, true, task.Result.Item2); return(AuthenticateServiceAsync(cancellationToken) .Then(prepareRequest) .Then(requestResource) .Select(resultSelector)); }