@@ -155,6 +155,11 @@ func (e *Exporter) scrape(ch chan<- prometheus.Metric) {
155
155
e .scrapeErrors .WithLabelValues ("wait_time" ).Inc ()
156
156
}
157
157
158
+ if err = DeprecatedScrapeSessions (db , ch ); err != nil {
159
+ log .Errorln ("Error scraping for sessions:" , err )
160
+ e .scrapeErrors .WithLabelValues ("sessions" ).Inc ()
161
+ }
162
+
158
163
if err = ScrapeSessions (db , ch ); err != nil {
159
164
log .Errorln ("Error scraping for sessions:" , err )
160
165
e .scrapeErrors .WithLabelValues ("sessions" ).Inc ()
@@ -163,7 +168,8 @@ func (e *Exporter) scrape(ch chan<- prometheus.Metric) {
163
168
}
164
169
165
170
// ScrapeSessions collects session metrics from the v$session view.
166
- func ScrapeSessions (db * sql.DB , ch chan <- prometheus.Metric ) error {
171
+ // DEPRECATED
172
+ func DeprecatedScrapeSessions (db * sql.DB , ch chan <- prometheus.Metric ) error {
167
173
var err error
168
174
var activeCount float64
169
175
var inactiveCount float64
@@ -176,7 +182,7 @@ func ScrapeSessions(db *sql.DB, ch chan<- prometheus.Metric) error {
176
182
177
183
ch <- prometheus .MustNewConstMetric (
178
184
prometheus .NewDesc (prometheus .BuildFQName (namespace , "sessions" , "active" ),
179
- "Gauge metric with count of sessions marked ACTIVE" , []string {}, nil ),
185
+ "Gauge metric with count of sessions marked ACTIVE. DEPRECATED: use sum(oracledb_sessions_activity{status='ACTIVE}) instead. " , []string {}, nil ),
180
186
prometheus .GaugeValue ,
181
187
activeCount ,
182
188
)
@@ -188,14 +194,48 @@ func ScrapeSessions(db *sql.DB, ch chan<- prometheus.Metric) error {
188
194
189
195
ch <- prometheus .MustNewConstMetric (
190
196
prometheus .NewDesc (prometheus .BuildFQName (namespace , "sessions" , "inactive" ),
191
- "Gauge metric with count of sessions marked INACTIVE." , []string {}, nil ),
197
+ "Gauge metric with count of sessions marked INACTIVE. DEPRECATED: use sum(oracledb_sessions_activity{status='INACTIVE'}) instead. " , []string {}, nil ),
192
198
prometheus .GaugeValue ,
193
199
inactiveCount ,
194
200
)
195
201
196
202
return nil
197
203
}
198
204
205
+ // ScrapeSessions collects session metrics from the v$session view.
206
+ func ScrapeSessions (db * sql.DB , ch chan <- prometheus.Metric ) error {
207
+ var (
208
+ rows * sql.Rows
209
+ err error
210
+ )
211
+ // Retrieve status and type for all sessions.
212
+ rows , err = db .Query ("SELECT status, type, COUNT(*) FROM v$session GROUP BY status, type" )
213
+ if err != nil {
214
+ return err
215
+ }
216
+
217
+ defer rows .Close ()
218
+ for rows .Next () {
219
+ var (
220
+ status string
221
+ sessionType string
222
+ count float64
223
+ )
224
+ if err := rows .Scan (& status , & sessionType , & count ); err != nil {
225
+ return err
226
+ }
227
+ ch <- prometheus .MustNewConstMetric (
228
+ prometheus .NewDesc (prometheus .BuildFQName (namespace , "sessions" , "activity" ),
229
+ "Gauge metric with count of sessions by status and type" , []string {"status" , "type" }, nil ),
230
+ prometheus .GaugeValue ,
231
+ count ,
232
+ status ,
233
+ sessionType ,
234
+ )
235
+ }
236
+ return nil
237
+ }
238
+
199
239
// ScrapeWaitTime collects wait time metrics from the v$waitclassmetric view.
200
240
func ScrapeWaitTime (db * sql.DB , ch chan <- prometheus.Metric ) error {
201
241
var (
0 commit comments