1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-19 18:47:03 +00:00

Track retained messages over time

This commit is contained in:
James Hillyerd
2013-10-25 15:24:30 -07:00
parent 47cba08c33
commit 483ddc1c5e
3 changed files with 44 additions and 16 deletions

View File

@@ -141,6 +141,7 @@ func metricsTicker(t *time.Ticker) {
expErrorsHist.Set(pushMetric(errorsHist, expErrorsTotal)) expErrorsHist.Set(pushMetric(errorsHist, expErrorsTotal))
expWarnsHist.Set(pushMetric(warnsHist, expWarnsTotal)) expWarnsHist.Set(pushMetric(warnsHist, expWarnsTotal))
expRetentionDeletesHist.Set(pushMetric(retentionDeletesHist, expRetentionDeletesTotal)) expRetentionDeletesHist.Set(pushMetric(retentionDeletesHist, expRetentionDeletesTotal))
expRetainedHist.Set(pushMetric(retainedHist, expRetainedCurrent))
} }
} }

View File

@@ -14,12 +14,15 @@ var retentionScanCompletedMu sync.RWMutex
var expRetentionDeletesTotal = new(expvar.Int) var expRetentionDeletesTotal = new(expvar.Int)
var expRetentionPeriod = new(expvar.Int) var expRetentionPeriod = new(expvar.Int)
var expRetainedCurrent = new(expvar.Int)
// History of certain stats // History of certain stats
var retentionDeletesHist = list.New() var retentionDeletesHist = list.New()
var retainedHist = list.New()
// History rendered as comma delim string // History rendered as comma delim string
var expRetentionDeletesHist = new(expvar.String) var expRetentionDeletesHist = new(expvar.String)
var expRetainedHist = new(expvar.String)
func StartRetentionScanner(ds DataStore) { func StartRetentionScanner(ds DataStore) {
cfg := config.GetDataStoreConfig() cfg := config.GetDataStoreConfig()
@@ -62,6 +65,7 @@ func doRetentionScan(ds DataStore, maxAge time.Duration, sleep time.Duration) er
return err return err
} }
retained := 0
for _, mb := range mboxes { for _, mb := range mboxes {
messages, err := mb.GetMessages() messages, err := mb.GetMessages()
if err != nil { if err != nil {
@@ -77,6 +81,8 @@ func doRetentionScan(ds DataStore, maxAge time.Duration, sleep time.Duration) er
} else { } else {
expRetentionDeletesTotal.Add(1) expRetentionDeletesTotal.Add(1)
} }
} else {
retained++
} }
} }
// Sleep after completing a mailbox // Sleep after completing a mailbox
@@ -84,6 +90,7 @@ func doRetentionScan(ds DataStore, maxAge time.Duration, sleep time.Duration) er
} }
setRetentionScanCompleted(time.Now()) setRetentionScanCompleted(time.Now())
expRetainedCurrent.Set(int64(retained))
return nil return nil
} }
@@ -112,4 +119,6 @@ func init() {
rm.Set("DeletesHist", expRetentionDeletesHist) rm.Set("DeletesHist", expRetentionDeletesHist)
rm.Set("DeletesTotal", expRetentionDeletesTotal) rm.Set("DeletesTotal", expRetentionDeletesTotal)
rm.Set("Period", expRetentionPeriod) rm.Set("Period", expRetentionPeriod)
rm.Set("RetainedHist", expRetainedHist)
rm.Set("RetainedCurrent", expRetainedCurrent)
} }

View File

@@ -53,7 +53,8 @@
} }
} }
function setHistory(name, value) { // Show spikes for numbers that only increase
function setHistoryOfActivity(name, value) {
var h = value.split(",") var h = value.split(",")
var prev = parseInt(h[0]) var prev = parseInt(h[0])
for (i=0; i<h.length; i++) { for (i=0; i<h.length; i++) {
@@ -71,6 +72,15 @@
} }
} }
// Show up/down for numbers that can decrease
function setHistoryOfCount(name, value) {
var h = value.split(",")
el = $('#s-' + name)
if (el) {
el.sparkline(h)
}
}
function metric(name, value, filter, chartable) { function metric(name, value, filter, chartable) {
if (chartable) { if (chartable) {
appendHistory(name, value) appendHistory(name, value)
@@ -101,15 +111,17 @@
// Server-side history // Server-side history
metric('smtpReceivedTotal', data.smtp.ReceivedTotal, numberFilter, false) metric('smtpReceivedTotal', data.smtp.ReceivedTotal, numberFilter, false)
setHistory('smtpReceivedTotal', data.smtp.ReceivedHist) setHistoryOfActivity('smtpReceivedTotal', data.smtp.ReceivedHist)
metric('smtpConnectsTotal', data.smtp.ConnectsTotal, numberFilter, false) metric('smtpConnectsTotal', data.smtp.ConnectsTotal, numberFilter, false)
setHistory('smtpConnectsTotal', data.smtp.ConnectsHist) setHistoryOfActivity('smtpConnectsTotal', data.smtp.ConnectsHist)
metric('smtpWarnsTotal', data.smtp.WarnsTotal, numberFilter, false) metric('smtpWarnsTotal', data.smtp.WarnsTotal, numberFilter, false)
setHistory('smtpWarnsTotal', data.smtp.WarnsHist) setHistoryOfActivity('smtpWarnsTotal', data.smtp.WarnsHist)
metric('smtpErrorsTotal', data.smtp.ErrorsTotal, numberFilter, false) metric('smtpErrorsTotal', data.smtp.ErrorsTotal, numberFilter, false)
setHistory('smtpErrorsTotal', data.smtp.ErrorsHist) setHistoryOfActivity('smtpErrorsTotal', data.smtp.ErrorsHist)
metric('retentionDeletesTotal', data.retention.DeletesTotal, numberFilter, false) metric('retentionDeletesTotal', data.retention.DeletesTotal, numberFilter, false)
setHistory('retentionDeletesTotal', data.retention.DeletesHist) setHistoryOfActivity('retentionDeletesTotal', data.retention.DeletesHist)
metric('retainedCurrent', data.retention.RetainedCurrent, numberFilter, false)
setHistoryOfCount('retainedCurrent', data.retention.RetainedHist)
} }
function loadMetrics() { function loadMetrics() {
@@ -233,21 +245,21 @@
<tr> <tr>
<th>Retention Period:</th> <th>Retention Period:</th>
<td colspan="3"> <td colspan="3">
{{if .retentionMinutes}} {{if .retentionMinutes}}
<span id="m-retentionPeriod">.</span> <span id="m-retentionPeriod">.</span>
{{else}} {{else}}
Disabled Disabled
{{end}} {{end}}
</td> </td>
</tr> </tr>
<tr> <tr>
<th>Retention Scan:</th> <th>Retention Scan:</th>
<td colspan="3"> <td colspan="3">
{{if .retentionMinutes}} {{if .retentionMinutes}}
Completed <span id="m-retentionScanCompleted">.</span> ago Completed <span id="m-retentionScanCompleted">.</span> ago
{{else}} {{else}}
Disabled Disabled
{{end}} {{end}}
</td> </td>
</tr> </tr>
<tr> <tr>
@@ -256,6 +268,12 @@
<td class="sparkline"><span id="s-retentionDeletesTotal"></span></td> <td class="sparkline"><span id="s-retentionDeletesTotal"></span></td>
<td>(60min)</td> <td>(60min)</td>
</tr> </tr>
<tr>
<th>Currently Retained:</th>
<td><span id="m-retainedCurrent">.</span></td>
<td class="sparkline"><span id="s-retainedCurrent"></span></td>
<td>(60min)</td>
</tr>
</table> </table>
<p class="last">&nbsp;</p> <p class="last">&nbsp;</p>
</div> </div>