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);
        }
Example #7
0
        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;
            }
        }