mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-18 18:17:03 +00:00
Track retained messages over time
This commit is contained in:
@@ -141,6 +141,7 @@ func metricsTicker(t *time.Ticker) {
|
||||
expErrorsHist.Set(pushMetric(errorsHist, expErrorsTotal))
|
||||
expWarnsHist.Set(pushMetric(warnsHist, expWarnsTotal))
|
||||
expRetentionDeletesHist.Set(pushMetric(retentionDeletesHist, expRetentionDeletesTotal))
|
||||
expRetainedHist.Set(pushMetric(retainedHist, expRetainedCurrent))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,12 +14,15 @@ var retentionScanCompletedMu sync.RWMutex
|
||||
|
||||
var expRetentionDeletesTotal = new(expvar.Int)
|
||||
var expRetentionPeriod = new(expvar.Int)
|
||||
var expRetainedCurrent = new(expvar.Int)
|
||||
|
||||
// History of certain stats
|
||||
var retentionDeletesHist = list.New()
|
||||
var retainedHist = list.New()
|
||||
|
||||
// History rendered as comma delim string
|
||||
var expRetentionDeletesHist = new(expvar.String)
|
||||
var expRetainedHist = new(expvar.String)
|
||||
|
||||
func StartRetentionScanner(ds DataStore) {
|
||||
cfg := config.GetDataStoreConfig()
|
||||
@@ -62,6 +65,7 @@ func doRetentionScan(ds DataStore, maxAge time.Duration, sleep time.Duration) er
|
||||
return err
|
||||
}
|
||||
|
||||
retained := 0
|
||||
for _, mb := range mboxes {
|
||||
messages, err := mb.GetMessages()
|
||||
if err != nil {
|
||||
@@ -77,6 +81,8 @@ func doRetentionScan(ds DataStore, maxAge time.Duration, sleep time.Duration) er
|
||||
} else {
|
||||
expRetentionDeletesTotal.Add(1)
|
||||
}
|
||||
} else {
|
||||
retained++
|
||||
}
|
||||
}
|
||||
// Sleep after completing a mailbox
|
||||
@@ -84,6 +90,7 @@ func doRetentionScan(ds DataStore, maxAge time.Duration, sleep time.Duration) er
|
||||
}
|
||||
|
||||
setRetentionScanCompleted(time.Now())
|
||||
expRetainedCurrent.Set(int64(retained))
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -112,4 +119,6 @@ func init() {
|
||||
rm.Set("DeletesHist", expRetentionDeletesHist)
|
||||
rm.Set("DeletesTotal", expRetentionDeletesTotal)
|
||||
rm.Set("Period", expRetentionPeriod)
|
||||
rm.Set("RetainedHist", expRetainedHist)
|
||||
rm.Set("RetainedCurrent", expRetainedCurrent)
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
function setHistory(name, value) {
|
||||
// Show spikes for numbers that only increase
|
||||
function setHistoryOfActivity(name, value) {
|
||||
var h = value.split(",")
|
||||
var prev = parseInt(h[0])
|
||||
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) {
|
||||
if (chartable) {
|
||||
appendHistory(name, value)
|
||||
@@ -101,15 +111,17 @@
|
||||
|
||||
// Server-side history
|
||||
metric('smtpReceivedTotal', data.smtp.ReceivedTotal, numberFilter, false)
|
||||
setHistory('smtpReceivedTotal', data.smtp.ReceivedHist)
|
||||
setHistoryOfActivity('smtpReceivedTotal', data.smtp.ReceivedHist)
|
||||
metric('smtpConnectsTotal', data.smtp.ConnectsTotal, numberFilter, false)
|
||||
setHistory('smtpConnectsTotal', data.smtp.ConnectsHist)
|
||||
setHistoryOfActivity('smtpConnectsTotal', data.smtp.ConnectsHist)
|
||||
metric('smtpWarnsTotal', data.smtp.WarnsTotal, numberFilter, false)
|
||||
setHistory('smtpWarnsTotal', data.smtp.WarnsHist)
|
||||
setHistoryOfActivity('smtpWarnsTotal', data.smtp.WarnsHist)
|
||||
metric('smtpErrorsTotal', data.smtp.ErrorsTotal, numberFilter, false)
|
||||
setHistory('smtpErrorsTotal', data.smtp.ErrorsHist)
|
||||
setHistoryOfActivity('smtpErrorsTotal', data.smtp.ErrorsHist)
|
||||
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() {
|
||||
@@ -233,21 +245,21 @@
|
||||
<tr>
|
||||
<th>Retention Period:</th>
|
||||
<td colspan="3">
|
||||
{{if .retentionMinutes}}
|
||||
<span id="m-retentionPeriod">.</span>
|
||||
{{else}}
|
||||
Disabled
|
||||
{{end}}
|
||||
{{if .retentionMinutes}}
|
||||
<span id="m-retentionPeriod">.</span>
|
||||
{{else}}
|
||||
Disabled
|
||||
{{end}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Retention Scan:</th>
|
||||
<td colspan="3">
|
||||
{{if .retentionMinutes}}
|
||||
Completed <span id="m-retentionScanCompleted">.</span> ago
|
||||
{{else}}
|
||||
Disabled
|
||||
{{end}}
|
||||
{{if .retentionMinutes}}
|
||||
Completed <span id="m-retentionScanCompleted">.</span> ago
|
||||
{{else}}
|
||||
Disabled
|
||||
{{end}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -256,6 +268,12 @@
|
||||
<td class="sparkline"><span id="s-retentionDeletesTotal"></span></td>
|
||||
<td>(60min)</td>
|
||||
</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>
|
||||
<p class="last"> </p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user