1
+ < cfcomponent extends = " farcry.core.packages.lib.error" output = " false" >
2
+
3
+
4
+ < cffunction name = " collectRequestInfo" access = " public" returntype = " struct" output = " false" hint = " Returns a struct containing information that should be included in every error report" >
5
+ < cfset var stResult = super .collectRequestInfo () / >
6
+ < cfset var headers = GetHttpRequestData ().headers / >
7
+ < cfset var key = " " / >
8
+
9
+ < cfif structkeyexists (headers ," X-User-Agent" )>
10
+ < cfset stResult [" browser" ] = headers [" X-User-Agent" ] / >
11
+ < / cfif >
12
+ < cfif structkeyexists (headers ," X-Forwarded-For" )>
13
+ < cfset stResult [" remoteaddress" ] = trim (listfirst (headers [" X-Forwarded-For" ])) / >
14
+ < / cfif >
15
+
16
+ < cfloop collection = " #arguments #" item = " key" >
17
+ < cfset stResult [key ] = arguments [key ] / >
18
+ < / cfloop >
19
+
20
+ < cfreturn stResult / >
21
+ < / cffunction >
22
+
23
+ < cffunction name = " logToRaygun" access = " public" output = " false" returntype = " void" hint = " Logs data to the couchdb" >
24
+ < cfargument name = " type" type = " string" required = " true" hint = " Log type" / >
25
+ < cfargument name = " data" type = " struct" requried = " true" hint = " A normalized error struct as produced by the core error library" / >
26
+
27
+ < cfset var cfhttp = structnew () / >
28
+ < cfset var stMessage = structnew () / >
29
+ < cfset var i = 0 / >
30
+ < cfset var stSub = " " / >
31
+ < cfset var system = " " / >
32
+ < cfset var props = " " / >
33
+ < cfset var mf = " " / >
34
+ < cfset var osbean = " " / >
35
+ < cfset var oFile = " " / >
36
+ < cfset var aRoots = " " / >
37
+ < cfset var runtime = " " / >
38
+
39
+ < cfif isdefined (" application.config.raygun.apiKey" ) and len (application .config .raygun .apiKey )>
40
+ < cfset system = createObject (" java" , " java.lang.System" ) / >
41
+ < cfset props = system .getProperties () / >
42
+ < cfset mf = createObject (" java" , " java.lang.management.ManagementFactory" ) / >
43
+ < cfset osbean = mf .getOperatingSystemMXBean () / >
44
+ < cfset oFile = createObject (" java" , " java.io.File" ) / >
45
+ < cfset aRoots = oFile .listRoots () / >
46
+ < cfset runtime = CreateObject (" java" ," java.lang.Runtime" ).getRuntime ()>
47
+
48
+ < cfset stMessage [" occurredOn" ] = dateformat (arguments .data .datetime ," yyyy-mm-dd" ) & " T" & timeformat (arguments .data .datetime ," HH:mm:ss" ) & " Z" / >
49
+ < cfset stMessage [" details" ] = structnew () / >
50
+ < cfset stMessage [" details" ][" machineName" ] = arguments .data .machinename / >
51
+ < cfset stMessage [" details" ][" version" ] = JavaCast (" null" ," " ) / >
52
+ < cfset stMessage [" details" ][" client" ] = structnew () / >
53
+ < cfset stMessage [" details" ][" client" ][" name" ] = JavaCast (" null" ," " ) / >
54
+ < cfset stMessage [" details" ][" client" ][" version" ] = JavaCast (" null" ," " ) / >
55
+ < cfset stMessage [" details" ][" client" ][" clientUrl" ] = JavaCast (" null" ," " ) / >
56
+ < cfset stMessage [" details" ][" error" ] = structnew () / >
57
+ < cfset stMessage [" details" ][" error" ][" innerError" ] = JavaCast (" null" ," " ) / >
58
+ < cfset stMessage [" details" ][" error" ][" data" ] = structnew () / >
59
+ < cfif structKeyExists (arguments .data , " type" ) and len (arguments .data .type )>
60
+ < cfset stMessage [" details" ][" error" ][" data" ][" type" ] = arguments .data .type / >
61
+ < / cfif >
62
+ < cfif structKeyExists (arguments .data , " errorcode" ) and len (arguments .data .errorcode )>
63
+ < cfset stMessage [" details" ][" error" ][" data" ][" errorcode" ] = arguments .data .errorcode / >
64
+ < / cfif >
65
+ < cfif structKeyExists (arguments .data , " detail" ) and len (arguments .data .detail )>
66
+ < cfset stMessage [" details" ][" error" ][" data" ][" detail" ] = arguments .data .detail / >
67
+ < / cfif >
68
+ < cfif structKeyExists (arguments .data , " extended_info" ) and len (arguments .data .extended_info )>
69
+ < cfset stMessage [" details" ][" error" ][" data" ][" extended_info" ] = arguments .data .extended_info / >
70
+ < / cfif >
71
+ < cfif structKeyExists (arguments .data , " queryError" ) and len (arguments .data .queryError )>
72
+ < cfset stMessage [" details" ][" error" ][" data" ][" queryError" ] = arguments .data .queryError / >
73
+ < / cfif >
74
+ < cfif structKeyExists (arguments .data , " sql" ) and len (arguments .data .sql )>
75
+ < cfset stMessage [" details" ][" error" ][" data" ][" sql" ] = arguments .data .sql / >
76
+ < / cfif >
77
+ < cfif structKeyExists (arguments .data , " where" ) and len (arguments .data .where )>
78
+ < cfset stMessage [" details" ][" error" ][" data" ][" where" ] = arguments .data .where / >
79
+ < / cfif >
80
+ < cfset stMessage [" details" ][" error" ][" className" ] = JavaCast (" null" ," " ) / >
81
+ < cfset stMessage [" details" ][" error" ][" message" ] = arguments .data .message / >
82
+ < cfset stMessage [" details" ][" error" ][" stackTrace" ] = arraynew (1 ) / >
83
+ < cfloop from = " 1" to = " #arraylen (arguments .data .stack ) #" index = " i" >
84
+ < cfset stSub = structnew () / >
85
+ < cfset stSub [" lineNumber" ] = arguments .data .stack [i ].line / >
86
+ < cfset stSub [" className" ] = JavaCast (" null" ," " ) / >
87
+ < cfset stSub [" fileName" ] = arguments .data .stack [i ].template / >
88
+ < cfset arrayappend (stMessage [" details" ][" error" ][" stackTrace" ],stSub ) / >
89
+ < / cfloop >
90
+ < cfset stMessage [" details" ][" environment" ] = structnew () / >
91
+ < cfset stMessage [" details" ][" environment" ][" processorCount" ] = osbean .getAvailableProcessors () / >
92
+ < cfset stMessage [" details" ][" environment" ][" osVersion" ] = props [" os.name" ] & " |" & props [" os.version" ] / >
93
+ < cfset stMessage [" details" ][" environment" ][" windowBoundsWidth" ] = JavaCast (" null" ," " ) / >
94
+ < cfset stMessage [" details" ][" environment" ][" windowBoundsHeight" ] = JavaCast (" null" ," " ) / >
95
+ < cfset stMessage [" details" ][" environment" ][" resolutionScale" ] = JavaCast (" null" ," " ) / >
96
+ < cfset stMessage [" details" ][" environment" ][" currentOrientation" ] = JavaCast (" null" ," " ) / >
97
+ < cfset stMessage [" details" ][" environment" ][" cpu" ] = osbean .getProcessCpuTime () / >
98
+ < cfset stMessage [" details" ][" environment" ][" packageVersion" ] = props [" java.vm.vendor" ] & " |" & props [" java.runtime.version" ] & " |" & props [" java.vm.name" ] / >
99
+ < cfset stMessage [" details" ][" environment" ][" architecture" ] = props [" os.arch" ] / >
100
+ < cfset stMessage [" details" ][" environment" ][" totalPhysicalMemory" ] = osbean .getTotalPhysicalMemorySize () / >
101
+ < cfset stMessage [" details" ][" environment" ][" availablePhysicalMemory" ] = osbean .getFreePhysicalMemorySize () / >
102
+ < cfset stMessage [" details" ][" environment" ][" totalVirtualMemory" ] = JavaCast (" null" ," " ) / >
103
+ < cfset stMessage [" details" ][" environment" ][" availableVirtualMemory" ] = JavaCast (" null" ," " ) / >
104
+ < cfset stMessage [" details" ][" environment" ][" diskSpaceFree" ] = arraynew (1 ) / >
105
+ < cfloop from = " 1" to = " #arraylen (aRoots ) #" index = " i" >
106
+ < cfset arrayappend (stMessage [" details" ][" environment" ][" diskSpaceFree" ],aRoots [i ].getFreeSpace ()) / >
107
+ < / cfloop >
108
+ < cfset stMessage [" details" ][" environment" ][" deviceName" ] = JavaCast (" null" ," " ) / >
109
+ < cfset stMessage [" details" ][" environment" ][" locale" ] = JavaCast (" null" ," " ) / >
110
+ < cfset stMessage [" details" ][" tags" ] = JavaCast (" null" ," " ) / >
111
+ < cfset stMessage [" details" ][" userCustomData" ] = structnew () / >
112
+ < cfset stMessage [" details" ][" userCustomData" ][" instanceName" ] = arguments .data .instanceName / >
113
+ < cfset stMessage [" details" ][" userCustomData" ][" browser" ] = arguments .data .browser / >
114
+ < cfif isdefined (" application.plugins" )>
115
+ < cfset stMessage [" details" ][" userCustomData" ][" plugins" ] = application .plugins / >
116
+ < / cfif >
117
+ < cfif isdefined (" application.fcstats.updateapp" )>
118
+ < cfset stMessage [" details" ][" userCustomData" ][" appStart" ] = dateformat (application .fcstats .updateapp .when [application .fcstats .updateapp .recordcount ]," yyyy-mm-dd" ) & " T" & timeformat (application .fcstats .updateapp .when [application .fcstats .updateapp .recordcount ]," HH:mm:ss" ) & " Z" / >
119
+ < / cfif >
120
+ < cfset stMessage [" details" ][" request" ] = structnew () / >
121
+ < cfset stMessage [" details" ][" request" ][" hostName" ] = arguments .data .host / >
122
+ < cfset stMessage [" details" ][" request" ][" url" ] = arguments .data .scriptname / >
123
+ < cfset stMessage [" details" ][" request" ][" httpMethod" ] = CGI .REQUEST_METHOD / >
124
+ < cfset stMessage [" details" ][" request" ][" ipAddress" ] = arguments .data .remoteaddress / >
125
+ < cfset stMessage [" details" ][" request" ][" queryString" ] = arguments .data .querystring / >
126
+ < cfset stMessage [" details" ][" request" ][" form" ] = FORM / >
127
+ < cfset stMessage [" details" ][" request" ][" headers" ] = getHttpRequestData ().headers / >
128
+ < cfset stMessage [" details" ][" request" ][" data" ] = CGI / >
129
+ < cfset stMessage [" details" ][" request" ][" raw" ] = JavaCast (" null" ," " ) / >
130
+
131
+ < cfhttp url = " https://api.raygun.io/entries" method = " post" charset = " utf-8" timeout = " 0" >
132
+ < cfhttpparam type = " header" name = " Content-Type" value = " application/json" / >
133
+ < cfhttpparam type = " header" name = " X-ApiKey" value = " #application .config .raygun .apiKey #" / >
134
+ < cfhttpparam type = " body" value = " #serializeJSON (stMessage ) #" / >
135
+ < / cfhttp >
136
+ < / cfif >
137
+ < / cffunction >
138
+
139
+
140
+ < cffunction name = " logData" access = " public" output = " false" returntype = " void" hint = " Logs error to application and exception log files" >
141
+ < cfargument name = " log" type = " struct" required = " true" / >
142
+ < cfargument name = " bApplication" type = " boolean" required = " false" default = " true" / >
143
+ < cfargument name = " bException" type = " boolean" required = " false" default = " true" / >
144
+ < cfargument name = " bCouch" type = " boolean" required = " false" default = " true" / >
145
+
146
+ < cfset var errorJSON = " " / >
147
+ < cfset var logtype = " error" / >
148
+
149
+ < cfif structkeyexists (arguments .log ," logtype" )>
150
+ < cfset logtype = arguments .log .logtype / >
151
+ < cfset structdelete (arguments .log ," logtype" ) / >
152
+ < / cfif >
153
+
154
+ < cfif logtype eq " error" >
155
+ < cfset logToRaygun (logtype ,arguments .log ) / >
156
+ < / cfif >
157
+
158
+ < cfset super .logData (argumentCollection = arguments ) / >
159
+ < / cffunction >
160
+
161
+ < / cfcomponent >
0 commit comments