Comments 10
Почему выбор пал на gin? Исторически сложилось или по каким-то критериям?
И вроде странно выглядит конструкция в eventPOST(c *gin.Context). Почему у вас список булевых значений? Почему не сделали просто булево значение? Или возвращать из InviteToJira(event.Email) либо nil либо error и потом проверять значение на nil, оставив задатки расширения под логгер(я видел, что у вас в самих функциях уже ведутся логи, но много не бывает)?
У вас jira.New(...) на каждый запрос инициализируется в каждой функции отдельно?
И вроде странно выглядит конструкция в eventPOST(c *gin.Context). Почему у вас список булевых значений? Почему не сделали просто булево значение? Или возвращать из InviteToJira(event.Email) либо nil либо error и потом проверять значение на nil, оставив задатки расширения под логгер(я видел, что у вас в самих функциях уже ведутся логи, но много не бывает)?
У вас jira.New(...) на каждый запрос инициализируется в каждой функции отдельно?
Почему выбор пал на gin? Исторически сложилось или по каким-то критериям?
Нам необходимо было достаточно быстро закрыть вопрос автоматизации
У вас jira.New(...) на каждый запрос инициализируется в каждой функции отдельно?
Да, мы планируем устанавливать соединение глобально и повторно выполнять соединение в случае если оно не установлено.
И вроде странно выглядит конструкция в eventPOST(c *gin.Context). Почему у вас список булевых значений?
Спикок булевых значений так как у нас в каджом случае выполняется три действия (и этот метод, на самом деле, является заготовкой для модификации логики выполнения).
Да, согласен, можно было сделать иначе, скажем так:
func eventPOST(c *gin.Context) {
c.Bind(&event)
log.WithFields(event.ToFields()).Info("Processing event")
switch event.AlertName {
case "subscription_payment_succeeded", "subscription_created":
errJira : = InviteToJira(event.Email))
if !errJira {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
errJiraGroup := AddToJiraGroup(event.Email)
if !errJiraGroup {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
errSlack := InviteToSlack(event.Email)
if !errSlack {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
case "payment_succeeded":
errJira := InviteToJira(event.Email)
if !errJira {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
errSlack := InviteToSlack(event.Email)
if !errSlack {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
case "subscription_cancelled":
errRemove := RemoveFromJiraGroup(event.Email)
if !errRemove {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
default:
log.WithFields(log.Fields{
"event": event.AlertName,
}).Error("Unknown event")
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
c.String(http.StatusOK, "Ok\n")
return
}
Из функций лучше возвращать error, а не bool.
Избегайте дублирования кода:
Избегайте дублирования кода:
func eventPOST(c *gin.Context) {
c.Bind(&event)
log.WithFields(event.ToFields()).Info("Processing event")
var errJira, errJiraGroup, errSlack, errRemove, errUnknown error
switch event.AlertName {
case "subscription_payment_succeeded", "subscription_created":
errJira = InviteToJira(event.Email)
errJiraGroup = AddToJiraGroup(event.Email)
errSlack = InviteToSlack(event.Email)
case "payment_succeeded":
errJira = InviteToJira(event.Email)
errSlack = InviteToSlack(event.Email)
case "subscription_cancelled":
errRemove = RemoveFromJiraGroup(event.Email)
default:
log.WithFields(log.Fields{
"event": event.AlertName,
}).Error("Unknown event")
errUnknown = fmt.Errorf("Unknown event")
}
if errJira != nil || errJiraGroup != nil || errSlack != nil ||
errRemove != nil || errUnknown != nil {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
c.String(http.StatusOK, "Ok\n")
return
}
Скажите, а были ли какие-то подводные камни при работе с fasthttp? Я просто для своего небольшого проекта выбрал Iris, который поверх fasthttp написан, и не понял зачем мне Iris. Хочу переделать на fasthttp
iris очень сомнительная поделка.
На всякий случай ознакомьтесь с этой веткой реддита: kataras iris author is crazy
Там тесты то с тех пор появились?
На всякий случай ознакомьтесь с этой веткой реддита: kataras iris author is crazy
Там тесты то с тех пор появились?
На самом деле, как я описал в статье, вопрос нагрузки у нас не стоял. Нам необходимо было достаточно быстро закрыть вопрос автоматизации, что и было сделано. Естественно, если речь пойдет о высоконагруженной системе, то выбор инструментов будет осуществляться иначе.
Коллеги,
Исходный код уже доступен на GitHub: paddle-endpoint. Если есть интерес, желание и время поучаствовать в совершенствовании — буду крайне признателен.
Sign up to leave a comment.
Экосистема поддержки. Автоматизация регистрации пользователей средствами Golang