lib/perus/server/db.rb in perus-0.1.7 vs lib/perus/server/db.rb in perus-0.1.8

- old
+ new

@@ -16,23 +16,28 @@ # connect/create the database and run any new migrations @db = Sequel.sqlite(Server.options.db_path, integer_booleans: true) Sequel::Migrator.run(@db, File.join(__dir__, 'migrations')) # load models - these rely on an existing db connection - require File.join(__dir__, 'models', 'system') - require File.join(__dir__, 'models', 'config') - require File.join(__dir__, 'models', 'value') - require File.join(__dir__, 'models', 'group') - require File.join(__dir__, 'models', 'error') - require File.join(__dir__, 'models', 'alert') - require File.join(__dir__, 'models', 'action') - require File.join(__dir__, 'models', 'metric') - require File.join(__dir__, 'models', 'script') - require File.join(__dir__, 'models', 'command_config') - require File.join(__dir__, 'models', 'script_command') - require File.join(__dir__, 'models', 'config_metric') + Dir.chdir(File.join(__dir__, 'models')) do + require './system' + require './config' + require './value' + require './group' + require './error' + require './alert' + require './action' + require './metric' + require './script' + require './command_config' + require './script_command' + require './config_metric' + require './active_alert' + end + end + def self.start_timers # attempt to run vacuum twice a day. this is done to increase # performance rather than reclaim unused space. as old values and # metrics are deleted the data become very fragmented. vacuuming # restructures the db so system records in the values index should # be sequentially stored @@ -53,9 +58,20 @@ end # fire every hour cleanup_task.execution_interval = 60 * 60 cleanup_task.execute + + # alerts can be process intensive, so to keep page refreshes + # responsive the 'active' state of an alert for each system is + # cached so lookups can be done against the db, rather than running + # each alert for each system on a page load. + cache_alerts_task = Concurrent::TimerTask.new do + Perus::Server::Alert.cache_active_alerts + end + + cache_alerts_task.execution_interval = Server.options.cache_alerts_mins * 60 + cache_alerts_task.execute end def self.cleanup puts 'Cleaning old values and metrics' keep_hours = Server.options.keep_hours