рдпрд╣рд╛рдВ рд╕рдорд╡рд░реНрддреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ: рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдШрдЯрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдирдХреА рдШрдЯрдирд╛ рдХреЗ рдХрд╛рд░рдг рдФрд░ рд╕рдордп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдХреНрд╕рд░ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж):

рдЗрд╕ рдЖрд░реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдирд╛рдВрддрд░ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлреНрд░реЗрдб, рдмреЙрдм, рд╣рд╛рдВрдХ рдФрд░ рд░реЗрдиреА рдПрдХ рд░реЗрд╕реНрддрд░рд╛рдВ рдореЗрдВ рд╣реИрдВред рд╣рд░ рдХреЛрдИ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдЧрдЬ рдкрд░ рдПрдХ рд╕рдорд╛рди рдЖрд░реЗрдЦ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреЗрдкрд░ рд╕реНрдХреЗрдЪ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдЪ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреНрд░реЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЖрд░реЗрдЦ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЦреИрд░, рдПрд░реНрд▓реИрдВрдЧ рдЗрд╕рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред
рдореИрдВ рдХреБрдЫ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реВрдВ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред
рдЪрд░рдг 1. рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдБ
рдкрд╣рд▓рд╛ рдЪрд░рдг рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИред рдореЗрд░рд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ "utp" рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
report_event(DetailLevel, FromTo, Label, Contents) ->
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИред рдпрд╣ рдкрд╛рдВрдЪ рддрд░реНрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реНрдЯрдм рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "Hopefully_traced" рдХрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдордирдорд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреНрдпрд╛ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рддрд░реНрдХреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг:
- DetailLevel: 0 рд╕реЗ 100 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдпрд╣ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдорд╣рддреНрд╡ рдХреЗ рд╕реНрддрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдЪреНрдЪ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ, рд╣рдо рдЕрдиреБрд░реЗрдЦрдХ рдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рднрд╛рдЧ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрддрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
- рд╕реЗ: рдШрдЯрдирд╛ рд╕реНрд░реЛрддред
- To: рдЬрд┐рд╕реЗ рдШрдЯрдирд╛ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред
- рд▓реЗрдмрд▓: рд╕рдВрджреЗрд╢ рдХрд╛ рдкрд░рд┐рдореЗрдп рд▓реЗрдмрд▓ред
- рд╕рд╛рдордЧреНрд░реА: рдЬрдм рдШрдЯрдирд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪрд╛рд░реНрдЯ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 2. рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЯреНрд░реЗрд╕ рдХреА рдШрдЯрдирд╛рдУрдВ
рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо "utp: report_event / 5" рдХрд╣рддреЗ рд╣реИрдВ (рд╣рдо рдпрд╣рд╛рдВ рдЪрд░рдг 1 рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рд╣рдо рдПрд░реНрд▓рд╛рдВрдЧ рдЯреНрд░реЗрд╕ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмрд╛рддрдЪреАрдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
trace_test() -> Events = [{fred, bob, order_food}, {bob, hank, order_food}, {bob, fred, serve_wine}, {hank, bob, pickup}, {bob, fred, serve_feed}, {fred, renee, pay}], [utp:report_event(50, F, T, L, []) || {F,T,L} <- Events].
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХреЙрд▓ рдХрд░рдХреЗ рдХреБрдЫ рднреА рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рдбрд┐рдмрдЧрд┐рдВрдЧ рдмреНрд▓реЙрдХ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрд╣реАрдВ рднреА рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдереЛрдбрд╝рд╛ рдКрдкрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ рдореИрдВ рдШрдЯрдирд╛рдУрдВ рдФрд░ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕реНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрд░реНрд▓реИрдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди "рдПрдЯ" рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╣реА рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ "utp_filter" рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХреЙрд▓ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ:
start(ExtraOptions) -> Options = [{event_order, event_ts}, {scale, 2}, {max_actors, 10}, {detail_level, 90}, {actors, [fred, bob, hank, renee]}, {trace_pattern, {utp, max}}, {trace_global, true}, {title, "uTP tracer"} | ExtraOptions], et_viewer:start(Options).
рдпрд╣ рдореЙрдбреНрдпреВрд▓ et_viewer рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдХреНрд░рдо - "Event_ts" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рдШрдЯрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╡реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрд╕ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЯреНрд░реЗрд╕_рдкреИрдЯрд░реНрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рдЖрдкрдХреЛ "utp: report_event / 5" рдХреЙрд▓ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдИрд╡реЗрдВрдЯ рд╕реНрд╡рдпрдВ рдЙрдиреНрд╣реЗрдВ рдЪреБрди рд▓реЗрдВрдЧреЗред рдмрд╕ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рдд рд╣реИред
рдЪрд░рдг 4. рдкрд░реАрдХреНрд╖рдг
рдЕрдЧрд░ рд╣рдо "utp_filter: start ([])" рдХреЛ "рдПрдЯ рд╡реНрдпреВрдЕрд░" рдХрд╣рдХрд░ рдЪрд░рдг 3 рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЪрд░рдг 2 рд╕реЗ рдЯреНрд░реЗрд╕ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рдпрд╣ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреАрд╕реАрдкреА рд╕реНрдЯреИрдХ "рдпреВрдЯреАрдкреА" рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдореЗрдВ рдмрдЧреНрд╕ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

(рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЪрд╛рд░реНрдЯ рдЫреЛрдЯрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ - рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд░реНрдЯ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдзрд┐ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ :)ред рдЯреАрд╕реАрдкреА рдЬреИрд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ: tcpdump (1) рдФрд░ рд╕реНрдЯреНрд░реЗрд╕ (1), рд╕рд╛рде рд╣реА рдПрдХ рдЖрд░реЗрдЦ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ред рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдмрдЧ рдкрд╛рдПред
рд╡рд╣ рд╕рдм рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЯреНрд░реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдУрд╡рд░рд╣реЗрдб рдирдЧрдгреНрдп рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЖрд╡реЗрджрди - рд╢рдмреНрдж Erlang / OTP,
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ