Module: Dapp::Dapp::Sentry

Included in:
Dapp::Dapp
Defined in:
lib/dapp/dapp/sentry.rb

Instance Method Summary collapse

Instance Method Details

#_make_sentry_params(level: nil, tags: {}, extra: {}, user: {}) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/dapp/dapp/sentry.rb', line 37

def _make_sentry_params(level: nil, tags: {}, extra: {}, user: {})
  Marshal.load(Marshal.dump({
    level: level,
    tags:  _sentry_tags_context.merge(tags),
    extra: _sentry_extra_context.merge(extra),
    user:  _sentry_user_context.merge(user),
  }))
end

#_sentry_extra_contextObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/dapp/dapp/sentry.rb', line 46

def _sentry_extra_context
  @_sentry_extra_context ||= {
    "pwd" => Dir.pwd,
    "dapp-dir" => self.work_dir,
    "build-dir" => self.build_dir,
    "options" => self.options,
    "env-options" => {
      "DAPP_FORCE_SAVE_CACHE" => ENV["DAPP_FORCE_SAVE_CACHE"],
      "DAPP_BIN_DAPPFILE_YML" => ENV["DAPP_BIN_DAPPFILE_YML"],
      "ANSIBLE_ARGS" => ENV["ANSIBLE_ARGS"],
      "DAPP_CHEF_DEBUG" => ENV["DAPP_CHEF_DEBUG"],
    },
  }.tap {|extra|
    extra["ci-env"] = {"CI" => ENV["CI"]}
    ENV.select {|k, v| k.start_with?("CI_")}.each do |k, v|
      extra["ci-env"][k] = v
    end
  }
end

#_sentry_tags_contextObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/dapp/dapp/sentry.rb', line 66

def _sentry_tags_context
  @_sentry_tags_context ||= {
    "dapp-name" => self.name,
    "dapp-short-version" => ::Dapp::VERSION.split(".")[0..1].join("."),
    "dapp-version" => ::Dapp::VERSION,
    "dapp-build-cache-version" => ::Dapp::BUILD_CACHE_VERSION,
    "dapp-command" => self.options[:dapp_command],
  }.tap {|tags|
    # FIXME: precache this info after Dapp object initialization
    #if git_own_repo_exist? && git_own_repo.remote_origin_url
      #tags["git-host"] = self.get_host_from_git_url(git_own_repo.remote_origin_url)

      #git_name = self.git_url_to_name(git_own_repo.remote_origin_url)

      #tags["git-group"] = git_name.partition("/")[0]
      #tags["git-name"] = git_name
    #end

    begin
      ver = self.class.host_docker_minor_version
      tags["docker-minor-version"] = ver.to_s
    rescue ::Exception
    end
  }
end

#_sentry_user_contextObject



92
93
94
# File 'lib/dapp/dapp/sentry.rb', line 92

def _sentry_user_context
  @__sentry_user_context ||= {}
end

#ensure_sentry_configuredObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dapp/dapp/sentry.rb', line 19

def ensure_sentry_configured
  return false unless sentry_settings = settings["sentry"]

  unless @sentry_settings_configured
    Raven.configure do |config|
      logger = ::Logger.new(STDOUT)
      logger.level = ::Logger::WARN

      config.logger = logger
      config.dsn = sentry_settings["dsn"]
    end

    @sentry_settings_configured = true
  end

  return true
end

#sentry_exception(exception, **kwargs) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/dapp/dapp/sentry.rb', line 10

def sentry_exception(exception, **kwargs)
  return if not ensure_sentry_configured
  (kwargs[:tags] ||= {})['error-code'] = begin
    net_status = exception.net_status
    [net_status[:context], net_status[:code]].compact.join('_')
  end
  Raven.capture_exception(exception, _make_sentry_params(**kwargs))
end

#sentry_message(msg, **kwargs) ⇒ Object



4
5
6
7
8
# File 'lib/dapp/dapp/sentry.rb', line 4

def sentry_message(msg, **kwargs)
  return if not ensure_sentry_configured
  kwargs[:level] ||= "info"
  Raven.capture_message(msg, _make_sentry_params(**kwargs))
end