apminsight 1.8.3 → 1.8.7

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.
@@ -7,7 +7,7 @@ require 'agent/version'
7
7
 
8
8
  module ManageEngine
9
9
  class APMConfig
10
- attr_reader :agenthost,:agentport,:instance_id,:alreadyconnected,:apmhost,:apmport,:license_key,:site24x7, :site24x7url, :hostType
10
+ attr_reader :agenthost,:agentport,:instance_id,:alreadyconnected,:apmhost,:apmport,:license_key,:site24x7, :site24x7url, :hostType,:delayedStart
11
11
  attr_reader :appname,:proxyneeded, :apdex_t, :trans_trace, :trans_trace_t, :sql_capture, :sql_capture_params, :sql_trace_t,:proxy_user,:proxy_pass, :metric_overflow_t, :trace_overflow_t, :dbmetric_overflow_t
12
12
  attr_reader :proxy_host,:proxy_port ,:is_secured, :logs_dir ,:connection_retry,:agent_enabled,:connect_interval,:db_operations,:txn_skip_listen, :url_merge_pattern
13
13
  attr_accessor :app_db,:app_dispatcher,:lastupdatedtime
@@ -24,7 +24,7 @@ module ManageEngine
24
24
  @alreadyconnected = checkAgentInfo
25
25
  @site24x7 = checkLicenseFile
26
26
  if (@site24x7)
27
- @site24x7url = @license_key.start_with?('eu_') ? @obj.constants.site24x7EUurl : @license_key.start_with?('cn_') ? @obj.constants.site24x7CNurl : @license_key.start_with?('au_') ? @obj.constants.site24x7AUurl : @license_key.start_with?('in_') ? @obj.constants.site24x7INurl : @obj.constants.site24x7USurl
27
+ @site24x7url = @license_key.start_with?('eu_') ? @obj.constants.site24x7EUurl : @license_key.start_with?('cn_') ? @obj.constants.site24x7CNurl : @license_key.start_with?('au_') ? @obj.constants.site24x7AUurl : @license_key.start_with?('in_') ? @obj.constants.site24x7INurl : @license_key.start_with?('gd_') ? @obj.constants.site24x7GDurl : @license_key.start_with?('jp_') ? @obj.constants.site24x7JPurl : @obj.constants.site24x7USurl
28
28
  end
29
29
  @db_operations =["select","insert","update","delete"]
30
30
  urlMergePattern
@@ -54,10 +54,11 @@ module ManageEngine
54
54
 
55
55
  def configureFile
56
56
  begin
57
- if(FileTest.exists?(@obj.constants.apm_conf))
57
+ if(FileTest.exist?(@obj.constants.apm_conf))
58
58
  #conf file exists in APPlication Home
59
59
  @obj.log.debug "Config File Exists. It is read from #{@obj.constants.apm_conf}"
60
60
  @config = @obj.util.readProperties(@obj.constants.apm_conf)
61
+ secureConfFile "#{@obj.constants.apm_conf}"
61
62
  else
62
63
  gemSpecs = Gem.loaded_specs[@obj.constants.s247_apm_gem]
63
64
  if (gemSpecs == nil)
@@ -72,13 +73,14 @@ module ManageEngine
72
73
  #copied sucessfully
73
74
  @obj.log.info "Config File copied to application home directory. It is read from #{@obj.constants.apm_conf}"
74
75
  @config = @obj.util.readProperties(@obj.constants.apm_conf)
76
+ secureConfFile "#{@obj.constants.apm_conf}"
75
77
  else
76
78
  #Problem in copying, so reading props from Conf file in Gem Location
77
79
  @obj.log.warn "Config File not copied. It is read from #{gem_conf}"
78
80
  @config = @obj.util.readProperties(gem_conf)
81
+ secureConfFile gem_conf
79
82
  end
80
83
  end
81
-
82
84
  rescue Exception=>e
83
85
  @obj.log.info "[Exception] Problem in Reading Configuration File : \n File : #{@obj.constants.apm_conf}"
84
86
  @obj.log.logException "#{e.message}",e
@@ -87,8 +89,16 @@ module ManageEngine
87
89
  end
88
90
  end
89
91
 
92
+ def secureConfFile(file)
93
+ begin
94
+ File.chmod(0600, file)
95
+ rescue Exception => e
96
+ @obj.log.warn "Unable to secure the conf file #{file}"
97
+ end
98
+ end
99
+
90
100
  def checkAgentInfo
91
- if FileTest.exists?(@obj.constants.agent_conf)
101
+ if FileTest.exist?(@obj.constants.agent_conf)
92
102
  @obj.log.debug "Status : Agent Already Connected"
93
103
  props = @obj.util.readProperties(@obj.constants.agent_conf)
94
104
  instance_id = props["agent.id"]
@@ -111,21 +121,20 @@ module ManageEngine
111
121
  end
112
122
 
113
123
  def checkLicenseFile
114
- if(@license_key != nil)
115
- @obj.log.info "License key is not null. Connecting to site24x7"
116
- @obj.constants.setLicenseKey @license_key
117
- true
118
- else
119
- @obj.log.info "License key is null. Connecting to APPManager"
120
- false
121
- end
122
-
124
+ @obj.constants.setLicenseKey @license_key
125
+ if(@license_key.start_with?('APMI_'))
126
+ @obj.log.info "Connecting to App Manager"
127
+ false
128
+ else
129
+ @obj.log.info "Connecting to Site24x7"
130
+ true
131
+ end
123
132
  end
124
133
 
125
134
  def urlMergePattern
126
135
  @url_merge_pattern = Hash.new
127
136
  begin
128
- if (FileTest.exists?(@obj.constants.mergepattern_conf))
137
+ if (FileTest.exist?(@obj.constants.mergepattern_conf))
129
138
  @url_merge_pattern=@obj.util.readProperties(@obj.constants.mergepattern_conf)
130
139
  end
131
140
  rescue Exception => e
@@ -138,6 +147,8 @@ module ManageEngine
138
147
  @instance_id = props["agent.id"]
139
148
  @agent_enabled= @obj.util.getBooleanValue props["agent.enabled"]
140
149
  @obj.util.writeProperties(@obj.constants.agent_conf,props)
150
+
151
+ secureConfFile(@obj.constants.agent_conf)
141
152
  end
142
153
 
143
154
  def initValues
@@ -160,6 +171,7 @@ module ManageEngine
160
171
  @dbmetric_overflow_t=500
161
172
  @trace_overflow_t=30
162
173
  @site24x7url = @obj.constants.site24x7USurl #default agent communication URL
174
+ @delayedStart = false
163
175
  end
164
176
 
165
177
  def assignConfig
@@ -201,6 +213,7 @@ module ManageEngine
201
213
  when "metricstore.metric.bucket.size" then @metric_overflow_t = isInteger(@metric_overflow_t, value)
202
214
  when "metricstore.dbmetric.bucket.size" then @dbmetric_overflow_t = isInteger(@dbmetric_overflow_t, value)
203
215
  when "transaction.tracestore.size" then @trace_overflow_t = isInteger(@trace_overflow_t, value)
216
+ when "agent.delay.start" then @delayedStart=@obj.util.getBooleanValue value
204
217
  end
205
218
  end
206
219
  store_encrypted_data(@config)
@@ -246,8 +259,7 @@ module ManageEngine
246
259
  def getHostType
247
260
  begin
248
261
  # Check for AWS environment
249
- # response = Net::HTTP.get_response(URI('http://169.254.169.254/latest/meta-data/'))
250
- url = URI.parse('http://169.254.169.254/latest/meta-data/')
262
+ url = URI.parse('http://169.254.169.254/latest/meta-data/') # AWS metadata url
251
263
  request = Net::HTTP::Get.new(url.path)
252
264
  response = Net::HTTP.start(url.host, url.port, :read_timeout => 2) {|http| http.request(request)}
253
265
  if (response.kind_of? Net::HTTPOK)
@@ -259,8 +271,7 @@ module ManageEngine
259
271
 
260
272
  begin
261
273
  #Check for Azure environment
262
- # response = Net::HTTP.get_response(URI('http://169.254.169.254/metadata/v1/maintenance'))
263
- url = URI.parse('http://169.254.169.254/metadata/v1/maintenance')
274
+ url = URI.parse('http://169.254.169.254/metadata/v1/maintenance') # Azure metadata url
264
275
  request = Net::HTTP::Get.new(url.path)
265
276
  response = Net::HTTP.start(url.host, url.port, :read_timeout => 2) {|http| http.request(request)}
266
277
  if (response.kind_of? Net::HTTPOK)
@@ -270,6 +281,15 @@ module ManageEngine
270
281
  rescue Exception => e
271
282
  end
272
283
 
284
+ begin
285
+ # Check for Heroku env. In the backgroud it is using AWS EC2, hence sending as AWS
286
+ if (ENV.has_key?('DYNO') || ENV.has_key?('STACK'))
287
+ @hostType = "AWS"
288
+ return @hostType
289
+ end
290
+ rescue Exception => e
291
+ end
292
+
273
293
  @hostType = nil
274
294
  end
275
295
 
@@ -289,11 +309,24 @@ module ManageEngine
289
309
  def getEnvData
290
310
  env = Hash.new
291
311
  begin
292
- ENV.to_hash.each do |key, value|
293
- env[key] = value
294
- end
295
- #env["Application Path"]="#{Rails.root}"
312
+ env["OS"] = Gem::Platform.local.os
313
+ env["OS Version"] = Gem::Platform.local.version
314
+ env["OS Arch"] = Gem::Platform.local.cpu
315
+ env["Ruby Version"] = "#{RUBY_VERSION}"
316
+ gemSpecs = Gem.loaded_specs[@obj.constants.s247_apm_gem]
317
+ if (gemSpecs == nil)
318
+ gemSpecs = Gem.loaded_specs[@obj.constants.apm_gem]
319
+ end
320
+ if (gemSpecs != nil)
321
+ env["Agent Installed Path"] = gemSpecs.full_gem_path
322
+ end
323
+
324
+ # ENV.to_hash.each do |key, value|
325
+ # env[key] = value
326
+ # end
327
+ env["Application Path"] = "#{Dir.pwd}"
296
328
  rescue Exception=>e
329
+ @obj.log.warn "Error in capturing env data. #{e.message}"
297
330
  end
298
331
  env
299
332
  end
@@ -40,7 +40,7 @@ module ManageEngine
40
40
  def getLogsPath
41
41
  props = {}
42
42
  begin
43
- if FileTest.exists?(@obj.constants.apm_conf)
43
+ if FileTest.exist?(@obj.constants.apm_conf)
44
44
  propsFile=File.open(@obj.constants.apm_conf, 'r')
45
45
  propsFile.read.each_line do |line|
46
46
  line.strip!
@@ -9,7 +9,16 @@ module ManageEngine
9
9
  def initialize
10
10
  @obj = ManageEngine::APMObjectHolder.instance
11
11
  @obj.log.debug "Agent Initialization - START"
12
- doConnect
12
+ if @obj.config.delayedStart
13
+ @obj.log.info "Delaying agent handshake as per configuration.."
14
+ @obj.agent_initialized = true # to be reset when connecting
15
+ @apm = Thread.new do
16
+ sleep ((@obj.config.connect_interval).to_i)/2
17
+ doConnect
18
+ end
19
+ else
20
+ doConnect
21
+ end
13
22
 
14
23
  if !@obj.shutdown && @obj.agent_initialized
15
24
  @obj.log.info "Agent Initialization - DONE"
@@ -26,12 +35,12 @@ module ManageEngine
26
35
  #@obj.instrumenter.doUnSubscribe
27
36
  @obj.shutdownagent
28
37
  end
29
-
30
-
31
- end
38
+ end
32
39
 
33
40
  def doConnect
34
41
  begin
42
+ @obj.agent_initialized=false #resetting, to go with the flow
43
+
35
44
  if @obj.shutdown
36
45
  @obj.log.info "[ Problem in Agent Startup ]"
37
46
  else
@@ -39,17 +48,20 @@ module ManageEngine
39
48
  resp = nil
40
49
  if @obj.config.alreadyconnected
41
50
  @obj.log.debug "[doConnect] Already Connected - Make Contact - Instance id = #{@obj.config.instance_id}"
42
- if @obj.config.site24x7
43
- resp = startConnect "?license.key="+@obj.config.license_key+"&instance_id="+@obj.config.instance_id,agentInfo
44
- else
45
- resp = startConnect "?instance_id="+@obj.config.instance_id,agentInfo
46
- end
51
+ resp = startConnect "?license.key="+@obj.config.license_key+"&instance_id="+@obj.config.instance_id,agentInfo
47
52
  else
48
53
  @obj.log.debug "[doConnect] Going to connect - New "
49
- if @obj.config.site24x7
50
- resp = startConnect "?license.key="+@obj.config.license_key,agentInfo
54
+ # if @obj.config.site24x7
55
+ # resp = startConnect "?license.key="+@obj.config.license_key,agentInfo
56
+ # else
57
+ # resp = startConnect "",agentInfo
58
+ # end
59
+ # Checking the license pattern for APM as per team requirement
60
+ if !@obj.config.site24x7 && !@obj.config.license_key.match?("APMI_[A-Fa-f0-9]{64}")
61
+ @obj.log.info "Invalid license key for App Manager, aborting agent init"
62
+ @obj.shutdown=true
51
63
  else
52
- resp = startConnect "",agentInfo
64
+ resp = startConnect "?license.key="+@obj.config.license_key,agentInfo
53
65
  end
54
66
  end
55
67
 
@@ -19,7 +19,7 @@ module ManageEngine
19
19
 
20
20
  u = url uri
21
21
  #@obj.log.info "[connector] [ POST] START"
22
- @obj.log.debug "[connector] [ POST] : \n\n#{u}\n\n#{data}\n\n"
22
+ @obj.log.debug "[connector] [ POST] : #{u}\n#{data}"
23
23
  con = connection(u)
24
24
  req = Net::HTTP::Post.new(u.request_uri,initheader = {'Content-Type' =>'application/json'})
25
25
  req.body=data.to_json
@@ -16,17 +16,17 @@ class APMWorker
16
16
  @obj = ManageEngine::APMObjectHolder.instance
17
17
 
18
18
  if @status=="working"
19
- @obj.log.debug "woker thread already started"
19
+ @obj.log.debug "worker thread already started"
20
20
  elsif @status == "initialized"
21
21
  @obj.log.info "start worker thread for - #{Process.pid} :: #{@status} "
22
22
  #@obj.log.info "Starting APMWorker Thread #{Process.pid} "
23
23
  @apm = Thread.new do
24
24
  @status = 'working'
25
25
  while !@obj.shutdown do
26
+ sleep (@obj.config.connect_interval).to_i
26
27
  checkforagentstatus
27
28
  updateConfig
28
29
  dc
29
- sleep (@obj.config.connect_interval).to_i
30
30
  end#w
31
31
  @status= "end"
32
32
  @obj.log.debug "Worker thread ends"
@@ -3,7 +3,7 @@ module ManageEngine
3
3
  class APMConstants
4
4
 
5
5
  attr_reader :conf_location, :apm_gem,:s247_apm_gem,:apm_conf,:agent_conf,:connection_open_timeout,:connection_read_timeout,:connect_uri,:connect_data_uri,:connect_trace_uri,:connect_config_update_uri,:mergepattern_conf
6
- attr_reader :site24x7USurl, :site24x7EUurl, :site24x7CNurl, :site24x7INurl, :site24x7AUurl
6
+ attr_reader :site24x7USurl, :site24x7EUurl, :site24x7CNurl, :site24x7INurl, :site24x7AUurl, :site24x7GDurl, :site24x7JPurl
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_namespace,:mf_name,:mf_all,:agent_store,:agent_lock,:mf_overflow
9
9
  attr_reader :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
@@ -12,8 +12,8 @@ module ManageEngine
12
12
  def initialize
13
13
  @conf_location=ENV.has_key?('APMINSIGHT_HOME') ? ENV['APMINSIGHT_HOME']+"/" : "./"
14
14
  #File path for APM Conf file
15
- @apm_gem=@conf_location + "apminsight"
16
- @s247_apm_gem=@conf_location + "site24x7_apminsight"
15
+ @apm_gem="apminsight"
16
+ @s247_apm_gem="site24x7_apminsight"
17
17
 
18
18
  #File path for APM Conf file
19
19
  @apm_conf=@conf_location + "apminsight.conf"
@@ -55,6 +55,8 @@ module ManageEngine
55
55
  @site24x7CNurl = "https://plusinsight.site24x7.cn/"
56
56
  @site24x7AUurl = "https://plusinsight.site24x7.net.au/"
57
57
  @site24x7INurl = "https://plusinsight.site24x7.in/"
58
+ @site24x7GDurl = "https://gdplusinsight.site24x7.com/"
59
+ @site24x7JPurl = "https://plusinsight.site24x7.jp/"
58
60
 
59
61
  #Response Codes
60
62
  @licence_expired = 701
@@ -50,22 +50,21 @@ module ManageEngine
50
50
  props = {}
51
51
  begin
52
52
  propsFile=File.open(filepath, 'r')
53
- propsFile.read.each_line do |line|
54
- line.strip!
55
- if (line[0] != ?# and line[0] != ?=)
56
- i = line.index('=')
57
- if (i)
58
- props[line[0..i - 1].strip] = line[i + 1..-1].strip
59
- else
60
- props[line] = ''
61
- end
62
- end
63
- end
53
+ propsFile.read.each_line do |line|
54
+ line.strip!
55
+ if (line[0] != ?# and line[0] != ?=)
56
+ i = line.index('=')
57
+ if (i)
58
+ props[line[0..i - 1].strip] = line[i + 1..-1].strip
59
+ else
60
+ props[line] = ''
61
+ end
62
+ end
63
+ end
64
+ propsFile.close
64
65
  rescue Exception=>e
65
66
  @log.info "Problem in Reading Property File : #{e.message} "
66
67
  @log.error "#{e.backtrace}"
67
- ensure
68
- propsFile.close
69
68
  end
70
69
  props
71
70
  end
data/lib/agent/version.rb CHANGED
@@ -6,8 +6,8 @@
6
6
 
7
7
  module ManageEngine
8
8
  class APMInsight
9
- VERSION = '1.8.3'
9
+ VERSION = '1.8.7'
10
10
  MAJOR_VERSION = '1.8'
11
- MINOR_VERSION = '3'
11
+ MINOR_VERSION = '7'
12
12
  end
13
13
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 8
8
- - 3
9
- version: 1.8.3
8
+ - 7
9
+ version: 1.8.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Adithyan P
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2021-03-23 00:00:00 +05:30
17
+ date: 2023-07-05 00:00:00 +05:30
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency