4
4
"fmt"
5
5
6
6
"github.com/prometheus/client_golang/prometheus"
7
- "tailscale.com/util/clientmetric"
8
7
)
9
8
10
9
type sshServerMetrics struct {
@@ -83,56 +82,133 @@ func newSSHServerMetrics(registerer prometheus.Registerer) *sshServerMetrics {
83
82
}
84
83
}
85
84
86
- var sessionMetrics = map [string ]sessionMetricsObject {}
87
-
88
85
type sessionMetricsObject struct {
89
86
// Agent sessions
90
- agentCreateCommandError * clientmetric. Metric
91
- agentListenerError * clientmetric. Metric
92
- startPTYSession * clientmetric. Metric
93
- startNonPTYSession * clientmetric. Metric
94
- sessionError * clientmetric. Metric
87
+ agentCreateCommandError prometheus. Counter
88
+ agentListenerError prometheus. Counter
89
+ startPTYSession prometheus. Counter
90
+ startNonPTYSession prometheus. Counter
91
+ sessionError prometheus. Counter
95
92
96
93
// Non-PTY sessions
97
- nonPTYStdinPipeError * clientmetric. Metric
98
- nonPTYStdinIoCopyError * clientmetric. Metric
99
- nonPTYCmdStartError * clientmetric. Metric
94
+ nonPTYStdinPipeError prometheus. Counter
95
+ nonPTYStdinIoCopyError prometheus. Counter
96
+ nonPTYCmdStartError prometheus. Counter
100
97
101
98
// PTY sessions
102
- ptyMotdError * clientmetric. Metric
103
- ptyCmdStartError * clientmetric. Metric
104
- ptyCloseError * clientmetric. Metric
105
- ptyResizeError * clientmetric. Metric
106
- ptyInputIoCopyError * clientmetric. Metric
107
- ptyOutputIoCopyError * clientmetric. Metric
108
- ptyWaitError * clientmetric. Metric
99
+ ptyMotdError prometheus. Counter
100
+ ptyCmdStartError prometheus. Counter
101
+ ptyCloseError prometheus. Counter
102
+ ptyResizeError prometheus. Counter
103
+ ptyInputIoCopyError prometheus. Counter
104
+ ptyOutputIoCopyError prometheus. Counter
105
+ ptyWaitError prometheus. Counter
109
106
}
110
107
111
- func init () {
108
+ type sessionMetrics map [string ]sessionMetricsObject
109
+
110
+ func newSessionMetrics (registerer prometheus.Registerer ) sessionMetrics {
111
+ sm := sessionMetrics {}
112
112
for _ , magicType := range []string {MagicSessionTypeVSCode , MagicSessionTypeJetBrains , "ssh" , "unknown" } {
113
- sessionMetrics [magicType ] = sessionMetricsObject {
114
- agentCreateCommandError : clientmetric .NewCounter (fmt .Sprintf ("ssh_agent_%s_create_command_error" , magicType )),
115
- agentListenerError : clientmetric .NewCounter (fmt .Sprintf ("ssh_agent_%s_listener_error" , magicType )),
116
- startPTYSession : clientmetric .NewCounter (fmt .Sprintf ("ssh_agent_%s_start_pty_session" , magicType )),
117
- startNonPTYSession : clientmetric .NewCounter (fmt .Sprintf ("ssh_agent_%s_start_non_pty_session" , magicType )),
118
- sessionError : clientmetric .NewCounter (fmt .Sprintf ("ssh_agent_%s_session_error" , magicType )),
119
-
120
- nonPTYStdinPipeError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_non_pty_stdin_pipe_error" , magicType )),
121
- nonPTYStdinIoCopyError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_non_pty_stdin_io_copy_error" , magicType )),
122
- nonPTYCmdStartError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_non_pty_cmd_start_error" , magicType )),
123
-
124
- ptyMotdError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_pty_motd_error" , magicType )),
125
- ptyCmdStartError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_pty_cmd_start_error" , magicType )),
126
- ptyCloseError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_pty_close_error" , magicType )),
127
- ptyResizeError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_pty_resize_error" , magicType )),
128
- ptyInputIoCopyError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_pty_input_io_copy_error" , magicType )),
129
- ptyOutputIoCopyError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_pty_output_io_copy_error" , magicType )),
130
- ptyWaitError : clientmetric .NewCounter (fmt .Sprintf ("ssh_server_%s_pty_wait_error" , magicType )),
113
+ agentCreateCommandError := prometheus .NewCounter (prometheus.CounterOpts {
114
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "create_command_error" ,
115
+ })
116
+ registerer .MustRegister (agentCreateCommandError )
117
+
118
+ agentListenerError := prometheus .NewCounter (prometheus.CounterOpts {
119
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "listener_error" ,
120
+ })
121
+ registerer .MustRegister (agentListenerError )
122
+
123
+ startPTYSession := prometheus .NewCounter (prometheus.CounterOpts {
124
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "start_pty_session" ,
125
+ })
126
+ registerer .MustRegister (startPTYSession )
127
+
128
+ startNonPTYSession := prometheus .NewCounter (prometheus.CounterOpts {
129
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "start_non_pty_session" ,
130
+ })
131
+ registerer .MustRegister (startNonPTYSession )
132
+
133
+ sessionError := prometheus .NewCounter (prometheus.CounterOpts {
134
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "session_error" ,
135
+ })
136
+ registerer .MustRegister (sessionError )
137
+
138
+ nonPTYStdinPipeError := prometheus .NewCounter (prometheus.CounterOpts {
139
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "non_pty_stdin_pipe_error" ,
140
+ })
141
+ registerer .MustRegister (nonPTYStdinPipeError )
142
+
143
+ nonPTYStdinIoCopyError := prometheus .NewCounter (prometheus.CounterOpts {
144
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "non_pty_io_copy_error" ,
145
+ })
146
+ registerer .MustRegister (nonPTYStdinIoCopyError )
147
+
148
+ nonPTYCmdStartError := prometheus .NewCounter (prometheus.CounterOpts {
149
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "non_pty_io_start_error" ,
150
+ })
151
+ registerer .MustRegister (nonPTYCmdStartError )
152
+
153
+ ptyMotdError := prometheus .NewCounter (prometheus.CounterOpts {
154
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "pty_motd_error" ,
155
+ })
156
+ registerer .MustRegister (ptyMotdError )
157
+
158
+ ptyCmdStartError := prometheus .NewCounter (prometheus.CounterOpts {
159
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "pty_cmd_start_error" ,
160
+ })
161
+ registerer .MustRegister (ptyCmdStartError )
162
+
163
+ ptyCloseError := prometheus .NewCounter (prometheus.CounterOpts {
164
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "pty_close_error" ,
165
+ })
166
+ registerer .MustRegister (ptyCloseError )
167
+
168
+ ptyResizeError := prometheus .NewCounter (prometheus.CounterOpts {
169
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "pty_resize_error" ,
170
+ })
171
+ registerer .MustRegister (ptyResizeError )
172
+
173
+ ptyInputIoCopyError := prometheus .NewCounter (prometheus.CounterOpts {
174
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "pty_input_io_copy_error" ,
175
+ })
176
+ registerer .MustRegister (ptyInputIoCopyError )
177
+
178
+ ptyOutputIoCopyError := prometheus .NewCounter (prometheus.CounterOpts {
179
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "pty_output_io_copy_error" ,
180
+ })
181
+ registerer .MustRegister (ptyOutputIoCopyError )
182
+
183
+ ptyWaitError := prometheus .NewCounter (prometheus.CounterOpts {
184
+ Namespace : "agent" , Subsystem : fmt .Sprintf ("ssh_session_%s" , magicType ), Name : "pty_wait_error" ,
185
+ })
186
+ registerer .MustRegister (ptyWaitError )
187
+
188
+ sm [magicType ] = sessionMetricsObject {
189
+ agentCreateCommandError : agentCreateCommandError ,
190
+ agentListenerError : agentListenerError ,
191
+ startPTYSession : startPTYSession ,
192
+ startNonPTYSession : startNonPTYSession ,
193
+ sessionError : sessionError ,
194
+
195
+ nonPTYStdinPipeError : nonPTYStdinPipeError ,
196
+ nonPTYStdinIoCopyError : nonPTYStdinIoCopyError ,
197
+ nonPTYCmdStartError : nonPTYCmdStartError ,
198
+
199
+ ptyMotdError : ptyMotdError ,
200
+ ptyCmdStartError : ptyCmdStartError ,
201
+ ptyCloseError : ptyCloseError ,
202
+ ptyResizeError : ptyResizeError ,
203
+ ptyInputIoCopyError : ptyInputIoCopyError ,
204
+ ptyOutputIoCopyError : ptyOutputIoCopyError ,
205
+ ptyWaitError : ptyWaitError ,
131
206
}
132
207
}
208
+ return sm
133
209
}
134
210
135
- func metricsForSession (magicType string ) sessionMetricsObject {
211
+ func metricsForSession (m sessionMetrics , magicType string ) sessionMetricsObject {
136
212
switch magicType {
137
213
case MagicSessionTypeVSCode :
138
214
case MagicSessionTypeJetBrains :
@@ -141,5 +217,5 @@ func metricsForSession(magicType string) sessionMetricsObject {
141
217
default :
142
218
magicType = "unknown"
143
219
}
144
- return sessionMetrics [magicType ]
220
+ return m [magicType ]
145
221
}
0 commit comments