site24x7_apminsight 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,569 @@
1
+ require 'agent/am_objectholder'
2
+
3
+ module ManageEngine
4
+ class APMMetricsParser
5
+ def initialize
6
+ @obj = ManageEngine::APMObjectHolder.instance
7
+ end
8
+ def parse(data)
9
+ @obj = ManageEngine::APMObjectHolder.instance
10
+ parseddata = Hash.new
11
+ begin
12
+ data.each do |key,val|
13
+ @obj.log.debug "[Processing started for - #{key} ]"
14
+ #lastHash = val.last
15
+ #name = lastHash["name"]
16
+ keyForTrans = key
17
+ # if(name=="process_action.action_controller")
18
+ #Transaction completed
19
+ tdata = Hash.new
20
+ trdbdata = Array.new
21
+ trdata = Array.new
22
+ started = false
23
+ redirect=false
24
+ ended =false;
25
+ start_index = 0;
26
+ val.each do |arr|
27
+ #@obj.log.debug "Processing : #{arr["name"]}"
28
+ if(started || arr["name"]==("start_processing.action_controller") )
29
+
30
+ if(arr["name"]=="sql.active_record" && @obj.config.sql_capture)
31
+ dbd = getDBData(arr)
32
+ if tdata.has_key?("db")
33
+ tdata["db"].push(dbd)
34
+ else
35
+ temp = Array.new
36
+ temp.push(dbd)
37
+ tdata["db"]=temp
38
+ end
39
+ #trdbdata.push(updateDBTrace(arr,dbd))
40
+ #@obj.log.debug "TRANS DBBB TRACE : #{dbd}"
41
+ elsif (arr["name"]=="process_action.action_controller")
42
+
43
+ tdata["td"]=getTransData(arr,tdata)
44
+ #if redirect
45
+ # started = false
46
+ # redirect=false
47
+ # ended =false;
48
+ #else
49
+ ended = true
50
+ started = false
51
+ redirect=false
52
+ parseddata = updateParsedData key,tdata.dup,parseddata
53
+ #@obj.log.info "TRACE #{@obj.config.trans_trace}"
54
+ if @obj.config.trans_trace
55
+ ret = tdata["td"]
56
+ #@obj.log.info "TRACE COMPARE : #{ret["rt"]} > #{(@obj.config.trans_trace_t.to_f*1000).to_i}"
57
+ if (ret["rt"]).to_i > (@obj.config.trans_trace_t.to_f* 1000).to_i
58
+ tval = val[(start_index)..val.index(arr)]
59
+ #@obj.log.debug "Gng To Trace : #{start_index} to #{val.index(arr)}"
60
+ parseddata =updateTraceData tval,parseddata
61
+ end
62
+ end
63
+ key = key + start_index.to_s
64
+ tdata=Hash.new
65
+ start_index = val.index(arr)
66
+ #end
67
+ #trdata = updateTransTrace(arr,trdbdata,trdata);
68
+ #@obj.log.info "TRANS TRACE : #{trdata}"
69
+ #elsif(arr["name"]==("!render_template.action_view")
70
+ #Render Action
71
+ #elsif(arr["name"]==("render_template.action_view")
72
+ #Render Action data not in use
73
+ elsif(arr["name"]==("start_processing.action_controller"))
74
+ ended =false;
75
+ started=true
76
+ #trdata = updateStartTrace(arr,trdata);
77
+ #Render Action data not in use
78
+ elsif(arr["name"]==("redirect_to.action_controller"))
79
+ redirect = true;
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ if !ended
86
+ @obj.log.debug "Transactions in Thread Continues - so drop data in mem-store #{keyForTrans} -- #{start_index}"
87
+ if parseddata.has_key?(keyForTrans)
88
+ #@obj.log.info "BEFORE : #{parseddata.keys}"
89
+ value = parseddata.delete(keyForTrans)
90
+ parseddata[key+"_dup"] = value
91
+
92
+ #@obj.log.info "AFTER : #{parseddata.keys}"
93
+ end
94
+ end
95
+ #@obj.log.info "BEFORE METRICS - #{@obj.store.metrics}"
96
+ @obj.store.removeData key,0,start_index
97
+ #@obj.log.info "AFTER METRICS - #{@obj.store.metrics}"
98
+ @obj.log.debug "[Processing END for - #{key} ]"
99
+ #end
100
+ end
101
+ rescue Exception=>e
102
+ @obj.log.info "Exception : #{e}"
103
+ @obj.log.logException "#{e.message}",e
104
+ end
105
+ # @obj.log.debug "[PARSER] End"
106
+ parseddata
107
+ end
108
+
109
+ def updateParsedData key , tdata, parseddata
110
+ begin
111
+ if parseddata.has_key?(key)
112
+ key = @obj.util.currenttimemillis
113
+ end
114
+ #@obj.log.debug "Update parsed data : #{key} = > #{tdata}"
115
+ parseddata[key]=tdata
116
+ rescue Exception=>e
117
+ @obj.log.info "Exception in updateParsedData: #{e}"
118
+ @obj.log.logException "#{e.message}",e
119
+ end
120
+ parseddata
121
+ end
122
+ def updateTraceData val,parseddata
123
+ if(parseddata.has_key?("trace-data"))
124
+ tData = parseddata["trace-data"];
125
+ if(tData.length == @obj.config.trace_overflow_t)
126
+ trac = getDummyTrace
127
+ tData.push(trac)
128
+ parseddata["trace-data"]=tData
129
+ @obj.log.debug "dummy trace added"
130
+ return parseddata
131
+ elsif tData.length > @obj.config.trace_overflow_t
132
+ @obj.log.debug "trace threshold exceeded"
133
+ return parseddata
134
+ end
135
+ end
136
+ begin
137
+ trdata = getTrace val
138
+ trac = updateTrace(trdata)
139
+ if(parseddata.has_key?("trace-data"))
140
+ traceData = parseddata["trace-data"];
141
+ traceData.push(trac);
142
+ parseddata["trace-data"] = traceData;
143
+ else
144
+ traceData = Array.new
145
+ traceData.push(trac)
146
+ parseddata["trace-data"] = traceData;
147
+ end
148
+ rescue Exception=>e
149
+ @obj.log.info "Exception in updateTraceData: #{e}"
150
+ @obj.log.logException "#{e.message}",e
151
+ end
152
+ parseddata
153
+ end
154
+
155
+ def getDummyTrace
156
+ top = Array.new
157
+ path = @obj.constants.mf_overflow
158
+ det = {"thread_name"=>"rorthread","s_time"=>0,"t_name"=>path,"r_time"=>0,"thread_id"=>141}
159
+ trData = Array.new
160
+ trData[0] = 0
161
+ trData[1] = path
162
+ trData[2] = ""
163
+ trData[3] = 0
164
+ trData[4] = 0
165
+ trData[5] = nil
166
+ trData[6] = Array.new
167
+ top[0] = det
168
+ top[1] = trData
169
+ return top
170
+ end
171
+
172
+ def getTransData(d,tdata)
173
+ pl = d["payload"]
174
+ ret = nil;
175
+ begin
176
+ if(tdata.has_key?("td"))
177
+ ret = tdata["td"]
178
+ ret["rt"] = ret["rt"] + (d["end"] - d["start"]).to_i
179
+ else
180
+ rt = (d["end"] - d["start"]).to_i
181
+ path=pl[:path]
182
+ #path=pl["path"]
183
+ controller=pl[:controller]
184
+ #controller=pl["controller"]
185
+ action = pl[:action]
186
+ #action = pl["action"]
187
+ ret ={"rt"=>rt,"path"=>path,"name"=>controller+"#"+action}
188
+ end
189
+ rescue Exception=>e
190
+ @obj.log.info "Exception in getTranseData: #{e}"
191
+ @obj.log.logException "#{e.message}",e
192
+ end
193
+ ret
194
+ end
195
+
196
+
197
+ def getDBData(d)
198
+ pl = d["payload"]
199
+ rt = (d["end"] - d["start"])
200
+ sql = pl[:sql]
201
+ #sql = pl["sql"]
202
+ sql.strip!
203
+ sql.downcase!
204
+ sqlArr = sql.split(" ")
205
+ sqlStrip="";
206
+ tr_name="";
207
+ begin
208
+ sqlStrip = getSqlStrip sqlArr,false
209
+ rescue Exception=>e
210
+ @obj.log.logException "#{e.message}",e
211
+ sqlStrip = sqlArr[0]+"/-/dummydb"
212
+ end
213
+
214
+ name=pl[:name]
215
+ #name=pl["name"]
216
+ ret ={"rt"=>rt,"sql"=>format(sql),"sql-strip"=>sqlStrip,"name"=>name,"operation"=>sqlArr[0]}
217
+ ret
218
+ end
219
+
220
+ def getSqlStrip sqlArr ,trace
221
+ sqlStrip =""
222
+ begin
223
+ sqlStrip = case sqlArr[0]
224
+ when "select" then sqlArr[sqlArr.index("from")+1]
225
+ when "insert" then sqlArr[sqlArr.index("into")+1]
226
+ when "update" then sqlArr[1]
227
+ when "delete" then sqlArr[sqlArr.index("from")+1]
228
+ when "create" then sqlArr[1] + sqlArr[2]
229
+ when "alter" then sqlArr[1] + sqlArr[2]
230
+ when "drop" then sqlArr[1] + sqlArr[2]
231
+ when "show" then sqlArr[1]
232
+ when "describe" then sqlArr[1]
233
+ else "-"
234
+ end
235
+
236
+ if trace
237
+ sqlStrip = format(sqlArr[0]) +" - " + format(sqlStrip)
238
+ else
239
+ sqlStrip = format(sqlArr[0]) +"/" + format(sqlStrip) +"/dummydb"
240
+ end
241
+
242
+ rescue Exception=>e
243
+ @obj.log.logException "#{e.message}",e
244
+ if trace
245
+ sqlStrip = format(sqlArr[0])
246
+ else
247
+ sqlStrip = sqlArr[0]+"/-/dummydb"
248
+ end
249
+ end
250
+ end
251
+
252
+ def updateDBTrace(d)
253
+ pl = d["payload"]
254
+ rt = (d["end"] - d["start"])
255
+ sql = pl[:sql]
256
+ #sql = pl["sql"]
257
+ sql.strip!
258
+ sql.downcase!
259
+ sql = format(sql)
260
+ sqlArr = sql.split(" ")
261
+
262
+ trData = Array.new
263
+ #trData[0] = (d["start"].to_f * 1000 ).to_i
264
+ trData[0] = d["ctime"]
265
+ trData[1] = getSqlStrip sqlArr,true
266
+ trData[2] = ""
267
+ trData[3] = rt.to_i
268
+ trData[4] = rt.to_i
269
+ trData[5] = {"query"=>sql}
270
+ trData[6] = Array.new
271
+ if(!@obj.config.sql_capture_params)
272
+ trData[5] = updateQueryParams(d,sql,pl[:binds],rt)
273
+ #trData[5] = updateQueryParams(d,sql,pl["binds"],rt)
274
+ else
275
+ sql = @obj.util.parametrizeQuery sql
276
+ trData[5] = {"query"=>sql}
277
+ end
278
+
279
+
280
+
281
+ trData
282
+ end
283
+
284
+ def updateQueryParams d,sql,binds,rt
285
+ ret = {"query"=>sql}
286
+ begin
287
+ args = "";
288
+ if binds!=nil && binds.size()>0
289
+ binds.each do |ar|
290
+ #args = args + ar.last + ","
291
+ if sql!=nil && sql.index("?")!=nil
292
+ sql["?"]=ar.last
293
+ end
294
+ end
295
+ end
296
+ if args.length>0
297
+ sql = sql + "\\nPARAMS - ["+args+ "]"
298
+ end
299
+ ret = {"query"=>sql}
300
+ rescue Exception=>exe
301
+ @obj.log.logException "Not severe -#{exe.message}",exe
302
+ ret = {"query"=>sql}
303
+ end
304
+
305
+ begin
306
+ if(rt.to_i > (@obj.config.sql_trace_t.to_f * "1000".to_f ).to_i && d.has_key?("trace") )
307
+ t = updateSQLStackTrace(d["trace"])
308
+ ret["stacktrace"] =t
309
+ end
310
+ rescue Exception=>e
311
+ @obj.log.logException "#{e.message}",e
312
+ end
313
+
314
+ ret
315
+ end
316
+
317
+ def updateSQLStackTrace(d)
318
+ trace = Array.new;
319
+ started = false;
320
+ ended = false;
321
+ begin
322
+ #@obj.log.debug "STACKTRACE STARTS"
323
+ d.each do |arr|
324
+
325
+ if started
326
+
327
+ end_ind = arr.index("`send_action'")
328
+ if end_ind != nil && end_ind >0
329
+ ended = true
330
+ break;
331
+ end
332
+ #trArr = arr.split(/:[0-1,in]/);
333
+ #if trArr[0].length>30
334
+ # len = trArr.length
335
+ # trArr[0] = "..."+trArr[(len-30),len]
336
+ # end
337
+ inx=arr.index("`instrument'")
338
+ if inx!=nil && inx>0
339
+ #skip instrumet data
340
+ else
341
+ temp = Array.new
342
+ temp[0]=arr
343
+ temp[1]=""
344
+ temp[2]=""
345
+ temp[3]=""
346
+ trace.push(temp)
347
+ end
348
+ end
349
+
350
+ if started==false
351
+ ind = arr.index("`instrument'")
352
+ if ind != nil && ind >0
353
+ started = true
354
+ end
355
+ end
356
+
357
+
358
+ end
359
+ #@obj.log.debug "STACKTRACE ENDS"
360
+
361
+ trace.shift
362
+ rescue Exception=>e
363
+ @obj.log.logException "#{e.message}",e
364
+ end
365
+ trace
366
+ end
367
+
368
+ def updateOtherTrace d
369
+ pl = d["payload"]
370
+ rt = (d["end"] - d["start"])
371
+ name = d["name"]
372
+ if pl.has_key?(:identifier)
373
+ #if pl.has_key?("identifier")
374
+ name = pl[:identifier]
375
+ #name = pl["identifier"]
376
+ end
377
+ trData = Array.new
378
+ #trData[0] = (d["start"].to_f * 1000 ).to_i
379
+ trData[0] = d["ctime"]
380
+ trData[1] = name
381
+ trData[2] = ""
382
+ trData[3] = rt.to_i
383
+ trData[4] = rt.to_i
384
+ trData[5] = nil
385
+ trData[6] = Array.new
386
+ trData
387
+ end
388
+
389
+ def updateTransTrace(d,trData)
390
+
391
+ #trData = Array.new
392
+ #trData[0] = ((d["start"]).to_f * 1000).to_i
393
+ pl = d["payload"]
394
+ trData[1] = pl[:path] + " " +pl[:controller] + "#" + pl[:action]
395
+ #trData[1] = pl["path"] + " " +pl["controller"] + "#" + pl["action"]
396
+ trData[2] = ""
397
+ trData[3] = (d["end"] - trData[0]).to_i
398
+ trData[4] = (d["end"] - trData[0]).to_i
399
+ trData[5] = nil
400
+ #trData[6] = Array.new
401
+ #dbTime = 0
402
+ #trdbdata.each do |dbData|
403
+ # dbTime = dbTime + dbData[3]
404
+ #end
405
+ #trData[4] = ((trData[3]).to_f - (dbTime.to_f )).to_i
406
+ # if(pl[:db_runtime]!=nil)
407
+ # trData[4] = ((trData[3]).to_f - (pl[:db_runtime].to_f )).to_i
408
+ # end
409
+ trData
410
+ end
411
+
412
+ def updateMethodTrace(d,trData)
413
+
414
+ #trData = Array.new
415
+ #trData[0] = ((d["start"]).to_f * 1000).to_i
416
+ pl = d["payload"]
417
+ trData[1] = pl[:method]
418
+ #trData[1] = pl["method"]
419
+ trData[2] = ""
420
+ trData[3] = (d["end"] - trData[0]).to_i
421
+ trData[4] = (d["end"] - trData[0]).to_i
422
+ trData[5] = nil
423
+ #trData[6] = Array.new
424
+ #dbTime = 0
425
+ #trdbdata.each do |dbData|
426
+ # dbTime = dbTime + dbData[3]
427
+ #end
428
+ #trData[4] = ((trData[3]).to_f - (dbTime.to_f )).to_i
429
+ # if(pl[:db_runtime]!=nil)
430
+ # trData[4] = ((trData[3]).to_f - (pl[:db_runtime].to_f )).to_i
431
+ # end
432
+ trData
433
+ end
434
+
435
+ def updateStartTrace(d)
436
+ trData = Array.new
437
+ #trData[0] = ((d["start"]).to_f * 1000).to_i
438
+ trData[0] = d["ctime"]
439
+ trData[1] =""
440
+ trData[2] =""
441
+ trData[3] =0
442
+ trData[4] =0
443
+ trData[5] =nil
444
+ trData[6] =Array.new
445
+
446
+ trData
447
+ end
448
+
449
+ def updateTrace(trans)
450
+ # {"thread_name":"http-8080-6","s_time":1326276180289,"t_name":"transaction\/http\/Test-App\/login","r_time":18,"thread_id":141}
451
+ top = Array.new
452
+ path = @obj.constants.mf_transaction + @obj.constants.mf_separator + trans[1]
453
+ det = {"thread_name"=>"rorthread","s_time"=>trans[0],"t_name"=>path,"r_time"=>trans[3],"thread_id"=>141}
454
+ #trans[6] = db;
455
+ top[0] = det
456
+ top[1] = trans
457
+ top
458
+ end
459
+
460
+ def format s
461
+ s.gsub!("\"", '')
462
+ s.gsub!("\n", '')
463
+ s
464
+ end
465
+
466
+
467
+ def getTrace data
468
+ index = 0
469
+ data.each do |arr|
470
+
471
+ if(arr["name"]=="start_processing.action_controller")
472
+ index = data.index(arr)
473
+ break;
474
+ end
475
+ end
476
+ data = data.drop(index)
477
+ tdata =traceDetails data,Array.new,0
478
+ tdata = updateExclusiveTrace(tdata[0])
479
+ tdata
480
+ end
481
+
482
+ def traceDetails valo,stack,indx
483
+ if(valo.size>indx)
484
+ arr = valo[indx]
485
+ indx = indx+1
486
+ if(arr["name"]=="start_processing.action_controller")
487
+ traceArr = updateStartTrace arr
488
+ traceArr[6] = Array.new #childs
489
+ if stack.size()>0
490
+ cur = stack[stack.size()-1]
491
+ c = cur[6]
492
+ c.push(traceArr)
493
+ cur[6] = c
494
+ end
495
+ stack.push(traceArr)
496
+
497
+
498
+ traceDetails valo,stack,indx
499
+
500
+ elsif(arr["name"]=="sql.active_record" && @obj.config.sql_capture )
501
+
502
+ temp = updateDBTrace arr
503
+
504
+ cur = stack[stack.size()-1]
505
+ c = cur[6]
506
+ c.push(temp)
507
+ cur[6] = c
508
+ traceDetails valo,stack,indx
509
+ elsif(arr["name"]=="apm.methodstart")
510
+ temp = updateStartTrace arr
511
+ cur = stack[stack.size()-1]
512
+ c = cur[6]
513
+ c.push(temp)
514
+ cur[6] = c
515
+ stack.push(temp)
516
+ traceDetails valo,stack,indx
517
+ elsif(arr["name"]=="apm.methodend")
518
+ updateMethodTrace(arr,stack[stack.size()-1])
519
+ stack.delete(stack[stack.size()-1])
520
+ traceDetails valo,stack,indx
521
+ elsif(arr["name"]=="process_action.action_controller")
522
+ updateTransTrace(arr,stack[stack.size()-1])
523
+ if(valo.size()>(indx+1))
524
+ #Redirection Data
525
+ arr = valo[indx]
526
+ while (arr["name"]!="start_processing.action_controller") do
527
+ indx = indx + 1
528
+ arr = valo[indx]
529
+ end
530
+ end
531
+ (stack[0])[3] = (arr["end"] - ((stack[0])[0])).to_i
532
+ (stack[0])[4] = (arr["end"] - ((stack[0])[0])).to_i
533
+
534
+
535
+ traceDetails valo,stack,indx
536
+ #parent[4] = parent[4] - traceArr[4]
537
+ elsif (arr["name"]=="render_template.action_view")
538
+ temp = updateOtherTrace arr
539
+
540
+ cur = stack[stack.size()-1]
541
+ c = cur[6]
542
+ c.push(temp)
543
+ cur[6] = c
544
+ #traceArr[6] = c
545
+ #parent[4] = parent[4] - temp[4]
546
+ traceDetails valo,stack,indx
547
+ else
548
+ traceDetails valo,stack,indx
549
+
550
+ end
551
+
552
+ stack
553
+ else
554
+ #Nothing todo
555
+ end
556
+ end
557
+
558
+
559
+ def updateExclusiveTrace data
560
+ childs = data[6]
561
+ childs.each do |arr|
562
+ data[4] = data[4] - (updateExclusiveTrace arr)[3]
563
+ end
564
+ data
565
+ end
566
+
567
+
568
+ end
569
+ end
@@ -0,0 +1,29 @@
1
+ require 'agent/am_objectholder'
2
+
3
+ module ManageEngine
4
+ class APMMetricsStore
5
+ attr_accessor :metrics
6
+ def initialize
7
+ @metrics = Hash.new
8
+ end
9
+
10
+ def remove keys
11
+ if keys!=nil
12
+ keys.each {|key| @metrics.delete("#{key}")}
13
+ end
14
+ end
15
+
16
+ def metrics_dup
17
+ @metrics.dup
18
+ end
19
+
20
+ def removeData key, strt_indx,end_indx
21
+ if @metrics.has_key?(key)
22
+ val = @metrics[key]
23
+ val = val.drop(end_indx)
24
+ @metrics[key]=val
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,116 @@
1
+ require "agent/am_objectholder"
2
+ require "agent/server/worker/am_worker"
3
+
4
+ require 'socket'
5
+
6
+ module ManageEngine
7
+ class APMAgent
8
+ def initialize
9
+ @obj = ManageEngine::APMObjectHolder.instance
10
+ @obj.log.debug "Agent Initialization - START"
11
+ doConnect
12
+
13
+ if !@obj.shutdown && @obj.agent_initialized
14
+ @obj.log.info "Agent Initialization - DONE"
15
+ @obj.instrumenter.doSubscribe
16
+ doDispatcherActions
17
+ doCollect
18
+ puts "APM Insight Ruby Agent Started"
19
+ else
20
+ @obj.log.info "Agent Initialization Failed - Going to shutdown"
21
+ @obj.instrumenter.doSubscribe
22
+ @obj.shutdownagent
23
+ end
24
+
25
+
26
+ end
27
+
28
+ def doConnect
29
+ begin
30
+ if @obj.shutdown
31
+ @obj.log.info "[ Problem in Agent Startup ]"
32
+ else
33
+ agentInfo = @obj.config.getAgentInfo
34
+ resp = nil
35
+ if @obj.config.alreadyconnected
36
+ @obj.log.debug "[doConnect] Already Connected - Make Contact - Instance id = #{@obj.config.instance_id}"
37
+ if @obj.config.site24x7
38
+ resp = startConnect "?license.key="+@obj.config.license_key+"&instance_id="+@obj.config.instance_id,agentInfo
39
+ else
40
+ resp = startConnect "?instance_id="+@obj.config.instance_id,agentInfo
41
+ end
42
+ else
43
+ @obj.log.debug "[doConnect] Going to connect - New "
44
+ if @obj.config.site24x7
45
+ resp = startConnect "?license.key="+@obj.config.license_key,agentInfo
46
+ else
47
+ resp = startConnect "",agentInfo
48
+ end
49
+ if resp.has_key?("instance-info")
50
+ aData = resp["instance-info"]
51
+ aData["agent.id"]=aData.delete("instanceid")
52
+ aData["agent.enabled"]=true
53
+ @obj.config.updateAgentInfoFile(aData)
54
+ @obj.log.debug "[doConnect] Connected - InstanceID : #{@obj.config.instance_id}"
55
+ else
56
+ @obj.log.info "[doConnect] [ Problem in connecting server] [ Going to shutdown ]"
57
+ @obj.shutdown=true
58
+ end
59
+ end
60
+
61
+ if resp==nil
62
+ @obj.log.info "[doConnect] [ Error in Response while connecting Server . [ Going to shutdown ]"
63
+ @obj.shutdown= true
64
+ end
65
+
66
+ if(!@obj.shutdown)
67
+ @obj.agent_initialized=true
68
+ end
69
+ end
70
+ rescue Exception=>e
71
+ @obj.shutdown = true
72
+ @obj.log.logException "[doConnect] Exception while connecting server. [ Going to shutdown ] ",e
73
+ end
74
+ end
75
+
76
+
77
+ def doCollect
78
+ @obj.log.info "[doCollect] Starts - Wait time : #{@obj.config.connect_interval} seconds "
79
+ begin
80
+ ManageEngine::APMWorker.getInstance.start
81
+ rescue Exception=>e
82
+ @obj.log.logException "[doCollect] Exception during worker startup #{e.message}",e
83
+ @obj.shutdown=true
84
+ end
85
+ end
86
+
87
+
88
+ def startConnect uri,data
89
+ resp = @obj.connector.post @obj.constants.connect_uri+uri,data
90
+ end
91
+
92
+ def doDispatcherActions
93
+ case @obj.config.app_dispatcher
94
+ when 'passenger'
95
+ #starting a new process
96
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
97
+ if forked
98
+ @obj.log.info "starting_worker_process : Process ID :#{Process.pid} : Creating new apm worker"
99
+ doCollect
100
+ else
101
+ doCollect
102
+ @obj.log.info "starting_worker_process : Conservative Process ID :#{Process.pid} - No new worker"
103
+ end
104
+ end
105
+ # shutting down a process.
106
+ PhusionPassenger.on_event(:stopping_worker_process) do
107
+ ManageEngine::APMWorker.getInstance.stop
108
+ @obj.log.info "stopping_worker_process :Process ID :#{Process.pid} ----> #$$ "
109
+ end
110
+ else#case
111
+
112
+ end#case
113
+ end
114
+ end#c
115
+ end#m
116
+