Merge branch '2257-inequality-conditions' into 2290-user-activity
authorTom Clegg <tom@curoverse.com>
Fri, 14 Mar 2014 15:12:16 +0000 (11:12 -0400)
committerTom Clegg <tom@curoverse.com>
Fri, 14 Mar 2014 15:12:16 +0000 (11:12 -0400)
Conflicts:
apps/workbench/app/controllers/users_controller.rb
apps/workbench/app/models/arvados_base.rb
apps/workbench/config/routes.rb

1  2 
apps/workbench/app/controllers/application_controller.rb
apps/workbench/app/controllers/users_controller.rb
apps/workbench/app/helpers/application_helper.rb
apps/workbench/app/models/arvados_base.rb
apps/workbench/config/routes.rb

index 6168cd52931c302a8099195cc6f481759c9133e7,c33de2d034a1630b56a3ca0000aa87440ad82c7a..b9f43ba76a03d3e27141559aa8d24e1e046f48dc
@@@ -1,6 -1,7 +1,7 @@@
  class UsersController < ApplicationController
 -  skip_before_filter :find_object_by_uuid, :only => :welcome
 +  skip_before_filter :find_object_by_uuid, :only => [:welcome, :activity]
    skip_around_filter :thread_with_mandatory_api_token, :only => :welcome
+   before_filter :ensure_current_user_is_admin, only: :sudo
  
    def welcome
      if current_user
      end
    end
  
 +  def activity
 +    @breadcrumb_page_name = nil
 +    @users = User.all
 +    @user_activity = {}
 +    @activity = {
 +      logins: {},
 +      jobs: {},
 +      pipeline_instances: {}
 +    }
 +    @spans = [['This week', Time.now.beginning_of_week, Time.now],
 +              ['Last week',
 +               Time.now.beginning_of_week.advance(weeks:-1),
 +               Time.now.beginning_of_week],
 +              ['This month', Time.now.beginning_of_month, Time.now],
 +              ['Last month',
 +               1.month.ago.beginning_of_month,
 +               Time.now.beginning_of_month]]
 +    @spans.each do |span, threshold_start, threshold_end|
 +      @activity[:logins][span] = Log.
 +        filter([[:event_type, '=', 'login'],
 +                [:object_kind, '=', 'arvados#user'],
 +                [:created_at, '>=', threshold_start],
 +                [:created_at, '<', threshold_end]])
 +      @activity[:jobs][span] = Job.
 +        filter([[:created_at, '>=', threshold_start],
 +                [:created_at, '<', threshold_end]])
 +      @activity[:pipeline_instances][span] = PipelineInstance.
 +        filter([[:created_at, '>=', threshold_start],
 +                [:created_at, '<', threshold_end]])
 +      @activity.each do |type, act|
 +        records = act[span]
 +        @users.each do |u|
 +          @user_activity[u.uuid] ||= {}
 +          @user_activity[u.uuid][span + ' ' + type.to_s] ||= 0
 +        end
 +        records.each do |record|
 +          @user_activity[record.modified_by_user_uuid] ||= {}
 +          @user_activity[record.modified_by_user_uuid][span + ' ' + type.to_s] ||= 0
 +          @user_activity[record.modified_by_user_uuid][span + ' ' + type.to_s] += 1
 +        end
 +      end
 +    end
 +    @users = @users.sort_by do |a|
 +      [-@user_activity[a.uuid].values.inject(:+), a.full_name]
 +    end
 +  end
 +
+   def show_pane_list
+     if current_user.andand.is_admin
+       super | %w(Admin)
+     else
+       super
+     end
+   end
+   def sudo
+     resp = $arvados_api_client.api(ApiClientAuthorization, '', {
+                                      api_client_authorization: {
+                                        owner_uuid: @object.uuid
+                                      }
+                                    })
+     redirect_to root_url(api_token: resp[:api_token])
+   end
    def home
      @showallalerts = false
      @my_ssh_keys = AuthorizedKey.where(authorized_user_uuid: current_user.uuid)
index 09e3d8cea286f4ff8695b74f02f449536bb658f2,fbf7ee5e799e48a07c831d553733b8c56bca9855..4ba53b952992d043e8ee04fce98db7f307f84286
@@@ -87,9 -91,7 +91,11 @@@ class ArvadosBase < ActiveRecord::Bas
    def self.order(*args)
      ArvadosResourceList.new(self).order(*args)
    end
 +  def self.filter(*args)
 +    ArvadosResourceList.new(self).filter(*args)
 +  end
++
    def self.where(*args)
      ArvadosResourceList.new(self).where(*args)
    end
index 376934e91b8b1835c54866f0b5364eb315c9fa21,523771c0b172cf4000e0da80d4f656f328918597..0981d2ea37689e7b99635ed8bd1747e4fb409f93
@@@ -19,7 -21,7 +21,8 @@@ ArvadosWorkbench::Application.routes.dr
    resources :users do
      get 'home', :on => :member
      get 'welcome', :on => :collection
 +    get 'activity', :on => :collection
+     post 'sudo', :on => :member
    end
    resources :logs
    resources :factory_jobs