TSNotify Series 10 - Windows Task Scheduler Event ID Based Notifier
Автор: Maharlikans Code
Загружено: 2020-10-29
Просмотров: 46
Описание:
In this TSNotify Series 10, we will learn how to trigger email notification based on the Windows Task Scheduler Event ID, getting prepared the necessary package dependencies such as Cobra CLI with step by step guide in Golang programming language.
#MaharlikansCode
#TSNotifySeries10
#TaskSchedulerEventIDNotify
#Golang
#LifeAsSoftwareDeveloper
#Maharlikans
#FilipinoSoftwareDeveloper
If you go with extra mile for buying me a cup of coffee, I appreciate it guys: https://ko-fi.com/maharlikanscode
Source Codes:
cmd/run.go
// NotifyMe will send an auto email notification to the corresponding recipients
func NotifyMe() {
tableRows := ``
// Search for any matching items from the task lists 'config.yaml' file
for _, t := range taskSchedList {
if len(strings.TrimSpace(t.TaskName)) == 0 {
continue
}
// Decode using the gob encoded bytes
data, _ := DecodePayload(strings.TrimSpace(t.TaskName))
if len(strings.TrimSpace(data.TaskName)) == 0 {
continue
}
// Only send an email when the 'isSent = false'
if !data.IsSent {
// Combine all the list of task schedulers as the email content
tableRows += `tr`
tableRows += `td style='width:100px;border:1px solid #008060; color: #000000;'` + data.TaskName + `/td`
tableRows += `td style='width:100px;border:1px solid #008060; color: #000000;'` + data.TaskNextRunTime + `/td`
tableRows += `td style='width:100px;border:1px solid #008060; color: #000000;'` + data.TaskStatus + `/td`
tableRows += `/tr`
// Remove right away the existing task name
isRemove := SM.Remove(strings.TrimSpace(data.TaskName))
if isRemove {
// Re-add the new task scheduler info to a map but with 'IsSent' = true
// since we can't modify any existing encoded bytes from a collection of map
newTask := SMStatus{
TaskName: strings.TrimSpace(data.TaskName),
TaskNextRunTime: strings.TrimSpace(data.TaskNextRunTime),
TaskStatus: strings.TrimSpace(data.TaskStatus),
Recipients: data.Recipients,
LogDT: data.LogDT,
IsSent: true, // make this as 'true' value to be ignored when adding new updated task info
}
encBytes, err := EncodePayload(newTask)
if err != nil {
color.Magenta(err.Error())
itrlog.Error(err)
}
SM.Add(strings.TrimSpace(data.TaskName), encBytes)
}
// Start email broadcasting now to each recipients
for _, r := range t.Recipients {
if len(strings.TrimSpace(r)) == 0 {
continue
}
if strings.TrimSpace(data.TaskName) == strings.TrimSpace(t.TaskName) {
newEmail := strings.TrimSpace(r)
// Check the SMTP options to which one to be used email notication
var isSendEmail bool = false
var err error
if isSMTPEnabled {
isSendEmail, err = SendMailClassic(tableRows, newEmail, hostName, _emailTemplateTask)
} else {
isSendEmail, err = SendEmailSendGrid(tableRows, newEmail, hostName, _emailTemplateTask)
}
if err != nil {
itrlog.Error(err)
}
if isSendEmail {
msg := `Email sent to: ` + newEmail + ` for the task_name: ` + strings.TrimSpace(t.TaskName)
color.Magenta(msg)
itrlog.Info(msg)
}
}
}
}
}
}
func CheckTaskStatus(taskName, nextRunTime, taskStatus string) (bool, error) {
if len(strings.TrimSpace(taskName)) == 0 {
return false, errors.New("task name is missing")
}
if len(strings.TrimSpace(taskStatus)) == 0 {
return false, errors.New("task status is missing")
}
for _, v := range statusList {
mTS := strings.TrimSpace(strings.ToLower(taskStatus))
mTS = strings.Replace(fmt.Sprint(mTS), `"`, "", -1)
mTS = strings.Replace(fmt.Sprint(mTS), `"`, "", -1)
mVS := strings.TrimSpace(strings.ToLower(v))
if mTS == mVS {
msg := "task_name: " + taskName + " task_status: " + taskStatus
newTask := SMStatus{
TaskName: strings.TrimSpace(taskName),
TaskNextRunTime: strings.TrimSpace(nextRunTime),
TaskStatus: strings.TrimSpace(taskStatus),
Recipients: recipients,
LogDT: time.Now().Add(1 * time.Minute).Unix(), // buffered time to re-send email notification
IsSent: false,
}
encBytes, err := EncodePayload(newTask)
if err != nil {
color.Magenta(msg)
itrlog.Error(err)
}
data, _ := DecodePayload(strings.TrimSpace(taskName))
dTaskName, dTaskStatus := "", ""
isEmailSent, isToAdd := false, false
pTaskStatus := strings.ToLower(strings.TrimSpace(taskStatus))
if len(strings.TrimSpace(data.TaskName)) gt 0 {
dTaskName = strings.TrimSpace(data.TaskName)
dTaskStatus = strings.ToLower(strings.TrimSpace(data.TaskStatus))
isEmailSent = data.IsSent
if isEmailSent {
if dTaskStatus != pTaskStatus {
isEmailSent = false
}
if dTaskStatus == pTaskStatus && time.Now().Unix() gt data.LogDT {
isEmailSent = false
}
}
}
if len(strings.TrimSpace(dTaskName)) == 0 && !isEmailSent {
isToAdd = true
}
if !isEmailSent {
isToAdd = true
}
if len(strings.TrimSpace(taskName)) == 0 {
isToAdd = true
}
if isToAdd {
Source codes omitted due to not enough space.
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: