Analizzazione delle query eseguite

Tutte le query eseguite dalla applicazione rubyonrail vengono
memorizzate nei rispettivi file log (development, production …)
E’ possibile salvare tali dati su database, o meglio salvare le query
eseguite da ogni azione? Esistono già dei plugin in merito?

mmh… immagino di si… prova a guardare se esiste gia un
logger che lavora su database…

Alternativamente bisogna cercare chi logga quelle query (dove
soprattutto) ed intercettarlo :smiley:

Sandro

2009/7/2 Dboz D. [email protected]

Dboz D. wrote:

Tutte le query eseguite dalla applicazione rubyonrail vengono
memorizzate nei rispettivi file log (development, production …)
E’ possibile salvare tali dati su database, o meglio salvare le query
eseguite da ogni azione? Esistono già dei plugin in merito?

Googlando si trova qualcuno che ha rediretto tutto il log della sua
macchina, Rails incluso, verso un db usando syslog-ng. Ci sono dei link
a

Dovresti però cambiare la configurazione (ti interessa solo Rails) e
dovresti anche trovare il modo di mandare nel db solo le query. A questo
punto ti consiglierei piuttosto di lasciar stare syslog-ng e mettere
mano alle classi di logging di Rails. Guarda il codice del metodo

module ActiveSupport
class BufferedLogger
def add(severity, message = nil, progname = nil, &block)

end
end
end

nella lib della rispettiva gemma. Dovresti crearti un file nella lib
della tua applicazione Rails che lo riscrive estraendo le query dal
message e inviandolec al db. Ovviamente non devi loggare questi accessi
al db, pena temo un loop infinito, per cui dovrai usare il metodo
silence del BufferedLogger

http://api.rubyonrails.org/classes/ActiveSupport/BufferedLogger.html#M001816

Secondo me in una mezza giornata te la cavi.

Paolo

Grazie!!! Mi metto al lavoro
Saluti
DBOZ

2009/7/3 Dboz D. [email protected]:

Grazie!!! Mi metto al lavoro

non è che poi pubblichi anche il risultato? potrebbe essere utile a tanti.

pietro

A quest link
http://blog.gugl.org/archives/47
spiega molto bene come sovrascrivere il metodo add della classe
BufferedLogger e come configurarlo nell’enviroment.
Questa è la riga dove di modifica l’output che andrà nel file di log

message = “#{Time.now.to_formatted_s(:db)} #{SEVERITIES[severity]}
#{message.strip}” +" the end \n"

L’informazione che a me interessa è il tempo di esecuzione dell’azione
eseguita dal controller per intercettare qualche anomalia o disfunzione
nell’applicazione

Ho creato il metodo
def add_visit
visit = Visit.new
visit.ip = request.remote_ip
visit.url = request.request_uri
visit.user_id = current_user.id

visit.controller_name = request.path_parameters['controller']
visit.action_name = request.path_parameters['action']
visit.domain_name = request.domain
visit.subdomain_name = request.subdomains
visit.port_integer = request.port
visit.port_string = request.port_string
visit.protocol_name = request.protocol
visit.execution_time !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
visit.save

end

nella classe ApplicationController < ActionController::Base che faccio
eseguire in determinati controller che mi interessa, una sorta di
contavisite.

Per intenderci l’informazione che a me serve è: Completed in 549ms più
in particolare 549

2009-07-03 10:36:32 INFO ==>>Completed in 549ms<== (View: 185, DB: 22)
| 200 OK [http://localhost/manufacturing/product_composed]