Class: Tengine::Event

Inherits:
Object
  • Object
show all
Defined in:
lib/tengine/event.rb

Overview

Serializable Class of object to send to an MQ or to receive from MQ.

Constant Summary collapse

LEVELS =

from level to level_key

{
    0 => :gr_heartbeat,
    1 => :debug,
    2 => :info,
    3 => :warn,
    4 => :error,
    5 => :fatal,
}.freeze
LEVELS_INV =

from level_key to level

LEVELS.invert.freeze
ATTRIBUTE_NAMES =
[:event_type_name, :key, :source_name, :occurred_at, :level, :sender_name, :properties].freeze

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attrs = nil) ⇒ Tengine::Event

constructor

Parameters:

  • attrs (Hash) (defaults to: nil)

    the options for attributes

Options Hash (attrs):

  • :key (String)

    attriute key

  • :event_type_name (String)

    event_type_name

  • :source_name (String)

    source_name

  • :occurred_at (Time)

    occurred_at

  • :level (Integer)

    level

  • :level_key (Symbol)

    level_key

  • :sender_name (String)

    sender_name

  • :properties (Hash)

    properties



89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/tengine/event.rb', line 89

def initialize(attrs = nil)
  if attrs
    raise ArgumentError, "attrs must be a Hash but was #{attrs.inspect}" unless attrs.is_a?(Hash)
    attrs.each do |key, value|
      send("#{key}=", value)
    end
  end
  klass = self.class
  @key ||= klass.uuid_gen.generate # Stringを返す
  @source_name ||= klass.default_source_name
  @sender_name ||= klass.default_sender_name
  @level ||= klass.default_level
  @occurred_at ||= Time.now.utc
end

Class Attribute Details

.default_senderObject



30
31
32
# File 'lib/tengine/event.rb', line 30

def default_sender
  @default_sender ||= Tengine::Event::Sender.new(mq_suite)
end

.host_name_commandObject



53
# File 'lib/tengine/event.rb', line 53

def host_name_command; @host_name_command ||= "hostname"; end

.mq_suiteObject



27
# File 'lib/tengine/event.rb', line 27

def mq_suite; @mq_suite ||= Tengine::Mq::Suite.new(config); end

Instance Attribute Details

#event_type_nameObject

イベント種別名。



110
111
112
# File 'lib/tengine/event.rb', line 110

def event_type_name
  @event_type_name
end

#keyObject

キー。インスタンス生成時に同じ意味のイベントには同じキーが割り振られます。



106
107
108
# File 'lib/tengine/event.rb', line 106

def key
  @key
end

#levelObject

イベントの通知レベル



147
148
149
# File 'lib/tengine/event.rb', line 147

def level
  @level
end

#occurred_atObject

イベントの発生日時。



120
121
122
# File 'lib/tengine/event.rb', line 120

def occurred_at
  @occurred_at
end

#sender_nameObject

イベントの送信者名。



172
173
174
# File 'lib/tengine/event.rb', line 172

def sender_name
  @sender_name
end

#source_nameObject

イベントの発生源名。



115
116
117
# File 'lib/tengine/event.rb', line 115

def source_name
  @source_name
end

Class Method Details

.configObject



23
# File 'lib/tengine/event.rb', line 23

def config; @config ||= {}; end

.config=(v) ⇒ Object



24
# File 'lib/tengine/event.rb', line 24

def config=(v); @config = v; end

.default_levelObject

levelが指定されていない場合に設定される文字列を返します config に値が設定されていなかったらhost_nameの値が使用されます



73
74
75
# File 'lib/tengine/event.rb', line 73

def default_level
  LEVELS_INV[(config[:default_level_key] || :info).to_sym]
end

.default_sender_nameObject

sender_nameが指定されていない場合に設定される文字列を返します config に値が設定されていなかったらhost_nameの値が使用されます



69
# File 'lib/tengine/event.rb', line 69

def default_sender_name; config[:default_sender_name] || "#{host_name}/#{Process.pid}"; end

.default_source_nameObject

source_nameが指定されていない場合に設定される文字列を返します config に値が設定されていなかったらhost_nameの値が使用されます



65
# File 'lib/tengine/event.rb', line 65

def default_source_name; config[:default_source_name] || "#{host_name}/#{Process.pid}"; end

.fire(*args, &block) ⇒ Object

see Tengine::Event::Sender#fire



19
20
21
# File 'lib/tengine/event.rb', line 19

def fire(*args, &block)
  default_sender.fire(*args, &block)
end

.host_nameString

ホスト名を取得する 内部ではhost_name_commandで指定されたコマンドを実行しています。

Returns:

  • (String)


59
60
61
# File 'lib/tengine/event.rb', line 59

def host_name
  `#{host_name_command}`.strip
end

.parse(str) ⇒ Object

jsonの文字列からTengine::Eventのオブジェクトを解釈して生成します



41
42
43
44
45
46
47
48
49
# File 'lib/tengine/event.rb', line 41

def parse(str)
  case raw_parsed = JSON.parse(str)
  when Hash then
    new(raw_parsed)
  when Array then
    raw_parsed.map{|hash| new(hash)}
  else
  end
end

.uuid_genObject



34
35
36
37
38
# File 'lib/tengine/event.rb', line 34

def uuid_gen
  # uuidtools と uuid のどちらが良いかは以下のサイトを参照して uuid を使うようにしました。
  # http://d.hatena.ne.jp/kiwamu/20090205/1233826235
  @uuid_gen ||= ::UUID.new
end

Instance Method Details

#attributesHash

Returns attributes of this object.

Returns:

  • (Hash)

    attributes of this object



189
190
191
192
193
194
195
# File 'lib/tengine/event.rb', line 189

def attributes
  ATTRIBUTE_NAMES.inject({}) do |d, attr_name|
    v = send(attr_name)
    d[attr_name] = v unless v.blank?
    d
  end
end

#level_keyObject



158
# File 'lib/tengine/event.rb', line 158

def level_key; LEVELS[level];end

#level_key=(v) ⇒ Object



159
160
161
162
163
164
165
166
167
168
# File 'lib/tengine/event.rb', line 159

def level_key=(v)
  if v
    unless val = LEVELS_INV[v.to_sym]
      raise ArgumentError, "Invalid level_key #{v.inspect}. It must be one of #{LEVELS_INV.keys.inspect}"
    end
    self.level = val
  else
    self.level = nil
  end
end

#propertiesObject



178
179
180
# File 'lib/tengine/event.rb', line 178

def properties
  @properties ||= {}
end

#properties=(hash) ⇒ Object



182
183
184
# File 'lib/tengine/event.rb', line 182

def properties=(hash)
  @properties = (hash || {}).stringify_keys
end

#transmitted?Boolean

Returns:

  • (Boolean)


197
198
199
# File 'lib/tengine/event.rb', line 197

def transmitted?
  not Tengine::Mq::Suite.pending?(self)
end