internal void CompressPingDelay(DataAccess.Entity.Component component) { //If something change let's archive it if (component.CurrentValue != component.LastHistoricalValue) { if (component.LastHistoricalValue != null) { var delta = Math.Abs(Convert.ToDouble(component.CurrentValue) - Convert.ToDouble(component.LastHistoricalValue)); if (delta >= Convert.ToDouble(component.Compression) | Convert.ToDouble(component.CurrentValue) == -1 | Convert.ToDouble(component.LastHistoricalValue) == -1) { var nHistory = new DataAccess.Entity.ComponentValueHistory() { Component = component, TimeStamp = DateTime.Now, Value = component.CurrentValue }; DataAccess.DatabaseFacade.DatabaseManager.ComponentValueHistory.Insert(nHistory); component.LastHistoricalValue = nHistory.Value; component.LastHistoricalContact = nHistory.TimeStamp; } } else { var nHistory = new DataAccess.Entity.ComponentValueHistory() { Component = component, TimeStamp = DateTime.Now, Value = component.CurrentValue }; DataAccess.DatabaseFacade.DatabaseManager.ComponentValueHistory.Insert(nHistory); component.LastHistoricalValue = nHistory.Value; component.LastHistoricalContact = nHistory.TimeStamp; } } }
public void StartPing(RunWorkerCompletedEventHandler EndPingEventHandler, DataAccess.Entity.Component component) { worker = new BackgroundWorker(); worker.RunWorkerCompleted += EndPingEventHandler; worker.DoWork += worker_DoWork; worker.RunWorkerAsync(component); }
public ActionResult Create(String id, FormCollection collection) { try { // TODO: Add insert logic here DataAccess.Entity.Component nComponent = new DataAccess.Entity.Component(); nComponent.Name = "New"; //Get the associated device var bSonId = new MongoDB.Bson.ObjectId(id); var query = Query <HomeAutomation.DataAccess.Entity.Device> .EQ(e => e.Id, bSonId); nComponent.Device = DataAccess.DatabaseFacade.DatabaseManager.Devices.FindOne(query); nComponent.Type = DataAccess.DatabaseFacade.DatabaseManager.ComponentTypes.AsQueryable().Single(u => u.Category == collection["Type"] & u.Mode == collection["SubType"]); if (nComponent.Type.TemplateOptions != null) { nComponent.Options = new Dictionary <string, string>(nComponent.Type.TemplateOptions); } nComponent.IsActive = false; DataAccess.DatabaseFacade.DatabaseManager.Components.Insert(nComponent); var device = nComponent.Device; device.ComponentIds.Add(new MongoDB.Driver.MongoDBRef("Component", nComponent.Id)); DataAccess.DatabaseFacade.DatabaseManager.Devices.Save(device); return(RedirectToAction("Edit", new { id = nComponent.Id })); //return View("Edit", nComponent); } catch { return(View()); } }
private void GetSensorValue(DataAccess.Entity.Component component) { String substringXML; try { if (component.Options.ContainsKey("SensorName")) { if (SensorsWebResponse.ContainsKey(component.Device.IPAddress)) { substringXML = SensorsWebResponse[component.Device.IPAddress]; } else { WebClient wc = new WebClient(); if (component.Options.ContainsKey("User")) { if (!String.IsNullOrEmpty(component.Options["User"])) { wc.Credentials = new NetworkCredential(component.Options["User"], component.Options["Password"]);//TODO - Encrypt Password } } String str = wc.DownloadString(new Uri("https://" + component.Device.IPAddress + "/mob/?moid=ha-host&doPath=runtime.healthSystemRuntime.systemHealthInfo.numericSensorInfo")); substringXML = str.Substring(str.IndexOf("<xml"), str.IndexOf("</xml>") - str.IndexOf("<xml") + 6); SensorsWebResponse.Add(component.Device.IPAddress, substringXML); } XDocument xdoc = XDocument.Parse(substringXML); var SensorsInfos = from lv1 in xdoc.Root.Descendants("{urn:vim25}HostNumericSensorInfo") select new Helpers.HostNumericSensorInfo() { Name = lv1.Descendants("{urn:vim25}name").FirstOrDefault().Value, //UnitModifier = Convert.ToInt32(lv1.Descendants("{urn:vim25}unitModifier").FirstOrDefault().Value), //BaseUnits = lv1.Descendants("{urn:vim25}baseUnits").FirstOrDefault().Value, //SensorType = lv1.Descendants("{urn:vim25}sensorType").FirstOrDefault().Value, CurrentReading = Convert.ToInt32(lv1.Descendants("{urn:vim25}currentReading").FirstOrDefault().Value) }; var SensorInfo = SensorsInfos.Where(u => u.Name.Contains(component.Options["SensorName"])).FirstOrDefault(); if (SensorInfo != null) { component.SetNewValue(Math.Abs(SensorInfo.CurrentReading / 100)); component.LastContact = DateTime.Now; CompressionManager.Instance.CompressStandard(component); DataAccess.DatabaseFacade.DatabaseManager.Components.Save(component); } } } catch (Exception ex) { var logFile = new System.IO.StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "error.log", true); logFile.WriteLine(ex.ToString()); logFile.WriteLine("Adress: '" + "https://" + component.Device.IPAddress + "/mob/?moid=ha-host&doPath=runtime.healthSystemRuntime.systemHealthInfo.numericSensorInfo" + "'"); logFile.Close(); } }
private void GetPercentageLeft(DataAccess.Entity.Component component) { if (component.Options.ContainsKey("Disk")) { var DiskToSearch = component.Options["Disk"]; var oldValue = component.CurrentValue; ConnectionOptions options = null; if (component.Options.ContainsKey("User")) { if (!String.IsNullOrEmpty(component.Options["User"])) { options = new ConnectionOptions(); options.Username = component.Options["User"]; options.Password = component.Options["Password"]; //TODO Encrypt Password } } ManagementScope scope; if (options != null) { scope = new ManagementScope(@"\\" + component.Device.IPAddress + @"\root\cimv2", options); } else { scope = new ManagementScope(@"\\" + component.Device.IPAddress + @"\root\cimv2"); } SelectQuery query = new SelectQuery(); query.QueryString = "SELECT * FROM Win32_LogicalDisk"; ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection queryCollection = searcher.Get(); foreach (ManagementObject m in queryCollection) { if ((string)m.Properties["DeviceID"].Value == DiskToSearch) { component.SetNewValue(Convert.ToDouble(m.Properties["FreeSpace"].Value) / Convert.ToDouble(m.Properties["Size"].Value) * 100); component.LastContact = DateTime.Now; break; } } CompressionManager.Instance.CompressStandard(component); DataAccess.DatabaseFacade.DatabaseManager.Components.Save(component); } }
private void PingDelay(DataAccess.Entity.Component component) { var systemPing = new Ping(); var reply = systemPing.Send(component.Device.IPAddress); var oldValue = component.CurrentValue; if (reply.Status == IPStatus.Success) { component.SetNewValue(reply.RoundtripTime); component.LastContact = DateTime.Now; } else { component.SetNewValue(-1); //component.LastContact = DateTime.Now; } CompressionManager.Instance.CompressPingDelay(component); DataAccess.DatabaseFacade.DatabaseManager.Components.Save(component); }
private void GetCustomProp(DataAccess.Entity.Component component) { throw new NotImplementedException(); }
private void GetMemSpaceLeft(DataAccess.Entity.Component component) { var oldValue = component.CurrentValue; ConnectionOptions options = null; if (component.Options.ContainsKey("User")) { if (!String.IsNullOrEmpty(component.Options["User"])) { options = new ConnectionOptions(); options.Username = component.Options["User"]; options.Password = component.Options["Password"]; //TODO Encrypt Password } } ManagementScope scope; if (options != null) { scope = new ManagementScope(@"\\" + component.Device.IPAddress + @"\root\cimv2", options); } else { scope = new ManagementScope(@"\\" + component.Device.IPAddress + @"\root\cimv2"); } SelectQuery query = new SelectQuery(); query.QueryString = "SELECT * FROM Win32_OperatingSystem"; ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection queryCollection = searcher.Get(); foreach (ManagementObject m in queryCollection) { var value = Convert.ToDouble(m.Properties["FreePhysicalMemory"].Value); if (component.Options.ContainsKey("Unit")) { switch (component.Options["Unit"]) { case "KB": break; case "MB": value = value / 1024; break; case "GB": value = value / 1024 / 1024; break; case "TB": value = value / 1024 / 1024 / 1024; break; default: break; } } component.SetNewValue(value); component.LastContact = DateTime.Now; break; } CompressionManager.Instance.CompressStandard(component); DataAccess.DatabaseFacade.DatabaseManager.Components.Save(component); }