2010-12-17 9 views
5

? Me gustaría agregar algún código a la función Application.cfc onRequestEnd que, si está activada una determinada variable de aplicación, se iniciará la búsqueda sql y tiempo de ejecución a una tabla de base de datos. Esa parte es relativamente fácil, ya que ColdFusion devuelve el sql y el tiempo de ejecución como parte de la estructura de consulta.¿Cómo se puede obtener una lista de todas las consultas que se han ejecutado en una página en ColdFusion 9

Sin embargo, este sitio tiene probablemente cerca de 1000 páginas, y la modificación de todas ellas simplemente no es realista. Entonces me gustaría hacer esto completamente programáticamente en la función onRequestEnd. Para hacer eso, necesito de alguna manera obtener una lista de todas las consultas que se han ejecutado en la página y ahí es donde estoy perplejo.

¿Cómo puedo obtener una lista de los nombres de todas las consultas que se han ejecutado en la página actual? Estas consultas aparecen en el ámbito de variables de la plantilla, pero también hay una gran cantidad de otras variables y no estoy seguro de cómo recorrerlas fácilmente y determinar cuál es una consulta.

Cualquier ayuda sería apreciada.

Respuesta

5

Dado que la información está disponible a través de las plantillas de depuración, puede echar un vistazo a esos archivos para algunos punteros.

Otra cosa a considerar es encapsular sus consultas en una etiqueta CFC o personalizada y tener que lidiar con el registro (pero sospecho que sus consultas se extienden por todo el sitio, por lo que podría haber muchas páginas para modificar, aunque eso habla de por qué encapsular el acceso a los datos es una buena idea: es más fácil de mantener y mejorar exactamente para este tipo de situación).

El código relevante de las plantillas de depuración (modernizado un poco), es:

<cfset tempFactory = createObject("java", "coldfusion.server.ServiceFactory") /> 
<cfset tempCfdebugger = tempFactory.getDebuggingService() /> 
<cfset qEvents = tempCfdebugger.getDebugger().getData() /> 

<cfquery dbType="query" name="qdeb"> 
    SELECT *, (endTime - startTime) AS executionTime 
    FROM qEvents WHERE type = 'SqlQuery' 
</cfquery> 
+0

Gracias por la respuesta. No sabía que las plantillas de depuración eran visibles. ¿Podría decirme dónde encontrarlos? – Nicholas

+0

+1 como lección de objeto para la encapsulación. –

+0

Logré ver las plantillas de depuración y encontré la respuesta allí. Desafortunadamente, al igual que la mayoría de los trabajos profesionales, este vino con un sitio web listo para que yo pueda trabajar. Entonces tuve que trabajar con lo que obtuve. Para aquellos con un problema similar, incluyo la solución en el siguiente comentario. – Nicholas

Cuestiones relacionadas