Skip to content

Web applicaiton error logging fro both client and server. Useful during beta testing to automate error reporting.

License

Notifications You must be signed in to change notification settings

dhrobbins/Reducio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reducio - A web application error logging framework for client and server logging

###Premise Reducio will help record Javascript errors that occur during client side testing, and will attempt to:

  • Classify each error based on message thrown
  • Record an exception from the client and associate secondary instances of that exception to the primary error description
  • Assign an identifier to the user session for error corrrelation
  • Provide a method for mapping client side errors to any exceptions thrown in ther server environment

Just add this function to you web pages and errors will be logged on your server:

<script type="text/javascript">
		var userSessionGuid = "<%= UserSessionGuid%>";
	</script>

And this function to your .js file

/*
    Error Handler Object
*/
var Incident = function (title, pageName, userSessionGuid, currentDOM, notes, clientData, originalErrorMessage) {
    this.Title = title;
    this.PageName = pageName;
    this.UserSessionGuid = userSessionGuid;
    this.CurrentDOM = currentDOM;
    this.Notes = notes;
    this.ClientData = clientData;
    this.OriginalErrorMessage = originalErrorMessage;
}

function sendError(){
     var o, xhr, data, msg = {}, argtype = typeof( arguments[0] );

     // if it is an error object, just use it.
     if( argtype === 'object' ){
     	  msg = arguments[0];
     }

     // if it is a string, check whether we have 3 arguments...
     else if( argtype === 'string') {
     // if we have 3 arguments, assume this is an onerror event.
          if( arguments.length == 3 ){
              msg.message    = arguments[0];
              msg.fileName   = arguments[1];
              msg.lineNumber = arguments[2];
          }
        // otherwise, post the first argument
          else {
              msg.message    = arguments[0];
          }
      }

      // include the user agent
      msg.userAgent = navigator.userAgent;

      // client data - workflows, form Fields, etc.
      var clientData = {};
      clientData.Workflow = ko.toJSON(vm.selectedWorkflow());
      clientData.FormFields = ko.toJSON(vm.formFields());

    // Create incident for logging
    var incident = new Incident("", document.URL, userSessionGuid, "{body: " + document.body.innerHTML +
                    "}", "", ko.toJSON(clientData), ko.toJSON(msg));

    //    Parse Title from message, remove 'Error: '
    var endTitlePos = msg.message.indexOf(".");
    incident.Title = msg.message.substr(7, endTitlePos - 7);

	// convert to JSON string
	data = {"jsonError" : ko.toJSON(incident) };

     //  If jQuery can't load we are in worse shape than what we think.
	 $.ajax({
	     url: "Services/ErrorLogging.asmx/LogError",
	     async: true,
	     type: "POST",
	     data: ko.toJSON(data),
	     contentType: "application/json; charset=utf-8",
	     dataType: "json",
	     error: function (XMLHttpRequest, textStatus, errorThrown) {
	         alert(XMLHttpRequest.status);
	         alert(XMLHttpRequest.responseText);
	     },
	     success: function (msg) {
	     }
	 });

     // hide error message from user in supporting browsers
     return false;
 }

 window.onerror = sendError;

###Technology Reducio uses RavenDB, jQuery, KnockoutJS

About

Web applicaiton error logging fro both client and server. Useful during beta testing to automate error reporting.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published