Added model cache object (lookup method) to increase performance.
This commit is contained in:
parent
2b0b360ab1
commit
67db493699
24 changed files with 66 additions and 88 deletions
|
@ -15,7 +15,7 @@ class LinksController < ApplicationController
|
|||
links.each { |item|
|
||||
link_list.push item
|
||||
if item['link_object'] == 'Ticket'
|
||||
data = Ticket.full_data( item['link_object_value'] )
|
||||
data = Ticket.lookup( :id => item['link_object_value'] )
|
||||
tickets.push data
|
||||
if !users[ data['owner_id'] ]
|
||||
users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] )
|
||||
|
|
|
@ -50,7 +50,7 @@ class TicketOverviewsController < ApplicationController
|
|||
users = {}
|
||||
tickets = []
|
||||
overview[:ticket_list].each {|ticket_id|
|
||||
data = Ticket.full_data(ticket_id)
|
||||
data = Ticket.lookup( :id => ticket_id )
|
||||
tickets.push data
|
||||
if !users[ data['owner_id'] ]
|
||||
users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] )
|
||||
|
|
|
@ -225,7 +225,7 @@ class TicketsController < ApplicationController
|
|||
users = {}
|
||||
tickets = []
|
||||
ticket_list.each {|ticket|
|
||||
data = Ticket.full_data(ticket.id)
|
||||
data = Ticket.lookup( :id => ticket.id )
|
||||
tickets.push data
|
||||
if !users[ data['owner_id'] ]
|
||||
users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] )
|
||||
|
@ -508,7 +508,7 @@ class TicketsController < ApplicationController
|
|||
tickets = []
|
||||
users = {}
|
||||
tickets_all.each do |ticket|
|
||||
ticket_tmp = Ticket.full_data(ticket.id)
|
||||
ticket_tmp = Ticket.lookup( :id => ticket.id )
|
||||
tickets.push ticket_tmp
|
||||
users[ ticket['owner_id'] ] = User.user_data_full( ticket_tmp['owner_id'] )
|
||||
users[ ticket['customer_id'] ] = User.user_data_full( ticket_tmp['customer_id'] )
|
||||
|
|
|
@ -3,6 +3,10 @@ require 'cache'
|
|||
class ApplicationModel < ActiveRecord::Base
|
||||
self.abstract_class = true
|
||||
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
|
||||
def self.param_cleanup(params)
|
||||
data = {}
|
||||
self.new.attributes.each {|item|
|
||||
|
@ -40,6 +44,28 @@ class ApplicationModel < ActiveRecord::Base
|
|||
Cache.get( key.to_s )
|
||||
end
|
||||
|
||||
def self.lookup(data)
|
||||
if data[:id]
|
||||
# puts "GET- + #{self.to_s}.#{data[:id].to_s}"
|
||||
cache = self.cache_get( data[:id] )
|
||||
return cache if cache
|
||||
|
||||
# puts "Fillup- + #{self.to_s}.#{data[:id].to_s}"
|
||||
record = self.where( :id => data[:id] ).first
|
||||
self.cache_set( data[:id], record )
|
||||
return record
|
||||
elsif data[:name]
|
||||
cache = self.cache_get( data[:name] )
|
||||
return cache if cache
|
||||
|
||||
record = self.where( :name => data[:name] ).first
|
||||
self.cache_set( data[:name], record )
|
||||
return record
|
||||
else
|
||||
raise "Need name or id for lookup()"
|
||||
end
|
||||
end
|
||||
|
||||
def self.create_if_not_exists(data)
|
||||
if data[:name]
|
||||
record = self.where( :name => data[:name] ).first
|
||||
|
|
|
@ -3,10 +3,6 @@ class Authorization < ApplicationModel
|
|||
validates_presence_of :user_id, :uid, :provider
|
||||
validates_uniqueness_of :uid, :scope => :provider
|
||||
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
|
||||
def self.find_from_hash(hash)
|
||||
auth = Authorization.where( :provider => hash['provider'], :uid => hash['uid'] ).first
|
||||
if auth
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
class EmailAddress < ApplicationModel
|
||||
has_many :groups, :after_add => :cache_update, :after_remove => :cache_update
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
validates :realname, :presence => true
|
||||
validates :email, :presence => true
|
||||
end
|
||||
|
|
|
@ -2,8 +2,5 @@ class Group < ApplicationModel
|
|||
has_and_belongs_to_many :users, :after_add => :cache_update, :after_remove => :cache_update
|
||||
belongs_to :email_address
|
||||
belongs_to :signature
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
validates :name, :presence => true
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class History < ActiveRecord::Base
|
||||
class History < ApplicationModel
|
||||
self.table_name = 'histories'
|
||||
belongs_to :history_type, :class_name => 'History::Type'
|
||||
belongs_to :history_object, :class_name => 'History::Object'
|
||||
|
@ -349,13 +349,13 @@ class History < ActiveRecord::Base
|
|||
return history_attribute
|
||||
end
|
||||
|
||||
class Object < ActiveRecord::Base
|
||||
class Object < ApplicationModel
|
||||
end
|
||||
|
||||
class Type < ActiveRecord::Base
|
||||
class Type < ApplicationModel
|
||||
end
|
||||
|
||||
class Attribute < ActiveRecord::Base
|
||||
class Attribute < ApplicationModel
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -7,16 +7,16 @@ class Observer::Ticket::Article::CommunicateEmail < ActiveRecord::Observer
|
|||
return if Setting.get('import_mode')
|
||||
|
||||
# if sender is customer, do not communication
|
||||
sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first
|
||||
sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id )
|
||||
return 1 if sender == nil
|
||||
return 1 if sender['name'] == 'Customer'
|
||||
|
||||
# only apply on emails
|
||||
type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first
|
||||
type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id )
|
||||
return if type['name'] != 'email'
|
||||
|
||||
# build subject
|
||||
ticket = Ticket.find(record.ticket_id)
|
||||
ticket = Ticket.lookup( record.ticket_id )
|
||||
subject = ticket.subject_build( record.subject )
|
||||
|
||||
# send email
|
||||
|
|
|
@ -7,12 +7,12 @@ class Observer::Ticket::Article::CommunicateFacebook < ActiveRecord::Observer
|
|||
return if Setting.get('import_mode')
|
||||
|
||||
# if sender is customer, do not communication
|
||||
sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first
|
||||
sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id )
|
||||
return 1 if sender == nil
|
||||
return 1 if sender['name'] == 'Customer'
|
||||
|
||||
# only apply on emails
|
||||
type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first
|
||||
type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id )
|
||||
return if type['name'] != 'facebook'
|
||||
|
||||
a = Channel::Facebook.new
|
||||
|
|
|
@ -7,12 +7,12 @@ class Observer::Ticket::Article::CommunicateTwitter < ActiveRecord::Observer
|
|||
return if Setting.get('import_mode')
|
||||
|
||||
# if sender is customer, do not communication
|
||||
sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first
|
||||
sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id )
|
||||
return 1 if sender == nil
|
||||
return 1 if sender['name'] == 'Customer'
|
||||
|
||||
# only apply on tweets
|
||||
type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first
|
||||
type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id )
|
||||
return if type['name'] != 'twitter direct-message' && type['name'] != 'twitter status'
|
||||
|
||||
a = Channel::Twitter2.new
|
||||
|
|
|
@ -7,16 +7,16 @@ class Observer::Ticket::Article::FillupFromEmail < ActiveRecord::Observer
|
|||
return if Setting.get('import_mode')
|
||||
|
||||
# if sender is customer, do not change anything
|
||||
sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first
|
||||
sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id )
|
||||
return if sender == nil
|
||||
return if sender['name'] == 'Customer'
|
||||
|
||||
# set email attributes
|
||||
type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first
|
||||
type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id )
|
||||
return if type['name'] != 'email'
|
||||
|
||||
# set subject if empty
|
||||
ticket = Ticket.find( record.ticket_id )
|
||||
ticket = Ticket.lookup( :id => record.ticket_id )
|
||||
if !record.subject || record.subject == ''
|
||||
record.subject = ticket.title
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ class Observer::Ticket::Article::FillupFromGeneral < ActiveRecord::Observer
|
|||
return if Setting.get('import_mode')
|
||||
|
||||
# if sender is customer, do not change anything
|
||||
sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first
|
||||
sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id )
|
||||
return if sender == nil
|
||||
return if sender['name'] == 'Customer'
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@ class Observer::Ticket::CloseTime < ActiveRecord::Observer
|
|||
return true if record.close_time
|
||||
|
||||
# check if ticket is closed now
|
||||
ticket_state = Ticket::State.find( record.ticket_state_id )
|
||||
ticket_state_type = Ticket::StateType.find( ticket_state.ticket_state_type_id )
|
||||
ticket_state = Ticket::State.lookup( :id => record.ticket_state_id )
|
||||
ticket_state_type = Ticket::StateType.lookup( :id => ticket_state.ticket_state_type_id )
|
||||
return true if ticket_state_type.name != 'closed'
|
||||
|
||||
# set close_time
|
||||
|
|
|
@ -11,10 +11,10 @@ class Observer::Ticket::FirstResponse < ActiveRecord::Observer
|
|||
return true if record.internal
|
||||
|
||||
# if sender is not agent
|
||||
return true if record.ticket_article_sender.name != 'Agent'
|
||||
return true if Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ).name != 'Agent'
|
||||
|
||||
# if article is a message to customer
|
||||
return true if !record.ticket_article_type.communication
|
||||
return true if !Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ).communication
|
||||
|
||||
# check if first_response is already set
|
||||
return true if record.ticket.first_response
|
||||
|
|
|
@ -8,10 +8,11 @@ class Observer::Ticket::LastContact < ActiveRecord::Observer
|
|||
return true if record.internal
|
||||
|
||||
# if article is a message to customer
|
||||
return true if !record.ticket_article_type.communication
|
||||
return true if !Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ).communication
|
||||
|
||||
# if sender is not customer
|
||||
if record.ticket_article_sender.name == 'Customer'
|
||||
sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id )
|
||||
if sender.name == 'Customer'
|
||||
|
||||
# check if last communication is done by agent, else do not set last_contact_customer
|
||||
if record.ticket.last_contact_customer == nil ||
|
||||
|
@ -28,7 +29,7 @@ class Observer::Ticket::LastContact < ActiveRecord::Observer
|
|||
end
|
||||
|
||||
# if sender is not agent
|
||||
if record.ticket_article_sender.name == 'Agent'
|
||||
if sender.name == 'Agent'
|
||||
|
||||
# set last_contact_agent
|
||||
record.ticket.last_contact_agent = Time.now
|
||||
|
|
|
@ -16,10 +16,10 @@ class Observer::Ticket::Notification < ActiveRecord::Observer
|
|||
|
||||
# get current state of objects
|
||||
if event[:name] == 'Ticket::Article'
|
||||
article = Ticket::Article.find( event[:id] )
|
||||
article = Ticket::Article.lookup( :id => event[:id] )
|
||||
ticket = article.ticket
|
||||
else
|
||||
ticket = Ticket.find( event[:id] )
|
||||
ticket = Ticket.lookup( :id => event[:id] )
|
||||
article = ticket.articles[-1]
|
||||
end
|
||||
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
class Role < ApplicationModel
|
||||
has_and_belongs_to_many :users, :after_add => :cache_update, :after_remove => :cache_update
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
validates :name, :presence => true
|
||||
end
|
||||
|
|
|
@ -3,9 +3,6 @@ class Setting < ApplicationModel
|
|||
store :state
|
||||
store :state_initial
|
||||
before_create :set_initial
|
||||
after_create :delete_cache
|
||||
after_update :delete_cache
|
||||
after_destroy :delete_cache
|
||||
|
||||
def self.load
|
||||
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
class Signature < ApplicationModel
|
||||
has_many :groups, :after_add => :cache_update, :after_remove => :cache_update
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
validates :name, :presence => true
|
||||
end
|
||||
|
|
|
@ -14,10 +14,6 @@ class Ticket < ApplicationModel
|
|||
belongs_to :create_article_type, :class_name => 'Ticket::Article::Type'
|
||||
belongs_to :create_article_sender, :class_name => 'Ticket::Article::Sender'
|
||||
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
|
||||
def self.number_check (string)
|
||||
self.number_adapter.number_check_item(string)
|
||||
end
|
||||
|
@ -41,8 +37,8 @@ class Ticket < ApplicationModel
|
|||
Ticket::Article.create(
|
||||
:created_by_id => data[:created_by_id],
|
||||
:ticket_id => self.id,
|
||||
:ticket_article_type_id => Ticket::Article::Type.where( :name => 'note' ).first.id,
|
||||
:ticket_article_sender_id => Ticket::Article::Sender.where( :name => 'Agent' ).first.id,
|
||||
:ticket_article_type_id => Ticket::Article::Type.lookup( :name => 'note' ).id,
|
||||
:ticket_article_sender_id => Ticket::Article::Sender.lookup( :name => 'Agent' ).id,
|
||||
:body => 'merged',
|
||||
:internal => false
|
||||
)
|
||||
|
@ -59,7 +55,7 @@ class Ticket < ApplicationModel
|
|||
)
|
||||
|
||||
# set state to 'merged'
|
||||
self.ticket_state_id = Ticket::State.where( :name => 'merged' ).first.id
|
||||
self.ticket_state_id = Ticket::State.lookup( :name => 'merged' ).id
|
||||
|
||||
# rest owner
|
||||
self.owner_id = User.where( :login => '-' ).first.id
|
||||
|
@ -304,16 +300,6 @@ class Ticket < ApplicationModel
|
|||
|
||||
end
|
||||
|
||||
# data = Ticket.full_data(123)
|
||||
def self.full_data(ticket_id)
|
||||
cache = self.cache_get(ticket_id)
|
||||
return cache if cache
|
||||
|
||||
ticket = Ticket.find(ticket_id).attributes
|
||||
self.cache_set( ticket_id, ticket )
|
||||
return ticket
|
||||
end
|
||||
|
||||
# Ticket.create_attributes(
|
||||
# :current_user_id => 123,
|
||||
# )
|
||||
|
@ -428,24 +414,15 @@ class Ticket < ApplicationModel
|
|||
|
||||
class Priority < ApplicationModel
|
||||
self.table_name = 'ticket_priorities'
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
validates :name, :presence => true
|
||||
end
|
||||
|
||||
class StateType < ApplicationModel
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
validates :name, :presence => true
|
||||
end
|
||||
|
||||
class State < ApplicationModel
|
||||
belongs_to :ticket_state_type, :class_name => 'Ticket::StateType'
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
validates :name, :presence => true
|
||||
end
|
||||
end
|
|
@ -5,10 +5,6 @@ class Ticket::Article < ApplicationModel
|
|||
belongs_to :ticket_article_sender, :class_name => 'Ticket::Article::Sender'
|
||||
belongs_to :created_by, :class_name => 'User'
|
||||
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
|
||||
private
|
||||
def attachment_check
|
||||
|
||||
|
|
|
@ -3,9 +3,6 @@ class User < ApplicationModel
|
|||
|
||||
before_create :check_name, :check_email, :check_login, :check_image, :check_geo
|
||||
before_update :check_password, :check_image, :check_geo, :check_email, :check_login
|
||||
after_create :cache_delete
|
||||
after_update :cache_delete
|
||||
after_destroy :cache_delete
|
||||
|
||||
has_and_belongs_to_many :groups, :after_add => :cache_update, :after_remove => :cache_update
|
||||
has_and_belongs_to_many :roles, :after_add => :cache_update, :after_remove => :cache_update
|
||||
|
|
|
@ -434,7 +434,7 @@ class ClientState
|
|||
return if !session_data
|
||||
return if !session_data[:user]
|
||||
return if !session_data[:user][:id]
|
||||
user = User.find( session_data[:user][:id] )
|
||||
user = User.lookup( :id => session_data[:user][:id] )
|
||||
return if !user
|
||||
|
||||
# set cache key
|
||||
|
@ -691,7 +691,7 @@ class ClientState
|
|||
if !@pushed[:tickets]
|
||||
@pushed[:tickets] = {}
|
||||
end
|
||||
ticket = Ticket.full_data(ticket_id)
|
||||
ticket = Ticket.lookup( :id => ticket_id )
|
||||
if @pushed[:tickets][ticket_id] != ticket['updated_at']
|
||||
@pushed[:tickets][ticket_id] = ticket['updated_at']
|
||||
tickets.push ticket
|
||||
|
|
Loading…
Reference in a new issue