Commit 6c559818e250d641eed4013b5173317b3e296d16

Authored by Cyril Mougel
2 parents 06d8000e 46992b94
Exists in master and in 1 other branch production

Merge pull request #689 from oelmekki/js_filters

ADD allow js client to add filters
Showing 1 changed file with 31 additions and 7 deletions   Show diff stats
public/javascripts/notifier.js
@@ -870,6 +870,12 @@ printStackTrace.implementation.prototype = { @@ -870,6 +870,12 @@ printStackTrace.implementation.prototype = {
870 // Share to global scope as Airbrake ("window.Hoptoad" for backward compatibility) 870 // Share to global scope as Airbrake ("window.Hoptoad" for backward compatibility)
871 Global = window.Airbrake = window.Hoptoad = Util.generatePublicAPI(_publicAPI, Config); 871 Global = window.Airbrake = window.Hoptoad = Util.generatePublicAPI(_publicAPI, Config);
872 872
  873 + Global._filters = [];
  874 +
  875 + Global.addFilter = function (cb) {
  876 + Global._filters.push(cb);
  877 + };
  878 +
873 function Notifier() { 879 function Notifier() {
874 this.options = Util.merge({}, Config.options); 880 this.options = Util.merge({}, Config.options);
875 this.xmlData = Util.merge(this.DEF_XML_DATA, Config.xmlData); 881 this.xmlData = Util.merge(this.DEF_XML_DATA, Config.xmlData);
@@ -921,7 +927,7 @@ printStackTrace.implementation.prototype = { @@ -921,7 +927,7 @@ printStackTrace.implementation.prototype = {
921 } 927 }
922 928
923 return function (error) { 929 return function (error) {
924 - var outputData = '', 930 + var outputData = '', jsonData,
925 url = ''; 931 url = '';
926 // 932 //
927 933
@@ -934,9 +940,12 @@ printStackTrace.implementation.prototype = { @@ -934,9 +940,12 @@ printStackTrace.implementation.prototype = {
934 940
935 switch (this.options['outputFormat']) { 941 switch (this.options['outputFormat']) {
936 case 'XML': 942 case 'XML':
937 - outputData = encodeURIComponent(this.generateXML(this.generateDataJSON(error)));  
938 - url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/notifier_api/v2/notices';  
939 - _sendGETRequest(url, outputData); 943 + jsonData = this.generateDataJSON(error);
  944 + if (this.shouldSendData(jsonData)){
  945 + outputData = encodeURIComponent(this.generateXML(jsonData));
  946 + url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/notifier_api/v2/notices';
  947 + _sendGETRequest(url, outputData);
  948 + }
940 break; 949 break;
941 950
942 case 'JSON': 951 case 'JSON':
@@ -945,9 +954,12 @@ printStackTrace.implementation.prototype = { @@ -945,9 +954,12 @@ printStackTrace.implementation.prototype = {
945 * http://collect.airbrake.io/api/v3/projects/[PROJECT_ID]/notices?key=[API_KEY] 954 * http://collect.airbrake.io/api/v3/projects/[PROJECT_ID]/notices?key=[API_KEY]
946 * url = window.location.protocol + '://' + this.options.host + '/api/v3/projects' + this.options.projectId + '/notices?key=' + this.options.key; 955 * url = window.location.protocol + '://' + this.options.host + '/api/v3/projects' + this.options.projectId + '/notices?key=' + this.options.key;
947 */ 956 */
948 - outputData = JSON.stringify(this.generateJSON(this.generateDataJSON(error)));  
949 - url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/api/v3/projects/' + this.options.projectId + '/notices?key=' + this.xmlData.key;  
950 - _sendPOSTRequest(url, outputData); 957 + jsonData = this.generateDataJSON(error);
  958 + if (this.shouldSendData(jsonData)){
  959 + outputData = JSON.stringify(this.generateJSON(jsonData));
  960 + url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/api/v3/projects/' + this.options.projectId + '/notices?key=' + this.xmlData.key;
  961 + _sendPOSTRequest(url, outputData);
  962 + }
951 break; 963 break;
952 964
953 default: 965 default:
@@ -1175,6 +1187,18 @@ printStackTrace.implementation.prototype = { @@ -1175,6 +1187,18 @@ printStackTrace.implementation.prototype = {
1175 } 1187 }
1176 1188
1177 return true; 1189 return true;
  1190 + },
  1191 +
  1192 + shouldSendData: function (jsonData) {
  1193 + var shouldSend = true, i;
  1194 +
  1195 + for ( i = 0; i < Global._filters.length; i++ ) {
  1196 + if ( ! Global._filters[i](jsonData) ){
  1197 + shouldSend = false;
  1198 + }
  1199 + }
  1200 +
  1201 + return shouldSend;
1178 } 1202 }
1179 }; 1203 };
1180 1204