lib/logster/middleware/viewer.rb in logster-0.0.2 vs lib/logster/middleware/viewer.rb in logster-0.0.3
- old
+ new
@@ -3,27 +3,36 @@
module Logster
module Middleware
class Viewer
PATH_INFO = "PATH_INFO".freeze
+ SCRIPT_NAME = "SCRIPT_NAME".freeze
- def initialize(app, config)
+ def initialize(app)
@app = app
- @logs_path = config[:path] || "/logs"
- @path_regex = Regexp.new("(#{@logs_path}$)|(#{@logs_path}(/.*))$")
- @store = config[:store] or raise ArgumentError.new("store")
+ @logs_path = Logster.config.subdirectory || "/logs"
+ @path_regex = Regexp.new("^(#{@logs_path}$)|^(#{@logs_path}(/.*))$")
+ @store = Logster.store or raise ArgumentError.new("store")
@assets_path = File.expand_path("../../../../assets", __FILE__)
@fileserver = Rack::File.new(@assets_path)
+ @authorize_callback = Logster.config.authorize_callback
end
def call(env)
path = env[PATH_INFO]
+ script_name = env[SCRIPT_NAME]
+ if script_name && script_name.length > 0
+ path = script_name + path
+ end
+
if resource = resolve_path(path)
+ return @app.call(env) if @authorize_callback && !@authorize_callback.call(env)
+
if resource =~ /\.js$|\.handlebars$|\.css$/
env[PATH_INFO] = resource
@fileserver.call(env)
elsif resource.start_with?("/messages.json")
serve_messages(Rack::Request.new(env))
@@ -48,16 +57,29 @@
if(filter = req["filter"])
filter = filter.split("_").map{|s| s.to_i}
opts[:severity] = filter
end
+ if search = req["search"]
+ search = (parse_regex(search) || search) if req["regex_search"] == "true"
+ opts[:search] = search
+ end
+
payload = {
messages: @store.latest(opts),
total: @store.count
}
json = JSON.generate(payload)
[200, {"Content-Type" => "application/json"}, [json]]
+ end
+
+ def parse_regex(string)
+ if string =~ /\/(.+)\/(.*)/
+ s = $1
+ flags = Regexp::IGNORECASE if $2 && $2.include?("i")
+ Regexp.new(s, flags) rescue nil
+ end
end
def resolve_path(path)
if path =~ @path_regex
$3 || "/"