CSS   34

DatabaseManager

Guest on 24th November 2022 01:30:22 AM

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using MySql.Data.MySqlClient;
  7. using Toolbox;
  8.  
  9. namespace H_Man
  10. {
  11.   public class DatabaseManager
  12.   {
  13.                 private static IDbConnection connection = null;
  14.  
  15.                 public DatabaseManager (bool autoConnect)
  16.                 {
  17.                         if (autoConnect)
  18.                         {
  19.                                 // This creates a connection and opens it
  20.                                 IDbConnection conn = DatabaseManager.Connection;
  21.                         }
  22.                 }
  23.  
  24.                 public static IDbConnection Connection
  25.     {
  26.                         get
  27.                         {
  28.                                 if (connection == null)
  29.                                 {
  30.                                         connection = new MySqlConnection (Config.DB_CONNECTION_STRING);
  31.                                         connection.Open ();
  32.                                         Logger.Log ("Connected Database ...");
  33.                                 }
  34.  
  35.                                 return connection;    
  36.                         }
  37.     }
  38.  
  39.     public void ReadResourceUsage()
  40.     {
  41.                         IDbCommand dbcmd = DatabaseManager.Connection.CreateCommand();
  42.       string sql ="SELECT * FROM resource_usage";
  43.       dbcmd.CommandText = sql;
  44.       IDataReader reader = dbcmd.ExecuteReader();
  45.       while (reader.Read())
  46.       {
  47.         string FirstName = (string)reader["host_name"];
  48.         string LastName = (string)reader["domain_id"];
  49.                                 Logger.Log("Info: " +
  50.               FirstName + " " + LastName);
  51.       }
  52.       // clean up
  53.       reader.Close();
  54.       reader = null;
  55.       dbcmd.Dispose();
  56.       dbcmd = null;  
  57.     }
  58.  
  59.     public void InsertResourceUsage(Host host)
  60.     {
  61.                         Logger.Log ("InsertResourceUsage...");
  62.  
  63.       IDbCommand dbcmdHost = null;
  64.       string sql = string.Empty;
  65.  
  66.                         dbcmdHost = DatabaseManager.Connection.CreateCommand();
  67.       sql = "INSERT INTO resource_usage_host (" +
  68.         "timestamp, " +
  69.         "host_id, " +
  70.         "cpu_model, " +
  71.         "cpu_frequency, " +
  72.         "memory_size, " +
  73.         "num_of_cores, " +
  74.         "num_of_vms, " +
  75.         "cpu_util, " +
  76.         "memory_util, " +
  77.         "network_util, " +
  78.         "disk_util, " +
  79.         "cpu_overbooking_ratio, " +
  80.         "memory_overbooking_ratio, " +
  81.         "sched_timeslice, " +
  82.         "sched_ratelimit, " +
  83.         "sched_weight, " +
  84.         "sched_cap, " +
  85.         "power_consumption, " +
  86.               "performance_metrics, " +
  87.               "non_latency_sen_vm_perc, " +
  88.               "latency_sen_vm_lev1_perc, " +
  89.               "latency_sen_vm_lev2_perc, " +
  90.               "latency_sen_vm_lev3_perc ) " +
  91.         "VALUES " +
  92.                                 "('" +
  93.                                 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" +
  94.                                 host.ID + "','" +
  95.                                 host.CpuModel + "'," +
  96.         host.MhzCpu + "," +
  97.         host.MemorySize + "," +
  98.         host.NumOfCpus + "," +
  99.         host.NumOfVms + "," +
  100.         host.CpuUtilization + "," +
  101.         host.MemoryUtilization + "," +
  102.         host.NetworkUtilization + "," +
  103.         host.DiskUtilization + "," +
  104.         host.CpuCoresOverbookingRatio + "," +
  105.         host.MemoryOverbookingRatio + "," +
  106.                                 host.SchedTimeslice + "," +
  107.                                 host.SchedRatelimit + "," +
  108.                                 host.SchedWeight + "," +
  109.                                 host.SchedCap + "," +
  110.         host.PowerConsumptionWatt + "," +
  111.                           host.Performance  + "," +
  112.               host.NonLatencySensitiveVMCount  + "," +
  113.               host.LatencySensitiveLevel1VMCount  + "," +
  114.               host.LatencySensitiveLevel2VMCount  + "," +
  115.               host.LatencySensitiveLevel3VMCount  + ")";
  116.  
  117.                         //Console.WriteLine (sql);
  118.  
  119.       dbcmdHost.CommandText = sql;
  120.       dbcmdHost.ExecuteNonQuery();
  121.  
  122.       // clean up
  123.       dbcmdHost.Dispose();
  124.       dbcmdHost = null;
  125.  
  126.                         /* Do not save VM info to DB for now
  127.                          * Save some time for other processes
  128.                          * */
  129.                         foreach (var item in host.VMs.Values)
  130.       {
  131.                                 this.InsertResourceUsage (host.ID, item);
  132.       }
  133.     }
  134.  
  135.                 public void InsertResourceUsage(string hostID, VM vm)
  136.                 {
  137.                         IDbCommand dbcmdVM = null;
  138.                         string sql = string.Empty;
  139.                         Logger.Log ("Inserting " + vm.Name + " to the database");
  140.                         dbcmdVM = DatabaseManager.Connection.CreateCommand();
  141.  
  142.                         sql = "INSERT INTO resource_usage_vm " +
  143.                                 "(" +
  144.                                 "timestamp," +
  145.                                 "domain_id," +
  146.                                 "host_id," +
  147.                                 "memory_size," +
  148.                                 "num_of_vcpu," +
  149.                                 "cpu_util," +
  150.                                 "memory_util," +
  151.                                 "network_util," +
  152.                                 "disk_util," +
  153.                                 "sched_timeslice," +
  154.                                 "sched_ratelimit," +
  155.                                 "sched_weight," +
  156.                                 "sched_cap," +
  157.                                 "performance_metrics) " +
  158.                                 "VALUES" +
  159.                                 "('" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")  + "','" +
  160.                                 vm.ID + "','" +
  161.                                 hostID + "',"+
  162.                                 vm.Memory + "," +
  163.                                 vm.VCPU + "," +
  164.                                 vm.CPUUtilization + "," +
  165.                                 vm.MemoryUtilization + "," +
  166.                                 vm.NetworkUtilization + "," +
  167.                                 vm.ActualDiskRDWRBytes + "," +
  168.                                 vm.SchedTimeslice + "," +
  169.                                 vm.SchedRatelimit + "," +
  170.                                 vm.SchedWeight + "," +
  171.                                 vm.SchedCap + "," +
  172.                                 vm.ActualCPUTime + ")";
  173.  
  174.                         dbcmdVM.CommandText = sql;
  175.                         dbcmdVM.ExecuteNonQuery();
  176.  
  177.                         // clean up
  178.                         dbcmdVM.Dispose();
  179.                         dbcmdVM = null;
  180.                 }
  181.  
  182.                 public void InsertXenMonResourceUsage(VM vm)
  183.                 {
  184.                         IDbCommand dbcmdVM = null;
  185.                         string sql = string.Empty;
  186.  
  187.                         dbcmdVM = DatabaseManager.Connection.CreateCommand();
  188.                         sql = "INSERT INTO resource_usage_vm_xenmon (" +
  189.                                 "xenmon_file_name," +
  190.                                 "actual_time_passed," +
  191.                                 "timestamp," +
  192.                                 "cpu_core_id," +
  193.                                 "domain_id," +
  194.                                 //"host_id," +
  195.                                 "total_cpu_time_used, " +
  196.                                 "cpu_usage_percentage, " +
  197.                                 "average_cpu_time_used, " +
  198.                                 "scheduler_time_slice, " +
  199.                                 "total_blocked_time, " +
  200.                                 "blocked_time_percentage, " +
  201.                                 "blocked_time_per_io, " +
  202.                                 "total_waiting_time, " +
  203.                                 "waiting_time_percentage, " +
  204.                                 "average_waiting_time, " +
  205.                                 "domain_execution_count, " +
  206.                                 "total_page_exchange, " +
  207.                                 "average_page_exchange ) " +
  208.                                 "VALUES " +
  209.                                 "('" +
  210.                                 vm.XenMonFileName + "', " +
  211.                                 vm.ActualTimePassed + ",'" +
  212.                                 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" +
  213.                                 vm.CPUCoreID + "'," +
  214.                                 vm.DomainID + "," +
  215.                                 vm.TotalCPUTimeUsed + "," +
  216.                                 vm.CPUUsagePercentage + "," +
  217.                                 vm.AverageCPUTimeUsed + "," +
  218.                                 vm.SchedulerTimeSlice + "," +
  219.                                 vm.TotalBlockedTime + "," +
  220.                                 vm.BlockedTimePercentage + "," +
  221.                                 vm.BlockedTimePerIO + "," +
  222.                                 vm.TotalWaitingTime + "," +
  223.                                 vm.WaitingTimePercentage + "," +
  224.                                 vm.AverageWaitingTime + "," +
  225.                                 vm.DomainExecutionCount + "," +
  226.                                 vm.TotalPageExchange + "," +
  227.                                 vm.AveragePageExchange + ")";
  228.  
  229.                         dbcmdVM.CommandText = sql;
  230.                         dbcmdVM.ExecuteNonQuery();
  231.  
  232.                         // clean up
  233.                         dbcmdVM.Dispose();
  234.                         dbcmdVM = null;    
  235.                 }
  236.  
  237.     public void InsertXenMonResourceUsage(Host host)
  238.     {
  239.       IDbCommand dbcmdHost = null;
  240.       string sql = string.Empty;
  241.  
  242.                         dbcmdHost = DatabaseManager.Connection.CreateCommand();
  243.       sql = "INSERT INTO resource_usage_host_xenmon (" +
  244.         "actual_time_passed, " +
  245.                                 "timestamp, " +
  246.         "host_id, " +
  247.         "cpu_core_count, " +
  248.         "domain_count, " +
  249.         "total_cpu_time_used, " +
  250.         "cpu_usage_percentage, " +
  251.         "average_cpu_time_used, " +
  252.         "scheduler_time_slice, " +
  253.         "total_blocked_time, " +
  254.         "blocked_time_percentage, " +
  255.         "blocked_time_per_io, " +
  256.         "total_waiting_time, " +
  257.         "waiting_time_percentage, " +
  258.         "average_waiting_time, " +
  259.         "domain_execution_count, " +
  260.         "total_page_exchange, " +
  261.                           "average_page_exchange, " +
  262.                           "cpu_overbooking_ratio, " +
  263.               "num_of_vms, " +
  264.               "cpu_util ) " +
  265.         "VALUES " +
  266.         "(" +
  267.                                 host.ActualTimePassed + ",'" +
  268.                                 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" +
  269.                                 host.ID + "'," +
  270.         host.CPUCoreCount + "," +
  271.         host.DomainCount + "," +
  272.         host.TotalCPUTimeUsed + "," +
  273.         host.CPUUsagePercentage + "," +
  274.         host.AverageCPUTimeUsed + "," +
  275.         host.SchedulerTimeSlice + "," +
  276.         host.TotalBlockedTime + "," +
  277.         host.BlockedTimePercentage + "," +
  278.         host.BlockedTimePerIO + "," +
  279.         host.TotalWaitingTime + "," +
  280.         host.WaitingTimePercentage + "," +
  281.         host.AverageWaitingTime + "," +
  282.         host.DomainExecutionCount + "," +
  283.         host.TotalPageExchange + "," +
  284.               host.AveragePageExchange + "," +
  285.                           host.CpuCoresOverbookingRatio + "," +
  286.                           host.NumOfVms + "," +
  287.                           host.CpuUtilization + ")";
  288.  
  289.       dbcmdHost.CommandText = sql;
  290.       dbcmdHost.ExecuteNonQuery();
  291.  
  292.       // clean up
  293.       dbcmdHost.Dispose();
  294.       dbcmdHost = null;    
  295.     }
  296.  
  297.                 public void DeleteXenMonData()
  298.                 {
  299.                         IDbCommand dbcmdDelete = null;
  300.                         string sql = string.Empty;
  301.  
  302.                         dbcmdDelete = DatabaseManager.Connection.CreateCommand();
  303.                         sql = "delete from resource_usage_host_xenmon";
  304.  
  305.                         dbcmdDelete.CommandText = sql;
  306.                         dbcmdDelete.ExecuteNonQuery();
  307.  
  308.                         sql = "delete from resource_usage_vm_xenmon";
  309.                         dbcmdDelete.CommandText = sql;
  310.                         dbcmdDelete.ExecuteNonQuery();
  311.  
  312.                         // clean up
  313.                         dbcmdDelete.Dispose();
  314.                         dbcmdDelete = null;    
  315.                 }
  316.  
  317.                 public void Connect()
  318.                 {
  319.                         if (DatabaseManager.Connection != null)
  320.                         {
  321.                                 // Connected database
  322.                                 // Connection method opens the connection
  323.                         }
  324.                 }
  325.  
  326.     public void Disconnect()
  327.     {
  328.                         DatabaseManager.Connection.Close();
  329.                         Logger.Log ("Disconnected from Database successfully...");
  330.     }
  331.   }
  332. }

Raw Paste


Login or Register to edit or fork this paste. It's free.