Юрий
15.09.2017
07:57:40
Andry
15.09.2017
07:57:40
Леха это пять!
Nick
15.09.2017
07:58:50
Oleksandr
15.09.2017
08:00:04
Google
Юрий
15.09.2017
08:01:14
да. Кейс простой - опциональный паблишинг в кафку. Если включен - то будь добр дай настройки для кафки. Если выключен - то ничего не надо.
Alexey
15.09.2017
08:02:05
Юрий
15.09.2017
08:04:47
на деле там кучу вещей нужно руками разбирать
Alexey
15.09.2017
08:05:42
с тайп классами вроде отлично такое разбирается
тот же ficus
Oleksandr
15.09.2017
08:06:09
Юрий
15.09.2017
08:06:52
Alexey
15.09.2017
08:07:58
implicit def configWithFlag(implicit yourFlag: YourFlag): Reader[ConfigWithFlag] = ???
Oleg
15.09.2017
08:18:35
чото маловато параметров у ридера
Alexey
15.09.2017
08:28:27
ну эт жи пример
Юрий
15.09.2017
08:31:57
ну эт жи пример
Ну а сам разбор и выбор всё равно же нужно где-то организовывать
Google
Юрий
15.09.2017
08:32:14
и мне нужен ридер для родительского трейта
Alexey
15.09.2017
08:32:20
ифчик Оо
лан это всё обсуждение в воздух без конкретики :)
Oleg
15.09.2017
09:11:10
Не поленился расрыть Алексееву идею https://scastie.scala-lang.org/Odomontois/omL2kPCdTxS7sYtYTuJg3A/2
Юрий
15.09.2017
09:18:09
чёт я не очень понял, как это применить к чтению конфига?
Oleg
15.09.2017
09:23:05
Ну читать один конфиг, если есть флаг в скоупе, и другой, если нет
Не об этом вопрос?
Юрий
15.09.2017
09:23:45
а как этот флаг в скоуп попадет?
Oleg
15.09.2017
09:24:18
Импортом, примесью в каком-нибудь кейке или прямым объявлением
Юрий
15.09.2017
09:24:40
так флаг тоже в конфиге
ща покажу код короч
Oleg
15.09.2017
09:25:01
Ну Алексей про имплиситы говорил
Мне реальность не так интересна, как имплиситы
Юрий
15.09.2017
09:26:27
https://gist.github.com/LMnet/87abe3836d3de45593b07aae0005a6ca
вот если получится это накрутить более красиво - я был бы рад этот кошмар выкинуть
Max
15.09.2017
09:33:36
я не совсем в тему скажу - вы все таки про чтение конфигов говорите
но разве это нормально?
Option(co.get(key)) match {
case Some(publishingCv) =>
case _ =>
}
и в стандартной библиотеке есть Option(123).toRight()
Юрий
15.09.2017
09:37:24
А что не так?
Max
15.09.2017
09:38:02
ну второй кейс... не выполнится никогда?
Aleksei
15.09.2017
09:39:44
если будет нулл то выполнится
Google
Юрий
15.09.2017
09:39:45
с чего вдруг? если co.get(key) вернет null - то выполнится
там же джавовая либа под капотом с нулами и эксепшенами
Vyatcheslav
15.09.2017
09:40:20
https://github.com/pureconfig/pureconfig#example так у них пример прям такой же. Только конфиг немного иначе будет выглядеть, а-ля:
kafka {
type = "WithoutPublishing"
}
kafka {
type = "WithPublishing"
// other options
}
Юрий
15.09.2017
09:40:25
и pureconfig в целом и сделан для того, чтобы всё это завернуть в нормальное апи
Vyatcheslav
15.09.2017
09:41:29
да, так сложнее :D надо подумать
Юрий
15.09.2017
09:41:53
ну и какая сементика у ключа kafka.type? причём со строковым значением
а вот kafka.publishing булевый - сразу понятно, о чём речь
Grigory
15.09.2017
09:42:53
Юрий
15.09.2017
09:43:18
KrivdaTheTriewe
15.09.2017
09:43:46
Grigory
15.09.2017
09:44:03
Самому написать функцию конвертации твоего типа в айзер; но я согласен, что в целом это костыли
Luger
15.09.2017
09:50:47
черт, попалась мне в твитторе реклама scala-ide от пользователя @scala_lang , решил попробовать - а вдруг. скачал , запустил, а там даже sbt из коробки не поддерживается, хм
Alexey
15.09.2017
09:50:56
Юрий
15.09.2017
09:51:16
Alexey
15.09.2017
09:55:50
бле, какая неудобная либа
Kirill
15.09.2017
09:56:06
Alexey
15.09.2017
09:57:11
автовывод из кейскласса не стоит того
Юрий
15.09.2017
09:57:53
вообще, не смотря на этот пример, там всё более менее
Alexey
15.09.2017
09:58:05
я в исходники смотрел
Google
Юрий
15.09.2017
09:59:17
ну кстати код из гиста примерно такой же, как в самой либе
то есть там внутри всё примерно также и делается
Alexey
15.09.2017
09:59:45
ficus гораздо приятнее
Юрий
15.09.2017
10:00:22
в фикусе нету конвертации snake-case в camelCase
Alexey
15.09.2017
10:00:58
config.as[Option[Boolean]]("publishing").getOrElse(false) и усё
Юрий
15.09.2017
10:01:33
что, простите?
Alexey
15.09.2017
10:02:36
гемор на 1 раз и весь код красивый
Option(co.get(key)) match {
case Some(publishingCv) =>
val publishingOpt: Option[Boolean] = publishingCv.unwrapped() match {
case x: java.lang.Boolean => Some(x)
case x: String => Try(x.toBoolean).toOption
case _ => None
}
вот это полный абзац канешн
Grigory
15.09.2017
10:04:30
Alexey
15.09.2017
10:04:58
implicit val booleanConfigReader = ConfigReader.fromNonEmptyString[Boolean](catchReadError({
case "yes" | "on" => true
case "no" | "off" => false
case other => other.toBoolean
}))
omfg ?
Grigory
15.09.2017
10:05:39
но думаю таким макаром можно определить и снейк кейс конвертер
Юрий
15.09.2017
10:06:35
Vyatcheslav
15.09.2017
10:10:28
https://gist.github.com/vsuharnikov/67bace790e3afbc5e1fd592f00a5215f уверен, можно и по-красивше сделать :)
Юрий
15.09.2017
10:14:40
Vyatcheslav
15.09.2017
10:16:45
Ну я так, прототип накидал. С такой проверкой код немного усложнится, но суть останется та же:
1. Достаем это булевское значение
2.а. Если true - пытаемся конфиг прочитать как Foo
2.б. Если false - возвращаем Bar
Юрий
15.09.2017
10:18:13
так у меня так и есть. Просто всё это очень развесисто, потому что много проверок, и каждаяя проверка генерит свою ошибку.
Плюс у меня там не только чтение, но и запись
в либе не хватает какого-то middle уровня, где уже не торчит голый typesafe config, но и при этом еще и не высокороуровневое апи
Google
Kirill
15.09.2017
10:37:54
@gurinderu ты, кажется, упоминал datadog. Нормальная штука?
Nick
15.09.2017
10:38:40
нормальная
Алексей
15.09.2017
10:39:02
своих денег стоит ИМХО
Kirill
15.09.2017
10:39:18
какие альтернативы? кроме graphite
Nick
15.09.2017
10:39:47
inluxdata stack
elk
prometeus )
zabbix
nagios
Kirill
15.09.2017
10:40:30
а про такие слышал: granglia/statsD ?
Nick
15.09.2017
10:40:31
да их кароч миллион)
нет
Kirill
15.09.2017
10:40:52
не, у меня то просто есть на выбор несколько, хочу понять что из них норм, а что нет )
Nick
15.09.2017
10:41:14
если платное, то бери собаку и не парься
Алексей
15.09.2017
10:41:23
+1
Kirill
15.09.2017
10:42:09
я бы взял графит, но там getting started меня уже отпугнул своей сложностью установки криваярожа
Алексей
15.09.2017
10:42:19
docker?)
Artem
15.09.2017
10:42:22
docker