var code = Parameters["MachineCode"]?.ToString() ?? ""; var flaggedOnly = Parameters.Get("FlaggedOnly") ?? false; var includeAck = Parameters.Get("IncludeAcked") ?? true; var minSev = Parameters.Get("MinSeverity"); var maxSev = Parameters.Get("MaxSeverity"); var nameFilter = Parameters.ContainsKey("NameFilter") ? Parameters["NameFilter"]?.ToString() : null; try { var alarms = flaggedOnly ? await Alarms.MesReportableAsync() : await Alarms.CurrentAsync(); var infos = alarms .Where(a => a.Active && !a.IsConfiguredPlaceholder) .Where(a => minSev == null || a.Priority >= minSev) .Where(a => maxSev == null || a.Priority <= maxSev) .Where(a => string.IsNullOrEmpty(nameFilter) || a.Name.Contains(nameFilter, StringComparison.OrdinalIgnoreCase)) .Where(a => includeAck || !a.Acknowledged) .Select(a => new { Name = a.Name, HierarchicalName = code + "." + a.Name, Description = !string.IsNullOrEmpty(a.Message) ? a.Message : !string.IsNullOrEmpty(a.AlarmTypeName) ? a.AlarmTypeName : a.Name, IsFlaggedForMES = a.IsMesReportable, Severity = a.Priority, // MES Severity = the raw 0-999 priority (ScriptAlarm.Priority, #129) StatusCode = a.Acknowledged ? "Triggered.Acked" : "Triggered", TriggeredDT = (a.OriginalRaiseTime ?? a.Timestamp).ToString("o"), AckDT = a.AckTime?.ToString("o"), AckComment = a.OperatorComment }) .ToList(); return new { WasSuccessful = true, ErrorText = (string)null, Alarms = infos }; } catch (Exception ex) { return new { WasSuccessful = false, ErrorText = "AlarmStatus failed: " + ex.Message, Alarms = Array.Empty() }; }