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,
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); }
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, }); } }
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); }
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); }