Size: a a a

2020 May 26

VI

Victor Ivanov in pro.elixir
да, так лучше будет
источник

P

Pavel in pro.elixir
благо 1.5 нативно поддерживает :telemetry, ну и прометеус плагин для :telemetry хороший в принципе
источник

VI

Victor Ivanov in pro.elixir
вот с плагином, кстати, не подскажешь – какую либу выбрать?
источник

VI

Victor Ivanov in pro.elixir
> хороший в принципе
это вот про какой из них?
источник

P

Pavel in pro.elixir
источник

VI

Victor Ivanov in pro.elixir
ага, все-таки этот. спасиб!
источник

AB

Alexey Bolshakov in pro.elixir
Victor Ivanov
я лезу в нутря феникса, чтоб по быстрому получить число коннектов к определенному каналу
знакомая задача
источник

AB

Alexey Bolshakov in pro.elixir
Źmićer Rubinštejn
Может я чего-то в этой жизни не понимаю, но по-моему в фениксе встроенный функционал для такого
я тоже сначала с пресенс пробовал. не очень оно пододит
источник

AB

Alexey Bolshakov in pro.elixir
проблема там в том, чтобы получить тупо активное количество коннектов tcp. потому что джойны ловятся, а вот дисконнекты нет. не во всех случаях. не помню уже деталей. поэтому там количество коннектов только растет. а плагин для прометеуса, там тоже много инфы, но именно числа TCP коннектов не нашел. а имеющуюся там сбор статистики по каналам мне пришлось отключить. потому что каналов активных столько, что производительности уже не хватает, отдавать это прометеусу раз в 10 секунд. проц в 100% на длительное время
источник

AB

Alexey Bolshakov in pro.elixir
Victor Ivanov
Кто-нибудь знает, есть ли более быстрый способ достать неименнованную ets табличку?
acc = fn {channel, _}, map -> Map.update(map, channel, 1, &(&1 + 1)) end
table_names = [App.PubSub.KeyPartition0, App.PubSub.KeyPartition1]

:ets.all()
|> Enum.filter(fn x -> x != :undefined end)
|> Enum.map(fn x -> :ets.info(x) end)
|> Enum.filter(fn x -> Enum.member?(table_names, Keyword.get(x, :name)) end)
|> Enum.map(fn x -> :ets.foldl(acc, %{}, Keyword.get(x, :id)) end)
|> Enum.map(fn x -> x["log:everyone"] || 0 end)
|> Enum.sum()
я доставал через  :ets.lookup если теперь переделывать надо, то пичаль бида
источник

VI

Victor Ivanov in pro.elixir
Alexey Bolshakov
проблема там в том, чтобы получить тупо активное количество коннектов tcp. потому что джойны ловятся, а вот дисконнекты нет. не во всех случаях. не помню уже деталей. поэтому там количество коннектов только растет. а плагин для прометеуса, там тоже много инфы, но именно числа TCP коннектов не нашел. а имеющуюся там сбор статистики по каналам мне пришлось отключить. потому что каналов активных столько, что производительности уже не хватает, отдавать это прометеусу раз в 10 секунд. проц в 100% на длительное время
хм, не знаю, у меня норм работает все, и для join, и для leave. На презенс у меня как раз часть логики приложения построена, я пишу timestamp'ы в базу, а рельса там что-то вычисляет (феникс только для сокетов живет рядом с большим рельсовым приложением)

но сейчас вот прочитал про детально описаное решение с monitor https://medium.com/@fxn/monitoring-websocket-disconnections-in-phoenix-bbe24f54d996 и буду наверное на него переписывать, потому что при ~5000 онлайн у меня процесс, который слушает join/leave получается узким местом, и у него иногда очередь в mailbox
источник

AB

Alexey Bolshakov in pro.elixir
Victor Ivanov
хм, не знаю, у меня норм работает все, и для join, и для leave. На презенс у меня как раз часть логики приложения построена, я пишу timestamp'ы в базу, а рельса там что-то вычисляет (феникс только для сокетов живет рядом с большим рельсовым приложением)

но сейчас вот прочитал про детально описаное решение с monitor https://medium.com/@fxn/monitoring-websocket-disconnections-in-phoenix-bbe24f54d996 и буду наверное на него переписывать, потому что при ~5000 онлайн у меня процесс, который слушает join/leave получается узким местом, и у него иногда очередь в mailbox
у меня была проблема с корректным определением leave. а коннектов до 1500 на машину
источник

AB

Alexey Bolshakov in pro.elixir
просто каналов очень много, поэтому пришлось поотключать все, что там по умолчанию в метрики вываливается. иначе ВМ не успевает это все собирать и отдавать
config :prometheus, collectors: []
источник

S

Solopa in pro.elixir
Ребята, кто имел дело с релизами в доккере? никак не могу понять как мне прокинуть в приложение ENV переменные.
Сейчас у меня есть они на момент сборки релиза(mix release) в контейнере, и в файле releases.exs:

config :my_app, :config,
 option_a: System.fetch_env!("OPTION_A"),


потом я в файле достаю этот конфиг:

 @option_a Application.get_env(:my_app, :config)[:option_a]

и он(@option_a) оказывается пустой когда приложение уже запущено
источник

Z

Zae in pro.elixir
Solopa
Ребята, кто имел дело с релизами в доккере? никак не могу понять как мне прокинуть в приложение ENV переменные.
Сейчас у меня есть они на момент сборки релиза(mix release) в контейнере, и в файле releases.exs:

config :my_app, :config,
 option_a: System.fetch_env!("OPTION_A"),


потом я в файле достаю этот конфиг:

 @option_a Application.get_env(:my_app, :config)[:option_a]

и он(@option_a) оказывается пустой когда приложение уже запущено
атрибуты устанавливаются в компайл тайме
источник

Z

Zae in pro.elixir
так что у вас там будет nil или какое то другое значение, а releases вызывается при запуске бинарника, можно вынести атрибут в функцию которая будет возвращать get_env и будет работать
источник

S

Solopa in pro.elixir
Zae
так что у вас там будет nil или какое то другое значение, а releases вызывается при запуске бинарника, можно вынести атрибут в функцию которая будет возвращать get_env и будет работать
атрибуты модулей?
А если воспользоваться Application.compile_env?
источник

Z

Zae in pro.elixir
Solopa
атрибуты модулей?
А если воспользоваться Application.compile_env?
ну он тоже будет пустой тогда потому что compile_env в этом случае будет возвращать то же самое, у вас releases вызывается не в компайл тайме а при каждом запуске приложения
источник

Z

Zae in pro.elixir
поэтому там не будет переменных из releases
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Нельзя @ пользоваться
источник