def save
doc = @worker.storage.get('variables', 'workers') || {}
doc['type'] = 'variables'
doc['_id'] = 'workers'
now = Time.now
@msgs = @msgs.drop_while { |msg|
Time.parse(msg['processed_at']) < now - 3600
}
mm = @msgs.drop_while { |msg|
Time.parse(msg['processed_at']) < now - 60
}
hour_count = @msgs.size < 1 ? 1 : @msgs.size
minute_count = mm.size < 1 ? 1 : mm.size
key = [
@worker.name, @ip.gsub(/\./, '_'), $$.to_s
].join('/')
(doc['workers'] ||= {})[key] = {
'class' => @worker.class.to_s,
'name' => @name,
'ip' => @ip,
'hostname' => @hostname,
'pid' => $$,
'system' => @system,
'put_at' => Ruote.now_to_utc_s,
'uptime' => Time.now - @since,
'processed_last_minute' =>
minute_count,
'wait_time_last_minute' =>
mm.inject(0.0) { |s, m| s + m['wait_time'] } / minute_count.to_f,
'processed_last_hour' =>
hour_count,
'wait_time_last_hour' =>
@msgs.inject(0.0) { |s, m| s + m['wait_time'] } / hour_count.to_f
}
r = @worker.storage.put(doc)
@last_save = Time.now
save if r != nil
end