mailq-inspector/mailq/queue.go

62 lines
1.1 KiB
Go

package mailq
import (
"errors"
"fmt"
"time"
)
type MailQ struct {
NumTotal int
NumActive int
NumHold int
NumDeferred int
Entries []QEntry
}
type QEntry struct {
Id string
Status string
Date time.Time
Size int
Sender string
Recipients []string
Reason string
}
func NewQueue() MailQ {
return MailQ{}
}
func (q *MailQ) AddEntry(entry QEntry) {
q.NumTotal += 1
if entry.Status == "active" {
q.NumActive += 1
} else if entry.Status == "deferred" {
q.NumDeferred += 1
} else if entry.Status == "hold" {
q.NumHold += 1
}
q.Entries = append(q.Entries, entry)
}
func (q *MailQ) RemoveEntry(entry QEntry) {
var currentIndex int
var currentEntry QEntry
for currentIndex, currentEntry = range q.Entries {
if currentEntry.Id == entry.Id {
break
}
}
q.Entries = append(q.Entries[:currentIndex], q.Entries[currentIndex+1:]...)
}
func (q *MailQ) GetMessageById(id string) (QEntry, error) {
for _, entry := range q.Entries {
if entry.Id == id {
return entry, nil
}
}
return QEntry{}, errors.New(fmt.Sprintf("No message with id '%s' available!", id))
}