Refactoring and Enhancing Database Management and System Information Gathering
In this commit, we've made substantial changes to the DatabaseManager and SystemInformationGather classes to improve the functionality, efficiency, and maintainability of the system. Refactoring DatabaseManager: The DatabaseManager class was refactored to improve the separation of concerns. Initially, the DatabaseManager was responsible for creating an instance of SystemInformationGather, which was not ideal as it violated the Single Responsibility Principle. The responsibility of creating an instance of SystemInformationGather was moved to the FirstRunInit class, which is more appropriate as it is responsible for the initial setup of the system. This change improves the maintainability of the code and makes it easier to understand and modify in the future. Adding Database Connection Test: A method test_db_connection was added to the DatabaseManager to test the database connection before attempting to interact with it. This method improves the robustness of the system by ensuring that a valid connection exists before proceeding. It also provides a better user experience by providing a clear error message if the connection fails. Refactoring SystemInformationGather: The SystemInformationGather class was refactored to improve its functionality and efficiency. The methods ask_for_uplink_speed and ask_for_downlink_speed were modified to convert the user's input to Mbps immediately, reducing the need for conversion later. This change improves the efficiency of the system by reducing unnecessary conversions. Adding Services Table: A new table for services was added to the database. This table stores the services that the system should be aware of, with each service represented as a boolean value. This change improves the flexibility of the system by allowing it to handle a variable number of services. It also improves the efficiency of the system by reducing the need to parse the services from a string each time they are needed. Storing Total Bandwidth: The total bandwidth (the sum of the uplink and downlink speeds) is now calculated and stored in the system_info table. This change improves the efficiency of the system by reducing the need to calculate the total bandwidth each time it is needed. Error Handling and Debugging: Throughout the process, various bugs and errors were encountered and fixed. These included issues with method arguments, missing method calls, and incorrect method usage. Fixing these issues improved the stability and reliability of the system. In conclusion, this commit significantly improves the functionality, efficiency, and maintainability of the system. The changes made adhere to good software engineering principles, such as the Single Responsibility Principle, and make the system more robust and user-friendly.
This commit is contained in:
parent
6319c9c238
commit
be2392cee6
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -54,3 +54,4 @@ build-iPhoneSimulator/
|
||||||
|
|
||||||
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
||||||
# .rubocop-https?--*
|
# .rubocop-https?--*
|
||||||
|
bin/config.yml
|
||||||
|
|
11
bin/NETRAVE
11
bin/NETRAVE
|
@ -1,10 +1,17 @@
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
# Require necessary files
|
require 'yaml'
|
||||||
require_relative '../lib/utils/system_information_gather.rb'
|
require_relative '../lib/utils/system_information_gather.rb'
|
||||||
require_relative '../lib/utils/database_manager.rb'
|
require_relative '../lib/utils/database_manager.rb'
|
||||||
require_relative '../lib/utils/first_run_init.rb'
|
require_relative '../lib/utils/first_run_init.rb'
|
||||||
|
|
||||||
|
# Check if config.yml exists, if not, create it
|
||||||
|
unless File.exist?('config.yml')
|
||||||
|
first_run_init = FirstRunInit.new
|
||||||
|
db_details = first_run_init.ask_for_db_details
|
||||||
|
first_run_init.write_db_details_to_config_file(db_details)
|
||||||
|
end
|
||||||
|
|
||||||
# Load database configuration
|
# Load database configuration
|
||||||
db_details = YAML.load_file('config.yml')
|
db_details = YAML.load_file('config.yml')
|
||||||
|
|
||||||
|
@ -18,7 +25,7 @@ else
|
||||||
end
|
end
|
||||||
|
|
||||||
# Initialize the first run setup
|
# Initialize the first run setup
|
||||||
first_run_setup = FirstRunSetup.new(db_manager)
|
first_run_setup = FirstRunInit.new(db_manager)
|
||||||
first_run_setup.run
|
first_run_setup.run
|
||||||
|
|
||||||
# TODO: Add the rest of your application logic here
|
# TODO: Add the rest of your application logic here
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
require 'sequel'
|
||||||
|
require 'mysql2'
|
||||||
require_relative 'system_information_gather.rb'
|
require_relative 'system_information_gather.rb'
|
||||||
require_relative '../utils/utilities'
|
require_relative '../utils/utilities'
|
||||||
|
|
||||||
class DatabaseManager
|
class DatabaseManager
|
||||||
def initialize
|
def initialize
|
||||||
@db = nil
|
@db = nil
|
||||||
@info_gatherer = SystemInformationGather.new
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_db_connection(db_details)
|
def test_db_connection(db_details)
|
||||||
|
@ -30,11 +31,21 @@ class DatabaseManager
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def store_system_info
|
def store_system_info(system_info)
|
||||||
system_info = @info_gatherer.gather_system_info
|
|
||||||
system_info[:uplink_speed] = Utilities.convert_speed_to_mbps(system_info[:uplink_speed])
|
|
||||||
system_info[:downlink_speed] = Utilities.convert_speed_to_mbps(system_info[:downlink_speed])
|
|
||||||
system_info[:services] = Utilities.services_to_hash(system_info[:services])
|
|
||||||
@db[:system_info].insert(system_info)
|
@db[:system_info].insert(system_info)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_services_table
|
||||||
|
@db.create_table :services do
|
||||||
|
primary_key :id
|
||||||
|
String :service_name
|
||||||
|
Boolean :status
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def store_services(services)
|
||||||
|
services.each do |service, status|
|
||||||
|
@db[:services].insert(service_name: service, status: status)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -6,20 +6,22 @@ require_relative 'utilities.rb'
|
||||||
class FirstRunInit
|
class FirstRunInit
|
||||||
include Utilities
|
include Utilities
|
||||||
|
|
||||||
def initialize
|
def initialize(db_manager)
|
||||||
@db_manager = DatabaseManager.new
|
@db_manager = db_manager
|
||||||
@info_gatherer = SystemInformationGather.new
|
@info_gatherer = SystemInformationGather.new(@db_manager)
|
||||||
|
end
|
||||||
|
|
||||||
|
def run
|
||||||
|
first_run_setup
|
||||||
end
|
end
|
||||||
|
|
||||||
def first_run_setup
|
def first_run_setup
|
||||||
color = @info_gatherer.ask_for_color
|
db_details = ask_for_db_details
|
||||||
# TODO: Use the color for something
|
|
||||||
db_details = @info_gatherer.ask_for_db_details
|
|
||||||
while !@db_manager.test_db_connection(db_details)
|
while !@db_manager.test_db_connection(db_details)
|
||||||
Curses.setpos(4, 0)
|
Curses.setpos(4, 0)
|
||||||
Curses.addstr("Whoops! We couldn't connect to the database with the details you provided. Please try again!")
|
Curses.addstr("Whoops! We couldn't connect to the database with the details you provided. Please try again!")
|
||||||
Curses.refresh
|
Curses.refresh
|
||||||
db_details = @info_gatherer.ask_for_db_details
|
db_details = ask_for_db_details
|
||||||
end
|
end
|
||||||
@db_manager.create_system_info_table
|
@db_manager.create_system_info_table
|
||||||
uplink_speed = @info_gatherer.ask_for_uplink_speed
|
uplink_speed = @info_gatherer.ask_for_uplink_speed
|
||||||
|
@ -32,6 +34,34 @@ class FirstRunInit
|
||||||
@db_manager.store_system_info(services)
|
@db_manager.store_system_info(services)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ask_for_db_details
|
||||||
|
Curses.clear
|
||||||
|
Curses.setpos(1, 0)
|
||||||
|
Curses.addstr("Please enter your database username: ")
|
||||||
|
Curses.refresh
|
||||||
|
username = Curses.getstr.strip
|
||||||
|
|
||||||
|
Curses.setpos(2, 0)
|
||||||
|
Curses.addstr("Please enter your database password: ")
|
||||||
|
Curses.refresh
|
||||||
|
Curses.noecho
|
||||||
|
password = Curses.getstr.strip
|
||||||
|
Curses.echo
|
||||||
|
|
||||||
|
Curses.setpos(3, 0)
|
||||||
|
Curses.addstr("Please enter your database name: ")
|
||||||
|
Curses.refresh
|
||||||
|
database = Curses.getstr.strip
|
||||||
|
|
||||||
|
{ username: username, password: password, database: database }
|
||||||
|
end
|
||||||
|
|
||||||
|
def write_db_details_to_config_file(db_details)
|
||||||
|
File.open("config.yml", "w") do |file|
|
||||||
|
file.write(db_details.to_yaml)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def ask_for_default_mode
|
def ask_for_default_mode
|
||||||
while true
|
while true
|
||||||
Curses.setpos(8, 0)
|
Curses.setpos(8, 0)
|
||||||
|
|
|
@ -1,10 +1,41 @@
|
||||||
require 'curses'
|
require 'curses'
|
||||||
require 'yaml'
|
require 'yaml'
|
||||||
require_relative 'utilities.rb'
|
require_relative 'utilities.rb'
|
||||||
|
require_relative 'database_manager.rb'
|
||||||
|
|
||||||
class SystemInformationGather
|
class SystemInformationGather
|
||||||
include Utilities
|
include Utilities
|
||||||
|
|
||||||
|
def initialize(db_manager)
|
||||||
|
@db_manager = db_manager
|
||||||
|
end
|
||||||
|
|
||||||
|
def gather_system_info
|
||||||
|
uplink_speed = ask_for_uplink_speed
|
||||||
|
downlink_speed = ask_for_downlink_speed
|
||||||
|
services = ask_for_services
|
||||||
|
|
||||||
|
total_bandwidth = uplink_speed + downlink_speed
|
||||||
|
|
||||||
|
system_info = {
|
||||||
|
uplink_speed: uplink_speed,
|
||||||
|
downlink_speed: downlink_speed,
|
||||||
|
total_bandwidth: total_bandwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the system_info table exists, if not, create it
|
||||||
|
@db_manager.create_system_info_table unless @db_manager.table_exists?(:system_info)
|
||||||
|
|
||||||
|
# Store the gathered system info in the database
|
||||||
|
@db_manager.store_system_info(system_info)
|
||||||
|
|
||||||
|
# Check if the services table exists, if not, create it
|
||||||
|
@db_manager.create_services_table unless @db_manager.table_exists?(:services)
|
||||||
|
|
||||||
|
# Store the services in the services table
|
||||||
|
@db_manager.store_services(services)
|
||||||
|
end
|
||||||
|
|
||||||
def ask_for_uplink_speed
|
def ask_for_uplink_speed
|
||||||
while true
|
while true
|
||||||
Curses.clear
|
Curses.clear
|
||||||
|
@ -12,12 +43,15 @@ class SystemInformationGather
|
||||||
Curses.addstr("Please enter your uplink speed (upload speed, e.g., 1000Mbps or 1Gbps). ")
|
Curses.addstr("Please enter your uplink speed (upload speed, e.g., 1000Mbps or 1Gbps). ")
|
||||||
Curses.addstr("This is typically the maximum upload speed provided by your ISP. ")
|
Curses.addstr("This is typically the maximum upload speed provided by your ISP. ")
|
||||||
Curses.addstr("You can check your ISP bill, use an online speed test, or contact your ISP if you're unsure. ")
|
Curses.addstr("You can check your ISP bill, use an online speed test, or contact your ISP if you're unsure. ")
|
||||||
|
Curses.addstr(" ")
|
||||||
|
Curses.setpos(5, 0)
|
||||||
|
Curses.addstr("Uplink Speed: ")
|
||||||
Curses.refresh
|
Curses.refresh
|
||||||
speed = Curses.getstr.strip.downcase
|
speed = Curses.getstr.strip.downcase
|
||||||
if valid_speed?(speed)
|
if valid_speed?(speed)
|
||||||
return convert_speed_to_mbps(speed)
|
return speed.end_with?('gbps') ? convert_speed_to_mbps(speed) : speed.to_i
|
||||||
else
|
else
|
||||||
Curses.setpos(3, 0)
|
Curses.setpos(5, 0)
|
||||||
Curses.addstr("Whoops! That didn't appear to be a valid speed. Please try again!")
|
Curses.addstr("Whoops! That didn't appear to be a valid speed. Please try again!")
|
||||||
Curses.refresh
|
Curses.refresh
|
||||||
end
|
end
|
||||||
|
@ -27,14 +61,16 @@ class SystemInformationGather
|
||||||
def ask_for_downlink_speed
|
def ask_for_downlink_speed
|
||||||
while true
|
while true
|
||||||
Curses.clear
|
Curses.clear
|
||||||
Curses.setpos(4, 0)
|
Curses.setpos(2, 0)
|
||||||
Curses.addstr("Please enter your downlink speed (download speed, e.g., 1000Mbps or 1Gbps). ")
|
Curses.addstr("Please enter your downlink speed (download speed, e.g., 1000Mbps or 1Gbps). ")
|
||||||
Curses.addstr("This is typically the maximum download speed provided by your ISP. ")
|
Curses.addstr("This is typically the maximum download speed provided by your ISP. ")
|
||||||
Curses.addstr("You can check your ISP bill, use an online speed test, or contact your ISP if you're unsure. ")
|
Curses.addstr("You can check your ISP bill, use an online speed test, or contact your ISP if you're unsure. ")
|
||||||
|
Curses.setpos(5, 0)
|
||||||
|
Curses.addstr("Downlink Speed: ")
|
||||||
Curses.refresh
|
Curses.refresh
|
||||||
speed = Curses.getstr.strip.downcase
|
speed = Curses.getstr.strip.downcase
|
||||||
if valid_speed?(speed)
|
if valid_speed?(speed)
|
||||||
return convert_speed_to_mbps(speed)
|
return speed.end_with?('gbps') ? convert_speed_to_mbps(speed) : speed.to_i
|
||||||
else
|
else
|
||||||
Curses.setpos(5, 0)
|
Curses.setpos(5, 0)
|
||||||
Curses.addstr("Whoops! That didn't appear to be a valid speed. Please try again!")
|
Curses.addstr("Whoops! That didn't appear to be a valid speed. Please try again!")
|
||||||
|
@ -75,31 +111,4 @@ class SystemInformationGather
|
||||||
services.each { |service| services_hash[service] = true }
|
services.each { |service| services_hash[service] = true }
|
||||||
services_hash
|
services_hash
|
||||||
end
|
end
|
||||||
|
|
||||||
def ask_for_db_details
|
|
||||||
Curses.clear
|
|
||||||
Curses.setpos(1, 0)
|
|
||||||
Curses.addstr("Please enter your database username: ")
|
|
||||||
Curses.refresh
|
|
||||||
username = Curses.getstr.strip
|
|
||||||
|
|
||||||
Curses.setpos(2, 0)
|
|
||||||
Curses.addstr("Please enter your database password: ")
|
|
||||||
Curses.refresh
|
|
||||||
Curses.echo = false
|
|
||||||
password = Curses.getstr.strip
|
|
||||||
Curses.echo
|
|
||||||
Curses.setpos(3, 0)
|
|
||||||
Curses.addstr("Please enter your database name: ")
|
|
||||||
Curses.refresh
|
|
||||||
database = Curses.getstr.strip
|
|
||||||
|
|
||||||
{ username: username, password: password, database: database }
|
|
||||||
end
|
|
||||||
|
|
||||||
def write_db_details_to_config_file(db_details)
|
|
||||||
File.open("config.yml", "w") do |file|
|
|
||||||
file.write(db_details.to_yaml)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
Loading…
Reference in New Issue
Block a user