package events_alerter
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
)
|
|
import _ "github.com/go-sql-driver/mysql"
|
|
|
|
type MsgStr struct {
|
|
remote string
|
|
message string
|
|
}
|
|
|
|
func (msg MsgStr) Remote() string {
|
|
return msg.remote
|
|
}
|
|
|
|
func (msg MsgStr) Message() string {
|
|
return msg.message
|
|
}
|
|
|
|
type MsgInt interface {
|
|
Remote() string
|
|
Message() string
|
|
}
|
|
|
|
type DbRequester struct {
|
|
login string
|
|
pass string
|
|
host string
|
|
database string
|
|
}
|
|
|
|
func (dbStruct *DbRequester) ReqPrepare(sqlStr ...string) string {
|
|
if len(sqlStr) > 1 {
|
|
values := make([]interface{}, len(sqlStr)-1)
|
|
for i, _ := range sqlStr[1:] {
|
|
k := i + 1
|
|
values[i] = sqlStr[k]
|
|
}
|
|
return fmt.Sprintf(sqlStr[0], values...)
|
|
} else {
|
|
return sqlStr[0]
|
|
}
|
|
|
|
}
|
|
|
|
func (dbStruct *DbRequester) Requester(sqlStr string) (allResult [][]string, err error) {
|
|
connStr := fmt.Sprintf("%v:%v@tcp(%v)/%v", dbStruct.login, dbStruct.pass, dbStruct.host, dbStruct.database)
|
|
db, err := sql.Open("mysql", connStr)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer db.Close()
|
|
err = db.Ping()
|
|
if err != nil {
|
|
return
|
|
}
|
|
req, err := db.Prepare(sqlStr)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer req.Close()
|
|
rows, err := req.Query() //пыщим запросий
|
|
if err != nil {
|
|
return
|
|
}
|
|
cols, err := rows.Columns() // получаем слайс стрингов с названиями колонок
|
|
if err != nil {
|
|
return
|
|
}
|
|
rawResult := make([][]byte, len(cols)) // слайс слайсов байт, это одна строка выхлопа сырая
|
|
|
|
dest := make([]interface{}, len(cols)) // слайс пустых интерфейсов
|
|
for i, _ := range rawResult {
|
|
dest[i] = &rawResult[i] // Put pointers to each string in the interface slice
|
|
}
|
|
for rows.Next() {
|
|
err = rows.Scan(dest...)
|
|
if err != nil {
|
|
return
|
|
}
|
|
result := make([]string, len(cols)) // слайс строк, одна строка выхлопа, которую надо добавить в общий выхлоп
|
|
for i, raw := range rawResult {
|
|
if raw == nil {
|
|
result[i] = "Null"
|
|
} else {
|
|
result[i] = string(raw)
|
|
}
|
|
}
|
|
allResult = append(allResult, result)
|
|
}
|
|
return
|
|
}
|
|
|
|
func BuildAlert() (msgSl []MsgInt) {
|
|
msgTpl := `Вспомни! %v время для важного!
|
|
Задача '%v' ждет тебя,
|
|
Лови ссыль:
|
|
https://pm.constanta-smt.ru/index.php/tasksComments?tasks_id=%v&projects_id=%v`
|
|
dbuser := DbRequester{
|
|
login: "bot",
|
|
pass: "z68puEFJhEBtS",
|
|
host: "10.176.120.51",
|
|
database: "qdpm",
|
|
}
|
|
createdFormat := "2006-01-02 15:04"
|
|
t := time.Now()
|
|
sqlTpl := `select extra_fields_list.value, tasks.projects_id as pid, tasks.id as tid, name tname, tasks.assigned_to as users
|
|
from extra_fields_list, tasks
|
|
where extra_fields_list.extra_fields_id = 10 and extra_fields_list.value = '%v' and extra_fields_list.bind_id = tasks.id ;`
|
|
//sqlTpl := `select extra_fields_list.value, tasks.projects_id as pid, tasks.id as tid, name tname, tasks.assigned_to as users
|
|
//from extra_fields_list, tasks
|
|
//where extra_fields_list.extra_fields_id = 10 and extra_fields_list.value <> '' and extra_fields_list.bind_id = tasks.id ;`
|
|
fmt.Println(dbuser.ReqPrepare(sqlTpl, t.Format(createdFormat)))
|
|
res, err := dbuser.Requester(dbuser.ReqPrepare(sqlTpl, t.Format(createdFormat)))
|
|
fmt.Printf("%#v, %#v\n", res, err)
|
|
|
|
if len(res) > 0 { // обработка запроса, если найдено больше 0 строк
|
|
for _, v := range res {
|
|
fmt.Println(v)
|
|
msgStr := fmt.Sprintf(msgTpl, v[0], v[3], v[2], v[1])
|
|
uidSl := strings.Split(v[4], ",")
|
|
jidSl := make([]string, len(uidSl))
|
|
for _, uid := range uidSl {
|
|
sqlTpl = "select value from qdpm.extra_fields_list where extra_fields_id = 11 and bind_id = '%v';"
|
|
jid, _ := dbuser.Requester(dbuser.ReqPrepare(sqlTpl, uid))
|
|
if len(jid) > 0 {
|
|
tmpJid := jid[0][0]
|
|
jidSl = append(jidSl, tmpJid)
|
|
fmt.Printf("%v\n", tmpJid)
|
|
tmpMsg := MsgStr{remote: tmpJid, message: msgStr}
|
|
msgSl = append(msgSl, tmpMsg)
|
|
}
|
|
}
|
|
}
|
|
fmt.Println(msgSl)
|
|
}
|
|
return
|
|
}
|
Powered by TurnKey Linux.