示例#1
0
    public static IONAPI LoadIONAPI(string connection)
    {
        string connInfo = System.IO.File.ReadAllText(connection);

        dynamic dyn = JsonConvert.DeserializeObject(connInfo);

        if (dyn.saak == null || dyn.sask == null)
        {
            return(null);
        }

        string or   = dyn.or;
        string cn   = dyn.cn;
        string ci   = dyn.ci;
        string cs   = dyn.cs;
        string pu   = dyn.pu;
        string saak = dyn.saak;
        string sask = dyn.sask;
        string oa   = dyn.oa;
        string ot   = dyn.ot;

        IONAPI quickAPI = new IONAPI(cn, ci, cs, pu, saak, sask, oa, ot, or);

        return(quickAPI);
    }
            private static void LoadIonapi(string connection)
            {
                Console.WriteLine("Loading IONAPI configuration...");

                string connInfo = System.IO.File.ReadAllText(connection);

                dynamic dyn = JsonConvert.DeserializeObject(connInfo);

                string or          = dyn.or;
                string application = dyn.cn;
                string ci          = dyn.ci;
                string cs          = dyn.cs;
                string pu          = dyn.pu;
                string saak        = dyn.saak;
                string sask        = dyn.sask;
                string oa          = dyn.oa;
                string ot          = dyn.ot;

                _ionApi = new IONAPI(application, ci, cs, pu, saak, sask, oa, ot, or);
            }
        public static async Task <DataTable> RunDataLakeAsync(string sqlFile, IONAPI ionAPI)
        {
            string  responseBody;
            string  Status;
            dynamic columnTypes;
            dynamic dynDataReturn;
            string  SQL = "";

            Boolean.TryParse(Environment.GetEnvironmentVariable("DL_QuickDataTable"), out bool quickSave);

            if (quickSave && File.Exists("DL_QuickDataTable.tmp"))
            {
                try
                {
                    responseBody = File.ReadAllText("DL_QuickDataTable.tmp");
                    columnTypes  = File.ReadAllText("DL_QuickDataColumns.tmp");
                    SQL          = File.ReadAllText("DL_QuickSQL.tmp", Encoding.UTF8);

                    if (SQL.Equals(File.ReadAllText(sqlFile, Encoding.UTF8)))
                    {
                        dynDataReturn = JsonConvert.DeserializeObject(columnTypes);
                        columnTypes   = dynDataReturn.columns;
                        Status        = "Quick";
                        goto QuickDataLoad;
                    }
                }
                catch (Exception ex)
                { //Do nothing if lookup fails
                    Console.WriteLine("Warning: " + ex.Message);
                }
            }

            string bearerToken = ionAPI.GetBearerAuthorization();

            if (bearerToken == null)
            {
                Console.WriteLine("Error getting IONAPI Token: " + ionAPI.LastMessage);
                Environment.Exit(-23);
            }

            Console.WriteLine("Loading Compass SQL File : " + sqlFile);


            if (File.Exists(sqlFile))
            {
                SQL = File.ReadAllText(sqlFile, Encoding.UTF8);
            }
            else
            {
                Console.WriteLine("Compass Query file not found " + sqlFile);
                Environment.Exit(-22);
            }
            if (quickSave)
            {
                File.WriteAllText("DL_QuickSQL.tmp", SQL, Encoding.UTF8);
            }

            Console.WriteLine("Calling Compass API...");

            Task <HttpResponseMessage> query =
                Program.CompassURL
                .AppendPathSegment("/v1/compass/jobs")
                .SetQueryParam("resultFormat", "application/json")
                .WithOAuthBearerToken(bearerToken)
                .WithHeader("User-Agent", "DataMover")
                .WithHeader("Accept-Encoding", "deflate")
                .WithHeader("Cache-Control", "no-cache")
                .AllowAnyHttpStatus()
                .SendStringAsync(HttpMethod.Post, SQL);


            if (!query.Result.IsSuccessStatusCode)
            {
                Console.WriteLine("Compass API: " + query.Result.ReasonPhrase);
                return(null);
            }

            responseBody = await query.ReceiveString();

            dynDataReturn = JsonConvert.DeserializeObject(responseBody);

            Status = dynDataReturn.status;
            string Location = dynDataReturn.location;
            string queryID  = dynDataReturn.queryId;

            Console.Write("Compass API: " + dynDataReturn.status);

            query =
                Program.CompassURL
                .AppendPathSegment("/v1/compass/jobs/" + queryID + "/status", false)
                .SetQueryParam("timeout", "1")
                .WithOAuthBearerToken(bearerToken)
                .WithHeader("User-Agent", "DataMover")
                .WithHeader("Accept-Encoding", "deflate")
                .WithHeader("Cache-Control", "no-cache")
                .AllowAnyHttpStatus()
                .GetAsync();

            if (!query.Result.IsSuccessStatusCode)
            {
                Console.WriteLine("Compass API: " + query.Result.ReasonPhrase);
                return(null);
            }

            responseBody = await query.ReceiveString();

            dynDataReturn = JsonConvert.DeserializeObject(responseBody);

            Status = dynDataReturn.status;

            int loops = 0;

            while (!Status.Equals("FINISHED") && !Status.Equals("FAILED"))
            {
                query =
                    Program.CompassURL
                    .AppendPathSegment("/v1/compass/jobs/" + queryID + "/status", false)
                    .SetQueryParam("timeout", "1")
                    .WithOAuthBearerToken(bearerToken)
                    .WithHeader("User-Agent", "DataMover")
                    .WithHeader("Accept-Encoding", "deflate")
                    .AllowAnyHttpStatus()
                    .GetAsync();

                if (!query.Result.IsSuccessStatusCode)
                {
                    Console.WriteLine("Compass API: " + query.Result.ReasonPhrase);
                    return(null);
                }

                responseBody = await query.ReceiveString();

                dynDataReturn = JsonConvert.DeserializeObject(responseBody);
                if (dynDataReturn.status != Status)
                {
                    Console.WriteLine("");
                    Console.Write("Compass API: " + dynDataReturn.status);
                }

                Status = dynDataReturn.status;

                System.Threading.Thread.Sleep(1000);
                Console.Write(".");
                loops++;
            }
            Console.WriteLine("");

            columnTypes = dynDataReturn.columns;
            if (quickSave)
            {
                File.WriteAllText("DL_QuickDataColumns.tmp", responseBody);
            }

            Console.WriteLine("Result ID  : " + queryID + "");

            query =
                Program.CompassURL
                .AppendPathSegment("/v1/compass/jobs/" + queryID + "/result", false)
                .WithOAuthBearerToken(bearerToken)
                .WithHeader("Connection", "keep-alive")
                .WithHeader("Cache-Control", "no-cache")
                .WithHeader("User-Agent", "DataMover")
                .WithHeader("Accept-Encoding", "Deflate")
                .WithHeader("Accept", "application/json")
                .WithTimeout(600)
                .AllowAnyHttpStatus()
                .GetAsync();

            if (!query.Result.IsSuccessStatusCode)
            {
                Console.WriteLine("Compass API: " + query.Result.ReasonPhrase);
                return(null);
            }

            responseBody = await query.ReceiveString();

            if (quickSave)
            {
                File.WriteAllText("DL_QuickDataTable.tmp", responseBody);
            }

QuickDataLoad:

            DataTable thisData = new DataTable("ExportMI");

            if (Status.Equals("FAILED"))
            {
                Console.WriteLine("Compass API: " + responseBody);
                return(null);
            }

            var jsonReader = new JsonTextReader(new StringReader(responseBody))
            {
                SupportMultipleContent = true // This is important!
            };

            thisData = JObject.Parse(responseBody)["data"].ToObject <DataTable>();

            return(thisData);
        }