Code coverage report for app/controllers/global/errors_handler_controller.js

Statements: 79.17% (19 / 24)      Branches: 50% (7 / 14)      Functions: 83.33% (5 / 6)      Lines: 79.17% (19 / 24)      Ignored: none     

All files » app/controllers/global/ » errors_handler_controller.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103    1                                     1   1                             4 4 4       4             1               1 1                         1 1 1   1             1                 1       1 1 1      
'use strict';
 
;require.register("controllers/global/errors_handler_controller", function (exports, require, module) {
  /**
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
 
  var App = require('app');
 
  App.ErrorsHandlerController = Em.Controller.extend(App.Persist, {
 
    name: 'errorsHandlerController',
 
    /**
    * @const
    */
    ERROR_STORAGE_SIZE: 500000,
 
    /**
    * @const
    */
    MAX_TRACE_LENGTH: 1000,
 
    init: function init() {
      var oldError = window.onerror || Em.K;
      var self = this;
      window.onerror = function (err, url, lineNumber, colNumber, Err) {
        oldError.call(this, err, url, lineNumber, colNumber, Err);
        self.saveErrorLogs(err, url, lineNumber, colNumber, Err);
      };
      return this._super();
    },
 
    /**
     * load logs from server
     */
    loadErrorLogs: function loadErrorLogs() {
      this.getUserPref('errors');
    },
 
    /**
    * @method getUserPrefSuccessCallback
    * @param {object|null} data
    */
    getUserPrefSuccessCallback: function getUserPrefSuccessCallback(data) {
      Eif (data) {
        localStorage.setObject('errors', data);
      }
    },
 
    /**
     * save error logs to localStorage and server
     * @param {string} err
     * @param {string} url
     * @param {number} lineNumber
     * @param {number} colNumber
     * @param {Error} Err
     */
    saveErrorLogs: function saveErrorLogs(err, url, lineNumber, colNumber, Err) {
      var ls = localStorage.getObject('errors') || {};
      var key = new Date().getTime();
      var stackTrace = Em.get(Err || {}, 'stack');
 
      Iif (stackTrace) {
        var origin = location.origin || location.protocol + '//' + location.host,
            path = origin + location.pathname + 'javascripts',
            pattern = new RegExp(path, 'g');
        stackTrace = stackTrace.replace(pattern, '').substr(0, this.MAX_TRACE_LENGTH);
      }
 
      var val = {
        file: url,
        line: lineNumber,
        col: colNumber,
        error: err,
        stackTrace: stackTrace
      };
 
      //overwrite errors if storage full
      Iif (JSON.stringify(ls).length > this.ERROR_STORAGE_SIZE) {
        delete ls[Object.keys(ls).sort()[0]];
      }
 
      ls[key] = val;
      localStorage.setObject('errors', ls);
      this.postUserPref('errors', ls);
    }
  });
});