public static Node GetNode(int nodeId, Server.ServerDbContext serverDbContext, Databases database) { Node result = null; var node = serverDbContext.Node .Include("NodeGroup").Include("NodeGroup.Router") .Include("NodeGroup.Router.TargetNode").Include("NodeGroup.Router.TargetNode.NodeGroup") .Include("Router.SourceNodeGroup.Node") .SingleOrDefault(n => n.Id == nodeId); if (node != null) { var projectId = node.NodeGroup.ProjectId; var router = node.NodeGroup.Router.SingleOrDefault(x => x.ProjectId == projectId); if (router == null) { result = new MasterNode(database, node); } else { result = new Node(database, node); } } return(result); }
public static bool Router(MasterDbContext masterDbContext, Server.ServerDbContext serverDbContext) { var oldRouters = masterDbContext.SymRouter.Select(x => x).ToDictionary(x => x.RouterId, x => x); var newRouters = serverDbContext.Router.Include("SourceNodeGroup").Include("TargetNode.NodeGroup").Select(x => x).ToDictionary(x => x.RouterId, x => x); DateTime dateTimeNow = DateTime.Now; foreach (var router in newRouters) { if (!oldRouters.ContainsKey(router.Key)) { // 新增 masterDbContext.SymRouter.Add(new SymRouter { RouterId = router.Value.RouterId, SourceNodeGroupId = router.Value.SourceNodeGroup.NodeGroupId, TargetNodeGroupId = router.Value.TargetNode.NodeGroup.NodeGroupId, RouterType = "default", CreateTime = dateTimeNow, LastUpdateTime = dateTimeNow }); } else { // 修改 var oldRouter = oldRouters[router.Key]; oldRouter.SourceNodeGroupId = router.Value.SourceNodeGroup.NodeGroupId; oldRouter.TargetNodeGroupId = router.Value.TargetNode.NodeGroup.NodeGroupId; oldRouter.CreateTime = dateTimeNow; oldRouter.LastUpdateTime = dateTimeNow; } } foreach (var router in oldRouters) { if (!newRouters.ContainsKey(router.Key)) { // 刪除 masterDbContext.SymRouter.Remove(router.Value); } } bool result = false; try { masterDbContext.SaveChanges(); result = true; } catch (Exception e) { LogException(nameof(Router), e); } return(result); }
public static bool Channel(MasterDbContext masterDbContext, Server.ServerDbContext serverDbContext) { var oldChannels = masterDbContext.SymChannel.Select(x => x).ToDictionary(x => x.ChannelId, x => x); var newChannels = serverDbContext.Channel.Select(x => x).ToDictionary(x => x.ChannelId, x => x); foreach (var channel in newChannels) { if (!oldChannels.ContainsKey(channel.Key)) { // 新增 masterDbContext.SymChannel.Add(new SymChannel { ChannelId = channel.Value.ChannelId, ProcessingOrder = 1, MaxBatchSize = 100000, Enabled = 1, Description = channel.Value.Description }); } else { // 修改 var oldChannel = oldChannels[channel.Key]; oldChannel.Description = channel.Value.Description; } } foreach (var channel in oldChannels) { if (new string[] { "config", "reload", "monitor", "heartbeat", "default", "dynamic" }.Contains(channel.Key)) { continue; } if (!newChannels.ContainsKey(channel.Key)) { // 刪除 masterDbContext.SymChannel.Remove(channel.Value); } } bool result = false; try { masterDbContext.SaveChanges(); result = true; } catch (Exception e) { LogException(nameof(Channel), e); } return(result); }
public static bool Relationship(MasterDbContext masterDbContext, Server.ServerDbContext serverDbContext) { var oldTriggerRouters = masterDbContext.SymTriggerRouter.Select(x => x).ToDictionary(x => string.Format("[{0}][{1}]", x.TriggerId, x.RouterId), x => x); var newTriggerRouters = serverDbContext.TriggerRouter.Include("Trigger").Include("Router").Select(x => x).ToDictionary(x => string.Format("[{0}][{1}]", x.Trigger.TriggerId, x.Router.RouterId), x => x); DateTime dateTimeNow = DateTime.Now; foreach (var triggerRouter in newTriggerRouters) { if (!oldTriggerRouters.ContainsKey(triggerRouter.Key)) { // 新增 masterDbContext.SymTriggerRouter.Add(new SymTriggerRouter { TriggerId = triggerRouter.Value.Trigger.TriggerId, RouterId = triggerRouter.Value.Router.RouterId, InitialLoadOrder = 200, LastUpdateTime = dateTimeNow, CreateTime = dateTimeNow }); } else { // 修改 var oldTriggerRouter = oldTriggerRouters[triggerRouter.Key]; oldTriggerRouter.LastUpdateTime = dateTimeNow; oldTriggerRouter.CreateTime = dateTimeNow; } } foreach (var triggerRouter in oldTriggerRouters) { if (!newTriggerRouters.ContainsKey(triggerRouter.Key)) { // 刪除 masterDbContext.SymTriggerRouter.Remove(triggerRouter.Value); } } bool result = false; try { masterDbContext.SaveChanges(); result = true; } catch (Exception e) { LogException(nameof(Relationship), e); } return(result); }
public static bool NodeGroups(INode node, MasterDbContext masterDbContext, Server.ServerDbContext serverDbContext) { var oldNodeGroups = masterDbContext.SymNodeGroup.Select(x => x).ToDictionary(x => x.NodeGroupId, x => x); var newNodeGroups = serverDbContext.NodeGroup.Where(ng => ng.ProjectId == node.ProjectId).ToDictionary(x => x.NodeGroupId, x => x); foreach (var nodeGroup in newNodeGroups) { if (!oldNodeGroups.ContainsKey(nodeGroup.Key)) { // 新增 masterDbContext.SymNodeGroup.Add(new SymNodeGroup { NodeGroupId = nodeGroup.Value.NodeGroupId, Description = nodeGroup.Value.Description }); } else { // 修改 var oldNodeGroup = oldNodeGroups[nodeGroup.Key]; oldNodeGroup.Description = nodeGroup.Value.Description; } } foreach (var nodeGroup in oldNodeGroups) { if (!newNodeGroups.ContainsKey(nodeGroup.Key)) { // 刪除 masterDbContext.SymNodeGroup.Remove(nodeGroup.Value); } } bool result = false; try { masterDbContext.SaveChanges(); result = true; } catch (Exception e) { LogException(nameof(NodeGroups), e); } return(result); }
public static bool Triggers(MasterDbContext masterDbContext, Server.ServerDbContext serverDbContext) { var oldTriggers = masterDbContext.SymTrigger.Select(x => x).ToDictionary(x => x.TriggerId, x => x); var newTriggers = serverDbContext.Trigger.Include("Channel").Select(x => x).ToDictionary(x => x.TriggerId, x => x); DateTime dateTimeNow = DateTime.Now; foreach (var trigger in newTriggers) { if (!oldTriggers.ContainsKey(trigger.Key)) { // 新增 masterDbContext.SymTrigger.Add(new SymTrigger { TriggerId = trigger.Value.TriggerId, SourceTableName = trigger.Value.SourceTableName, ChannelId = trigger.Value.Channel.ChannelId, ReloadChannelId = "reload", SyncOnUpdate = 1, SyncOnInsert = 1, SyncOnDelete = 1, SyncOnIncomingBatch = 0, UseStreamLobs = 0, UseCaptureLobs = 0, UseCaptureOldData = 1, UseHandleKeyUpdates = 1, StreamRow = 0, LastUpdateTime = dateTimeNow, CreateTime = dateTimeNow }); } else { // 修改 var oldTrigger = oldTriggers[trigger.Key]; oldTrigger.SourceTableName = trigger.Value.SourceTableName; oldTrigger.ChannelId = trigger.Value.Channel.ChannelId; oldTrigger.LastUpdateTime = dateTimeNow; oldTrigger.CreateTime = dateTimeNow; } } foreach (var trigger in oldTriggers) { if (!newTriggers.ContainsKey(trigger.Key)) { // 刪除 masterDbContext.SymTrigger.Remove(trigger.Value); } } bool result = false; try { masterDbContext.SaveChanges(); result = true; } catch (Exception e) { LogException(nameof(Triggers), e); } return(result); }
public static bool SynchronizationMethod(INode node, MasterDbContext masterDbContext, Server.ServerDbContext serverDbContext) { var oldNodeGroupLinks = masterDbContext.SymNodeGroupLink.Select(x => x).ToDictionary(x => string.Format("[{0}][{1}]", x.SourceNodeGroupId, x.TargetNodeGroupId), x => x); var newNodeGroupLinks = new Dictionary <string, char>(); var newNodeGroupLinkDatas = serverDbContext.Router.Include("SourceNodeGroup").Include("TargetNode.NodeGroup").Where(x => x.ProjectId == node.ProjectId).ToList(); foreach (var data in newNodeGroupLinkDatas) { newNodeGroupLinks.Add(string.Format("[{0}][{1}]", data.SourceNodeGroup.NodeGroupId, data.TargetNode.NodeGroup.NodeGroupId), 'P'); newNodeGroupLinks.Add(string.Format("[{0}][{1}]", data.TargetNode.NodeGroup.NodeGroupId, data.SourceNodeGroup.NodeGroupId), 'W'); } foreach (var nodeGroupLink in newNodeGroupLinks) { if (!oldNodeGroupLinks.ContainsKey(nodeGroupLink.Key)) { var values = nodeGroupLink.Key.Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries); // 新增 masterDbContext.SymNodeGroupLink.Add(new SymNodeGroupLink { SourceNodeGroupId = values[0], TargetNodeGroupId = values[1], DataEventAction = nodeGroupLink.Value }); } else { // 修改 var oldNodeGroupLink = oldNodeGroupLinks[nodeGroupLink.Key]; oldNodeGroupLink.DataEventAction = nodeGroupLink.Value; } } foreach (var nodeGroupLink in oldNodeGroupLinks) { if (!newNodeGroupLinks.ContainsKey(nodeGroupLink.Key)) { // 刪除 masterDbContext.SymNodeGroupLink.Remove(nodeGroupLink.Value); } } bool result = false; try { masterDbContext.SaveChanges(); result = true; } catch (Exception e) { LogException(nameof(SynchronizationMethod), e); } return(result); }