1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-18 10:07:02 +00:00

storage: Calculate size of store for status page

This commit is contained in:
James Hillyerd
2018-03-22 20:30:23 -07:00
parent f0a94f4848
commit 3c7c24b698
4 changed files with 22 additions and 1 deletions

View File

@@ -6,14 +6,18 @@ This project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased] ## [Unreleased]
### Added
- Store size is now calculated during retention scan and displayed on the Status
page.
### Changed ### Changed
- Massive refactor of back-end code. Inbucket should now be both easier and - Massive refactor of back-end code. Inbucket should now be both easier and
more enjoyable to work on. more enjoyable to work on.
## [v1.3.1] - 2018-03-10 ## [v1.3.1] - 2018-03-10
### Fixed ### Fixed
- Adding additional locking during message delivery to prevent race condition - Adding additional locking during message delivery to prevent race condition
that could lose messages. that could lose messages.

View File

@@ -18,14 +18,17 @@ var (
expRetentionDeletesTotal = new(expvar.Int) expRetentionDeletesTotal = new(expvar.Int)
expRetentionPeriod = new(expvar.Int) expRetentionPeriod = new(expvar.Int)
expRetainedCurrent = new(expvar.Int) expRetainedCurrent = new(expvar.Int)
expRetainedSize = new(expvar.Int)
// History of certain stats // History of certain stats
retentionDeletesHist = list.New() retentionDeletesHist = list.New()
retainedHist = list.New() retainedHist = list.New()
sizeHist = list.New()
// History rendered as comma delimited string // History rendered as comma delimited string
expRetentionDeletesHist = new(expvar.String) expRetentionDeletesHist = new(expvar.String)
expRetainedHist = new(expvar.String) expRetainedHist = new(expvar.String)
expSizeHist = new(expvar.String)
) )
func init() { func init() {
@@ -36,10 +39,13 @@ func init() {
rm.Set("Period", expRetentionPeriod) rm.Set("Period", expRetentionPeriod)
rm.Set("RetainedHist", expRetainedHist) rm.Set("RetainedHist", expRetainedHist)
rm.Set("RetainedCurrent", expRetainedCurrent) rm.Set("RetainedCurrent", expRetainedCurrent)
rm.Set("RetainedSize", expRetainedSize)
rm.Set("SizeHist", expSizeHist)
log.AddTickerFunc(func() { log.AddTickerFunc(func() {
expRetentionDeletesHist.Set(log.PushMetric(retentionDeletesHist, expRetentionDeletesTotal)) expRetentionDeletesHist.Set(log.PushMetric(retentionDeletesHist, expRetentionDeletesTotal))
expRetainedHist.Set(log.PushMetric(retainedHist, expRetainedCurrent)) expRetainedHist.Set(log.PushMetric(retainedHist, expRetainedCurrent))
expSizeHist.Set(log.PushMetric(sizeHist, expRetainedSize))
}) })
} }
@@ -118,6 +124,7 @@ func (rs *RetentionScanner) DoScan() error {
log.Tracef("Starting retention scan") log.Tracef("Starting retention scan")
cutoff := time.Now().Add(-1 * rs.retentionPeriod) cutoff := time.Now().Add(-1 * rs.retentionPeriod)
retained := 0 retained := 0
storeSize := int64(0)
// Loop over all mailboxes. // Loop over all mailboxes.
err := rs.ds.VisitMailboxes(func(messages []Message) bool { err := rs.ds.VisitMailboxes(func(messages []Message) bool {
for _, msg := range messages { for _, msg := range messages {
@@ -130,6 +137,7 @@ func (rs *RetentionScanner) DoScan() error {
} }
} else { } else {
retained++ retained++
storeSize += msg.Size()
} }
} }
select { select {
@@ -147,6 +155,7 @@ func (rs *RetentionScanner) DoScan() error {
// Update metrics // Update metrics
setRetentionScanCompleted(time.Now()) setRetentionScanCompleted(time.Now())
expRetainedCurrent.Set(int64(retained)) expRetainedCurrent.Set(int64(retained))
expRetainedSize.Set(storeSize)
return nil return nil
} }

View File

@@ -120,6 +120,8 @@ function displayMetrics(data, textStatus, jqXHR) {
setHistoryOfActivity('retentionDeletesTotal', data.retention.DeletesHist); setHistoryOfActivity('retentionDeletesTotal', data.retention.DeletesHist);
metric('retainedCurrent', data.retention.RetainedCurrent, numberFilter, false); metric('retainedCurrent', data.retention.RetainedCurrent, numberFilter, false);
setHistoryOfCount('retainedCurrent', data.retention.RetainedHist); setHistoryOfCount('retainedCurrent', data.retention.RetainedHist);
metric('retainedSize', data.retention.RetainedSize, sizeFilter, false);
setHistoryOfCount('retainedSize', data.retention.SizeHist);
} }
function loadMetrics() { function loadMetrics() {

View File

@@ -203,6 +203,12 @@ $(document).ready(
<div class="col-sm-4"><span id="s-retainedCurrent"></span></div> <div class="col-sm-4"><span id="s-retainedCurrent"></span></div>
<div class="col-sm-2 hidden-xs">(60min)</div> <div class="col-sm-2 hidden-xs">(60min)</div>
</div> </div>
<div class="row">
<div class="col-sm-3 col-xs-7"><b>Store Size:</b></div>
<div class="col-sm-3 col-xs-5"><span id="m-retainedSize">.</span></div>
<div class="col-sm-4"><span id="s-retainedSize"></span></div>
<div class="col-sm-2 hidden-xs">(60min)</div>
</div>
</table> </table>
</div> </div>
</div> </div>