Documentation ¶
Index ¶
- Constants
- Variables
- type Application
- type ApplicationEvent
- type ApplicationEventKind
- type DelayedBindingType
- type EventService
- type GrepService
- type Iterator
- type LimitedQueue
- type MailError
- type MailMessage
- type PublishService
- type Queue
- type ReportService
- type SendEvent
- type SendEventResult
- type SendingService
- type Service
- type SmtpClient
- type SmtpClientStatus
- type Timeout
Constants ¶
const ( // ExampleConfigYaml используется в примерах использования ExampleConfigYaml = "/path/to/config/file.yaml" // InvalidInputString невалидная строка, введенная пользователем InvalidInputString = "" // InvalidInputInt невалидное число, введенное пользователем InvalidInputInt = 0 )
const ( // Максимальное количество попыток подключения к почтовику за отправку письма MaxTryConnectionCount int = 30 AllDomains string = "*" EmptyStr string = "" )
Variables ¶
var ( // App объект текущего приложения, иногда необходим сервисам, для отправки событий приложению App Application // Services сервисы, используются для создания итератора Services []interface{} // DefaultWorkersCount количество goroutine, может измениться для инициализации приложения DefaultWorkersCount = runtime.NumCPU() // FilenameRegex используется в нескольких пакетах, поэтому вынес сюда FilenameRegex = regexp.MustCompile(`[^\\/]+\.[^\\/]+`) // PrintUsage печает аргументы, используемые приложением PrintUsage = func(f *flag.Flag) { format := " -%s %s\n" fmt.Printf(format, f.Name, f.Usage) } )
var ( // EmailRegexp Регулярка для проверки адреса почты, сразу компилируем, чтобы при отправке не терять на этом время //nolint:lll EmailRegexp = regexp.MustCompile("^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@((?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\]))$") EmptyStrSlice = []string{} )
Functions ¶
This section is empty.
Types ¶
type Application ¶
type Application interface { // GetConfigData get config data GetConfigData() ([]byte, error, error) // SetConfigMeta set config meta data SetConfigMeta(configFilename, configRemoteAddr, configUpdateDuration string) // InitConfig initialize config data InitConfig() // IsValidConfigFilename проверяет валидность пути к файлу с настройками IsValidConfigFilename(string) bool // InitChannels init channels InitChannels(cBufSize int) // OnEvent runs event callback OnEvent(f func(ev *ApplicationEvent)) // CloseEvents close events channel CloseEvents() // SendEvents send event to the channel SendEvents(ev *ApplicationEvent) bool // Done возвращает канал завершения приложения Done() <-chan bool // Close main app Close() // Services возвращает сервисы, используемые приложением Services() []interface{} // FireInit инициализирует сервисы FireInit(*ApplicationEvent, interface{}) // FireRun запускает сервисы приложения FireRun(*ApplicationEvent, interface{}) // FireFinish останавливает сервисы приложения FireFinish(*ApplicationEvent, interface{}) // Init инициализирует приложение Init(*ApplicationEvent, bool) // Run запускает приложение Run() // RunWithArgs запускает приложение с аргументами RunWithArgs(...interface{}) // Timeout возвращает таймауты приложения Timeout() Timeout }
Application проект содержит несколько приложений: pmq-grep, pmq-publish, pmq-report, postmanq и т.д. чтобы упростить и стандартизировать приложения, разработан этот интерфейс
type ApplicationEvent ¶
type ApplicationEvent struct { // Kind тип события Kind ApplicationEventKind // Data данные из файла настроек Data []byte // Args аргументы командной строки Args map[string]interface{} }
ApplicationEvent событие приложения
func NewApplicationEvent ¶
func NewApplicationEvent(kind ApplicationEventKind) *ApplicationEvent
NewApplicationEvent создает событие с указанным типом
func (*ApplicationEvent) GetBoolArg ¶
func (e *ApplicationEvent) GetBoolArg(key string) bool
GetBoolArg возвращает аргумент, как булевый тип
func (*ApplicationEvent) GetIntArg ¶
func (e *ApplicationEvent) GetIntArg(key string) int
GetIntArg возвращает аргумент, как число
func (*ApplicationEvent) GetStringArg ¶
func (e *ApplicationEvent) GetStringArg(key string) string
GetStringArg возвращает аргумент, как строку
type ApplicationEventKind ¶
type ApplicationEventKind int
ApplicationEventKind тип события приложения
const ( // InitApplicationEventKind инициализации сервисов InitApplicationEventKind ApplicationEventKind = iota // RunApplicationEventKind запуск сервисов RunApplicationEventKind // FinishApplicationEventKind завершение сервисов FinishApplicationEventKind // ReconfigureApplicationEventKind reconfigure all services ReconfigureApplicationEventKind )
type DelayedBindingType ¶
type DelayedBindingType int
тип отложенной очереди
const ( UnknownDelayedBinding DelayedBindingType = iota SecondDelayedBinding ThirtySecondDelayedBinding MinuteDelayedBinding FiveMinutesDelayedBinding TenMinutesDelayedBinding TwentyMinutesDelayedBinding ThirtyMinutesDelayedBinding FortyMinutesDelayedBinding FiftyMinutesDelayedBinding HourDelayedBinding SixHoursDelayedBinding DayDelayedBinding NotSendDelayedBinding )
type EventService ¶
EventService сервис получающий событие отправки письма используется сервисами для передачи события друг другу
type GrepService ¶
type GrepService interface { Service OnGrep(*ApplicationEvent) }
GrepService сервис ищущий записи в логе по письму
type Iterator ¶
type Iterator struct {
// contains filtered or unexported fields
}
Iterator итератор, используется для слабой связи между сервисами приложения
type LimitedQueue ¶
type LimitedQueue struct { *Queue // contains filtered or unexported fields }
LimitedQueue лимитированная очередь, в ней будут храниться клиенты к почтовым сервисам
func NewLimitQueue ¶
func NewLimitQueue() *LimitedQueue
NewLimitQueue создает новую лимитированную очередь
func (*LimitedQueue) AddMaxLen ¶
func (l *LimitedQueue) AddMaxLen()
AddMaxLen увеличивает максимальную длину очереди
func (*LimitedQueue) HasLimit ¶
func (l *LimitedQueue) HasLimit() bool
HasLimit сигнализирует, что очередь имеет лимит
func (*LimitedQueue) HasLimitOff ¶
func (l *LimitedQueue) HasLimitOff()
HasLimitOff снимает лимит очереди
func (*LimitedQueue) HasLimitOn ¶
func (l *LimitedQueue) HasLimitOn()
HasLimitOn устанавливает лимит очереди
func (*LimitedQueue) MaxLen ¶
func (l *LimitedQueue) MaxLen() int
MaxLen максимальная длина очереди до того момента, как был установлен лимит
type MailError ¶
type MailError struct { // сообщение Message string `json:"message"` // код ошибки Code int `json:"code"` }
ошибка во время отпрвки письма
type MailMessage ¶
type MailMessage struct { // идентификатор для логов Id int64 `json:"-"` // отправитель Envelope string `json:"envelope"` // получатель Recipient string `json:"recipient"` // тело письма Body []byte `json:"body"` // домен отправителя, удобно сразу получить и использовать далее HostnameFrom string `json:"-"` // Домен получателя, удобно сразу получить и использовать далее HostnameTo string `json:"-"` // дата создания, используется в основном сервисом ограничений CreatedDate time.Time `json:"-"` // тип очереди, в которою письмо уже было отправлено после неудачной отправки, ипользуется для цепочки очередей BindingType DelayedBindingType `json:"bindingType"` // ошибка отправки Error *MailError `json:"error"` }
письмо
type PublishService ¶
type PublishService interface { Service EventService OnPublish(*ApplicationEvent) }
PublishService сервис перекладывающий письма из очереди в очередь
type Queue ¶
type Queue struct {
// contains filtered or unexported fields
}
Queue потоко-безопасная очередь
type ReportService ¶
type ReportService interface { Service EventService OnShowReport() }
ReportService сервис принимающий участие в агрегации и выводе в консоль писем с ошибками
type SendEvent ¶
type SendEvent struct { // Client клиент для отправки писем Client *SmtpClient // Message письмо, полученное из очереди Message *MailMessage // CreateDate дата создания необходима при получении подключения к почтовому сервису CreateDate time.Time // Result результат Result chan SendEventResult // TryCount количество попыток отправок письма TryCount int // Iterator итератор сервисов, участвующих в отправке письма Iterator *Iterator // Queue очередь, в которую необходимо будет положить клиента после отправки письма Queue *LimitedQueue }
SendEvent событие отправки письма
func NewSendEvent ¶
func NewSendEvent(message *MailMessage) *SendEvent
NewSendEvent создает событие отправки сообщения
type SendEventResult ¶
type SendEventResult int
SendEventResult результат отправки письма
const ( // SuccessSendEventResult успех SuccessSendEventResult SendEventResult = iota // OverlimitSendEventResult превышение лимита OverlimitSendEventResult // ErrorSendEventResult ошибка ErrorSendEventResult // DelaySendEventResult повторная отправка через некоторое время DelaySendEventResult // RevokeSendEventResult отмена отправки RevokeSendEventResult )
type SendingService ¶
type SendingService interface { Service EventService OnRun() }
SendingService сервис принимающий участие в отправке письма
type Service ¶
type Service interface { OnInit(*ApplicationEvent) OnFinish() }
Service сервис требующий инициализации данные для инициализации берутся из файла настроек
type SmtpClient ¶
type SmtpClient struct { // идертификатор клиента для удобства в логах Id int // Conn соединение к почтовому серверу Conn net.Conn // Worker реальный smtp клиент Worker *smtp.Client // ModifyDate дата создания или изменения статуса клиента ModifyDate time.Time // Status статус Status SmtpClientStatus // contains filtered or unexported fields }
SmtpClient клиент почтового сервера
func (*SmtpClient) SetTimeout ¶
func (s *SmtpClient) SetTimeout(timeout time.Duration) error
SetTimeout останавливает таймаут на чтение и запись соединения
func (*SmtpClient) Wait ¶
func (s *SmtpClient) Wait()
Wait переводит клиента в ожидание после окончания ожидания соединение разрывается, а статус меняется на отсоединенный
func (*SmtpClient) Wakeup ¶
func (s *SmtpClient) Wakeup()
Wakeup переводит клиента в рабочее состояние если клиент был в ожидании, ожидание прерывается
type SmtpClientStatus ¶
type SmtpClientStatus int
SmtpClientStatus статус клиента почтового сервера
const ( // WorkingSmtpClientStatus отсылает письмо WorkingSmtpClientStatus SmtpClientStatus = iota // WaitingSmtpClientStatus ожидает письма WaitingSmtpClientStatus // DisconnectedSmtpClientStatus отсоединен DisconnectedSmtpClientStatus )
type Timeout ¶
type Timeout struct { Sleep time.Duration `yaml:"sleep"` Waiting time.Duration `yaml:"waiting"` Connection time.Duration `yaml:"connection"` Hello time.Duration `yaml:"hello"` Mail time.Duration `yaml:"mail"` Rcpt time.Duration `yaml:"rcpt"` Data time.Duration `yaml:"data"` }
таймауты приложения