Files
cms_thermo_active/Step.Utils/ExceptionManager.cs
T
CMS4390\marantalu 512a2200c6 * Added MySQL dependencies, check mysql connection on startup
* Added default Api unhandled exceptions
* Fixed config file
2017-12-06 12:11:01 +01:00

121 lines
4.0 KiB
C#

using System;
using System.Windows.Forms;
using Step.Model;
using TeamDev.SDK.MVVM;
using static Step.Utils.Constants;
using static Step.Utils.StepLogger;
namespace Step.Utils
{
public static class ExceptionManager
{
public static void Manage(Exception ex)
{
if (ex is System.IO.FileNotFoundException)
{
// File not found
LogAndNotifyUsers(CreateMessageModel("Configuration file not found!", ex.Message, ERROR_LEVEL.FATAL));
// Close the application
Environment.Exit(1);
}
else if(ex is MySql.Data.MySqlClient.MySqlException)
{
// MySql Error
LogAndNotifyUsers(CreateMessageModel("Database Error!", ex.Message, ERROR_LEVEL.FATAL));
}
else
{
if (ex.InnerException != null)
{
Manage(ex.InnerException); // TODO test
}
else
{
// Default case
LogAndNotifyUsers(CreateMessageModel("Generic Error!", ex.Message, ERROR_LEVEL.FATAL));
// Close the application
Environment.Exit(1);
}
}
}
public static void Manage(ERROR_LEVEL errorLevel, Exception exception)
{
Manage(errorLevel, exception.Message);
}
public static void Manage(ERROR_LEVEL errorLevel, string message)
{
switch (errorLevel)
{
case ERROR_LEVEL.INFO:
{
// Log
LogInfo(message);
// Notify users
NotifyUsers(CreateMessageModel("Info!", message, ERROR_LEVEL.INFO));
}
break;
case ERROR_LEVEL.WARNING:
{
LogWarning(message);
NotifyUsers(CreateMessageModel("Warning!", message, ERROR_LEVEL.WARNING));
}
break;
case ERROR_LEVEL.ERROR:
{
LogError(message);
NotifyUsers(CreateMessageModel("Error!", message, ERROR_LEVEL.ERROR));
}
break;
case ERROR_LEVEL.FATAL:
{
LogFatal(message);
NotifyUsers(CreateMessageModel("Fatal Error!", message, ERROR_LEVEL.FATAL));
// Close the application
Environment.Exit(1);
}break;
default:
{
LogFatal(message);
NotifyUsers(CreateMessageModel("Generic Error!", message, ERROR_LEVEL.FATAL));
// Close the application
Environment.Exit(1);
}
break;
}
}
private static void LogAndNotifyUsers(ErrorMessageModel error)
{
// Log
LogMessage(error.Message, (ERROR_LEVEL)error.errorLevel);
NotifyUsers(error);
}
private static void NotifyUsers(ErrorMessageModel error)
{
if (error.errorLevel > (int)ERROR_LEVEL.WARNING)
{
// Notify user
MessageBox.Show(error.Message, error.Title, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
// Notify user
MessageServices.Current.Publish(SEND_MESSAGE, null, error);
}
}
private static ErrorMessageModel CreateMessageModel(string title, string message, ERROR_LEVEL level)
{
return new ErrorMessageModel()
{
Title = title,
Message = message,
errorLevel = (int)level
};
}
}
}