diff --git a/app/controllers/api/v1/problems_controller.rb b/app/controllers/api/v1/problems_controller.rb index 28a0e19..d25e139 100644 --- a/app/controllers/api/v1/problems_controller.rb +++ b/app/controllers/api/v1/problems_controller.rb @@ -2,18 +2,21 @@ class Api::V1::ProblemsController < ApplicationController respond_to :json, :xml def index + query = {} + fields = %w{app_id app_name environment message where first_notice_at last_notice_at resolved resolved_at notices_count} + if params.key?(:start_date) && params.key?(:end_date) - start_date = Date.parse(params[:start_date]) - end_date = Date.parse(params[:end_date]) - @problems = Problem.in_date_range(start_date..end_date) - else - @problems = Problem.all + start_date = Time.parse(params[:start_date]).utc + end_date = Time.parse(params[:end_date]).utc + query = {:first_notice_at=>{"$lte"=>end_date}, "$or"=>[{:resolved_at=>nil}, {:resolved_at=>{"$gte"=>start_date}}]} end + results = benchmark("[api/v1/problems_controller] query time") { Mongoid.master["problems"].find(query, fields: fields).to_a } + respond_to do |format| - format.html { render json: ProblemPresenter.new(@problems) } # render JSON if no extension specified on path - format.json { render json: ProblemPresenter.new(@problems) } - format.xml { render xml: ProblemPresenter.new(@problems) } + format.html { render json: Yajl.dump(results) } # render JSON if no extension specified on path + format.json { render json: Yajl.dump(results) } + format.xml { render xml: results } end end diff --git a/app/presenters/problem_presenter.rb b/app/presenters/problem_presenter.rb deleted file mode 100644 index 412e0f6..0000000 --- a/app/presenters/problem_presenter.rb +++ /dev/null @@ -1,42 +0,0 @@ -class ProblemPresenter - - def initialize(model_or_collection) - @model_or_collection = model_or_collection - end - - def to_xml(options={}) - as_json(options).to_xml(options) - end - - def to_json(options={}) - Yajl.dump(as_json(options)) - end - - def as_json(options={}) - if collection? - @model_or_collection.map { |model| model_as_json(model, options) } - else - model_as_json(@model_or_collection, options) - end - end - - def collection? - @model_or_collection.respond_to?(:each) - end - - def model_as_json(problem, options={}) - { - app_id: problem.app_id, - app_name: problem.app_name, - environment: problem.environment, - message: problem.message, - where: problem.where, - first_notice_at: problem.first_notice_at, - last_notice_at: problem.last_notice_at, - resolved: problem.resolved, - resolved_at: problem.resolved_at, - notices_count: problem.notices_count - } - end - -end -- libgit2 0.21.2