1
+ # defmodule NextLS.OpentelemetrySchematic do
2
+ # @moduledoc false
3
+ # require Logger
4
+
5
+ # @tracer_id __MODULE__
6
+
7
+ # def setup do
8
+ # :ok =
9
+ # :telemetry.attach_many(
10
+ # "schematic-handler",
11
+ # [
12
+ # [:schematic, :unify, :start],
13
+ # [:schematic, :unify, :stop]
14
+ # ],
15
+ # &__MODULE__.process/4,
16
+ # nil
17
+ # )
18
+ # end
19
+
20
+ # def process([:schematic, :unify, :start], _measurements, metadata, _config) do
21
+ # OpentelemetryTelemetry.start_telemetry_span(
22
+ # @tracer_id,
23
+ # :"schematic.unify.#{metadata.kind} #{metadata.dir}",
24
+ # metadata,
25
+ # %{kind: :server, attributes: metadata}
26
+ # )
27
+ # end
28
+
29
+ # def process([:schematic, :unify, :stop], _measurements, metadata, _config) do
30
+ # OpentelemetryTelemetry.set_current_telemetry_span(@tracer_id, metadata)
31
+ # OpentelemetryTelemetry.end_telemetry_span(@tracer_id, metadata)
32
+ # end
33
+ # end
34
+
35
+ # defmodule NextLS.OpentelemetryGenLSP do
36
+ # @moduledoc false
37
+ # require Logger
38
+ # require OpenTelemetry.Tracer, as: Tracer
39
+
40
+ # @tracer_id __MODULE__
41
+
42
+ # def setup do
43
+ # :ok =
44
+ # :telemetry.attach_many(
45
+ # "gen-lsp-handler",
46
+ # [
47
+ # [:gen_lsp, :loop, :start],
48
+ # [:gen_lsp, :loop, :stop],
49
+ # [:gen_lsp, :notification, :emit],
50
+ # [:gen_lsp, :info, :start],
51
+ # [:gen_lsp, :info, :stop],
52
+ # [:gen_lsp, :buffer, :read],
53
+ # [:gen_lsp, :buffer, :write]
54
+ # ],
55
+ # &__MODULE__.process/4,
56
+ # nil
57
+ # )
58
+ # end
59
+
60
+ # def process([:gen_lsp, :buffer, :read], _measurements, metadata, _config) do
61
+ # OpenTelemetry.Ctx.clear()
62
+
63
+ # OpentelemetryTelemetry.start_telemetry_span(@tracer_id, :"gen_lsp.read", metadata, %{
64
+ # kind: :server,
65
+ # attributes: metadata
66
+ # })
67
+ # end
68
+
69
+ # def process([:gen_lsp, :loop, :start], _measurements, metadata, _config) do
70
+ # parent_context = OpentelemetryProcessPropagator.fetch_parent_ctx(1, :"$callers")
71
+
72
+ # if parent_context != :undefined do
73
+ # OpenTelemetry.Ctx.attach(parent_context)
74
+ # end
75
+
76
+ # Tracer.update_name(:"gen_lsp.receive.#{metadata.type} #{metadata.method}")
77
+ # end
78
+
79
+ # def process([:gen_lsp, :loop, :stop], _measurements, %{type: :request, reply: true} = _metadata, _config) do
80
+ # OpenTelemetry.Ctx.clear()
81
+ # end
82
+
83
+ # def process([:gen_lsp, :loop, :stop], _measurements, metadata, _config) do
84
+ # OpentelemetryTelemetry.set_current_telemetry_span(@tracer_id, metadata)
85
+ # OpentelemetryTelemetry.end_telemetry_span(@tracer_id, metadata)
86
+ # OpenTelemetry.Ctx.clear()
87
+ # end
88
+
89
+ # def process([:gen_lsp, :notification, :emit], _measurements, metadata, _config) do
90
+ # OpentelemetryTelemetry.start_telemetry_span(
91
+ # @tracer_id,
92
+ # :"gen_lsp.send.notification #{metadata.method}",
93
+ # metadata,
94
+ # %{
95
+ # kind: :server,
96
+ # attributes: metadata
97
+ # }
98
+ # )
99
+ # end
100
+
101
+ # def process([:gen_lsp, :buffer, :write], _measurements, metadata, _config) do
102
+ # parent_context = OpentelemetryProcessPropagator.fetch_parent_ctx(1, :"$callers")
103
+
104
+ # if parent_context != :undefined do
105
+ # OpenTelemetry.Ctx.attach(parent_context)
106
+ # end
107
+
108
+ # OpentelemetryTelemetry.set_current_telemetry_span(@tracer_id, metadata)
109
+ # OpentelemetryTelemetry.end_telemetry_span(@tracer_id, metadata)
110
+ # OpenTelemetry.Ctx.clear()
111
+ # end
112
+ # end
113
+
1
114
defmodule NextLS.Application do
2
115
# See https://hexdocs.pm/elixir/Application.html
3
116
# for more information on OTP Applications
@@ -7,6 +120,9 @@ defmodule NextLS.Application do
7
120
8
121
@ impl true
9
122
def start ( _type , _args ) do
123
+
124
+ Logger . add_handlers ( :next_ls )
125
+
10
126
case System . cmd ( "epmd" , [ "-daemon" ] , stderr_to_stdout: true ) do
11
127
{ _ , 0 } ->
12
128
:ok
@@ -19,11 +135,22 @@ defmodule NextLS.Application do
19
135
20
136
Node . start ( :"next-ls-#{ System . system_time ( ) } " , :shortnames )
21
137
22
- children = [ NextLS.LSPSupervisor ]
138
+ children = [
139
+ { Registry , name: NextLS.UI.Registry , keys: :duplicate } ,
140
+ WebDevUtils.FileSystem ,
141
+ WebDevUtils.CodeReloader ,
142
+ NextLS.LSPSupervisor
143
+ ]
23
144
24
145
# See https://hexdocs.pm/elixir/Supervisor.html
25
146
# for other strategies and supported options
26
147
opts = [ strategy: :one_for_one , name: NextLS.Supervisor ]
27
- Supervisor . start_link ( children , opts )
148
+ Supervisor . start_link ( children ++ asset_children ( ) , opts )
149
+ end
150
+
151
+ def asset_children do
152
+ for conf <- Application . get_env ( :next_ls , :assets , [ ] ) do
153
+ { WebDevUtils.Assets , conf }
154
+ end
28
155
end
29
156
end
0 commit comments