private static async Task ProcessTagAddedEvent(TagsRepository tagrepo, TagAddedEvent evt) { switch (evt.Tag.Name) { case "step": await tagrepo.RemoveTagFromHost(evt.TagId, evt.HostId); var tags = await tagrepo.GetTagsForHost(evt.Host.Id); if (!tags.Any(x => x.Name == "prepare") && !tags.Any(x => x.Name == "restart") && !tags.Any(x => x.Name == "complete")) { await tagrepo.AddTagToHost("prepare", evt.HostId); } else if (tags.Any(x => x.Name == "prepare") && !tags.Any(x => x.Name == "restart") && !tags.Any(x => x.Name == "complete")) { await tagrepo.RemoveTagFromHost("prepare", evt.HostId); await tagrepo.AddTagToHost("restart", evt.HostId); } else if (!tags.Any(x => x.Name == "prepare") && tags.Any(x => x.Name == "restart") && !tags.Any(x => x.Name == "complete")) { await tagrepo.RemoveTagFromHost("restart", evt.HostId); await tagrepo.AddTagToHost("complete", evt.HostId); } break; } }
internal async Task <bool> LoopProcessor(EventRepository eventrepo, TagsRepository tagrepo, HostStatesRepository staterepo) { if (!eventrepo.HasElements) { return(false); } var appevent = await eventrepo.Dequeue(); if (appevent == null) { return(true); } switch (appevent) { case TagAddedEvent evt: await ProcessTagAddedEvent(tagrepo, evt); break; case TagRemovedEvent evt: break; case HostOnlineEvent evt: if (staterepo .GetForHost(evt.HostId, 5) .All(x => x.Status == HostState.StatusEnum.Online || x.Status == HostState.StatusEnum.Warning || x.Status == HostState.StatusEnum.Critical) && !(await tagrepo.GetTagsForHost(evt.HostId)).Any(x => x.Name == "online")) { if (!(await tagrepo.GetTagsForHost(evt.HostId)).Any(x => x.Name == "offline")) { break; } await tagrepo.AddTagToHost("online", evt.HostId); await tagrepo.RemoveTagFromHost("offline", evt.HostId); } break; case HostOfflineEvent evt: if (staterepo .GetForHost(evt.HostId, 5) .All(x => x.Status == HostState.StatusEnum.Offline) && !(await tagrepo.GetTagsForHost(evt.HostId)).Any(x => x.Name == "offline")) { await tagrepo.AddTagToHost("offline", evt.HostId); await tagrepo.RemoveTagFromHost("online", evt.HostId); } break; default: _logger.LogError($"Unknown event type {appevent.ToString()}"); break; } return(true); }