Beispiel #1
0
        private static void CreateQuandlSchema()
        {
            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = @"CREATE SCHEMA quandl;";

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        if (ex.SqlState == "42P06")
                        {
                            ConsoleInformer.Inform("Quandl shcema already exists. Using it");
                        }
                        else
                        {
                            conn.Close(); Helpers.ExitWithError(ex.Message);
                        }
                    }

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            IVisualizer visualizator = new ConsoleInformer();
            Controller  cntrl        = new Controller(args, visualizator);

            cntrl.Start();//.
        }
        public static void InsertQuandlDatabases(List <QuandlDatabase> databases)
        {
            using (var conn = new NpgsqlConnection(Utils.Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = QuandlDatabasesInsertQuery(databases);

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        conn.Close();
                        Helpers.ExitWithError(ex.Message);
                    }

                    ConsoleInformer.PrintProgress("2A", "Inserting new quandl databases: ", "100%");

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }
        }
Beispiel #4
0
 public static void MakeDatabase()
 {
     Console.WriteLine("Creating inital schema\n---------------------------------------");
     InitPostgresDB();
     ConsoleInformer.PrintProgress("0A", "Creating schema: ", "50%");
     CreateQuandlSchema();
     ConsoleInformer.PrintProgress("0A", "Creating schema: ", "75%");
     CreateQuandlDatabasesTable();
     ConsoleInformer.PrintProgress("0A", "Creating schema: ", "100%");
 }
Beispiel #5
0
        // Where all the datasets data will go
        public static void CreateQuandlDatasetDataTable(QuandlDatasetGroup datasetGroup)
        {
            // Do not make data tables without date colum
            if (!datasetGroup.HasColumnDate())
            {
                return;
            }

            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = @"CREATE TABLE quandl." + datasetGroup.DatabaseCode + @"(
                                        DatasetCode          TEXT,
                                        DatabaseCode         TEXT,
                                        Name                 TEXT    NOT NULL,
                                        Transform            TEXT,
                                        DatabaseId           BIGINT,
                                        date_insert          timestamptz," +
                                   // Column names [specific data]
                                   //datasetGroup.MakeDatasetsExtraColumnsWithDataType() + @",
                                   datasetGroup.MakePrimaryKeysForCreate() + @",
                                        PRIMARY KEY(" + string.Join(", ", datasetGroup.PrimaryKeys()) + @") 
                                    );";

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        //Console.WriteLine(ex.Message);
                        if (ex.SqlState == "42P07")
                        {
                            createDateInsertColumnIfNeeded("quandl." + datasetGroup.DatabaseCode);
                            ConsoleInformer.Inform("Table model [" + datasetGroup.DatabaseCode + "] already exists. Using it");
                        }
                        else
                        {
                            conn.Close(); Helpers.ExitWithError(ex.Message);
                        }
                    }

                    ConsoleInformer.PrintProgress("2C", "[" + datasetGroup.DatabaseCode + "] Creating table model: ", "100%");

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }
        }
Beispiel #6
0
        private static void CreateQuandlDatabasesTable()
        {
            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = @"CREATE TABLE quandl.Databases(
                                       Id               BIGINT  PRIMARY KEY NOT NULL,
                                       Name             TEXT    NOT NULL,
                                       DatabaseCode     TEXT,
                                       Description      TEXT,
                                       DatasetsCount    BIGINT,
                                       Downloads        BIGINT,
                                       Premium          BOOL    DEFAULT FALSE,
                                       Image            TEXT,
                                       Favorite         BOOL    DEFAULT FALSE,
                                       Import           BOOL    DEFAULT FALSE,
                                       date_insert      timestamptz
                                    );";

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        //Console.WriteLine(ex.Message);
                        if (ex.SqlState == "42P07")
                        {
                            createDateInsertColumnIfNeeded("quandl.Databases");
                            ConsoleInformer.Inform("QuandlDatabases table already exists. Using it");
                            //cmd.CommandText = "TRUNCATE TABLE databases";
                            //try { cmd.ExecuteNonQuery(); }
                            //catch (PostgresException exception)
                            //{
                            //    conn.Close(); Helpers.ExitWithError(exception.Message);
                            //}
                        }
                        else
                        {
                            conn.Close(); Helpers.ExitWithError(ex.Message);
                        }
                    }

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }
        }
Beispiel #7
0
        // Where all the datasets will go
        public static void CreateQuandlDatasetTable()
        {
            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = @"CREATE TABLE quandl.datasets (
                                        Id                   BIGINT  PRIMARY KEY NOT NULL,
                                        DatasetCode          TEXT,
                                        DatabaseCode         TEXT,
                                        Name                 TEXT    NOT NULL,
                                        Description          TEXT,
                                        NewestAvailableDate  DATE,
                                        OldestAvailableDate  DATE,
                                        ColumnNames          TEXT,
                                        Frequency            TEXT,
                                        Type                 TEXT,
                                        Premium              BOOL    DEFAULT FALSE,
                                        DatabaseId           BIGINT,
                                        Import               BOOL    DEFAULT FALSE,
                                        date_insert          timestamptz
                                    );";

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        //Console.WriteLine(ex.Message);
                        if (ex.SqlState == "42P07")
                        {
                            createDateInsertColumnIfNeeded("quandl.datasets");
                            ConsoleInformer.Inform("Datasets table model already exists. Using it");
                        }
                        else
                        {
                            conn.Close(); Helpers.ExitWithError(ex.Message);
                        }
                    }

                    ConsoleInformer.PrintProgress("2B", "Creating datasets table: ", "100%");

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }
        }
Beispiel #8
0
        // Create datatables data model
        public static void CreateQuandlDatatableModelTable(QuandlDatatable datatable)
        {
            // Do not make data tables without name
            if (String.IsNullOrWhiteSpace(datatable.Name))
            {
                return;
            }

            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = @"CREATE TABLE quandl.""" + datatable.Name + @"""(" +
                                   // Column names [specific data]
                                   datatable.MakeExtraColumnsWithDataType() + @",
                                        date_insert          timestamptz
                                    );";

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        //Console.WriteLine(ex.Message);
                        if (ex.SqlState == "42P07")
                        {
                            createDateInsertColumnIfNeeded(@"quandl.""" + datatable.Name + @"""");
                            ConsoleInformer.Inform("Table model [" + datatable.Name + "] already exists. Truncating...");
                            cmd.CommandText = @"TRUNCATE TABLE quandl.""" + datatable.Name + @"""";
                            try { cmd.ExecuteNonQuery(); }
                            catch (PostgresException exception) { conn.Close(); Helpers.ExitWithError(exception.Message); }
                        }
                        else
                        {
                            conn.Close(); Helpers.ExitWithError(ex.Message);
                        }
                    }

                    ConsoleInformer.PrintProgress("3D", "[" + datatable.Name + "] Creating table model: ", "100%");

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }
        }
Beispiel #9
0
        // Метод главного меню программы
        internal static void MainMenu()
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("(i) Input the menu item number.\n1. Send message via console\n2. Bot info\n3. Log\n4. Exit");
                Console.Write("Input: ");

                int menuItem;

                while (true)
                {
                    bool isCorrect = Int32.TryParse(Console.ReadLine(), out menuItem);

                    if (isCorrect)
                    {
                        break;
                    }

                    ConsoleInformer.ErrorMessage("Incorrect input. Please try again.");
                    Console.Write("Input: ");
                }

                Console.Clear();

                switch (menuItem)
                {
                case 1:
                    Program.SendConsoleMessage();
                    Console.ReadKey();
                    break;

                case 2:
                    ConsoleInformer.PrintBotInfo(Program.Bot);
                    Console.ReadKey();
                    break;

                case 3:
                    LogMenu();
                    break;

                case 4:
                    return;     // Выход из программы

                default:
                    ConsoleInformer.ErrorMessage("Non-existent menu item.");
                    Console.ReadKey();
                    break;
                }
            }
        }
Beispiel #10
0
        // Метод меню для взаимодействия с журналом
        internal static void LogMenu()
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("(i) Input the menu item number.\n1. Get log\n2. Clear log\n3. Back");
                Console.Write("Input: ");

                int menuItem;

                while (true)
                {
                    bool isCorrect = Int32.TryParse(Console.ReadLine(), out menuItem);

                    if (isCorrect)
                    {
                        break;
                    }

                    ConsoleInformer.ErrorMessage("Incorrect input. Please try again.");
                    Console.Write("Input: ");
                }

                Console.Clear();

                switch (menuItem)
                {
                case 1:
                    Logger.ReadLog();
                    Console.WriteLine("(i) Press 'Enter' to go back...\n");
                    Console.ReadKey();
                    break;

                case 2:
                    Logger.ClearLog();
                    Console.WriteLine("(i) Log cleared.");
                    Console.WriteLine("(i) Press 'Enter' to go back...\n");
                    Console.ReadKey();
                    break;

                case 3:
                    return;

                default:
                    ConsoleInformer.ErrorMessage("Non-existent menu item.");
                    Console.ReadKey();
                    break;
                }
            }
        }
Beispiel #11
0
 public static void InsertQuandlDatasetGroup(QuandlDatasetGroup datasetGroup)
 {
     try
     {
         datasetGroup.MakeInsertQuery();
         ConsoleInformer.PrintProgress("3B", "Inserting datasets for [" + datasetGroup.DatabaseCode + "]");
     }
     catch (Exception ex)
     {
         // Write
         Utils.ConsoleInformer.Inform("Some unexpected stuff happened when inserting [" + datasetGroup.DatabaseCode + "]. See the log for more info");
         Utils.Helpers.Log("Something worng happened when trying to insert [" + datasetGroup.DatabaseCode + "] datasets. Check log", ex.Message);
     }
 }
Beispiel #12
0
        // Create datatable table
        public static void CreateQuandlDatatablesTable()
        {
            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = @"CREATE TABLE quandl.datatables(
                                       Name             TEXT    PRIMARY KEY NOT NULL,
                                       Import           BOOL    DEFAULT FALSE,
                                       date_insert      timestamptz
                                    );";

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        //Console.WriteLine(ex.Message);
                        if (ex.SqlState == "42P07")
                        {
                            createDateInsertColumnIfNeeded("quandl.datatables");
                            ConsoleInformer.Inform("QuandlDatatables table already exists. Using it");
                            //cmd.CommandText = "TRUNCATE TABLE databases";
                            //try { cmd.ExecuteNonQuery(); }
                            //catch (PostgresException exception)
                            //{
                            //    conn.Close(); Helpers.ExitWithError(exception.Message);
                            //}
                        }
                        else
                        {
                            conn.Close(); Helpers.ExitWithError(ex.Message);
                        }
                    }

                    // Close connection
                    // ===============================================================
                    conn.Close();

                    // Inform
                    ConsoleInformer.PrintProgress("0D", "Creating Datatables Table schema", "100%");
                }
            }
        }
        public static List <QuandlDatabase> GetImportedDatabases()
        {
            // Query
            string query = @"SELECT id, name, databasecode, description, datasetscount, downloads, premium, image, favorite, import
                                    FROM quandl.databases
                                    WHERE import = true";

            List <QuandlDatabase> databases = new List <QuandlDatabase>();

            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand(query))
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();
                    cmd.Connection = conn;

                    try
                    {
                        // Execute the query and obtain a result set
                        NpgsqlDataReader dr = cmd.ExecuteReader();

                        // Each row
                        while (dr.Read())
                        {
                            databases.Add(QuandlDatabase.MakeQuandlDatabase(dr));
                        }
                    }
                    catch (Exception ex)
                    {
                        conn.Close();
                        Helpers.ExitWithError(ex.Message);
                    }

                    ConsoleInformer.PrintProgress("0B", "Querying imported databases: ", "100%");

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }

            return(databases);
        }
Beispiel #14
0
        private static void InitPostgresDB()
        {
            using (var conn = new NpgsqlConnection(Constants.BASE_CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand())
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();

                    // Query
                    string query = @"CREATE DATABASE quandl
                            WITH 
                            OWNER = postgres
                            ENCODING = 'UTF8'
                            CONNECTION LIMIT = -1;

                            COMMENT ON DATABASE quandl
                            IS '
                            ';";

                    cmd.Connection  = conn;
                    cmd.CommandText = query;
                    try { cmd.ExecuteNonQuery(); }
                    catch (PostgresException ex)
                    {
                        if (ex.SqlState == "42P04")
                        {
                            ConsoleInformer.Inform("Database already exist. Using it");
                        }
                        else
                        {
                            conn.Close(); Helpers.ExitWithError(ex.Message);
                        }
                    }

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }
        }
Beispiel #15
0
        /**
         * Dataset info methos
         */
        public static void InsertQuandlDatasets(List <QuandlDatasetGroup> datasetsGroups)
        {
            // Make datasets model tables
            SchemaActions.CreateQuandlDatasetTable();

            // Insert datasets
            int count = 0;

            foreach (QuandlDatasetGroup datasetGroup in datasetsGroups)
            {
                count++;
                try
                {
                    datasetGroup.MakeInsertQuery();
                    ConsoleInformer.PrintProgress("3B", "Inserting [" + datasetGroup.DatabaseCode + "] datasets: ", Utils.Helpers.GetPercent(count, datasetsGroups.Count).ToString() + "%");
                }
                catch (Exception ex)
                {
                    // Write
                    Utils.ConsoleInformer.Inform("Some unexpected stuff happened. See the log for more info");
                    Utils.Helpers.Log("Something worng happened when trying to insert [" + datasetGroup.DatabaseCode + "] datasets. Check log", ex.Message);
                }
            }
        }
Beispiel #16
0
        /**
         * Dataset data methos
         */
        public static List <QuandlDatasetGroup> GetImportedDatasets()
        {
            // This query does not takes in count if the de dataset's database is imported too
            //string query = @"SELECT " + QuandlDataset.GetColumnsForQuery() + " " +
            //                        @"FROM quandl.datasets
            //                        WHERE import = true";

            // Query
            string query = @"SELECT " + QuandlDataset.GetColumnsForQuerySuffixed("ds") + @" 
                            FROM quandl.databases INNER JOIN quandl.datasets ds ON (quandl.databases.databasecode = ds.databasecode)
                            WHERE quandl.databases.import = true AND ds.import = true";

            List <QuandlDatasetGroup> datasetsGroups = new List <QuandlDatasetGroup>();

            using (var conn = new NpgsqlConnection(Constants.CONNECTION_STRING))
            {
                using (var cmd = new NpgsqlCommand(query))
                {
                    // Open connection
                    // ===============================================================
                    conn.Open();
                    cmd.Connection = conn;

                    try
                    {
                        // Execute the query and obtain a result set
                        NpgsqlDataReader dr = cmd.ExecuteReader();

                        // Each row
                        while (dr.Read())
                        {
                            // Add each dataset to its own group (Database code)
                            QuandlDataset dataset = QuandlDataset.MakeQuandlDataset(dr);

                            // If group doesnt exists, create it
                            if (!datasetsGroups.Exists(d => d.DatabaseCode == dataset.DatabaseCode))
                            {
                                datasetsGroups.Add(new QuandlDatasetGroup()
                                {
                                    DatabaseCode = dataset.DatabaseCode, Datasets = new List <QuandlDataset>()
                                });
                            }

                            datasetsGroups.Find(d => d.DatabaseCode == dataset.DatabaseCode).Datasets.Add(dataset);
                        }
                    }
                    catch (Exception ex)
                    {
                        conn.Close();
                        Helpers.ExitWithError(ex.Message);
                    }

                    ConsoleInformer.PrintProgress("0C", "Querying imported datasets: ", "100%");

                    // Close connection
                    // ===============================================================
                    conn.Close();
                }
            }

            return(datasetsGroups);
        }