File: loadaverage.rb

package info (click to toggle)
mikutter 3.5.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 10,256 kB
  • ctags: 2,165
  • sloc: ruby: 19,079; sh: 205; makefile: 20
file content (55 lines) | stat: -rw-r--r-- 1,689 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#-*- coding: utf-8 -*-
#
# CPU Load
#

# Display Load Average as graph if support gruff

require File.expand_path(File.join(File.dirname(__FILE__),'..', 'utils'))
miquire :plugin, 'plugin'
miquire :lib, 'graph'

require 'tempfile'

if command_exist?('uptime')
  Module.new do

    def self.boot
      config = confload("#{Environment::CONFROOT}loadaverage")
      @interval = config.fetch(:interval, 60 * 24)
      reset()
    end

      plugin = Plugin::create(:ping)
      plugin.add_event(:period){ |service|
        mins = load_average
        @figure_la['1min'] << mins[0]
        @figure_la['5min'] << mins[1]
        @figure_la['15min'] << mins[2]
        @label.call(nil)
        p @lastcheck
        p @interval
        if((@lastcheck + (@interval*60)) < Time.now) then
          notice "loadaverage: figure tweet"
          service.post(Graph.drawgraph(@figure_la,
                                       :title => 'Load Average',
                                       :label => @label,
                                       :tags => ['loadaverage'],
                                       :start => @lastcheck,
                                       :end => Time.now))
          reset end
        notice "loadaverage: next graph upload: #{(@lastcheck + (@interval*60) - Time.now)/60} min after" }

    def self.reset
      @lastcheck = Time.now
      @figure_la = Hash['1min', [], '5min', [], '15min', []]
      @label = Graph.gen_graph_label_defer end

    def self.load_average
      open('| uptime'){ |uptime|
        if(/load averages?:\s*(\d+\.\d+)[^\d]+(\d+\.\d+)[^\d]+(\d+\.\d+)/ === uptime.read)
          return $1.to_f, $2.to_f, $3.to_f end } end

    boot
  end
end