Пример #1
0
        private AnalysisResult GetAnalysisInternal(string hostname, int?maxAge, AnalyzeOptions options, out Host hostResult)
        {
            Dictionary <string, string> parms = new Dictionary <string, string>();

            parms["host"] = hostname;

            if (options.HasFlag(AnalyzeOptions.Publish))
            {
                parms["publish"] = "on";
            }

            if (options.HasFlag(AnalyzeOptions.StartNew))
            {
                parms["startNew"] = "on";
            }
            else if (options.HasFlag(AnalyzeOptions.FromCache))
            {
                parms["fromCache"] = "on";
            }

            if (options.HasFlag(AnalyzeOptions.ReturnAll))
            {
                parms["all"] = "on";
            }
            else if (options.HasFlag(AnalyzeOptions.ReturnAllIfDone))
            {
                parms["all"] = "done";
            }

            if (options.HasFlag(AnalyzeOptions.IgnoreMismatch))
            {
                parms["ignoreMismatch"] = "on";
            }

            if (maxAge.HasValue)
            {
                parms["maxAge"] = maxAge.ToString();
            }

            HttpResponseMessage resp;

            try
            {
                resp = _restClient.GetAsync(BuildUrl("analyze", parms)).Result;
            }
            catch (AggregateException ex)
            {
                throw ex.InnerException;
            }

            ReadXHeaders(resp);

            hostResult = null;
            if (resp.StatusCode == HttpStatusCode.BadRequest || resp.StatusCode == HttpStatusCode.InternalServerError)
            {
                // 400 - invocation error (e.g., invalid parameters)
                // 500 - internal error
                return(AnalysisResult.Error);
            }

            if (resp.StatusCode == (HttpStatusCode)429)
            {
                // 429 - client request rate too high
                return(AnalysisResult.RateLimit);
            }

            if (resp.StatusCode == HttpStatusCode.ServiceUnavailable)
            {
                // 503 - the service is not available (e.g., down for maintenance)
                return(AnalysisResult.Maintenance);
            }

            if (resp.StatusCode == (HttpStatusCode)529)
            {
                // 529 - the service is overloaded
                return(AnalysisResult.Overloaded);
            }

            if (resp.StatusCode != HttpStatusCode.OK)
            {
                return(AnalysisResult.UnknownError);
            }

            string json = resp.Content.ReadAsStringAsync().Result;

            hostResult = JsonConvert.DeserializeObject <Host>(json);

            return(AnalysisResult.Success);
        }