Антон
Vladimir
а никто не знает какого-нибудь нормального фреймворка для управления включенными feature flag'ами?
Vladimir
В смысле чтобы иметь какую-нибудь ручку где можно посмотреть включенное, помаркировавть какие из них не требуют рестарта, и те которые не требуют переключать PATCH/POST запросами в ручку
Vladimir
чтобы эксперементальные code path маркировать и в рантайме (или нет) переключать
Andrei 🦉
Vladimir
Andrei 🦉
описание непонятно
Andrei 🦉
ну это мне нужно получить совет/помощь или вам? учитесь грамотно формулировать ваши вопросы
🏁Александр
я вангую что это типо "сервер лицензий" надо
🏁Александр
но это не точно
Vladimir
Vladimir
ждем дальше
Andrei 🦉
ждем человека, умеющего читать мысли на расстоянии*
🏁Александр
🙁
🏁Александр
опиши блин задачу, что есть feature flag на русском
Vladimir
Vladimir
чтобы эксперементальные code path маркировать и в рантайме (или нет) переключать
🏁Александр
хрено как то описал
Vladimir
хрено как то описал
раз ты не понял, значит ты не пользовался и дать ответ мне не можешь
🏁Александр
и в чем проблема оформить это в переменных?
Vladimir
во вторых хочется что-то более стандартное с возможностью рантайм изменений, разделением на флаги которые переключаются в рантайме и не переключаются в рантайме
Vladimir
и хочется минимальный оверхед на это
🏁Александр
странный кейс, ты какую бизнес задачу решаешь?
Vladimir
пока самое близкое к тому что я хочу - https://github.com/vsco/dcdr
Vladimir
собственно я всего два проекта нашел которые звучат адекватно - еще вот этот https://github.com/AntoineAugusti/feature-flags - но он какой-то уже на грани пионерии
🏁Александр
не видел и не слышал что бы в коммерческой разработке применялось такое
🏁Александр
обычно нода конфигурируется и стартует и все на этом
🏁Александр
на крайне случай можно зацепиться за название окружения
Vladimir
потому что мне такое очень нравится
Vladimir
и как-то попользовался и прям оценил
Vladimir
и удивлен что все так не делают
🏁Александр
не удивительно что не пользуются
Vladimir
проблема dcdr'а в том что он слишком жирный
Vladimir
мне хватит варианта полегче
Vladimir
но видимо придется самому писать
🏁Александр
накладные расходы + лишние перделки в кодой базе
🏁Александр
проще ноду перезапустить
🏁Александр
всеравно она через балансер
Vladimir
проверка одного инта в map'е
🏁Александр
сервисы пишутся по строгому тз, не бывает что-то "вдруг надо" это утопия
Andrei 🦉
вообще то такая штука делается с помощью зукипера
Andrei 🦉
ноды получают из зукипера конфигурацию и сами пишут в зукипер свое состояние
Andrei 🦉
но ничего готового, тем более для го, в опенсорсе не найдешь скорее всего, потому что это реально нужно топ 5 интернет компаниям в мире
Vladimir
Andrei 🦉
абтесты так реализуются, но там конфигурацию получается либо с запросом, либо от отдельно стоящей апишки и обновляется на каждый прилетающий запрос
🏁Александр
я про это и говорю
Vladimir
В такие моменты я понимаю почему в некоторых чатах слово девопс это оскорбление
🏁Александр
ну а что такого то?
ivan
Michail
привет вопрос по gin framework - как сделать CORS, если я в момент запуска не знаю на каком адресе у меня будет крутиться фронтенд ?
Vladimir
В смысле?
ну это очень девопс подход решать проблему тем, что для ее решения не шибко подходит, зато модно
Vladimir
даже если этим способом эту проблему в этом случаи решить нельзя
Stepan
Офтоп крч
Stepan
Есть тут кто-то кто работал в тинькове?
Vladimir
но при этом будут такие (точнее я знаю что есть) у которых 400 серверов на bare metal с установкой пакетами и апдейтами конфигов паппетом раз в полчаса
Vladimir
и нужно к сожалению удволетворять и тем у кого rpi и тем у кого bare metal и тем у кого кубер
🏁Александр
🏁Александр
они же не будут их переключать в реальном времени
Vladimir
Vladimir
как раз потому что чувакам у которых puppet это в реальном времени переключать надо, а не раз в полчаса
🏁Александр
ну фиг знает
Daniel
Alexey
Привет всем! Помогите пожалуйста разобраться с причиной ошибки.
Имеем вот такой код
type exchangesDataMap map[string]map[string]map[string]structures.BidAsk
...
...
exchangesDataMap := make(exchangesDataMap)
...
...
wg.Add(1)
go func(rows *sql.Rows) {
for rows.Next() {
err = rows.Scan(&pair, &bid, &ask, &createdAt)
if err != nil {
continue
}
mutex.Lock()
if _, ok := exchangesDataMap[slug]; !ok {
exchangesDataMap[slug] = make(map[string]map[string]structures.BidAsk)
}
if _, ok := exchangesDataMap[slug][pair]; !ok {
exchangesDataMap[slug][pair] = make(map[string]structures.BidAsk)
}
exchangesDataMap[slug][pair][createdAt.Format(time.RFC3339)] = structures.BidAsk{
Bid: bid,
Ask: ask,
}
mutex.Unlock()
}
wg.Done()
}(rows)
В процессе выполнения выполнения данные пишутся в карту (как я могу судить по вывоу в консоль), но в один момент получаю ошибку
panic: assignment to entry in nil map
Подскажите в каком направлении копать
Slava
на какой строчке?
Oleh
как вот такую регекспу с пхп
\b((?!|\!|\.).)+(.)
передеделать на го?
Oleh
на ? ругается
Oleh
Alexey
на какой строчке?
exchangesDataMap[slug][pair][createdAt.Format(time.RFC3339)] = structures.BidAsk{
Bid: bid,
Ask: ask,
}