space projection fixes

This commit is contained in:
SJ 2013-04-22 23:03:40 +02:00
parent a80dafafb6
commit 9d9d7e91e7
4 changed files with 59 additions and 22 deletions

View File

@ -67,7 +67,12 @@ class ControllerHealthWorker extends Controller {
list($archivesizeraw, $this->data['counters']) = $this->model_stat_counter->get_counters();
$oldest_record_timestamp = $this->model_health_health->get_oldest_record_ts();
$total_number_days = round( (time() - $oldest_record_timestamp) / 86400 );
echo("Total Days: ".date("d M Y",time())." - ".date("d M Y",$oldest_record_timestamp)." = $total_number_days<br/>");
$this->data['archive_size'] = nice_size($archivesizeraw, ' ');
$this->data['prefix'] = '';
@ -76,38 +81,42 @@ class ControllerHealthWorker extends Controller {
$this->data['sysinfo'] = $this->model_health_health->sysinfo();
$this->data['options'] = $this->model_health_health->get_options();
$sqlsizeraw = $this->model_health_health->get_database_size();
$sphinxsizeraw = $this->model_health_health->get_sphinx_size();
/* these next counters are for projecting space */
$averagemessagesweekraw = ($this->data['processed_emails'][1]) / 7;
$averagemessagesmonthraw = ($this->data['processed_emails'][2]) / 30;
$averagemessagesizeraw = $archivesizeraw / $this->data['counters']['rcvd'];
$averagesqlsizeraw = $sqlsizeraw / $this->data['counters']['rcvd'];
$averagesphinxsizeraw = $sphinxsizeraw / $this->data['counters']['rcvd'];
$averagesizedayraw = ($averagemessagesizeraw+$averagesqlsizeraw+$averagesphinxsizeraw) * $averagemessagesweekraw;
/* message count variables */
$averagemessagesweekraw = ($this->data['processed_emails'][1]) / 7; //average messages per day, computed over the past week
$averagemessagesmonthraw = ($this->data['processed_emails'][2]) / 30; //average messages per day, computed over the past month
$averagemessagestotalraw = ($this->data['counters']['rcvd']) / $total_number_days; //average messages per day, computed over the time period since the first email was archived
/* message size variables */
$averagemessagesizeraw = $archivesizeraw / $this->data['counters']['rcvd']; //average message size, computed for total messages in database
$averagesqlsizeraw = $sqlsizeraw / $this->data['counters']['rcvd']; //average message metadata size, computed for total messages in database
$averagesphinxsizeraw = $sphinxsizeraw / $this->data['counters']['rcvd']; //average message sphinx index size, computed for total messages in database
$averagesizedayraw = ($averagemessagesizeraw+$averagesqlsizeraw+$averagesphinxsizeraw) * $averagemessagestotalraw; //average total message size per day, computed over the time period since the first email was archived
$datapart = 0;
foreach($this->data['shortdiskinfo'] as $part) {
if( $part['partition'] == DATA_PARTITION ) { $datapart = $part['freespace']*1024; }
if( $part['partition'] == DATA_PARTITION ) { $datapart = $part['freespace']*1024; } // if the partition is the selected storage partition, record freespace on that partition
}
$this->data['averagemessages'] = round($averagemessagesweekraw); // average of messages over the past week
$this->data['averagemessagesize'] = nice_size($averagemessagesizeraw,' '); // average message size on disk
$this->data['averagesqlsize'] = nice_size($averagesqlsizeraw,' '); // average metadata size in sql
$this->data['averagesphinxsize'] = nice_size($averagesphinxsizeraw,' '); // average sphinx index
$this->data['averagesizeday'] = nice_size($averagesizedayraw,' '); // average size per day
$this->data['daysleftatcurrentrate'] = convert_days_ymd($datapart / $averagesizedayraw); // number of days of free space left
if ( $averagemessagesweekraw > $averagemessagesmonthraw ) {
$this->data['oldestmessagets'] = $oldest_record_timestamp; // date of the oldest record in the db
$this->data['averagemessages'] = round($averagemessagesweekraw); // rounded average of messages over the past week
$this->data['averagemessagesize'] = nice_size($averagemessagesizeraw,' '); // formatted average message size on disk
$this->data['averagesqlsize'] = nice_size($averagesqlsizeraw,' '); // formatted average metadata size in sql
$this->data['averagesphinxsize'] = nice_size($averagesphinxsizeraw,' '); // formatted average sphinx index
$this->data['averagesizeday'] = nice_size($averagesizedayraw,' '); // formatted average size per day
$this->data['daysleftatcurrentrate'] = convert_days_ymd($datapart / $averagesizedayraw); // estimated number of days of free space left
if ( $averagemessagesweekraw > $averagemessagesmonthraw ) { // determine if the trend of the last week compared to the last month is increasing, decreasing, or neutral (only applies to message count, not size)
$this->data['usagetrend'] = 1;
} elseif( $averagemessagesweekraw < $averagemessagesmonthraw ) {
$this->data['usagetrend'] = -1;
} else {
$this->data['usagetrend'] = 0;
}
$this->render();
}

View File

@ -138,6 +138,7 @@ class ModelHealthHealth extends Model {
}
public function get_database_size() {
$data = array();
@ -147,13 +148,30 @@ class ModelHealthHealth extends Model {
WHERE table_schema = '".DB_DATABASE."'
GROUP BY table_schema;");
if(isset($query->rows)) {
$data = array_pop($query->rows);
$data = array_pop($query->rows);
} else {
$data['size'] = 0;
}
return $data['size'];
}
public function get_oldest_record_ts() {
$data = array();
$query = $this->db->query("SELECT MIN(`arrived`) AS `oldest_record_ts` FROM " . TABLE_META);
if(isset($query->rows)) {
$data = array_pop($query->rows);
} else {
$data['oldest_record_ts'] = 0;
}
return $data['oldest_record_ts'];
}
public function get_sphinx_size($directory = DIR_SPHINX) {
$dirSize=0;

View File

@ -68,6 +68,10 @@
<tr>
<th colspan="2">Cumulative Counts</th>
</tr>
<tr>
<td><?php print $text_oldest_record; ?></td>
<td><?php print date("d M Y", $oldestmessagets); ?></td>
</tr>
<tr>
<td><?php print $text_processed_emails; ?></td>
<td><?php print $processed_emails[0]; ?> (<?php print $text_24_hours; ?>)<br /><?php print $processed_emails[1]; ?> (<?php print $text_1_week; ?>)<br /><?php print $processed_emails[2]; ?> (<?php print $text_30_days; ?>)</td>

View File

@ -73,6 +73,12 @@
<div class="cellhealthright"><span class="bold <?php if($options['enable_purge'] == 1) { ?>text-success<?php } else { ?>text-error<?php } ?>"><?php if($options['enable_purge'] == 1) { print $text_enabled; ?>. <a href="<?php print HEALTH_URL; ?>&toggle_enable_purge"><?php print $text_disable; ?></a><?php } else { print $text_disabled; ?>. <a href="<?php print HEALTH_URL; ?>&toggle_enable_purge"><?php print $text_enable; ?></a><?php } ?> </span></div>
</div>
<div class="row">
<div class="cellhealthleft"><?php print $text_oldest_record; ?></div>
<div class="cellhealthright">
<?php print date("d M Y", $oldestmessagets); ?>
</div>
</div>
<div class="row">
<div class="cellhealthleft"><?php print $text_counters; ?></div>