Size: a a a

2018 October 18

D

Dmitry in pro.elixir
Вообще тут правильно говорят. Стоит переписать функцию которая вызывается в аттрибутах или создать другую без пост-пре обработчиков. Если проверять внутри это функции compile-time или нет, то налицо явно нарушение soliD-принципа
источник

PS

Petr Stepchenko in pro.elixir
@VladPotap можно что-то типа такого попробовать
https://thepugautomatic.com/2015/09/testing-compile-time-exceptions-in-elixir/
источник

AF

Alexander Fyodorov in pro.elixir
а @on_definition + Module.put_attribute не поможет?
источник

VP

Vladimir Potapev in pro.elixir
Petr Stepchenko
@VladPotap можно что-то типа такого попробовать
https://thepugautomatic.com/2015/09/testing-compile-time-exceptions-in-elixir/
Да, любопытно, спасибо. Вроде что-то есть.
источник

VP

Vladimir Potapev in pro.elixir
Alexander Fyodorov
а @on_definition + Module.put_attribute не поможет?
Не, это же только для функций, afaik.
источник

AF

Alexander Fyodorov in pro.elixir
а можешь дать минимальный код того что делаете? сложно нарезать?
источник

VP

Vladimir Potapev in pro.elixir
не, не смогу. =) нарезать будет сложновато и весь код под nda.
источник

VP

Vladimir Potapev in pro.elixir
Но это такое... из серии "хочется странного". :) Как только компилятор даёт возможность трансформировать AST, сразу начинается вот это вот)
источник

AF

Alexander Fyodorov in pro.elixir
а модуль с помощью которого навешиваете хуки вы сами написали или готовый чей-то?
источник

VP

Vladimir Potapev in pro.elixir
Alexander Fyodorov
а модуль с помощью которого навешиваете хуки вы сами написали или готовый чей-то?
источник

VP

Vladimir Potapev in pro.elixir
как раз пример навеса пре и пост функций
источник

FM

Fey Martynov in pro.elixir
если явсё правильно понял, можно в модуль, который использует либу засадить @before_compile хук, в котором засадить флажок в дикт процесса, типа Process.put(:compile_time, true), а затем уже в пре/пост-хуках его проверять
источник

FM

Fey Martynov in pro.elixir
defmodule CompileTimeTrap do
 defmacro __before_compile__(_env) do
   quote do
     Process.put(:compile_time, true)
   end
 end
end

defmodule Test do
 @before_compile CompileTimeTrap

 use ExRay, pre: :pre_fun

 defp pre_fun(ctx) do
   if Process.get(:compile_time) do
     # ...
   end
 end
end
источник

B

Buckler in pro.elixir
Привет, Semyon!

Пожалуйста, реши капчу:

Вычисли: 67+47=...

Осталось попыток: 3
Если не решишь - забаню навеки...
Удачи!
источник

AM

Alexander Malaev in pro.elixir
Fey Martynov
defmodule CompileTimeTrap do
 defmacro __before_compile__(_env) do
   quote do
     Process.put(:compile_time, true)
   end
 end
end

defmodule Test do
 @before_compile CompileTimeTrap

 use ExRay, pre: :pre_fun

 defp pre_fun(ctx) do
   if Process.get(:compile_time) do
     # ...
   end
 end
end
немного не сработает, есть 2 модуля:
elixir
defmodule SomeModule do
 use Tracer
 @valid_types OtherModule.valid_types()

 def some_func(arg) when arg in @valid_types do
 end
end

второй:
de
fmodule OtherModule do
 use Tracer

 def valid_types(arg), do: [1,2,3]
end

ну и вобщем когда первый компилируется - вызывается pre_func 🙂 Я бы предложил пушить в рантайме в env tracer_started переменную, которую тянуть уже из pre_func и запускать трейсер в зависимости от неё, а в идеале просто обернуть это в контракт и если трейсер выключен - не использовать модуль трейсера, а использовать заглушку.
источник

AM

Alexander Malaev in pro.elixir
в конкретном кейсе, с чем столкнулся Вова, в компайл-тайме идет обращение к ets и вызов падает, из-за этого не компилится
источник

S

Serge in pro.elixir
Привет всем! Народ, подскажите, что лучше использовать для сбора метрик?
источник

AK

Alexey Krylov in pro.elixir
new relic, sentry?
источник

AK

Alexey Krylov in pro.elixir
или в стиле yandex.metrika имеется в виду?
источник
2018 October 19

S

Serge in pro.elixir
я имею в виду сбор системных и кастомных метрик, который можно реализовать через Graphite, InfluxDB, Datadog и тд.
Мне интересно, кто чем пользуется на продакшне
источник