PageRenderTime 59ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/aeolus-conductor-0.10.5/src/app/controllers/logs_controller.rb

#
Ruby | 217 lines | 172 code | 25 blank | 20 comment | 27 complexity | b3765e15284098d6a8a59601dfdbdd8a MD5 | raw file
Possible License(s): Apache-2.0, GPL-2.0, MPL-2.0-no-copyleft-exception
  1. #
  2. # Copyright 2012 Red Hat, Inc.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. class LogsController < ApplicationController
  17. before_filter :require_user
  18. def index
  19. clear_breadcrumbs
  20. save_breadcrumb(logs_path)
  21. load_headers
  22. load_options
  23. load_logs
  24. respond_to do |format|
  25. format.html
  26. end
  27. end
  28. def filter
  29. redirect_to_original({ "source_type" => params[:source_type],
  30. "pool_select" => params[:pool_select],
  31. "provider_select" => params[:provider_select],
  32. "owner_id" => params[:owner_id],
  33. "state" => params[:state],
  34. "from_date" => params[:from_date],
  35. "to_date" => params[:to_date],
  36. "order" => params[:order] })
  37. end
  38. def export_logs
  39. load_logs
  40. load_headers
  41. csvm = Object.const_defined?(:FasterCSV) ? FasterCSV : CSV
  42. csv_string = csvm.generate(:col_sep => ";", :row_sep => "\r\n") do |csv|
  43. csv << @header.map {|header| header[:name].capitalize }
  44. unless @events.nil?
  45. @events.each do |event|
  46. source = event.source
  47. provider_account = source.nil? ? nil : source.provider_account
  48. csv << [ event.event_time.strftime("%d-%b-%Y %H:%M:%S"),
  49. source.nil? ? t('logs.index.not_available') : source.name,
  50. source.nil? ? t('logs.index.not_available') : source.state,
  51. source.nil? ? t('logs.index.not_available') : source.pool_family.name + "/" + source.pool.name,
  52. provider_account.nil? ? t('logs.index.not_available') : provider_account.provider.name + "/" + provider_account.name,
  53. source.nil? ? t('logs.index.not_available') : source.owner.login,
  54. event.summary ]
  55. end
  56. end
  57. end
  58. send_data(csv_string,
  59. :type => 'text/csv; charset=utf-8; header=present',
  60. :filename => "export.csv")
  61. end
  62. protected
  63. def load_logs
  64. @source_type = params[:source_type].nil? ? "" : params[:source_type]
  65. @pool_select = params[:pool_select].nil? ? "" : params[:pool_select]
  66. @provider_select =
  67. params[:provider_select].nil? ? "" : params[:provider_select]
  68. @owner_id = params[:owner_id].nil? ? "" : params[:owner_id]
  69. @state = params[:state].nil? ? "" : params[:state]
  70. @order = params[:order].nil? ? t('logs.options.time_order') : params[:order]
  71. @from_date = params[:from_date].nil? ? Date.today - 7.days :
  72. Date.civil(params[:from_date][:year].to_i,
  73. params[:from_date][:month].to_i,
  74. params[:from_date][:day].to_i)
  75. @to_date = params[:to_date].nil? ? Date.today + 1.days :
  76. Date.civil(params[:to_date][:year].to_i,
  77. params[:to_date][:month].to_i,
  78. params[:to_date][:day].to_i)
  79. if @source_type.present?
  80. conditions = ["event_time between ? and ? and source_type = ?",
  81. @from_date.to_datetime.beginning_of_day, @to_date.to_datetime.end_of_day, @source_type]
  82. else
  83. conditions = ["event_time between ? and ?",
  84. @from_date.to_datetime.beginning_of_day, @to_date.to_datetime.end_of_day]
  85. end
  86. @events = Event.unscoped.find(:all,
  87. :include =>
  88. {:source => [:pool_family, :pool, :owner]},
  89. :conditions => conditions,
  90. :order => "event_time asc"
  91. )
  92. deployments = Deployment.unscoped.list_for_user(current_session,
  93. current_user,
  94. Privilege::VIEW)
  95. instances = Instance.unscoped.list_for_user(current_session,
  96. current_user, Privilege::VIEW)
  97. pool_option, pool_option_id = @pool_select.split(":")
  98. provider_option, provider_option_id = @provider_select.split(":")
  99. @events = @events.find_all{|event|
  100. source = event.source
  101. source_class = source.class.name
  102. # permission checks
  103. next if source_class == "Deployment" and !deployments.include?(source)
  104. next if source_class == "Instance" and !instances.include?(source)
  105. # filter by user
  106. next if @owner_id.present? && source.owner_id.to_s != @owner_id
  107. # filter by state
  108. if @state.present?
  109. next if source.state != @state
  110. end
  111. # filter by pool
  112. if @pool_select.present?
  113. next if (pool_option == "pool_family" &&
  114. source.pool_family_id.to_s != pool_option_id)
  115. next if pool_option == "pool" && source.pool_id.to_s != pool_option_id
  116. end
  117. # filter by provider
  118. if @provider_select.present?
  119. event_provider_account = source.provider_account
  120. next if event_provider_account.nil?
  121. next if (provider_option == "provider" &&
  122. source.provider_account.provider.id.to_s != provider_option_id)
  123. next if (provider_option == "provider_account" &&
  124. source.provider_account.id.to_s != provider_option_id)
  125. end
  126. true
  127. }
  128. case @order
  129. when t('logs.options.deployment_instance_order')
  130. @events = @events.sort_by {|event|
  131. (event.source.nil? ? "" : event.source.name)}
  132. when t('logs.options.state_order')
  133. @events = @events.sort_by {|event|
  134. (event.source.nil? ? "" :
  135. (event.source.state.nil? ? "" : event.source.state))}
  136. when t('logs.options.pool_order')
  137. @events = @events.sort_by {|event|
  138. (event.source.nil? ? "" : event.source.pool_family.name)}
  139. when t('logs.options.provider_order')
  140. @events = @events.sort_by {|event|
  141. (event.source.nil? ? "" : event.source.provider_account.name)}
  142. when t('logs.options.owner_order')
  143. @events = @events.sort_by {|event|
  144. (event.source.nil? ? "" : event.source.owner.login)}
  145. end
  146. @paginated_events = paginate_collection(@events, params[:page], PER_PAGE)
  147. end
  148. def load_options
  149. @source_type_options = [[t('logs.options.default_event_types'), ""],
  150. t('logs.options.deployment_event_type'),
  151. t('logs.options.instance_event_type')]
  152. @state_options = ([[t('logs.options.default_states'), ""]] +
  153. Deployment::STATES + Instance::STATES).uniq
  154. @pool_options = [[t('logs.options.default_pools'), ""]]
  155. PoolFamily.list_for_user(current_session, current_user, Privilege::VIEW).
  156. find(:all, :include => :pools, :order => "name",
  157. :select => ["id", "name"]).each do |pool_family|
  158. @pool_options << [pool_family.name, "pool_family:" + pool_family.id.to_s]
  159. @pool_options += pool_family.pools.
  160. map{|x| [" -- " + x.name, "pool:" + x.id.to_s]}
  161. end
  162. @provider_options = [[t('logs.options.default_providers'), ""]]
  163. Provider.list_for_user(current_session, current_user, Privilege::VIEW).
  164. find(:all, :include => :provider_accounts, :order => "name",
  165. :select => ["id", "name"]).each do |provider|
  166. @provider_options << [provider.name, "provider:" + provider.id.to_s]
  167. @provider_options += provider.provider_accounts.
  168. map{|x| [" -- " + x.name, "provider_account:" + x.id.to_s]}
  169. end
  170. @owner_options = [[t('logs.options.default_users'), ""]] +
  171. User.find(:all, :order => "login",
  172. :select => ["id", "login"]).map{|x| [x.login, x.id]}
  173. @order_options = [t('logs.options.time_order'),
  174. t('logs.options.deployment_instance_order'),
  175. t('logs.options.state_order'),
  176. t('logs.options.pool_order'),
  177. t('logs.options.provider_order'),
  178. t('logs.options.owner_order')]
  179. end
  180. def load_headers
  181. @header = [
  182. { :name => t('logs.index.event_time'), :sortable => false },
  183. { :name => t('logs.index.deployment'), :sortable => false },
  184. { :name => t('logs.index.state'), :sortable => false },
  185. { :name => t('logs.index.pool'), :sortable => false },
  186. { :name => t('logs.index.provider'), :sortable => false },
  187. { :name => t('logs.index.owner'), :sortable => false },
  188. { :name => t('logs.index.summary'), :sortable => false },
  189. { :name => "", :sortable => false },
  190. ]
  191. end
  192. end