示例#1
0
        public Uri BuildUri(IronClientConfig config, string path, NameValueCollection query)
        {
            if (path.StartsWith("/"))
            {
                path = path.Substring(1);
            }

            string queryString = "";

            if (query != null && query.Count > 0)
            {
                NameValueCollection httpValueCollection = HttpUtility.ParseQueryString("");

                httpValueCollection.Add(query);

                queryString = httpValueCollection.ToString();
            }

            var scheme     = String.IsNullOrEmpty(config.Scheme) ? Uri.UriSchemeHttps : config.Scheme;
            var uriBuilder = new UriBuilder(scheme, config.Host)
            {
                Path  = string.Format("{0}/{1}", config.ApiVersion, path.Replace("{Project ID}", config.ProjectId)),
                Query = queryString
            };

            if (config.Port.HasValue)
            {
                uriBuilder.Port = config.Port.Value;
            }

            return(uriBuilder.Uri);
        }
示例#2
0
 public static void SetOauthHeaderIfRequired(IronClientConfig config, IRestClientRequest request, HttpRequestHeaders headers)
 {
     if (request.AuthTokenLocation == AuthTokenLocation.Header)
     {
         headers.Authorization = new AuthenticationHeaderValue("OAuth", config.Token);
     }
 }
示例#3
0
 public override void SetOauthHeaderIfRequired(IronClientConfig config, IRestClientRequest request, HttpRequestHeaders headers)
 {
     if (request.AuthTokenLocation == AuthTokenLocation.Header)
     {
         String token = tokenContainer.getToken();
         headers.Authorization = new AuthenticationHeaderValue("OAuth", token);
     }
 }
示例#4
0
        static void Main(string[] args)
        {
            var config = new IronClientConfig { ProjectId = "ABC", Token = "XYZ", Host = "mq-aws-us-east-1-1.iron.io" };
            var iromMq = IronSharp.IronMQ.Client.New(config);

            var queue = iromMq.Queue("sampleQueue");
            var errorQueue = iromMq.Queue("errorQueue");

            var batchLoop = true;
            while (batchLoop)
            {
                var reserved = queue.Reserve(batchSize, timeout);
                if(reserved.Messages.Count == 0) {
                    Console.WriteLine("Ending worker - queue is empty");
                    break;
                }
                Console.WriteLine("Reserved {0} messages (requested {1})", reserved.Messages.Count, batchSize);

                foreach (var msg in reserved.Messages)
                {
                    // Before processing message, check time restriction
                    if (timeRemaining() < 3 * avgMsgProcTimeMinutes) // A coefficient for extra buffer
                    {
                        Console.WriteLine("Stopped processing messages due to out of time");
                        batchLoop = false;
                        break;
                    }

                    if (msg.ReservedCount > 5)
                    {
                        errorQueue.Post(msg);
                        msg.Delete();
                        continue;
                    }

                    try
                    {
                        processMsg(msg);
                        if (!msg.Delete())
                        {
                            Console.WriteLine("Processed message but was unable to delete: Id:{0}, Body:{1}", msg.Id, msg.Body);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Experienced processing error for msg Id:{0}, Body:{1}, err: {1}", msg.Id, msg.Body, e.ToString());
                        msg.Release(10 * msg.ReservedCount); // Try to release if timeout hasn't happened already
                    }
                }

                if (timeRemaining() < avgMsgProcTimeMinutes * batchSize)
                {
                    Console.WriteLine("Stopped reserving batches due to out of time");
                    batchLoop = false;
                    break;
                }
            }
        }
示例#5
0
 /// <summary>
 /// Generates the Uri for the specified request.
 /// </summary>
 /// <param name="config">The project id and other config values</param>
 /// <param name="request">The request endpoint and query parameters</param>
 /// <param name="token">(optional) The token to use for the building the request uri if different than the Token specified in the config.</param>
 public Uri BuildRequestUri(IronClientConfig config, IRestClientRequest request, string token = null)
 {
     if (string.IsNullOrEmpty(token))
     {
         token = config.Token;
     }
     SetOathQueryParameterIfRequired(request, token);
     return(BuildUri(config, request.EndPoint, request.Query));
 }
示例#6
0
        public RestResponse <T> Get <T>(IronClientConfig config, string endPoint, NameValueCollection query = null) where T : class
        {
            var requestBuilder = new HttpRequestMessageBuilder(config, this, new RestClientRequest
            {
                EndPoint = endPoint,
                Query    = query,
                Method   = HttpMethod.Get
            });

            return(new RestResponse <T>(AttemptRequest(config.SharpConfig, requestBuilder)));
        }
示例#7
0
        public static async Task <RestResponse <T> > Get <T>(IronClientConfig config, string endPoint, NameValueCollection query = null) where T : class
        {
            HttpRequestMessage request = RestUtility.BuildIronRequest(config, new RestClientRequest
            {
                EndPoint = endPoint,
                Query    = query,
                Method   = HttpMethod.Get
            });

            return(new RestResponse <T>(await AttemptRequestAync(config.SharpConfig, request)));
        }
示例#8
0
        public Task <HttpResponseMessage> Execute(IronClientConfig config, IRestClientRequest request)
        {
            var requestBuilder = new HttpRequestMessageBuilder(config, this, new RestClientRequest
            {
                EndPoint = request.EndPoint,
                Query    = request.Query,
                Method   = request.Method,
                Content  = request.Content
            });

            return(httpClient.SendAsync(requestBuilder.Build()));
        }
        private static void ApplyOverrides(IronClientConfig targetConfig, IronClientConfig overrideConfig)
        {
            if (overrideConfig == null)
            {
                return;
            }

            targetConfig.ProjectId  = string.IsNullOrEmpty(overrideConfig.ProjectId) ? targetConfig.ProjectId : overrideConfig.ProjectId;
            targetConfig.Token      = string.IsNullOrEmpty(overrideConfig.Token) ? targetConfig.Token : overrideConfig.Token;
            targetConfig.Host       = string.IsNullOrEmpty(overrideConfig.Host) ? targetConfig.Host : overrideConfig.Host;
            targetConfig.ApiVersion = overrideConfig.ApiVersion.HasValue ? overrideConfig.ApiVersion : targetConfig.ApiVersion;
        }
示例#10
0
        static void Main(string[] args)
        {
            var config = new IronClientConfig { ProjectId = "ABC", Token = "XYZ", Host = "mq-aws-us-east-1-1.iron.io" };
            var iromMq = IronSharp.IronMQ.Client.New(config);

            var queue = iromMq.Queue("sampleQueue");

            for (var x = 0; x < 1000; x++)
            {
                var messageId = queue.Post("Msg: " + x);
            }
        }
示例#11
0
        public static IronClientConfig Load(IronProduct product = IronProduct.AllProducts, IronClientConfig overrideConfig = null, string env = null)
        {
            string homeIronDotJson = Path.Combine(GetHomeDirectory(), ".iron.json");
            string appIronDotJson  = Path.Combine(GetAppDirectory(), "iron.json");

            IronClientConfig home = ParseJsonFile(product, homeIronDotJson, env);
            IronClientConfig app  = ParseJsonFile(product, appIronDotJson, env);

            ApplyOverrides(home, app);
            ApplyOverrides(home, overrideConfig);

            return(home);
        }
        internal IronWorkerRestClient(IronClientConfig config)
        {
            _config = LazyInitializer.EnsureInitialized(ref config);

            if (string.IsNullOrEmpty(Config.Host))
            {
                Config.Host = IronWorkCloudHosts.DEFAULT;
            }

            if (config.ApiVersion == default (int))
            {
                config.ApiVersion = 2;
            }
        }
示例#13
0
        private static void ApplyOverrides(IronClientConfig targetConfig, IronClientConfig overrideConfig)
        {
            if (overrideConfig == null)
            {
                return;
            }

            targetConfig.ProjectId  = string.IsNullOrEmpty(overrideConfig.ProjectId) ? targetConfig.ProjectId : overrideConfig.ProjectId;
            targetConfig.Token      = string.IsNullOrEmpty(overrideConfig.Token)     ? targetConfig.Token  : overrideConfig.Token;
            targetConfig.Host       = string.IsNullOrEmpty(overrideConfig.Host)      ? targetConfig.Host   : overrideConfig.Host;
            targetConfig.Scheme     = string.IsNullOrEmpty(overrideConfig.Scheme)    ? targetConfig.Scheme : overrideConfig.Scheme;
            targetConfig.ApiVersion = overrideConfig.ApiVersion == default(int) ? targetConfig.ApiVersion : overrideConfig.ApiVersion;
            targetConfig.Port       = overrideConfig.Port.HasValue ? overrideConfig.Port : targetConfig.Port;
            targetConfig.Keystone   = overrideConfig.Keystone == null ? targetConfig.Keystone : overrideConfig.Keystone;
        }
示例#14
0
        public static Task <HttpResponseMessage> Execute(IronClientConfig config, IRestClientRequest request)
        {
            HttpRequestMessage httpRequest = RestUtility.BuildIronRequest(config, new RestClientRequest
            {
                EndPoint = request.EndPoint,
                Query    = request.Query,
                Method   = request.Method,
                Content  = request.Content
            });

            using (var client = CreateHttpClient())
            {
                return(client.SendAsync(httpRequest));
            }
        }
        public static IronClientConfig ParseJsonFile(IronProduct product, string filePath, string env = null)
        {
            JsonDotConfigModel config = LoadJson(filePath, env);

            var settings = new IronClientConfig
            {
                ProjectId = config.ProjectId,
                Token     = config.Token,
                Host      = config.Host
            };

            ApplyOverrides(settings, GetProductOverride(product, config));

            return(settings);
        }
示例#16
0
        public static Uri BuildProjectUri(IronClientConfig config, string path, NameValueCollection query)
        {
            if (path.StartsWith("/"))
            {
                path = path.Substring(1);
            }

            string queryString = BuildQueryString(query);

            var uriBuilder = new UriBuilder(Uri.UriSchemeHttps, config.Host)
            {
                Path  = String.Format("{0}/{1}", config.ApiVersion, path.Replace("{Project ID}", config.ProjectId)),
                Query = queryString
            };

            return(uriBuilder.Uri);
        }
示例#17
0
        public RestResponse <T> Post <T>(IronClientConfig config, string endPoint, object payload = null, NameValueCollection query = null) where T : class
        {
            var requestBuilder = new HttpRequestMessageBuilder(config, this, new RestClientRequest
            {
                EndPoint = endPoint,
                Query    = query,
                Method   = HttpMethod.Post
            });

            IronSharpConfig sharpConfig = config.SharpConfig;

            if (payload != null)
            {
                requestBuilder.Payload = payload;
            }

            return(new RestResponse <T>(AttemptRequest(sharpConfig, requestBuilder)));
        }
示例#18
0
        public static async Task <RestResponse <T> > Put <T>(IronClientConfig config, string endPoint, object payload, NameValueCollection query = null) where T : class
        {
            HttpRequestMessage request = RestUtility.BuildIronRequest(config, new RestClientRequest
            {
                EndPoint = endPoint,
                Query    = query,
                Method   = HttpMethod.Put
            });

            IronSharpConfig sharpConfig = config.SharpConfig;

            if (payload != null)
            {
                request.Content = new JsonContent(payload);
            }

            return(new RestResponse <T>(await AttemptRequestAync(sharpConfig, request)));
        }
示例#19
0
        public static HttpRequestMessage BuildIronRequest(IronClientConfig config, IRestClientRequest request)
        {
            SetOathQueryParameterIfRequired(request, config.Token);
            var httpRequest = new HttpRequestMessage
            {
                Content    = request.Content,
                RequestUri = BuildProjectUri(config, request.EndPoint, request.Query),
                Method     = request.Method
            };

            HttpRequestHeaders headers = httpRequest.Headers;

            SetOauthHeaderIfRequired(config, request, headers);
            headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
            headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
            headers.Accept.Add(new MediaTypeWithQualityHeaderValue(request.Accept));

            return(httpRequest);
        }
示例#20
0
        public static IronClientConfig LoadFromEnvironment(IronProduct product, EnvironmentVariableTarget target = EnvironmentVariableTarget.Process)
        {
            var baseConfig = new IronClientConfig
            {
                ProjectId = GetEnvironmentValue <string>(IronProduct.AllProducts, "projectid", target),
                Token     = GetEnvironmentValue <string>(IronProduct.AllProducts, "token", target)
            };

            var productConfig = new IronClientConfig
            {
                ProjectId = GetEnvironmentValue <string>(product, "projectid", target),
                Token     = GetEnvironmentValue <string>(product, "token", target),
                Host      = GetEnvironmentValue <string>(product, "host", target)
            };

            ApplyOverrides(baseConfig, productConfig);

            return(baseConfig);
        }
示例#21
0
        private static IronClientConfig GetProductOverride(IronProduct product, JsonDotConfigModel config)
        {
            IronClientConfig productOverride = null;

            switch (product)
            {
            case IronProduct.IronCache:
                productOverride = config.IronCache;
                break;

            case IronProduct.IronMQ:
                productOverride = config.IronMQ;
                break;

            case IronProduct.IronWorker:
                productOverride = config.IronWoker;
                break;
            }
            return(productOverride);
        }
示例#22
0
        /// <summary>
        /// Creates a new client using the specified configuration and optional <param name="env"></param> paramter to specificy which enivonment to use when loading default values;
        /// </summary>
        /// <param name="config">The explicitly specified configuration values</param>
        /// <param name="env">The environment key as it appears in the iron.json file.  See http://dev.iron.io/worker/reference/cli/#upload_with_multiple_environments for an example layout</param>
        public static IronWorkerRestClient @New(IronClientConfig config, string env = null)
        {
            IronClientConfig hierarchyConfig = IronDotConfigManager.Load(IronProduct.IronWorker, config, env);

            return new IronWorkerRestClient(hierarchyConfig);
        }