public void Interpret(Data d, SQLiteConnection conn) { if (d.Type != ECollectorType.Disk) { return; } if (d is GenericDictionaryData <DiskUsage> ) { Dictionary <string, DiskUsage> value = ((GenericDictionaryData <DiskUsage>)d).Data; // Don't alert on drives that aren't being monitored MonitoredDrivesRequest request = new MonitoredDrivesRequest(d.Name); RequestBus.Instance.MakeRequest(request); DiskSpaceLowAlert low_level = new DiskSpaceLowAlert(); DiskSpaceCriticallyLowAlert critically_low_level = new DiskSpaceCriticallyLowAlert(); double low = low_level.GetValueAsDouble(conn) ?? 80.0; double critically_low = critically_low_level.GetValueAsDouble(conn) ?? 90.0; EStatusType status = EStatusType.AdequateDiskSpace; List <string> messages = new List <string>(); DiskSpaceStatus ds_status = new DiskSpaceStatus(low, critically_low); foreach (string drive in value.Keys) { if (request.IsHandled && request.DriveManager.IsDriveMonitored(drive) == false) { continue; } DiskUsage data = value[drive]; Tuple <EStatusType, double> drive_status = ds_status.GetStatus(data.UsedNum, data.CapacityNum); status = status.DiskSpaceCompare(drive_status.Item1); if (drive_status.Item1 == EStatusType.CriticallyLowOnDiskSpace || drive_status.Item1 == EStatusType.LowOnDiskSpace) { messages.Add($"{drive} -- {drive_status.Item2:0.0} %"); } } string message = messages.JoinStrings(", "); long device_id = GetDeviceID(d, conn); if (device_id >= 0) { SetDeviceStatus(device_id, status, DiskSpaceStatus.Types, message, conn); } else { ApplicationEventLog log = new ApplicationEventLog(); log.LogError($"DiskSpaceInterpreter: unable to get device id for {d.Context.Name}"); } } else { throw new Exception("DiskSpaceInterpreter: data type is wrong"); } }
public void HandleZeroCapacityProperly() { DiskSpaceStatus ds_status = new DiskSpaceStatus(80.0, 90.0); Tuple <EStatusType, double> status = ds_status.GetStatus(0, 0); Assert.Equal(EStatusType.CriticallyLowOnDiskSpace, status.Item1); Assert.Equal(0.0, status.Item2, 1); }
public void HandleLargeNumbersOK() { DiskSpaceStatus ds_status = new DiskSpaceStatus(80.0, 90.0); // Handle large #s OK Tuple <EStatusType, double> status = ds_status.GetStatus(10_000_000_000_000, 10_500_000_000_000); Assert.Equal(EStatusType.CriticallyLowOnDiskSpace, status.Item1); Assert.Equal(95.2, status.Item2, 1); }
public void GenerateStatusTypesProperly() { DiskSpaceStatus ds_status = new DiskSpaceStatus(80.0, 90.0); Tuple <EStatusType, double> status = ds_status.GetStatus(200, 1000); Assert.Equal(EStatusType.AdequateDiskSpace, status.Item1); status = ds_status.GetStatus(800, 1000); Assert.Equal(EStatusType.LowOnDiskSpace, status.Item1); status = ds_status.GetStatus(900, 1000); Assert.Equal(EStatusType.CriticallyLowOnDiskSpace, status.Item1); status = ds_status.GetStatus(999, 1000); Assert.Equal(EStatusType.CriticallyLowOnDiskSpace, status.Item1); status = ds_status.GetStatus(0, 1000); Assert.Equal(EStatusType.AdequateDiskSpace, status.Item1); }
public void HandleThresholdTransitionsProperly() { DiskSpaceStatus ds_status = new DiskSpaceStatus(80.0, 90.0); Tuple <EStatusType, double> status = ds_status.GetStatus(799, 1000); Assert.Equal(EStatusType.AdequateDiskSpace, status.Item1); Assert.Equal(79.9, status.Item2, 1); status = ds_status.GetStatus(800, 1000); Assert.Equal(EStatusType.LowOnDiskSpace, status.Item1); Assert.Equal(80.0, status.Item2, 1); status = ds_status.GetStatus(899, 1000); Assert.Equal(EStatusType.LowOnDiskSpace, status.Item1); Assert.Equal(89.9, status.Item2, 1); status = ds_status.GetStatus(900, 1000); Assert.Equal(EStatusType.CriticallyLowOnDiskSpace, status.Item1); Assert.Equal(90.0, status.Item2, 1); }
public void HandleMaxThresholdsProperly() { DiskSpaceStatus ds_status = new DiskSpaceStatus(0.0, 100.0); Tuple <EStatusType, double> status = ds_status.GetStatus(0, 1000); Assert.Equal(EStatusType.LowOnDiskSpace, status.Item1); Assert.Equal(0.0, status.Item2, 1); status = ds_status.GetStatus(1, 1000); Assert.Equal(EStatusType.LowOnDiskSpace, status.Item1); Assert.Equal(0.1, status.Item2, 1); status = ds_status.GetStatus(999, 1000); Assert.Equal(EStatusType.LowOnDiskSpace, status.Item1); Assert.Equal(99.9, status.Item2, 1); status = ds_status.GetStatus(1000, 1000); Assert.Equal(EStatusType.CriticallyLowOnDiskSpace, status.Item1); Assert.Equal(100.0, status.Item2, 1); }
static void HandleData(Data d) { WriteLine(JsonConvert.SerializeObject(d, Newtonsoft.Json.Formatting.Indented, new Newtonsoft.Json.JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml })); switch (d.Type) { case ECollectorType.Memory: break; case ECollectorType.Disk: if (d is GenericDictionaryData <DiskUsage> ) { Dictionary <string, DiskUsage> value = ((GenericDictionaryData <DiskUsage>)d).Data; DiskSpaceStatus ds_status = new DiskSpaceStatus(80, 90); EStatusType status = EStatusType.AdequateDiskSpace; foreach (string drive in value.Keys) { DiskUsage data = value[drive]; Tuple <EStatusType, double> drive_status = ds_status.GetStatus(data.UsedNum, data.CapacityNum); status = status.DiskSpaceCompare(drive_status.Item1); WriteLine($"{drive} -- {drive_status.Item2:0.0} %"); } WriteLine($"Status: {status}"); } break; case ECollectorType.CPUUsage: break; case ECollectorType.NICUsage: break; case ECollectorType.Uptime: break; case ECollectorType.LastBootTime: break; case ECollectorType.Processes: GenericDictionaryData <gov.sandia.sld.common.data.wmi.Process> processes = d as GenericDictionaryData <gov.sandia.sld.common.data.wmi.Process>; ulong working_set = 0; ulong working_set_private = 0; ulong private_bytes = 0; ulong memory = 0; foreach (gov.sandia.sld.common.data.wmi.Process process in processes.Data.Values) { memory += process.MemoryNum; working_set += process.WorkingSetNum; working_set_private += process.WorkingSetPrivateNum; private_bytes += process.PrivateBytesNum; } WriteLine($"Total memory: {memory} bytes, {memory / (float)(1024 * 1024)} MB"); WriteLine($"Total working set: {working_set} bytes, {working_set / (float)(1024 * 1024)} MB"); WriteLine($"Total private working set: {working_set_private} bytes, {working_set_private / (float)(1024 * 1024)} MB"); WriteLine($"Total private bytes: {private_bytes} bytes, {private_bytes / (float)(1024 * 1024)} MB"); break; case ECollectorType.Ping: break; case ECollectorType.InstalledApplications: break; case ECollectorType.Services: break; case ECollectorType.SystemErrors: break; case ECollectorType.ApplicationErrors: break; case ECollectorType.DatabaseSize: break; case ECollectorType.UPS: break; case ECollectorType.DiskSpeed: break; case ECollectorType.Configuration: break; case ECollectorType.SMART: break; //case CollectorType.AntiVirus: // break; //case CollectorType.Firewall: // break; case ECollectorType.Unknown: break; default: break; } }