site24x7_apminsight 1.9.2 → 1.9.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/agent/handler/sequence_book.rb +32 -28
- data/lib/agent/metrics/am_metricsformatter.rb +43 -5
- data/lib/agent/metrics/am_metricsparser.rb +143 -79
- data/lib/agent/server/instrument/rails.rb +21 -12
- data/lib/agent/trackers/database_tracker.rb +14 -1
- data/lib/agent/trackers/default_tracker.rb +33 -2
- data/lib/agent/trackers/root_tracker.rb +15 -10
- data/lib/agent/util/am_constants.rb +12 -0
- data/lib/agent/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef71f92d00c156ed7effd7fa726820409f00bab68076033c970d6ceec197c8d5
|
4
|
+
data.tar.gz: '095a029352700363cfdc03029946c7d76d1e529c5e9d421bb0526fe25f9ccd53'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c187ad0e32c93c24e772b470c7b732285187bccf36687981ab28ae41935ad0bbfebe2ca04a60cafd4a3af2e08837ebb70e8e6ff8b269c8f4a8aa497284566cd5
|
7
|
+
data.tar.gz: 6b0233843a2a86cca28cdf2f29531c546eebbfafb59ff9909efa371d16250a1cd3f8f9738a8a68d6ac165c40b9e742b40235e78418136b2d7b724ac96af6bc71
|
@@ -3,11 +3,11 @@ require 'agent/metrics/exception_record'
|
|
3
3
|
module APMInsight
|
4
4
|
module Agent
|
5
5
|
class SequenceBook
|
6
|
-
attr_reader :openTracker, :
|
6
|
+
attr_reader :openTracker, :rootTracker, :trackerCount, :exceptionBag, :listenFlag
|
7
7
|
|
8
8
|
def initialize
|
9
|
-
@rootTracker =
|
10
|
-
|
9
|
+
@rootTracker = nil
|
10
|
+
#@closedTracker = @rootTracker
|
11
11
|
@openTracker = nil
|
12
12
|
|
13
13
|
@trackerCount = 0
|
@@ -22,32 +22,34 @@ module APMInsight
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# If RootTracker is not set, check type and set
|
25
|
-
if @rootTracker ==
|
25
|
+
if @rootTracker == nil
|
26
26
|
if !tracker.is_a?(ManageEngine::Tracker::RootTracker)
|
27
27
|
closeSequence()
|
28
28
|
return nil
|
29
29
|
end
|
30
30
|
@rootTracker = tracker
|
31
|
-
|
32
31
|
updateListenFlag()
|
33
32
|
end
|
34
33
|
|
34
|
+
tracker.setParent(openTracker)
|
35
|
+
@openTracker = tracker
|
36
|
+
|
35
37
|
|
36
38
|
# Attach tracker as Sibling or Child and set nominee
|
37
|
-
if @closedTracker != nil
|
38
|
-
tracker.sibling = @closedTracker
|
39
|
-
@closedTracker.sibling = tracker # Nominee - if dropped/corrupted, defaults to this tracker
|
40
|
-
@openTracker = tracker
|
41
|
-
@closedTracker = nil
|
42
|
-
else
|
43
|
-
if tracker.equal?(@openTracker)
|
44
|
-
return nil
|
45
|
-
end
|
46
|
-
|
47
|
-
@openTracker.child = tracker
|
48
|
-
tracker.sibling = @openTracker
|
49
|
-
@openTracker = tracker
|
50
|
-
end
|
39
|
+
# if @closedTracker != nil
|
40
|
+
# tracker.sibling = @closedTracker
|
41
|
+
# @closedTracker.sibling = tracker # Nominee - if dropped/corrupted, defaults to this tracker
|
42
|
+
# @openTracker = tracker
|
43
|
+
# @closedTracker = nil
|
44
|
+
# else
|
45
|
+
# if tracker.equal?(@openTracker)
|
46
|
+
# return nil
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# @openTracker.child = tracker
|
50
|
+
# tracker.sibling = @openTracker
|
51
|
+
# @openTracker = tracker
|
52
|
+
# end
|
51
53
|
|
52
54
|
checkAndArrestSequence()
|
53
55
|
|
@@ -55,24 +57,26 @@ module APMInsight
|
|
55
57
|
end
|
56
58
|
|
57
59
|
def closeTracker tracker
|
58
|
-
@closedTrackerCount += 1
|
59
|
-
@closedTracker = tracker
|
60
|
-
tracker.sibling = nil
|
61
|
-
@openTracker = nil
|
60
|
+
# @closedTrackerCount += 1
|
61
|
+
# @closedTracker = tracker
|
62
|
+
# tracker.sibling = nil
|
63
|
+
# @openTracker = nil
|
64
|
+
@openTracker = tracker.parent;
|
62
65
|
|
63
66
|
# Marks end of transaction
|
64
|
-
if @rootTracker == tracker
|
67
|
+
# if @rootTracker == tracker
|
68
|
+
if @openTracker == nil
|
65
69
|
if @listenFlag < 1 || (@listenFlag >= 1 && @trackerCount > 0)
|
66
70
|
# if some trackers are not closed, while processing the metrics, it may go into infinite loop
|
67
|
-
if (@closedTrackerCount - @trackerCount) == 0
|
71
|
+
# if (@closedTrackerCount - @trackerCount) == 0
|
68
72
|
sequenceBag = Hash.new
|
69
73
|
sequenceBag["roottracker"] = @rootTracker
|
70
74
|
sequenceBag["exceptions"] = @exceptionBag
|
71
75
|
|
72
76
|
ManageEngine::APMObjectHolder.instance.collector.updateTransaction(@rootTracker.url, sequenceBag)
|
73
|
-
else
|
74
|
-
ManageEngine::APMObjectHolder.instance.log.warn "Some trackers are not closed, dropping the metrics for #{@rootTracker.url}"
|
75
|
-
end
|
77
|
+
# else
|
78
|
+
# ManageEngine::APMObjectHolder.instance.log.warn "Some trackers are not closed, dropping the metrics for #{@rootTracker.url}"
|
79
|
+
# end
|
76
80
|
end
|
77
81
|
closeSequence()
|
78
82
|
end
|
@@ -124,6 +124,8 @@ module ManageEngine
|
|
124
124
|
ins_apdx = [0,-1,-1,0,0,0,0,0,0]
|
125
125
|
logmetric = Hash.new
|
126
126
|
error_rt = 0
|
127
|
+
httpstatus = Hash.new
|
128
|
+
|
127
129
|
@transaction.each do |key,value|
|
128
130
|
apdexValue = value[0]
|
129
131
|
ins_apdx[0] += apdexValue[0]
|
@@ -150,16 +152,23 @@ module ManageEngine
|
|
150
152
|
end
|
151
153
|
exceptions = value[1][@obj.constants.mf_logmetric]
|
152
154
|
if (exceptions != nil)
|
153
|
-
|
154
|
-
|
155
|
-
|
155
|
+
logmetric = logmetric.merge(exceptions) { |key, oldval, newval| oldval + newval }
|
156
|
+
# exceptions.each do |name, count|
|
157
|
+
# logmetric[name] = logmetric[name].to_i + count
|
158
|
+
# end
|
156
159
|
end
|
160
|
+
|
161
|
+
status = value[1][@obj.constants.httpstatus]
|
162
|
+
if (status != nil)
|
163
|
+
httpstatus = httpstatus.merge(status) { |key, oldval, newval| oldval + newval }
|
164
|
+
end
|
157
165
|
end
|
158
166
|
if (ins_apdx[3] > 0)
|
159
167
|
ins_apdx[4] = (ins_apdx[5].to_f + (ins_apdx[6]/2).to_f).to_f/ins_apdx[3].to_f
|
160
168
|
ins_apdx[0] = ins_apdx[0].round(2)
|
161
169
|
end
|
162
|
-
|
170
|
+
|
171
|
+
@instance[":apdex"]=[ins_apdx, {@obj.constants.mf_logmetric=>logmetric, @obj.constants.error_rt=>error_rt, @obj.constants.httpstatus=>httpstatus}]
|
163
172
|
end
|
164
173
|
|
165
174
|
def updatebginstance
|
@@ -233,6 +242,7 @@ module ManageEngine
|
|
233
242
|
pl = d["td"]
|
234
243
|
dbl = d["db"]
|
235
244
|
exc = d["exception"]
|
245
|
+
# comp = d["comp"]
|
236
246
|
|
237
247
|
rt = pl["rt"].round(2)
|
238
248
|
# path = @obj.constants.mf_transaction + @obj.constants.mf_separator + pl["path"]
|
@@ -266,6 +276,20 @@ module ManageEngine
|
|
266
276
|
apx_stat = apxarray apx_stat,rt
|
267
277
|
end
|
268
278
|
|
279
|
+
if (pl.has_key?("status"))
|
280
|
+
statusHash = additionalInfo[@obj.constants.httpstatus]
|
281
|
+
if (statusHash == nil)
|
282
|
+
statusHash = Hash.new
|
283
|
+
additionalInfo[@obj.constants.httpstatus] = statusHash
|
284
|
+
end
|
285
|
+
|
286
|
+
if (statusHash.has_key?(pl["status"]))
|
287
|
+
statusHash[pl["status"]] += 1
|
288
|
+
else
|
289
|
+
statusHash[pl["status"]] = 1
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
269
293
|
if (exc != nil)
|
270
294
|
logmetric = additionalInfo[@obj.constants.mf_logmetric]
|
271
295
|
if (logmetric == nil)
|
@@ -277,6 +301,20 @@ module ManageEngine
|
|
277
301
|
end
|
278
302
|
end
|
279
303
|
|
304
|
+
# if (comp != nil)
|
305
|
+
# begin
|
306
|
+
# compData = additionalInfo[@obj.constants.components]
|
307
|
+
# if (compData == nil)
|
308
|
+
# compData = Array.new
|
309
|
+
# additionalInfo[@obj.constants.components] = compData
|
310
|
+
# end
|
311
|
+
# comp.each do |name, info|
|
312
|
+
# if (compData.has)
|
313
|
+
# end
|
314
|
+
# rescue Exception=>e
|
315
|
+
# end
|
316
|
+
# end
|
317
|
+
|
280
318
|
@transaction[path] = [apx_stat, additionalInfo]
|
281
319
|
else
|
282
320
|
stat = nil
|
@@ -417,7 +455,7 @@ module ManageEngine
|
|
417
455
|
opstats = @dboperations[operation]
|
418
456
|
else
|
419
457
|
opstats = Array.new;
|
420
|
-
opstats = [0
|
458
|
+
opstats = [0,rt,rt,0,0]
|
421
459
|
end
|
422
460
|
|
423
461
|
if (isError)
|
@@ -25,6 +25,10 @@ module ManageEngine
|
|
25
25
|
tdata["td"] = getTransData(rootTracker,tdata)
|
26
26
|
tdata["db"] = getDBData(rootTracker, tdata, exceptionInfo)
|
27
27
|
|
28
|
+
if (rootTracker.error?) # root tracker will be left out in above flow
|
29
|
+
updateExceptionMetric(rootTracker.error, tdata) # <= previously it was 'ret'
|
30
|
+
updateExceptionInfo(exceptionInfo, rootTracker.endtime.to_i, rootTracker.error)
|
31
|
+
end
|
28
32
|
exceptionBag = seqData["exceptions"]
|
29
33
|
if exceptionBag != nil
|
30
34
|
exceptionBag.each do |exceptionRecord|
|
@@ -87,14 +91,15 @@ module ManageEngine
|
|
87
91
|
tData.push(trac)
|
88
92
|
parseddata["trace-data"]=tData
|
89
93
|
@obj.log.debug "dummy trace added"
|
94
|
+
@obj.log.debug "trace threshold exceeded. Current Size: #{@obj.config.trace_overflow_t}"
|
90
95
|
return parseddata
|
91
96
|
elsif tData.length > @obj.config.trace_overflow_t
|
92
|
-
@obj.log.debug "trace threshold exceeded. Current Size: #{@obj.config.trace_overflow_t}"
|
93
97
|
return parseddata
|
94
98
|
end
|
95
99
|
end
|
96
100
|
begin
|
97
|
-
trdata = getTrace(rootTracker)
|
101
|
+
#trdata = getTrace(rootTracker)
|
102
|
+
trdata = rootTracker.getTrace()
|
98
103
|
trac = updateTrace(rootTracker, trdata, exceptionInfo)
|
99
104
|
if(parseddata.has_key?("trace-data"))
|
100
105
|
traceData = parseddata["trace-data"];
|
@@ -141,6 +146,10 @@ module ManageEngine
|
|
141
146
|
ret["error"] = true
|
142
147
|
end
|
143
148
|
end
|
149
|
+
if (rootTracker.getStatus != nil && rootTracker.getStatus >= 400)
|
150
|
+
ret["status"] = rootTracker.getStatus
|
151
|
+
ret["error"] = true
|
152
|
+
end
|
144
153
|
rescue Exception=>e
|
145
154
|
#@obj.log.logException "Exception in getTranseData: #{e.message}",e
|
146
155
|
raise e
|
@@ -150,38 +159,92 @@ module ManageEngine
|
|
150
159
|
|
151
160
|
# Generates DB metric
|
152
161
|
def getDBData(tracker, tdata, exceptionInfo)
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
162
|
+
if (tracker != nil)
|
163
|
+
children = tracker.children
|
164
|
+
children.each do |child|
|
165
|
+
tdata["db"] = getDBData(child, tdata, exceptionInfo)
|
166
|
+
if child.kind_of?(ManageEngine::Tracker::DatabaseTracker)
|
167
|
+
if tdata["db"] == nil
|
168
|
+
tdata["db"] = Array.new
|
169
|
+
end
|
170
|
+
queryInfo = child.getQueryInfo
|
171
|
+
sqlStrip = queryInfo[0] + "/" + queryInfo[1] + "/dummydb"
|
172
|
+
ret ={"rt"=>child.duration, "sql"=>child.getRawQuery,
|
173
|
+
"sql-strip"=>sqlStrip, "name"=>child.name, "operation"=>queryInfo[0]}
|
174
|
+
|
175
|
+
if (child.error?)
|
176
|
+
ret["error"] = true
|
177
|
+
end
|
178
|
+
|
179
|
+
tdata["db"].push(ret)
|
180
|
+
end ## DBTracker check
|
181
|
+
|
182
|
+
# updateComponentData(child, tdata)
|
183
|
+
if (child.error?)
|
184
|
+
updateExceptionMetric(child.error, tdata) # <= previously it was 'ret'
|
185
|
+
updateExceptionInfo(exceptionInfo, child.endtime.to_i, child.error)
|
186
|
+
end
|
187
|
+
end #end of children iteration
|
188
|
+
|
189
|
+
# tdata["db"] = getDBData(tracker.child, tdata, exceptionInfo)
|
190
|
+
#
|
191
|
+
# if tracker.kind_of?(ManageEngine::Tracker::DatabaseTracker)
|
192
|
+
# if tdata["db"] == nil
|
193
|
+
# tdata["db"] = Array.new
|
194
|
+
# end
|
195
|
+
#
|
196
|
+
# queryInfo = tracker.getQueryInfo
|
197
|
+
# sqlStrip = queryInfo[0] + "/" + queryInfo[1] + "/dummydb"
|
198
|
+
#
|
199
|
+
# ret ={"rt"=>tracker.duration, "sql"=>tracker.getRawQuery,
|
200
|
+
# "sql-strip"=>sqlStrip, "name"=>tracker.name, "operation"=>queryInfo[0]}
|
201
|
+
#
|
202
|
+
# if (tracker.error?)
|
203
|
+
# ret["error"] = true
|
204
|
+
# end
|
205
|
+
#
|
206
|
+
# tdata["db"].push(ret)
|
207
|
+
# end ## DBTracker check
|
208
|
+
#
|
209
|
+
# if (tracker.error?)
|
210
|
+
# updateExceptionMetric(tracker.error, tdata) # <= previously it was 'ret'
|
211
|
+
# updateExceptionInfo(exceptionInfo, tracker.endtime.to_i, tracker.error)
|
212
|
+
# end
|
213
|
+
#
|
214
|
+
# tracker = tracker.sibling
|
215
|
+
end ## if tracker nil
|
181
216
|
|
182
217
|
tdata["db"]
|
183
218
|
end
|
184
219
|
|
220
|
+
def updateComponentData (tracker, tdata)
|
221
|
+
begin
|
222
|
+
compData = tdata["comp"]
|
223
|
+
if (compData == nil)
|
224
|
+
compData = Hash.new
|
225
|
+
tdata["comp"] = compData
|
226
|
+
end
|
227
|
+
info = compData[tracker.component]
|
228
|
+
if (info == nil)
|
229
|
+
info = Hash.new
|
230
|
+
compData[tracker.component] = info
|
231
|
+
info[@obj.constants.component_name] = tracker.component
|
232
|
+
info[@obj.constants.component_time] = tracker.duration
|
233
|
+
info[@obj.constants.component_count] = 1
|
234
|
+
if (tracker.error?)
|
235
|
+
info[@obj.constants.component_error_count] = 1
|
236
|
+
end
|
237
|
+
else
|
238
|
+
info[@obj.constants.component_time] += tracker.duration
|
239
|
+
info[@obj.constants.component_count] += 1
|
240
|
+
if (tracker.error?)
|
241
|
+
info[@obj.constants.component_error_count] += 1
|
242
|
+
end
|
243
|
+
end
|
244
|
+
rescue Exception=>e
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
185
248
|
def updateExceptionMetric (exception, tdata)
|
186
249
|
excData = tdata["exception"]
|
187
250
|
if (excData == nil)
|
@@ -197,7 +260,8 @@ module ManageEngine
|
|
197
260
|
# {"thread_name":"http-8080-6","s_time":1326276180289,"t_name":"transaction\/http\/Test-App\/login","r_time":18,"thread_id":141}
|
198
261
|
top = Array.new
|
199
262
|
path = roottracker.getTxnName
|
200
|
-
det = {"
|
263
|
+
det = {"s_time"=>trans[0],"t_name"=>path,"r_time"=>trans[3]}
|
264
|
+
det = det.merge(roottracker.getTraceInfo)
|
201
265
|
|
202
266
|
exception = trans[5] != nil ? trans[5][@obj.constants.mf_exception_st] : nil
|
203
267
|
if (exception != nil)
|
@@ -213,54 +277,54 @@ module ManageEngine
|
|
213
277
|
top
|
214
278
|
end
|
215
279
|
|
216
|
-
def getTrace(rootTracker)
|
217
|
-
trace = Array.new
|
218
|
-
traceDetails(rootTracker, trace)
|
219
|
-
|
220
|
-
return trace[0]
|
221
|
-
end
|
222
|
-
|
223
|
-
def traceDetails tracker, traceArr
|
224
|
-
|
225
|
-
siblingDuration = 0
|
226
|
-
|
227
|
-
while tracker != nil
|
228
|
-
|
229
|
-
childTrace = Array.new
|
230
|
-
childDuration = traceDetails tracker.child, childTrace
|
231
|
-
|
232
|
-
traceItem = Array.new
|
233
|
-
traceItem[0] = tracker.starttime
|
234
|
-
if tracker.kind_of?(ManageEngine::Tracker::DatabaseTracker)
|
235
|
-
queryInfo = tracker.getQueryInfo
|
236
|
-
traceItem[1] = queryInfo[0] + " - " + queryInfo[1]
|
237
|
-
else
|
238
|
-
traceItem[1] = tracker.name
|
239
|
-
end
|
240
|
-
traceItem[2] = ""
|
241
|
-
traceItem[3] = tracker.duration
|
242
|
-
traceItem[4] = tracker.duration - childDuration
|
243
|
-
traceItem[5] = tracker.getAdditionalInfo
|
244
|
-
traceItem[6] = childTrace.empty? ? nil : childTrace
|
245
|
-
|
246
|
-
traceArr.push(traceItem)
|
247
|
-
|
248
|
-
siblingDuration += tracker.duration
|
249
|
-
|
250
|
-
tracker = tracker.sibling
|
251
|
-
end
|
252
|
-
|
253
|
-
return siblingDuration
|
254
|
-
end
|
255
|
-
|
256
|
-
|
257
|
-
def updateExclusiveTrace data
|
258
|
-
childs = data[6]
|
259
|
-
childs.each do |arr|
|
260
|
-
data[4] = data[4] - (updateExclusiveTrace arr)[3]
|
261
|
-
end
|
262
|
-
data
|
263
|
-
end
|
280
|
+
# def getTrace(rootTracker)
|
281
|
+
# trace = Array.new
|
282
|
+
# traceDetails(rootTracker, trace)
|
283
|
+
#
|
284
|
+
# return trace[0]
|
285
|
+
# end
|
286
|
+
#
|
287
|
+
# def traceDetails tracker, traceArr
|
288
|
+
#
|
289
|
+
# siblingDuration = 0
|
290
|
+
#
|
291
|
+
# while tracker != nil
|
292
|
+
#
|
293
|
+
# childTrace = Array.new
|
294
|
+
# childDuration = traceDetails tracker.child, childTrace
|
295
|
+
#
|
296
|
+
# traceItem = Array.new
|
297
|
+
# traceItem[0] = tracker.starttime
|
298
|
+
# if tracker.kind_of?(ManageEngine::Tracker::DatabaseTracker)
|
299
|
+
# queryInfo = tracker.getQueryInfo
|
300
|
+
# traceItem[1] = queryInfo[0] + " - " + queryInfo[1]
|
301
|
+
# else
|
302
|
+
# traceItem[1] = tracker.name
|
303
|
+
# end
|
304
|
+
# traceItem[2] = ""
|
305
|
+
# traceItem[3] = tracker.duration
|
306
|
+
# traceItem[4] = tracker.duration - childDuration
|
307
|
+
# traceItem[5] = tracker.getAdditionalInfo
|
308
|
+
# traceItem[6] = childTrace.empty? ? nil : childTrace
|
309
|
+
#
|
310
|
+
# traceArr.push(traceItem)
|
311
|
+
#
|
312
|
+
# siblingDuration += tracker.duration
|
313
|
+
#
|
314
|
+
# tracker = tracker.sibling
|
315
|
+
# end
|
316
|
+
#
|
317
|
+
# return siblingDuration
|
318
|
+
# end
|
319
|
+
#
|
320
|
+
#
|
321
|
+
# def updateExclusiveTrace data
|
322
|
+
# childs = data[6]
|
323
|
+
# childs.each do |arr|
|
324
|
+
# data[4] = data[4] - (updateExclusiveTrace arr)[3]
|
325
|
+
# end
|
326
|
+
# data
|
327
|
+
# end
|
264
328
|
|
265
329
|
|
266
330
|
end
|
@@ -27,25 +27,34 @@ module ManageEngine
|
|
27
27
|
def instrument
|
28
28
|
@obj = ManageEngine::APMObjectHolder.instance
|
29
29
|
@obj.log.info "Instrumenting ActionController.. Rails Version: #{version}"
|
30
|
-
@railsTracker = nil
|
31
30
|
|
32
31
|
ActiveSupport::Notifications.subscribe('start_processing.action_controller') do |name, start, finish, id, payload|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
result = payload[:path].partition("?")
|
33
|
+
railsTracker = ManageEngine::Tracker::RootTracker.new("#{payload[:controller]}.#{payload[:action]}", start.to_f * 1000)
|
34
|
+
railsTracker.url=(result[0])
|
35
|
+
railsTracker.queryString(result[2]) # even if value not available empty string will be returned
|
36
|
+
railsTracker.http_method(payload[:method])
|
37
|
+
railsTracker.http_params(payload[:params])
|
38
|
+
|
39
|
+
railsTracker = ManageEngine::Agent::TrackerHandler.invokeTracker(railsTracker)
|
40
|
+
Thread.current[:railsTracker] = railsTracker
|
37
41
|
end # subscribe
|
38
42
|
|
39
43
|
|
40
44
|
ActiveSupport::Notifications.subscribe('process_action.action_controller') do |name, start, finish, id, payload|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
begin
|
46
|
+
railsTracker = Thread.current[:railsTracker]
|
47
|
+
if (railsTracker != nil)
|
48
|
+
railsTracker.finish(finish.to_f * 1000)
|
49
|
+
railsTracker.setStatus(payload[:status])
|
50
|
+
exception = payload[:exception_object]
|
51
|
+
if exception != nil
|
52
|
+
railsTracker.setError(exception)
|
53
|
+
end
|
54
|
+
ManageEngine::Agent::TrackerHandler.exitTracker(railsTracker)
|
47
55
|
end
|
48
|
-
|
56
|
+
rescue Exception=>e
|
57
|
+
@obj.log.logException("Unable to process controller event #{name}. Exception: " ,e)
|
49
58
|
end
|
50
59
|
end
|
51
60
|
|
@@ -2,6 +2,11 @@ module ManageEngine
|
|
2
2
|
module Tracker
|
3
3
|
class DatabaseTracker < DefaultTracker
|
4
4
|
|
5
|
+
def initialize(name = "unknown", time = ManageEngine::APMObjectHolder.instance.util.currenttimemillis)
|
6
|
+
super(name, time)
|
7
|
+
@component = "DATABASE"
|
8
|
+
end
|
9
|
+
|
5
10
|
def sql(query)
|
6
11
|
@query = format(query.dup)
|
7
12
|
end
|
@@ -77,11 +82,12 @@ module ManageEngine
|
|
77
82
|
when "describe" then sqlArr[1]
|
78
83
|
else "-"
|
79
84
|
end
|
80
|
-
|
85
|
+
@signature = sqlArr[0] + " - " + tableName
|
81
86
|
return [sqlArr[0], tableName]
|
82
87
|
|
83
88
|
rescue Exception=>e
|
84
89
|
@logger.logException "Error processing query #{sql} Exception: #{e.message}",e
|
90
|
+
@signature = sqlArr[0] + " - "
|
85
91
|
return [sqlArr[0], '-']
|
86
92
|
end
|
87
93
|
end
|
@@ -120,6 +126,13 @@ module ManageEngine
|
|
120
126
|
"#{@name} - #{@query}"
|
121
127
|
end
|
122
128
|
|
129
|
+
def getTrace
|
130
|
+
trace = super
|
131
|
+
if (@signature != nil)
|
132
|
+
trace[1] = @signature
|
133
|
+
end
|
134
|
+
trace
|
135
|
+
end
|
123
136
|
end
|
124
137
|
end
|
125
138
|
end
|
@@ -3,11 +3,13 @@ module ManageEngine
|
|
3
3
|
|
4
4
|
class DefaultTracker
|
5
5
|
|
6
|
-
attr_accessor :name, :error, :endtime, :starttime, :
|
6
|
+
attr_accessor :name, :error, :endtime, :starttime, :component, :children, :parent
|
7
7
|
|
8
|
-
def initialize(name = "
|
8
|
+
def initialize(name = "unknown", time = ManageEngine::APMObjectHolder.instance.util.currenttimemillis)
|
9
9
|
@starttime = time.to_i
|
10
10
|
@name = name
|
11
|
+
@component = "APP CODE"
|
12
|
+
@children = Array.new
|
11
13
|
@logger = ManageEngine::APMObjectHolder.instance.log
|
12
14
|
end
|
13
15
|
|
@@ -15,6 +17,17 @@ module ManageEngine
|
|
15
17
|
@endtime = time.to_i
|
16
18
|
end
|
17
19
|
|
20
|
+
def setParent(parentTracker)
|
21
|
+
@parent = parentTracker
|
22
|
+
if parentTracker != nil
|
23
|
+
parentTracker.children[parentTracker.children.length]=self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def component
|
28
|
+
@component
|
29
|
+
end
|
30
|
+
|
18
31
|
def error?
|
19
32
|
@error != nil
|
20
33
|
end
|
@@ -56,6 +69,24 @@ module ManageEngine
|
|
56
69
|
end
|
57
70
|
end
|
58
71
|
|
72
|
+
def getTrace
|
73
|
+
trace = Array.new(7)
|
74
|
+
trace[0] = @starttime
|
75
|
+
trace[1] = @name
|
76
|
+
trace[2] = @component
|
77
|
+
trace[3] = duration()
|
78
|
+
trace[4] = trace[3] #exclusive time
|
79
|
+
trace[5] = getAdditionalInfo()
|
80
|
+
if (children.length > 0)
|
81
|
+
trace[6] = Array.new
|
82
|
+
children.each do |child|
|
83
|
+
trace[4] -= child.duration() #computing exclusive time of parent
|
84
|
+
trace[6].push(child.getTrace())
|
85
|
+
end
|
86
|
+
end # children exists check
|
87
|
+
trace
|
88
|
+
end # getTrace
|
89
|
+
|
59
90
|
end
|
60
91
|
|
61
92
|
end
|
@@ -34,13 +34,19 @@ module ManageEngine
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def queryString(querystring)
|
37
|
-
|
37
|
+
if (!querystring.empty?)
|
38
|
+
@queryString = querystring
|
39
|
+
end
|
38
40
|
end
|
39
41
|
|
40
42
|
def setStatus(httpcode)
|
41
43
|
@status = httpcode
|
42
44
|
end
|
43
45
|
|
46
|
+
def getStatus
|
47
|
+
@status
|
48
|
+
end
|
49
|
+
|
44
50
|
def addCustomParam key, value
|
45
51
|
if (@params == nil)
|
46
52
|
@params = Hash.new
|
@@ -52,20 +58,19 @@ module ManageEngine
|
|
52
58
|
@params = param
|
53
59
|
end
|
54
60
|
|
55
|
-
def
|
56
|
-
info =
|
57
|
-
if (@http_method != nil
|
58
|
-
if (info == nil)
|
59
|
-
info = Hash.new
|
60
|
-
end
|
61
|
+
def getTraceInfo
|
62
|
+
info = Hash.new
|
63
|
+
if (@http_method != nil) #&& @queryString != nil && @status != nil
|
61
64
|
info["http_method_name"] = @http_method
|
65
|
+
end
|
66
|
+
if (@queryString != nil)
|
62
67
|
info["http_query_str"] = @queryString
|
68
|
+
info["http_input_params"] = nil
|
69
|
+
end
|
70
|
+
if (@status != nil)
|
63
71
|
info["httpcode"] = @status
|
64
72
|
end
|
65
73
|
if (@params != nil)
|
66
|
-
if (info == nil)
|
67
|
-
info = Hash.new
|
68
|
-
end
|
69
74
|
info["custom_params"] = @params
|
70
75
|
end
|
71
76
|
info
|
@@ -7,6 +7,7 @@ module ManageEngine
|
|
7
7
|
attr_reader :licence_exceeds,:licence_expired,:unmanage_agent,:manage_agent,:agent_config_updated,:error_notfound,:error_server,:delete_agent,:response_code,:custom_config_info, :agent_specific_info
|
8
8
|
attr_reader :mf_transaction,:mf_separator,:mf_db,:mf_apdex,:mf_http,:mf_bckgrnd,:mf_namespace,:mf_name,:mf_all,:agent_store,:agent_lock,:mf_overflow
|
9
9
|
attr_reader :error_rt, :mf_logmetric, :mf_logmetric_warning, :mf_exception_st, :mf_err_st, :mf_loginfo, :mf_loginfo_time, :mf_loginfo_level, :mf_loginfo_str, :mf_loginfo_err_clz, :mf_loginfo_st, :mf_loginfo_level_warn
|
10
|
+
attr_reader :components,:component_name,:component_time,:component_count,:component_error_count,:component_isExternal,:component_ext_host,:component_ext_port,:component_ext_ip,:httpstatus
|
10
11
|
attr_reader :en_alphabets, :en_numerals
|
11
12
|
|
12
13
|
def initialize
|
@@ -88,6 +89,17 @@ module ManageEngine
|
|
88
89
|
@mf_http = "http"
|
89
90
|
@mf_bckgrnd = "bckgrnd"
|
90
91
|
|
92
|
+
@components = "components"
|
93
|
+
@component_name = "name"
|
94
|
+
@component_time = "rt"
|
95
|
+
@component_count = "ct"
|
96
|
+
@component_error_count = "error"
|
97
|
+
@component_isExternal = "isExt"
|
98
|
+
@component_ext_host = "host"
|
99
|
+
@component_ext_port = "port"
|
100
|
+
@component_ext_ip = "ip"
|
101
|
+
|
102
|
+
@httpstatus = "httpcode"
|
91
103
|
@error_rt = "error_rt"
|
92
104
|
@mf_logmetric = "logmetric"
|
93
105
|
@mf_logmetric_warning = "warning"
|
data/lib/agent/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: site24x7_apminsight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adithyan P
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-09-
|
11
|
+
date: 2024-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shoulda
|