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:
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"> </p>
|
<p class="last"> </p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user