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 870 // Share to global scope as Airbrake ("window.Hoptoad" for backward compatibility)
871 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 879 function Notifier() {
874 880 this.options = Util.merge({}, Config.options);
875 881 this.xmlData = Util.merge(this.DEF_XML_DATA, Config.xmlData);
... ... @@ -921,7 +927,7 @@ printStackTrace.implementation.prototype = {
921 927 }
922 928  
923 929 return function (error) {
924   - var outputData = '',
  930 + var outputData = '', jsonData,
925 931 url = '';
926 932 //
927 933  
... ... @@ -934,9 +940,12 @@ printStackTrace.implementation.prototype = {
934 940  
935 941 switch (this.options['outputFormat']) {
936 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 949 break;
941 950  
942 951 case 'JSON':
... ... @@ -945,9 +954,12 @@ printStackTrace.implementation.prototype = {
945 954 * http://collect.airbrake.io/api/v3/projects/[PROJECT_ID]/notices?key=[API_KEY]
946 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 963 break;
952 964  
953 965 default:
... ... @@ -1175,6 +1187,18 @@ printStackTrace.implementation.prototype = {
1175 1187 }
1176 1188  
1177 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  
... ...