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) // } }