You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
491 lines
14 KiB
491 lines
14 KiB
2 weeks ago
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
// using System.ComponentModel;
|
||
|
using System.Diagnostics;
|
||
|
using System.Drawing;
|
||
|
using System.IO;
|
||
|
using System.Linq;
|
||
|
using System.Net;
|
||
|
using System.Reflection;
|
||
|
using System.Text;
|
||
|
using System.Threading;
|
||
|
using System.Web.Script.Serialization;
|
||
|
using System.Windows.Forms;
|
||
|
using Alchemy;
|
||
|
using Alchemy.Classes;
|
||
|
using iMonitorApp.Properties;
|
||
|
|
||
|
namespace iMonitorApp
|
||
|
{
|
||
|
// Token: 0x02000016 RID: 22
|
||
|
public partial class StackAlarm : Form
|
||
|
{
|
||
|
// Token: 0x0600008E RID: 142 RVA: 0x0000642E File Offset: 0x0000462E
|
||
|
public StackAlarm()
|
||
|
{
|
||
|
this.InitializeComponent();
|
||
|
this.LoadForm();
|
||
|
}
|
||
|
|
||
|
// Token: 0x0600008F RID: 143 RVA: 0x00006460 File Offset: 0x00004660
|
||
|
private void LoadForm()
|
||
|
{
|
||
|
this.li = new BindingListInvoked<ParseStackAlarms>(this.dataGridView1);
|
||
|
this.dataGridView1.AutoGenerateColumns = true;
|
||
|
this.dataGridView1.DataSource = this.li;
|
||
|
Thread thread = new Thread(new ThreadStart(this.LaunchListener));
|
||
|
thread.Start();
|
||
|
this._themeEmails = new ThemeEmails();
|
||
|
this.heartBeatTimer = new System.Threading.Timer(new TimerCallback(this.SendAMHeartBeat), null, 100, Settings.Default.ExternalHeartbeatTimer * 1000);
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000090 RID: 144 RVA: 0x000064EC File Offset: 0x000046EC
|
||
|
public void SendAMHeartBeat(object state)
|
||
|
{
|
||
|
bool primary = Settings.Default.Primary;
|
||
|
if (primary)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Stopwatch stopwatch = new Stopwatch();
|
||
|
stopwatch.Start();
|
||
|
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(Settings.Default.ExternalHeartbeatURL);
|
||
|
string str = Convert.ToBase64String(Encoding.ASCII.GetBytes(Settings.Default.ExternalHeartbeatUsername + ":" + Settings.Default.ExternalHeartbeatPassword));
|
||
|
httpWebRequest.Headers.Add("Authorization", "Basic " + str);
|
||
|
httpWebRequest.ReadWriteTimeout = 20000;
|
||
|
httpWebRequest.Timeout = 20000;
|
||
|
httpWebRequest.Method = "GET";
|
||
|
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
|
||
|
stopwatch.Stop();
|
||
|
httpWebResponse.Close();
|
||
|
httpWebRequest.Abort();
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000091 RID: 145 RVA: 0x000065E0 File Offset: 0x000047E0
|
||
|
private void LaunchWebSocketListener()
|
||
|
{
|
||
|
this._webSocketServer = new WebSocketServer(12345, IPAddress.Any)
|
||
|
{
|
||
|
OnReceive = new OnEventDelegate(this.OnWebSocketServerReceive),
|
||
|
OnSend = new OnEventDelegate(this.OnWebSocketServerSend),
|
||
|
OnConnected = new OnEventDelegate(this.OnWebSocketServerConnected),
|
||
|
OnDisconnect = new OnEventDelegate(this.OnWebSocketServerDisconnected),
|
||
|
TimeOut = new TimeSpan(0, 50, 0)
|
||
|
};
|
||
|
this._webSocketClientContextList = new List<UserContext>();
|
||
|
this._clientUserMap = new Dictionary<string, string>();
|
||
|
this._clientUserMapExtension = new Dictionary<string, string>();
|
||
|
this._webSocketServer.Start();
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000092 RID: 146 RVA: 0x00006688 File Offset: 0x00004888
|
||
|
private void OnWebSocketServerConnected(UserContext context)
|
||
|
{
|
||
|
Console.WriteLine("Client Connected From : " + context.ClientAddress.ToString());
|
||
|
bool flag = (from t in this._webSocketClientContextList
|
||
|
where t.ClientAddress == context.ClientAddress
|
||
|
select t).Count<UserContext>() == 0;
|
||
|
if (flag)
|
||
|
{
|
||
|
this._webSocketClientContextList.Add(context);
|
||
|
}
|
||
|
bool flag2 = !this._clientUserMap.ContainsKey(context.ClientAddress.ToString());
|
||
|
if (flag2)
|
||
|
{
|
||
|
this._clientUserMap.Add(context.ClientAddress.ToString(), "");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000093 RID: 147 RVA: 0x0000673C File Offset: 0x0000493C
|
||
|
private void OnWebSocketServerDisconnected(UserContext context)
|
||
|
{
|
||
|
Console.WriteLine("OnDisconnected: " + context.ClientAddress.ToString());
|
||
|
UserContext userContext = (from p in this._webSocketClientContextList
|
||
|
where p.ClientAddress == context.ClientAddress
|
||
|
select p).FirstOrDefault<UserContext>();
|
||
|
bool flag = userContext != null;
|
||
|
if (flag)
|
||
|
{
|
||
|
this._webSocketClientContextList.Remove(userContext);
|
||
|
}
|
||
|
bool flag2 = this._clientUserMap.ContainsKey(context.ClientAddress.ToString());
|
||
|
if (flag2)
|
||
|
{
|
||
|
this._clientUserMap.Remove(context.ClientAddress.ToString());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000094 RID: 148 RVA: 0x000067E4 File Offset: 0x000049E4
|
||
|
private void OnWebSocketServerReceive(UserContext context)
|
||
|
{
|
||
|
Console.WriteLine("OnSend: " + context.ClientAddress.ToString());
|
||
|
string text = context.DataFrame.ToString();
|
||
|
bool flag = text != "" && text != null;
|
||
|
if (flag)
|
||
|
{
|
||
|
bool flag2 = text.Split(new char[]
|
||
|
{
|
||
|
','
|
||
|
}).Count<string>() == 2;
|
||
|
if (flag2)
|
||
|
{
|
||
|
string text2 = text.Split(new char[]
|
||
|
{
|
||
|
','
|
||
|
})[0];
|
||
|
string text3 = text.Split(new char[]
|
||
|
{
|
||
|
','
|
||
|
})[1];
|
||
|
bool flag3 = this._clientUserMap.ContainsKey(context.ClientAddress.ToString());
|
||
|
if (flag3)
|
||
|
{
|
||
|
this._clientUserMap[context.ClientAddress.ToString()] = text3;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this._clientUserMap.Add(context.ClientAddress.ToString(), text3);
|
||
|
}
|
||
|
try
|
||
|
{
|
||
|
IEnumerable<ParseStackAlarms> source = (from t in this.li
|
||
|
orderby t.ReceivingTime descending
|
||
|
select t).Take(50);
|
||
|
foreach (ParseStackAlarms parseStackAlarms in from t in source
|
||
|
orderby t.ReceivingTime
|
||
|
select t)
|
||
|
{
|
||
|
bool flag4 = parseStackAlarms.Recipients.Split(new char[]
|
||
|
{
|
||
|
','
|
||
|
}).Select((string t) => t.ToLower()).ToList<string>().Contains(text3 + "@4ecap.com");
|
||
|
if (flag4)
|
||
|
{
|
||
|
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
|
||
|
string aString = javaScriptSerializer.Serialize(parseStackAlarms);
|
||
|
context.Send(aString, false, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
context.Send("Unable to fetch history<>-", false, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000095 RID: 149 RVA: 0x00006A20 File Offset: 0x00004C20
|
||
|
private void OnWebSocketServerSend(UserContext context)
|
||
|
{
|
||
|
Console.WriteLine("OnReceived: " + context.ClientAddress.ToString());
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000096 RID: 150 RVA: 0x00006A40 File Offset: 0x00004C40
|
||
|
private void UpdateWebUI(string speech, string users, DateTime receivedTime)
|
||
|
{
|
||
|
List<string> list = (from p in users.Split(new char[]
|
||
|
{
|
||
|
','
|
||
|
})
|
||
|
select p.Replace("@4ecap.com", "").ToLower()).ToList<string>();
|
||
|
foreach (UserContext userContext in this._webSocketClientContextList)
|
||
|
{
|
||
|
bool flag = list.Contains(this._clientUserMap[userContext.ClientAddress.ToString()]);
|
||
|
if (flag)
|
||
|
{
|
||
|
userContext.Send(speech + "<>" + receivedTime.ToShortTimeString(), false, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000097 RID: 151 RVA: 0x00006B08 File Offset: 0x00004D08
|
||
|
private void UpdateWebUI(ParseStackAlarms pa)
|
||
|
{
|
||
|
List<string> list = (from p in pa.Recipients.Split(new char[]
|
||
|
{
|
||
|
','
|
||
|
})
|
||
|
select p.Replace("@4ecap.com", "").ToLower()).ToList<string>();
|
||
|
foreach (UserContext userContext in this._webSocketClientContextList)
|
||
|
{
|
||
|
bool flag = list.Contains(this._clientUserMap[userContext.ClientAddress.ToString()]);
|
||
|
if (flag)
|
||
|
{
|
||
|
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
|
||
|
string aString = javaScriptSerializer.Serialize(pa);
|
||
|
userContext.Send(aString, false, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000098 RID: 152 RVA: 0x00006BD8 File Offset: 0x00004DD8
|
||
|
private void LaunchListener()
|
||
|
{
|
||
|
AsynchronousSocketListenerStackAlarms asynchronousSocketListenerStackAlarms = new AsynchronousSocketListenerStackAlarms(Settings.Default.CurrentIP, Settings.Default.EmailPort);
|
||
|
AsynchronousSocketListenerStackAlarms.Received += this.AsynchronousSocketListener_Received;
|
||
|
AsynchronousSocketListenerStackAlarms.StartListening();
|
||
|
Debug.WriteLine("Listening.....");
|
||
|
}
|
||
|
|
||
|
// Token: 0x06000099 RID: 153 RVA: 0x00006C18 File Offset: 0x00004E18
|
||
|
private void AsynchronousSocketListener_Received(object sender, EventArgs e)
|
||
|
{
|
||
|
this.BackupListAndClear();
|
||
|
bool flag = sender.ToString() == "Command: GETLIVE<EOF>";
|
||
|
if (flag)
|
||
|
{
|
||
|
Thread thread = new Thread(new ThreadStart(this.DumpLiveLogs));
|
||
|
thread.Start();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
object obj = this.locker;
|
||
|
lock (obj)
|
||
|
{
|
||
|
ParseStackAlarms parseStackAlarms = new ParseStackAlarms(sender.ToString(), this._themeEmails);
|
||
|
this.li.Add(parseStackAlarms);
|
||
|
try
|
||
|
{
|
||
|
bool phoneit = parseStackAlarms.Phoneit;
|
||
|
if (phoneit)
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
new Thread(new ParameterizedThreadStart(this.ProcessThread))
|
||
|
{
|
||
|
IsBackground = true
|
||
|
}.Start(parseStackAlarms);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x0600009A RID: 154 RVA: 0x00006CFC File Offset: 0x00004EFC
|
||
|
public void ProcessThread(object sa)
|
||
|
{
|
||
|
((ParseStackAlarms)sa).Process();
|
||
|
bool flag = ((ParseStackAlarms)sa).SendingEmailStatus.StartsWith("Error");
|
||
|
if (flag)
|
||
|
{
|
||
|
this.consecutiveFails++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.consecutiveFails = 0;
|
||
|
}
|
||
|
bool flag2 = this.consecutiveFails > Settings.Default.ConsecutiveEmailFailCounter;
|
||
|
if (flag2)
|
||
|
{
|
||
|
SocketClient.Send(Settings.Default.CurrentIP, Settings.Default.PhonePort, Settings.Default.CatchAllPhone + "<EOF>");
|
||
|
}
|
||
|
try
|
||
|
{
|
||
|
bool invokeRequired = this.dataGridView1.InvokeRequired;
|
||
|
if (invokeRequired)
|
||
|
{
|
||
|
this.dataGridView1.Invoke(new Action(delegate()
|
||
|
{
|
||
|
this.UpdateDataGridView();
|
||
|
}));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.UpdateDataGridView();
|
||
|
}
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x0600009B RID: 155 RVA: 0x00006DD8 File Offset: 0x00004FD8
|
||
|
public void Log(string text, bool clear = false)
|
||
|
{
|
||
|
bool invokeRequired = this.tb_log.InvokeRequired;
|
||
|
if (invokeRequired)
|
||
|
{
|
||
|
this.tb_log.Invoke(new Action(delegate()
|
||
|
{
|
||
|
bool clear3 = clear;
|
||
|
if (clear3)
|
||
|
{
|
||
|
this.tb_log.Text = "";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.tb_log.Text = text + "\r\n" + this.tb_log.Text;
|
||
|
}
|
||
|
}));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
bool clear2 = clear;
|
||
|
if (clear2)
|
||
|
{
|
||
|
this.tb_log.Text = "";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.tb_log.Text = text + "\r\n" + this.tb_log.Text;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x0600009C RID: 156 RVA: 0x00006E74 File Offset: 0x00005074
|
||
|
public void UpdateDataGridView()
|
||
|
{
|
||
|
this.dataGridView1.Refresh();
|
||
|
try
|
||
|
{
|
||
|
foreach (object obj in ((IEnumerable)this.dataGridView1.Rows))
|
||
|
{
|
||
|
DataGridViewRow dataGridViewRow = (DataGridViewRow)obj;
|
||
|
try
|
||
|
{
|
||
|
bool flag = dataGridViewRow.Cells[1].Value.ToString().StartsWith("Error");
|
||
|
if (flag)
|
||
|
{
|
||
|
dataGridViewRow.DefaultCellStyle.ForeColor = Color.Red;
|
||
|
}
|
||
|
bool flag2 = dataGridViewRow.Cells[1].Value.ToString().StartsWith("Proce");
|
||
|
if (flag2)
|
||
|
{
|
||
|
dataGridViewRow.DefaultCellStyle.ForeColor = Color.Orange;
|
||
|
}
|
||
|
bool flag3 = dataGridViewRow.Cells[1].Value.ToString().StartsWith("Sent");
|
||
|
if (flag3)
|
||
|
{
|
||
|
dataGridViewRow.DefaultCellStyle.ForeColor = Color.Green;
|
||
|
}
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x0600009D RID: 157 RVA: 0x00006FB8 File Offset: 0x000051B8
|
||
|
public void BackupListAndClear()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
bool flag = this.li.Count >= Settings.Default.BackupCount;
|
||
|
if (flag)
|
||
|
{
|
||
|
bool flag2 = (from p in this.li
|
||
|
where p.SendingEmailStatus == ""
|
||
|
select p).Count<ParseStackAlarms>() == 0;
|
||
|
if (flag2)
|
||
|
{
|
||
|
this.WriteCSV<ParseStackAlarms>(this.li, "C:\\tempFiles\\iMonitorLogs\\", "test");
|
||
|
this.li.Clear();
|
||
|
this.Log("", true);
|
||
|
this.Log("Backed up logs - Cleared UI", false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
this.Log("Error backing up data", false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x0600009E RID: 158 RVA: 0x00007084 File Offset: 0x00005284
|
||
|
public void DumpLiveLogs()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
this.WriteCSV<ParseStackAlarms>(this.li, "C:\\tempFiles\\iMonitorLogs\\", "live.csv");
|
||
|
this.Log("Live Logs Dumped", false);
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
this.Log("Error dumping log file", false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x0600009F RID: 159 RVA: 0x000070DC File Offset: 0x000052DC
|
||
|
public void WriteCSV<T>(IEnumerable<T> items, string path, string filename = "")
|
||
|
{
|
||
|
bool flag = !Directory.Exists(path);
|
||
|
if (flag)
|
||
|
{
|
||
|
Directory.CreateDirectory(path);
|
||
|
}
|
||
|
bool flag2 = filename == "";
|
||
|
if (flag2)
|
||
|
{
|
||
|
filename = "iMonitor_" + DateTime.Now.ToString("ddMMMyy_hh_mm") + ".csv";
|
||
|
}
|
||
|
Type typeFromHandle = typeof(T);
|
||
|
IOrderedEnumerable<PropertyInfo> source = from p in typeFromHandle.GetProperties(BindingFlags.Instance | BindingFlags.Public)
|
||
|
orderby p.Name
|
||
|
select p;
|
||
|
using (StreamWriter streamWriter = new StreamWriter(path + filename))
|
||
|
{
|
||
|
string text = string.Join("^^", from p in source
|
||
|
select p.Name);
|
||
|
text = text.Replace(",", ";").Replace("^^", ", ");
|
||
|
streamWriter.WriteLine(text);
|
||
|
using (IEnumerator<T> enumerator = items.GetEnumerator())
|
||
|
{
|
||
|
while (enumerator.MoveNext())
|
||
|
{
|
||
|
T item = enumerator.Current;
|
||
|
string text2 = string.Join<object>("^^", from p in source
|
||
|
select p.GetValue(item, null));
|
||
|
text2 = text2.Replace(",", ";").Replace("^^", ", ");
|
||
|
streamWriter.WriteLine(text2);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Token: 0x060000A0 RID: 160 RVA: 0x00007288 File Offset: 0x00005488
|
||
|
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
|
||
|
{
|
||
|
e.ThrowException = false;
|
||
|
}
|
||
|
|
||
|
// Token: 0x0400005C RID: 92
|
||
|
public object locker = new object();
|
||
|
|
||
|
// Token: 0x0400005D RID: 93
|
||
|
public BindingListInvoked<ParseStackAlarms> li;
|
||
|
|
||
|
// Token: 0x0400005E RID: 94
|
||
|
public WebSocketServer _webSocketServer;
|
||
|
|
||
|
// Token: 0x0400005F RID: 95
|
||
|
public List<UserContext> _webSocketClientContextList;
|
||
|
|
||
|
// Token: 0x04000060 RID: 96
|
||
|
public Dictionary<string, string> _clientUserMap;
|
||
|
|
||
|
// Token: 0x04000061 RID: 97
|
||
|
public Dictionary<string, string> _clientUserMapExtension;
|
||
|
|
||
|
// Token: 0x04000062 RID: 98
|
||
|
private System.Threading.Timer heartBeatTimer;
|
||
|
|
||
|
// Token: 0x04000063 RID: 99
|
||
|
private ThemeEmails _themeEmails;
|
||
|
|
||
|
// Token: 0x04000064 RID: 100
|
||
|
public int consecutiveFails = 0;
|
||
|
}
|
||
|
}
|