Pull to refresh

Comments 10

Почему выбор пал на gin? Исторически сложилось или по каким-то критериям?
И вроде странно выглядит конструкция в 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
}
UFO landed and left these words here
Скажите, а были ли какие-то подводные камни при работе с fasthttp? Я просто для своего небольшого проекта выбрал Iris, который поверх fasthttp написан, и не понял зачем мне Iris. Хочу переделать на fasthttp
UFO landed and left these words here
iris очень сомнительная поделка.
На всякий случай ознакомьтесь с этой веткой реддита: kataras iris author is crazy
Там тесты то с тех пор появились?
На самом деле, как я описал в статье, вопрос нагрузки у нас не стоял. Нам необходимо было достаточно быстро закрыть вопрос автоматизации, что и было сделано. Естественно, если речь пойдет о высоконагруженной системе, то выбор инструментов будет осуществляться иначе.

Коллеги,
Исходный код уже доступен на GitHub: paddle-endpoint. Если есть интерес, желание и время поучаствовать в совершенствовании — буду крайне признателен.

Sign up to leave a comment.

Articles