server/webstats.rb in bloopletech-webstats-0.3.0 vs server/webstats.rb in bloopletech-webstats-0.5.0
- old
+ new
@@ -15,25 +15,19 @@
GC.start
end
end
class NilClass
- def to_json
- "null"
- end
+ def to_json; "null"; end
end
class TrueClass
- def to_json
- "true"
- end
+ def to_json; "true"; end
end
class FalseClass
- def to_json
- "false"
- end
+ def to_json; "false"; end
end
class String
def underscore
self.gsub(/::/, '/').
@@ -54,21 +48,50 @@
end
alias_method :to_json, :inspect
end
class Array
+ def formatted!
+ each_with_index do |v, i|
+ if v.is_a? Numeric
+ self[i] = v.formatted
+ elsif v.is_a? Hash or v.is_a? Array
+ self[i] = self[i].dup.formatted!
+ end
+ end
+ end
+
+ def stringify_keys!
+ each_with_index { |v, i| self[i] = self[i].dup.stringify_keys! if v.is_a? Hash }
+ end
+
def to_json
"[#{map { |e| e.to_json }.join(',')}]"
end
end
class Hash
- def formatted
- out = self.dup
- out.each_pair { |k, v| out[k] = v.formatted }
- out
+ def formatted!
+ each_pair do |k, v|
+ if v.is_a? Numeric
+ self[k] = v.formatted
+ elsif v.is_a? Hash or v.is_a? Array
+ self[k] = self[k].dup.formatted!
+ end
+ end
end
+
+ def stringify_keys!
+ keys.each { |key| self[key.to_s] = delete(key) }
+ each_pair { |k, v| self[k] = self[k].dup.stringify_keys! if v.is_a? Hash }
+ end
+
+ alias_method :undecorated_get, :[]
+ def [](key)
+ undecorated_get(key) or undecorated_get(key.is_a?(String) ? key.to_sym : key.to_s)
+ end
+
def to_json
arr = []
each_pair { |k, v| arr << "#{k.to_json}:#{v.to_json}" }
"{#{arr.join(',')}}"
end
@@ -97,29 +120,25 @@
DataProviders.preload
WEBSTATS_PATH = File.expand_path("~/.webstats")
-settings = {}
+$settings = {}
if File.exists?(WEBSTATS_PATH)
- settings = YAML.load(IO.read(WEBSTATS_PATH))
+ $settings = YAML.load(IO.read(WEBSTATS_PATH))
else
- DataProviders::DATA_SOURCES_CLASSES.each_pair do |k, v|
- settings[k] = v.default_settings
- end
-
- File.open(WEBSTATS_PATH, "w") do |f|
- YAML.dump(settings, f)
- end
+ $settings['webstats'] = { 'password' => nil }
+ DataProviders::DATA_SOURCES_CLASSES.each_pair { |k, v| $settings[k.to_s] = v.default_settings.stringify_keys! }
+ File.open(WEBSTATS_PATH, "w") { |f| YAML.dump($settings, f) }
end
-DataProviders.setup(settings)
+DataProviders.setup($settings)
class Webstats < WEBrick::HTTPServlet::AbstractServlet
def do_GET(req, res)
- WEBrick::HTTPAuth.basic_auth(req, res, "Webstats") { |user, pass| user == 'webstats' and pass == ARGV[0] } unless ARGV.empty?
+ WEBrick::HTTPAuth.basic_auth(req, res, "Webstats") { |u, p| u == 'webstats' and p == $settings[:webstats][:password] } unless $settings[:webstats][:password].nil?
body = ""
if req.path_info == '/'
body << <<-EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
@@ -199,45 +218,20 @@
out = {}
DataProviders::DATA_SOURCES.each_pair do |k, v|
out[k] = v.get.dup
end
- fix_leaves_hash(out)
+ out.formatted!
body << out.to_json
elsif req.path_info == '/information'
out = {}
DataProviders::DATA_SOURCES.each_pair { |k, v| out[k] = v.information }
body << out.to_json
end
res.body = body
res['Content-Type'] = "text/html"
- end
-
- private
- def fix_leaves_array(array)
- array.each_with_index do |v, i|
- if v.is_a? Numeric
- array[i] = v.formatted
- elsif v.is_a? Hash
- array[i] = fix_leaves_hash(array[i].dup)
- elsif v.is_a? Array
- array[i] = fix_leaves_array(array[i].dup)
- end
- end
- end
-
- def fix_leaves_hash(hash)
- hash.each_pair do |k, v|
- if v.is_a? Numeric
- hash[k] = v.formatted
- elsif v.is_a? Hash
- hash[k] = fix_leaves_hash(hash[k].dup)
- elsif v.is_a? Array
- hash[k] = fix_leaves_array(hash[k].dup)
- end
- end
end
end
s = WEBrick::HTTPServer.new(:Port => 9970)
\ No newline at end of file