예제 #1
0
파일: Sistema.cs 프로젝트: salez/Guirotab
            /// <summary>
            /// Envia email de erro para o desenvolvedor e grava no banco
            /// </summary>
            /// <param name="ex"></param>
            /// <param name="Request"></param>
            /// <returns></returns>
            public static void TrataErro(Exception ex, HttpRequestBase Request, bool enviarEmail)
            {
                #region Envia Email

                String mensagem = "";

                int cont = 1;
                while (ex != null)
                {
                    mensagem += "<fieldset>";
                    mensagem += "<p><strong>Erro:</strong></p>";
                    mensagem += "<p>" + ex.Message + "</p>";
                    mensagem += "<p><strong>Stack Trace:</strong></p>";
                    mensagem += "<p>" + ex.StackTrace.Nl2br() + "</p>";

                    String method = "";

                    if (ex.TargetSite != null)
                    {
                        method = ex.TargetSite.Name;
                    }

                    mensagem += "<p><strong>Method:</strong></p>";
                    mensagem += "<p>" + method + "</p>";
                    mensagem += "<p><strong>Source:</strong></p>";
                    mensagem += "<p>" + ex.Source + "</p>";

                    ex = ex.InnerException;
                    cont++;
                }
                for (int i = 1; i <= cont; i++)
                {
                    mensagem += "</fieldset>";
                }

                String urlreferrer = "";
                if (HttpContext.Current.Request.UrlReferrer != null)
                {
                    urlreferrer = HttpContext.Current.Request.UrlReferrer.ToString();
                }
                else
                {
                    urlreferrer = " - ";
                }

                String infoUsuario = "";

                #region Informações do Usuário

                try
                {
                    if (Sessao.Site.UsuarioLogado())
                    {
                        UsuarioInfo usuario = Sessao.Site.UsuarioInfo;
                        infoUsuario += "<p><strong>Id:</strong>";
                        infoUsuario += usuario.Id.ToString();
                        infoUsuario += "<br><strong>Nome:</strong>";
                        infoUsuario += usuario.Nome.ToString();
                        infoUsuario += "</p>";
                    }
                    else
                    {
                        infoUsuario = "<font color='blue'>Usuário não logado</font>";
                    }
                }
                catch (Exception e)
                {
                    infoUsuario += "<p><font color='red'>Ocorreu um erro ao tentar recuperar as informações do usuário.</font></p>";
                    infoUsuario += "<fieldset><legend>Detalhes do Erro</legend>";

                    cont = 1;
                    while (e != null)
                    {
                        infoUsuario += "<fieldset><p><strong>Erro:</strong></p>";
                        infoUsuario += "<p>" + e.Message + "</p>";
                        infoUsuario += "<p><strong>Stack Trace:</strong></p>";
                        infoUsuario += "<p>" + e.StackTrace + "</p>";

                        String method = "";

                        if (e.TargetSite != null)
                        {
                            infoUsuario += e.TargetSite.Name;
                        }

                        infoUsuario += "<p><strong>Method:</strong></p>";
                        infoUsuario += "<p>" + method + "</p>";
                        infoUsuario += "<p><strong>Source:</strong></p>";
                        infoUsuario += "<p>" + e.Source + "</p>";

                        e = e.InnerException;
                        cont++;
                    }
                    for (int i = 1; i <= cont; i++)
                    {
                        mensagem += "</fieldset>";
                    }
                    infoUsuario += "</fieldset>";
                }

                #endregion

                String gravouErro = "";

                #region Gravar Erro no Banco

                ErroRepository erroRepository = null;
                Erro erro = null;

                try
                {
                    erroRepository = new ErroRepository();

                    erro = new Erro();

                    erro.Pagina = HttpContext.Current.Request.Url.ToString();
                    erro.PaginaAnterior = urlreferrer.ToString();
                    erro.RequestHost = HttpContext.Current.Request.UserHostAddress.ToString();
                    erro.HostName = HttpContext.Current.Request.UserHostName.ToString();
                    erro.UserAgent = HttpContext.Current.Request.UserAgent.ToString();
                    erro.InfoUsuario = infoUsuario.ToString();
                    erro.ErroMsg = mensagem.ToString();

                    erroRepository.Add(erro);
                    erroRepository.Save();

                    gravouErro = "<font color='blue'>Sim (Erro #" + erro.Id + ")</font>";
                }
                catch (Exception e)
                {
                    gravouErro = "<p><font color='red'>Ocorreu um erro ao tentar gravar o erro no banco.</font></p>";
                    gravouErro = "<fieldset><legend>Detalhes do Erro</legend>";

                    cont = 1;
                    while (e != null)
                    {
                        gravouErro += "<fieldset><p><strong>Erro:</strong></p>";
                        gravouErro += "<p>" + e.Message + "</p>";
                        gravouErro += "<p><strong>Stack Trace:</strong></p>";
                        gravouErro += "<p>" + e.StackTrace + "</p>";

                        String method = "";

                        if (e.TargetSite != null)
                        {
                            gravouErro = e.TargetSite.Name;
                        }

                        gravouErro += "<p><strong>Method:</strong></p>";
                        gravouErro += "<p>" + method + "</p>";
                        gravouErro += "<p><strong>Source:</strong></p>";
                        gravouErro += "<p>" + e.Source + "</p>";

                        e = e.InnerException;
                        cont++;
                    }
                    for (int i = 1; i <= cont; i++)
                    {
                        mensagem += "</fieldset>";
                    }
                    gravouErro = "</fieldset>";
                }

                #endregion

                if (enviarEmail)
                {
                    String body = Util.Email.GetCorpoEmail("erro");

                    body = body
                        .Replace("[data]", Util.Data.Formata(DateTime.Now, Util.Data.FormatoData.Completo))
                        .Replace("[pagina]", HttpContext.Current.Request.Url.ToString())
                        .Replace("[pagina_anterior]", urlreferrer)
                        .Replace("[request_host]", HttpContext.Current.Request.UserHostAddress.ToString())
                        .Replace("[host_name]", HttpContext.Current.Request.UserHostName.ToString())
                        .Replace("[user_agent]", HttpContext.Current.Request.UserAgent.ToString())
                        .Replace("[requisicao_ajax]", (Request != null) ? (Request.IsAjaxRequest()) ? "Sim" : "Não" : " - ")
                        .Replace("[info_usuario]", infoUsuario)
                        .Replace("[gravou_erro]", gravouErro)
                        .Replace("[erro_msg]", mensagem);

                    try
                    {
                        Util.Email.Enviar(Util.Email.EmailEnvioPadrao, Util.Email.EmailDesenvolvedor, body, "Ocorreu algum erro");

                        if (erro != null)
                        {
                            erro.EnviouEmail = true;

                            erroRepository.Save();
                        }
                    }
                    catch
                    {
                        if (erro != null)
                        {
                            erro.EnviouEmail = false;

                            erroRepository.Save();
                        }
                    }
                }
                else
                {
                    erro.EnviouEmail = false;

                    erroRepository.Save();
                }

                #endregion
            }
예제 #2
0
 public void Delete(Erro erro)
 {
     db.Erros.DeleteOnSubmit(erro);
 }
예제 #3
0
        public void Add(Erro erro)
        {
            erro.DataInclusao = DateTime.Now;

            db.Erros.InsertOnSubmit(erro);
        }
예제 #4
0
 partial void DeleteErro(Erro instance);
예제 #5
0
 partial void UpdateErro(Erro instance);
예제 #6
0
 partial void InsertErro(Erro instance);