Beispiel #1
0
        private static void CheckThresholdHost(List <DiagnosticResult> result,
                                               SettingsThresholdHost thresholdHost,
                                               DiagnosticResultContext context,
                                               string id,
                                               IEnumerable <dynamic> rrdData)
        {
            var count = rrdData.Count();

            CheckThreshold(result,
                           thresholdHost.Cpu,
                           "WV0002",
                           context,
                           "Usage",
                           new[] { (rrdData.Sum(a => (double)a.cpu) / count * 100.0,
Beispiel #2
0
        private static void CheckVmRrd(List <DiagnosticResult> result,
                                       SettingsThresholdHost thresholdHost,
                                       DiagnosticResultContext context,
                                       string id,
                                       dynamic rrdData)
        {
            var data = ((IEnumerable <dynamic>)GetTimeSeries(thresholdHost.TimeSeries, rrdData))
                       .Where(a => a.cpu != null);

            if (data.Count() == 0)
            {
                return;
            }

            CheckThresholdHost(result, thresholdHost, context, id, data);
        }
Beispiel #3
0
        private static void CheckTaskHistory(List <DiagnosticResult> result,
                                             IEnumerable <dynamic> tasks,
                                             DiagnosticResultContext context,
                                             string id)
        {
            //task history
            var tasksCount = tasks.Count();

            if (tasksCount > 0)
            {
                result.Add(new DiagnosticResult
                {
                    Id          = id,
                    ErrorCode   = "IN0001",
                    Description = $"{tasksCount} Task history has errors",
                    Context     = context,
                    SubContext  = "Tasks",
                    Gravity     = DiagnosticResultGravity.Critical,
                });
            }
        }
Beispiel #4
0
        private static void CheckCommonVm(ClusterInfo clusterInfo,
                                          List <DiagnosticResult> result,
                                          Settings settings,
                                          dynamic vm,
                                          DiagnosticResultContext context)
        {
            #region Backup
            //configured backup get vmdId
            var vmsIdBackup = string.Join(",", clusterInfo.Backups
                                          .Where(a => a.enabled == 1)
                                          .Select(a => a.vmid))
                              .Split(',');

            string vmId = vm.vmid.Value + "";
            if (!vmsIdBackup.Contains(vmId))
            {
                result.Add(new DiagnosticResult
                {
                    Id          = vmId,
                    ErrorCode   = "CC0001",
                    Description = "vzdump backup not configured",
                    Context     = context,
                    SubContext  = "Backup",
                    Gravity     = DiagnosticResultGravity.Warning,
                });
            }

            //check exists backup and recent
            var regex       = new Regex(@"^.*:(.*\/)?");
            var foundBackup = false;
            foreach (var backup in ((IEnumerable <dynamic>)vm.Detail.Backups))
            {
                var data = backup.volid.Value.Replace(regex.Match(backup.volid.Value).Value, "").Split('-');
                var date = DateTime.ParseExact(data[3] + "_" + data[4].Substring(0, data[4].IndexOf(".")),
                                               "yyyy_MM_dd_HH_mm_ss",
                                               null);

                if (clusterInfo.Date.Date >= date.Date.AddDays(+1))
                {
                    foundBackup = true;
                    break;
                }
            }

            if (!foundBackup)
            {
                result.Add(new DiagnosticResult
                {
                    Id          = vmId,
                    ErrorCode   = "CC0001",
                    Description = "No recent backups found!",
                    Context     = context,
                    SubContext  = "Backup",
                    Gravity     = DiagnosticResultGravity.Warning,
                });
            }
            #endregion

            CheckTaskHistory(result,
                             (IEnumerable <dynamic>)vm.Detail.Tasks,
                             context,
                             vmId);

            CheckSnapshots(result,
                           (IEnumerable <dynamic>)vm.Detail.Snapshots,
                           clusterInfo.Date,
                           vmId,
                           context);

            CheckVmRrd(result,
                       settings.Lxc,
                       context,
                       vmId,
                       vm.Detail.RrdData);
        }
Beispiel #5
0
        private static void CheckCommonVm(ClusterInfo clusterInfo,
                                          List <DiagnosticResult> result,
                                          Settings settings,
                                          dynamic vm,
                                          DiagnosticResultContext context)
        {
            #region Backup
            //configured backup get vmdId
            var vmsIdBackup = string.Join(",", clusterInfo.Backups
                                          .Where(a => a.enabled == 1)
                                          .Select(a => a.vmid))
                              .Split(',');

            var allInBackup = clusterInfo.Backups.Any(a => a.enabled == 1 && a.all == 1);

            string vmId = vm.vmid.Value + "";
            if (!allInBackup && !vmsIdBackup.Contains(vmId))
            {
                result.Add(new DiagnosticResult
                {
                    Id          = vmId,
                    ErrorCode   = "CC0001",
                    Description = "vzdump backup not configured",
                    Context     = context,
                    SubContext  = "Backup",
                    Gravity     = DiagnosticResultGravity.Warning,
                });
            }

            //check disk no backup
            result.AddRange(((List <(string Id, string Image)>)GetVmImages(vm))
                            .Where(a => a.Image.Contains("backup=0"))
                            .Select(a => new DiagnosticResult
            {
                Id          = vm.vmid,
                ErrorCode   = "WV0001",
                Description = $"Disk '{a.Id}' disabled for backup",
                Context     = DiagnosticResultContext.Qemu,
                SubContext  = "Backup",
                Gravity     = DiagnosticResultGravity.Critical,
            }));

            //check exists backup and recent
            var regex       = new Regex(@"^.*?:(.*?\/)?");
            var foundBackup = false;
            foreach (var backup in ((IEnumerable <dynamic>)vm.Detail.Backups))
            {
                var volid      = (backup.volid.Value as string);
                var nameBackup = volid.Replace(regex.Match(volid).Value, "");
                var date       = DateTime.Now;
                switch (backup.format.Value)
                {
                case "pbs-ct":
                case "pbs-vm":
                    //Proxmox Backup Server PBS
                    date = DateTime.ParseExact(nameBackup.Split("/")[2], "yyyy-MM-ddTHH:mm:ssZ", null);
                    break;

                default:
                    //Internal backup
                    var data = nameBackup.Split('-');
                    date = DateTime.ParseExact(data[3] + "_" + data[4].Substring(0, data[4].IndexOf(".")),
                                               "yyyy_MM_dd_HH_mm_ss",
                                               null);
                    break;
                }

                if (clusterInfo.Date.Date >= date.Date.AddDays(+1))
                {
                    foundBackup = true;
                    break;
                }
            }

            if (!foundBackup)
            {
                result.Add(new DiagnosticResult
                {
                    Id          = vmId,
                    ErrorCode   = "CC0001",
                    Description = "No recent backups found!",
                    Context     = context,
                    SubContext  = "Backup",
                    Gravity     = DiagnosticResultGravity.Warning,
                });
            }
            #endregion

            CheckTaskHistory(result,
                             (IEnumerable <dynamic>)vm.Detail.Tasks,
                             context,
                             vmId);

            CheckSnapshots(result,
                           (IEnumerable <dynamic>)vm.Detail.Snapshots,
                           clusterInfo.Date,
                           vmId,
                           context);

            CheckVmRrd(result,
                       settings.Lxc,
                       context,
                       vmId,
                       vm.Detail.RrdData);
        }