jira-bot/cmd/bot.go
Andrey Belvedersky a4838bb973 🤖
2021-06-02 16:07:53 +03:00

139 lines
4.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"log"
"math/rand"
"time"
settings "git/ecom/jira-bot/pkg/config"
"github.com/andygrunwald/go-jira"
)
func main() {
cfg, _ := settings.GetConfig()
tp := jira.BasicAuthTransport{
Username: cfg.Jira.Auth.Username,
Password: cfg.Jira.Auth.Password,
}
jiraClient, _ := jira.NewClient(tp.Client(), cfg.Jira.Url)
me, _, _ := jiraClient.User.GetSelf()
timeNeed := 165 // Количество часов
tm := time.Hour * time.Duration(timeNeed)
log.Println("Необходимо поставить время:", tm)
issue := map[string][]string{ // Задачи
"SA-3000": {
"Конфигрурация nginx",
"Загрузка данных в elastic search",
"Проксирование запросов grpc_pass",
"Работа с вм msk-api601",
},
"ECOM-251": {
"Конфигрурация nginx",
"Проксирование запросов c микросервисов",
"Проксирование galamart.ru/api/v1",
"Настройка вебхуков",
"Авторизация и закрытие некоторых роутов",
},
"ECOM-252": {
"Работа с каталогом",
"Запросы в mysql за характеристиками",
"bulk импорт по городам из yml",
"Добавление изображений из папки /images/1000",
"Добавление комментариев",
},
"ECOM-253": {
"Разработка njs скрипта",
"Конфигрурация nginx",
},
"ECOM-254": {
"Создание 5млн карт",
"Загрузка карт в mindbox",
"Настройка вебхука на выдачу карт",
"Формирование сообщения в шину с картой",
},
"ECOM-255": {
"Добавление кронера для загрузки в mindbox",
"Сохранение и сравненение chk c сdp сообщением",
"Формирование csv",
"Создание бд и структуры храненения чеков",
},
}
// Дней
md := 31
// День с какого числа необходимо заполнить жиру
startDay := time.Date(2021, 05, 0, 9, 0, 0, 0, time.FixedZone(me.TimeZone, 0))
// Мап дней с часами работы
mr := make(map[time.Time]time.Duration)
// Тут должна быть проверка на правздники и выходные дни
for i := 0; i < md; i++ {
day := startDay.AddDate(0, 0, i)
if day.Weekday() != time.Saturday && day.Weekday() != time.Sunday && day.Day() != 9 && day.Day() != 1 && day.Day() != 2 {
mr[day] = 0
}
}
// Кол-во часов в день (сделать рандомно)
hoursDay := tm / time.Duration(len(mr))
for d := range mr {
mr[d] = hoursDay
}
// Задачи и сколько время на них потратить (сделать рандомно от приоритета)
type IssueToWork struct {
WorkTime time.Duration
Issue *jira.Issue
}
issues := []IssueToWork{}
timeToIssue := tm / time.Duration(len(issue))
for i := range issue {
isWork := IssueToWork{}
issue, _, _ := jiraClient.Issue.Get(i, nil)
isWork.Issue = issue
isWork.WorkTime = timeToIssue
issues = append(issues, isWork)
}
all := time.Hour * 0
// Сделать что бы комменты были тоже рандомнее
//usedComments := make(map[string]int)
for d, v := range mr {
randomIs := issues[rand.Intn(len(issues))]
// если в задаче осталось время то
if randomIs.WorkTime > time.Hour {
t := jira.Time(d)
work := jira.WorklogRecord{
TimeSpentSeconds: int(v.Seconds()),
Comment: issue[randomIs.Issue.Key][rand.Intn(len(issue[randomIs.Issue.Key]))],
Started: &t,
IssueID: randomIs.Issue.Key,
}
// Добавление отметки в задачу
if !cfg.Debug {
_, _, err := jiraClient.Issue.AddWorklogRecord(randomIs.Issue.Key, &work)
if err != nil {
log.Fatal(err)
}
}
log.Println("Отметил время на задаче:", work.IssueID)
log.Println("Осталось: ", tm-all)
//usedComments[randomComment] =+ 1
randomIs.WorkTime -= v
all += v
}
}
log.Println("Поставлено ", all.String(), "часов")
// for cm, v := range usedComments {
// log.Println(cm, v)
// }
}