internal static void SendHealthCheckEmail(string appFullName)
        {
            var message = new EmailMessage();

            var body           = new StringBuilder();
            var tenGibibytes   = 10 * Math.Pow(1024, 3);
            var freeSpaceIsLow = false;

            foreach (var driveInfo in DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Fixed))
            {
                var bytesFree = driveInfo.TotalFreeSpace;
                freeSpaceIsLow = freeSpaceIsLow || bytesFree < tenGibibytes;
                body.AppendLine("{0} free on {1} drive.".FormatWith(FormattingMethods.GetFormattedBytes(bytesFree), driveInfo.Name));
            }

            message.Subject  = StringTools.ConcatenateWithDelimiter(" ", "Health check", freeSpaceIsLow ? "and WARNING" : "", "from " + appFullName);
            message.BodyHtml = body.ToString().GetTextAsEncodedHtml();
            EmailStatics.SendDeveloperNotificationEmail(message);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Reports an error to the developers. The report includes the specified exception and additional information about the running program. The prefix
        /// provides additional information before the standard exception and page information.
        /// </summary>
        public static void ReportError(string prefix, Exception exception)
        {
            using (var sw = new StringWriter()) {
                if (prefix.Length > 0)
                {
                    sw.WriteLine(prefix);
                    sw.WriteLine();
                }
                if (exception != null)
                {
                    sw.WriteLine(exception.ToString());
                    sw.WriteLine();
                }

                sw.WriteLine("Application: {0}".FormatWith(ConfigurationStatics.AppName));
                sw.WriteLine("Version: {0}".FormatWith(ConfigurationStatics.AppAssembly.GetName().Version));

                if (!ConfigurationStatics.IsDevelopmentInstallation)
                {
                    sw.WriteLine();
                    sw.WriteLine("Installation: {0}".FormatWith(ConfigurationStatics.InstallationConfiguration.InstallationName));
                    sw.WriteLine("Machine: {0}".FormatWith(Tewl.Tools.NetTools.GetLocalHostName()));
                }

                if (NetTools.IsWebApp())
                {
                    // This check ensures that there is an actual request, which is not the case during application initialization.
                    if (EwfApp.Instance != null && EwfApp.Instance.RequestState != null)
                    {
                        sw.WriteLine();
                        sw.WriteLine("URL: " + AppRequestState.Instance.Url);

                        sw.WriteLine();
                        foreach (string fieldName in HttpContext.Current.Request.Form)
                        {
                            sw.WriteLine("Form field " + fieldName + ": " + HttpContext.Current.Request.Form[fieldName]);
                        }

                        sw.WriteLine();
                        foreach (string cookieName in HttpContext.Current.Request.Cookies)
                        {
                            sw.WriteLine("Cookie " + cookieName + ": " + HttpContext.Current.Request.Cookies[cookieName].Value);
                        }

                        sw.WriteLine();
                        sw.WriteLine("User agent: " + HttpContext.Current.Request.GetUserAgent());
                        sw.WriteLine("Referrer: " + NetTools.ReferringUrl);

                        User user         = null;
                        User impersonator = null;

                        // exception-prone code
                        try {
                            user         = AppTools.User;
                            impersonator = AppRequestState.Instance.ImpersonatorExists ? AppRequestState.Instance.ImpersonatorUser : null;
                        }
                        catch {}

                        if (user != null)
                        {
                            sw.WriteLine("User: {0}{1}".FormatWith(user.Email, impersonator != null ? " (impersonated by {0})".FormatWith(impersonator.Email) : ""));
                        }
                    }
                }

                EwlStatics.CallEveryMethod(
                    () => {
                    lock ( errorEmailLimiter ) {
                        errorEmailLimiter.RequestAction(
                            () => EmailStatics.SendDeveloperNotificationEmail(getErrorEmailMessage(sw.ToString())),
                            () => SendDeveloperNotification(
                                "An error occurred and the email rate-limit was reached! See the log file for this and any other errors that may occur in the near future."),
                            () => {});
                    }
                },
                    () => logError(sw.ToString()));
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Reports a fault (a problem that could later cause errors) to the developers.
 /// </summary>
 public static void ReportFault(string message)
 {
     EmailStatics.SendDeveloperNotificationEmail(getFaultEmailMessage(message));
 }
Exemplo n.º 4
0
 /// <summary>
 /// Sends a notification to the developers. Do not use for anything that requires corrective action.
 /// </summary>
 public static void SendDeveloperNotification(string message)
 {
     EmailStatics.SendDeveloperNotificationEmail(getNotificationEmailMessage(message));
 }
Exemplo n.º 5
0
        /// <summary>
        /// Reports an error to the developers. The report includes the specified exception and additional information about the running program. The prefix
        /// provides additional information before the standard exception and page information.
        /// </summary>
        public static void ReportError(string prefix, Exception exception)
        {
            using (var sw = new StringWriter()) {
                if (prefix.Length > 0)
                {
                    sw.WriteLine(prefix);
                    sw.WriteLine();
                }
                if (exception != null)
                {
                    sw.WriteLine(exception.ToString());
                    sw.WriteLine();
                }

                if (NetTools.IsWebApp())
                {
                    // This check ensures that there is an actual request, which is not the case during application initialization.
                    if (EwfApp.Instance != null && EwfApp.Instance.RequestState != null)
                    {
                        sw.WriteLine("URL: " + AppRequestState.Instance.Url);

                        sw.WriteLine();
                        foreach (string fieldName in HttpContext.Current.Request.Form)
                        {
                            sw.WriteLine("Form field " + fieldName + ": " + HttpContext.Current.Request.Form[fieldName]);
                        }

                        sw.WriteLine();
                        foreach (string cookieName in HttpContext.Current.Request.Cookies)
                        {
                            sw.WriteLine("Cookie " + cookieName + ": " + HttpContext.Current.Request.Cookies[cookieName].Value);
                        }

                        sw.WriteLine();
                        sw.WriteLine("User agent: " + HttpContext.Current.Request.GetUserAgent());
                        sw.WriteLine("Referrer: " + NetTools.ReferringUrl);

                        User user         = null;
                        User impersonator = null;

                        // exception-prone code
                        try {
                            user         = AppTools.User;
                            impersonator = AppRequestState.Instance.ImpersonatorExists ? AppRequestState.Instance.ImpersonatorUser : null;
                        }
                        catch {}

                        if (user != null)
                        {
                            sw.WriteLine("User: {0}{1}".FormatWith(user.Email, impersonator != null ? " (impersonated by {0})".FormatWith(impersonator.Email) : ""));
                        }
                    }
                }
                else
                {
                    sw.WriteLine("Program: " + ConfigurationStatics.AppName);
                    sw.WriteLine("Version: " + ConfigurationStatics.AppAssembly.GetName().Version);
                    sw.WriteLine("Machine: " + StandardLibraryMethods.GetLocalHostName());
                }

                StandardLibraryMethods.CallEveryMethod(
                    delegate { EmailStatics.SendDeveloperNotificationEmail(getErrorEmailMessage(sw.ToString())); },
                    delegate { logError(sw.ToString()); });
            }
        }