show DB size
[freeside.git] / httemplate / view / Status.html
index 2ddf7e5..7fd019e 100644 (file)
@@ -25,14 +25,23 @@ if ( ! $@ && $os =~ /^\s*Description:\s*(.+)$/ ) {
 ( my $perl_ver = $^V ) =~ s/^v//;
 
 my $db = driver_name;
-$db = 'PostgreSQL' if $db =~ /^Pg/;
-$db = 'MySQL'      if $db =~ /^mysql/;
+$db = 'PostgreSQL'    if $db =~ /^Pg/;
+$db = 'MySQL/MariaDB' if $db =~ /^mysql/;
 
 my $db_ver = FS::Record->scalar_sql('SELECT VERSION()');
 if ( $db eq 'PostgreSQL' && $db_ver =~ /^\s*PostgreSQL\s+([\w\.]+)\s+on\s+/ ) {
   $db_ver = $1;
 }
 
+my $db_size = 'Unknown';
+if ( $db eq 'PostgreSQL' ) {
+  $db_size = FS::Record->scalar_sql(qq(
+    SELECT pg_size_pretty(pg_database_size(datname))
+      FROM pg_catalog.pg_database
+     WHERE datname = 'freeside'
+  ));
+}
+
 tie my %status, 'Tie::IxHash',
   'Basics' => [
     { 'title' => 'Freeside version',
@@ -50,6 +59,9 @@ tie my %status, 'Tie::IxHash',
     { 'title' => 'Database version',
       'value' => $db_ver,
     },
+    { 'title' => 'Database size',
+      'value' => $db_size,
+    },
   ],
   'Required Daemons' => [
     { 'title' => 'Queue daemon',
@@ -87,6 +99,50 @@ tie my %status, 'Tie::IxHash',
   ],
 ;
 
+if ( $db eq 'PostgreSQL' ) {
+
+  my $enabled =    FS::Record->scalar_sql('SHOW wal_level')    eq 'hot_standby'
+                && FS::Record->scalar_sql('SHOW archive_mode') eq 'on';
+
+  my $slave = 
+    FS::Record->scalar_sql('SHOW archive_command') =~ / postgres\@([\w\.\-]+): /
+      ? $1 : '';
+
+  $status{'Replication'} = [
+    { 'title' => 'Status', #?
+      'value' => $enabled ? 'Enabled' : 'Disabled',
+    },
+  ];
+
+  if ( $enabled ) {
+    push @{ $status{'Replication'} }, 
+      { 'title' => 'Slave',
+        'value' => $slave || '(Missing, or unparseable archive_command)',
+      },
+    ;
+    if ( $slave ) {
+      #how far behind is it?  will be easier once we're off 9.1
+      # http://www.keithf4.com/monitoring_streaming_slave_lag/
+      # except pg_stat_replication still doesn't fill in the columns we need as
+      # non-Pg user :/
+      push @{ $status{'Replication'} }, 
+        { 'title' => 'Slave',
+          'value' => $slave || '(Missing, or unparseable archive_command)',
+        },
+      ;
+    }
+  }
+
+} else {
+
+  $status{'Replication'} = [
+    { 'title' => 'Enabled',
+      'value' => "(Not yet checked on $db)",
+    },
+  ];
+
+}
+
 if ( _is_running('cdrd') ) {
 
   my $delay = FS::Record->scalar_sql('