Class: Apache2

Inherits:
Object
  • Object
show all
Includes:
Graphs::AreaStackedChart, Mongoid::Attributes::Dynamic, Mongoid::Document, Mongoid::Timestamps
Defined in:
lib/app/models/apache2.rb

Class Method Summary collapse

Class Method Details

.all_vhosts_charts(options) ⇒ Object



16
17
18
19
20
21
# File 'lib/app/models/apache2.rb', line 16

def self.all_vhosts_charts(options)
  charts = []
  stats = Apache2.where( {:timestamp => { :$gte => options[:start],:$lt => options[:end]}, :host_id => options[:host_id], :plugin_id => options[:plugin_id] }).order(:timestamp).all.group_by{|v| v.vhost_name}
  charts = self.vhosts_requests_and_bytes_per_sec(stats)
  return charts
end

.chart_data(options = {}) ⇒ Object



10
11
12
13
14
# File 'lib/app/models/apache2.rb', line 10

def self.chart_data(options = {})
  charts = []
  charts = self.all_vhosts_charts(options)
  return charts
end

.graphsObject



189
190
191
# File 'lib/app/models/apache2.rb', line 189

def self.graphs
  {}
end

.statuses_propertiesObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/app/models/apache2.rb', line 79

def self.statuses_properties
  [
   { :value_field => "200",
     :hidden => false,
     :line_color => "#00FF00",
     :line_thickness => 3,
     :title => "Status 200"},
   { :value_field => "202",
     :hidden => false,
     :line_color => "#00FF33",
     :line_thickness => 3,
     :title => "Status 202"},
   { :value_field => "204",
     :hidden => false,
     :line_color => "#00FF66",
     :line_thickness => 3,
     :title => "Status 204"},
   { :value_field => "206",
     :hidden => false,
     :line_color => "#00FF88",
     :line_thickness => 3,
     :title => "Status 206"},
   { :value_field => "300",
     :hidden => false,
     :line_color => "#FFFF00",
     :line_thickness => 3,
     :title => "Status 301"},
   { :value_field => "301",
     :hidden => false,
     :line_color => "#FFEE00",
     :line_thickness => 3,
     :title => "Status 300"},
   { :value_field => "302",
     :hidden => false,
     :line_color => "#FFDD00",
     :line_thickness => 3,
     :title => "Status 302"},
   { :value_field => "303",
     :hidden => false,
     :line_color => "#FFAA00",
     :line_thickness => 3,
     :title => "Status 303"},
   { :value_field => "304",
     :hidden => false,
     :line_color => "#FF9900",
     :line_thickness => 3,
     :title => "Status 304"},
   { :value_field => "400",
     :hidden => false,
     :line_color => "#FF8800",
     :line_thickness => 3,
     :title => "Status 400"},
   { :value_field => "403",
     :hidden => false,
     :line_color => "#FF6600",
     :line_thickness => 3,
     :title => "Status 403"},
   { :value_field => "404",
     :hidden => false,
     :line_color => "#FF4400",
     :line_thickness => 3,
     :title => "Status 404"},
   { :value_field => "405",
     :hidden => false,
     :line_color => "#EE0000",
     :line_thickness => 3,
     :title => "Status 405"},
   { :value_field => "406",
     :hidden => false,
     :line_color => "#CC0000",
     :line_thickness => 3,
     :title => "Status 406"},
   { :value_field => "407",
     :hidden => false,
     :line_color => "#BB0000",
     :line_thickness => 3,
     :title => "Status 407"},
   { :value_field => "408",
     :hidden => false,
     :line_color => "#AA0000",
     :line_thickness => 3,
     :title => "Status 408"},
   { :value_field => "420",
     :hidden => false,
     :line_color => "#550000",
     :line_thickness => 3,
     :title => "Status 420"},
   { :value_field => "500",
     :hidden => false,
     :line_color => "#FF0000",
     :line_thickness => 3,
     :title => "Status 500"},
   { :value_field => "501",
     :hidden => false,
     :line_color => "#FF2200",
     :line_thickness => 3,
     :title => "Status 501"},
   { :value_field => "502",
     :hidden => false,
     :line_color => "#FF4400",
     :line_thickness => 3,
     :title => "Status 502"},
   { :value_field => "503",
     :hidden => false,
     :line_color => "#FF6600",
     :line_thickness => 3,
     :title => "Status 503"}
  ]
end

.vhosts_requests_and_bytes_per_sec(stats) ⇒ Object



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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/app/models/apache2.rb', line 23

def self.vhosts_requests_and_bytes_per_sec(stats)
  charts = []
  stats.each_pair do |vhost,data|
    chart_bytes = self.chart_structure({:title => "Bytes sent per second for #{vhost} vhost", :value_axis => { :title => "Bytes sent per second"}})
    chart_requests = self.chart_structure({:title => "Request sent per second for #{vhost} vhost", :value_axis => { :title => "request sent per second"}})

    prev = {}
    statuses = {}
    data.each do |vhost_data|
      current = {:bytes_sent_per_sec => {}, :requests_per_sec => {}}
      current[:bytes_sent_per_sec]['timestamp'] = vhost_data['timestamp'].to_f * 1000
	statuses.keys.each do |s|
        current[:bytes_sent_per_sec][s] = 0
	end
      current[:requests_per_sec]['timestamp'] = vhost_data['timestamp'].to_f * 1000
      statuses.keys.each do |s|
        current[:requests_per_sec][s] = 0
	end
      vhost_data['stats'].each_pair do |status, values|
        statuses[status] = true
        unless prev.has_key?(status) then
          prev[status] = values
   prev[status]['timestamp'] = vhost_data['timestamp']
          next
        end
    
        time_diff = vhost_data['timestamp'].to_i - prev[status]['timestamp'].to_i
        bytes_sent_per_sec = ((values["bytes_sent"] - prev[status]['bytes_sent'])/time_diff.to_f).round(3)
        requests_per_sec = ((values['requests'] - prev[status]['requests'])/time_diff.to_f).round(3)
 #TODO Interpolation of no data intervals
 #TODO take into account requests also
 if bytes_sent_per_sec < 0
   prev[status] = values
   prev[status]['timestamp'] = vhost_data['timestamp']
   next
 end
     
        current[:bytes_sent_per_sec][status] = bytes_sent_per_sec.to_f
        current[:requests_per_sec][status] = requests_per_sec.to_f
 prev[status] = values
 prev[status]['timestamp'] = vhost_data['timestamp']
	end
      chart_requests[:graph_data] << current[:requests_per_sec]
      chart_bytes[:graph_data] << current[:bytes_sent_per_sec]
    end
    statuses.keys.sort.each do |status|
	properties =  self.statuses_properties.select{|a| a[:value_field] == status.to_s}.first
	p status
      chart_requests[:graphs] << { :value_axis => 'valueAxis1', :value_field => status.to_s, :line_color => properties[:line_color],  :balloon_text => "[[title]]: ([[value]])", :line_thickness => 1, :line_alpha => 1, :fill_alphas => 0.8, :graph_type => 'line' }
      chart_bytes[:graphs] << { :value_axis => 'valueAxis1', :value_field => status.to_s, :line_color => properties[:line_color],  :balloon_text => "[[title]]: ([[value]])", :line_thickness => 1, :line_alpha => 1, :fill_alphas => 0.8, :graph_type => 'line' }
    end
    charts << chart_bytes << chart_requests
  end
  charts
end