示例#1
0
        public static void UpdateNodeInformation(string id, NodeRepresentation node)
        {
            if (!knownWorkers.ContainsKey(id))
            {
                throw new Exception("Trying to update worker information but he does not exist!");
            }

            knownWorkers[id] = node;
            string myUrl;

            node.info.TryGetValue(NodeRepresentation.SERVICE_URL, out myUrl);

            if (myUrl == null || (myUrl != null && myUrl == ""))
            {
                Logger.LogWarn("Worker " + id + " did not provide a service url!! Bad update!");
                return;
            }

            //node is back up again
            if (downWorkers.Contains(id))
            {
                downWorkers.Remove(id);
            }

            knownKUrlWorkers[myUrl] = node;
        }
示例#2
0
        public string GenerateFieldIteratorThroughNodes(IDictionary<string, NodeRepresentation> knownNodes, NodeRepresentation node, string fieldName, string separator)
        {
            int numberOfTimes = knownNodes.Count * 2 + 1;

            string id = "";
            string nextFieldNameValue = "";
            string result = "";
            for (int i = 0; i < numberOfTimes; i++)
            {
                node.info.TryGetValue(NodeRepresentation.ID, out id);
                node.info.TryGetValue(fieldName, out nextFieldNameValue);

                result += separator + id;

                if (nextFieldNameValue == null || (nextFieldNameValue != null && nextFieldNameValue == ""))
                {
                    throw new Exception("Node " + id + " has no " + fieldName + " !");
                }

                knownNodes.TryGetValue(nextFieldNameValue, out node);

                if (node == null)
                {
                    throw new Exception("No information on " + fieldName + ".");
                }
            }

            return result;
        }
示例#3
0
        private List <TreeNode> NodeAtributesRepresentationToTree(NodeRepresentation node)
        {
            IDictionary <string, string> values = node.info;
            List <TreeNode> result = new List <TreeNode>();

            foreach (KeyValuePair <string, string> entry in values)
            {
                string fieldName = entry.Key;
                string value     = entry.Value;

                TreeNode field = CreateNode(fieldName, fieldName);
                field.Text = fieldName + " = " + value;
                result.Add(field);
            }

            return(result);
        }
示例#4
0
        public static void RegisterNewWorker(string id, string url)
        {
            Logger.LogInfo("Register worker: " + id + " : " + url);

            if (knownWorkers.ContainsKey(id))
            {
                Logger.LogWarn("Already registered " + id + " worker. Skipping.");
                return;
            }

            IDictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add(NodeRepresentation.ID, id);
            dic.Add(NodeRepresentation.SERVICE_URL, url);
            NodeRepresentation n = new NodeRepresentation(dic);

            knownWorkers.Add(id, n);
            knownKUrlWorkers.Add(url, n);

            IWorker w = (IWorker)Activator.GetObject(typeof(IWorker), url);
            workersObj.Add(id, w);
        }
示例#5
0
        public static void RegisterNewWorker(string id, string url)
        {
            Logger.LogInfo("Register worker: " + id + " : " + url);

            if (knownWorkers.ContainsKey(id))
            {
                Logger.LogWarn("Already registered " + id + " worker. Skipping.");
                return;
            }

            IDictionary <string, string> dic = new Dictionary <string, string>();

            dic.Add(NodeRepresentation.ID, id);
            dic.Add(NodeRepresentation.SERVICE_URL, url);
            NodeRepresentation n = new NodeRepresentation(dic);

            knownWorkers.Add(id, n);
            knownKUrlWorkers.Add(url, n);

            IWorker w = (IWorker)Activator.GetObject(typeof(IWorker), url);

            workersObj.Add(id, w);
        }
示例#6
0
        private void AddNodeRepresentation(string rootNodeKey, NodeRepresentation node)
        {
            TreeNode root = TreeViewUtil.FindNode(NetworkTreeView, rootNodeKey);

            if (root == null)
            {
                Logger.LogErr("Something bad happened generating tree: cant find rootNode " + rootNodeKey);
                return;
            }

            string id = "";

            node.info.TryGetValue(NodeRepresentation.ID, out id);

            TreeNode nodeTree = CreateNode(id, rootNodeKey + ":" + id);

            foreach (TreeNode t in NodeAtributesRepresentationToTree(node))
            {
                nodeTree.Nodes.Add(t);
            }

            root.Nodes.Add(nodeTree);
            root.Expand();
        }
示例#7
0
        private List<TreeNode> NodeAtributesRepresentationToTree(NodeRepresentation node)
        {
            IDictionary<string, string> values = node.info;
            List<TreeNode> result = new List<TreeNode>();

            foreach (KeyValuePair<string, string> entry in values)
            {
                string fieldName = entry.Key;
                string value = entry.Value;

                TreeNode field = CreateNode(fieldName, fieldName);
                field.Text = fieldName + " = " + value;
                result.Add(field);
            }

            return result;
        }
示例#8
0
        private void AddNodeRepresentation(string rootNodeKey, NodeRepresentation node)
        {
            TreeNode root = TreeViewUtil.FindNode(NetworkTreeView, rootNodeKey);

            if (root == null)
            {
                Logger.LogErr("Something bad happened generating tree: cant find rootNode " + rootNodeKey);
                return;
            }

            string id = "";
            node.info.TryGetValue(NodeRepresentation.ID, out id);

            TreeNode nodeTree = CreateNode(id, rootNodeKey + ":" + id);
            foreach (TreeNode t in NodeAtributesRepresentationToTree(node))
            {
                nodeTree.Nodes.Add(t);
            }

            root.Nodes.Add(nodeTree);
            root.Expand();
        }
示例#9
0
        public void RefreshNetWorkConfiguration()
        {
            //collapse
            NetworkTreeView.CollapseAll();

            string timeStamp = TIMESTAMP_TAG + ":" + GenerateTimeStamp();
            TreeNode now = CreateNode(timeStamp, timeStamp);
            NetworkTreeView.Nodes.Add(now);

            IDictionary<string, NodeRepresentation> knownNodes = NetworkManager.GetKnownWorkers();
            List<string> downNodes = NetworkManager.GetDownWorkers();
            List<string> currentJTs = new List<string>();

            //check if active nodes
            if (knownNodes.Count != 0 && knownNodes.Count != downNodes.Count)
            {
                string activeTag = ACTIVE_WORKERS_TAG + ":" + timeStamp;
                TreeNode active = CreateNode(ACTIVE_WORKERS_TAG, activeTag);
                active.BackColor = ACTIVE_WORKERS_COLOR;
                now.Nodes.Add(active);

                string splitTag = SPLITS_TAG + ":" + timeStamp;
                TreeNode splitNode = CreateNode(SPLITS_TAG, splitTag);
                splitNode.BackColor = SPLITS_COLOR;
                now.Nodes.Add(splitNode);

                //Generating Active workers
                foreach (KeyValuePair<string, NodeRepresentation> entry in knownNodes)
                {

                    string splits;
                    entry.Value.info.TryGetValue(NodeRepresentation.PROCESSED_SPLITS, out splits);

                    if (!(splits == null || (splits != null && splits == "")))
                    {
                        splitNode.Nodes.Add(CreateNode(splits, splitTag + ":" + splits));
                    }

                    //check if it not flagged as down
                    if (!downNodes.Contains(entry.Key))
                    {
                        AddNodeRepresentation(activeTag, entry.Value);

                        string jobTracker = "";
                        entry.Value.info.TryGetValue(NodeRepresentation.CURRENT_JT, out jobTracker);

                        if (jobTracker != null && !currentJTs.Contains(jobTracker))
                        {
                            currentJTs.Add(jobTracker);
                        }
                    }
                }
            }

            if (downNodes.Count != 0)
            {
                string downTag = DOWN_WORKERS_TAG + ":" + timeStamp;
                TreeNode down = CreateNode(DOWN_WORKERS_TAG, downTag);
                down.BackColor = DOWN_WORKERS_COLOR;
                now.Nodes.Add(down);

                foreach (string id in downNodes)
                {
                    AddNodeRepresentation(downTag, knownNodes[id]);
                }
            }

            if (currentJTs.Count != 0)
            {
                string jtTag = CURRENT_JTS_TAG + ":" + timeStamp;
                TreeNode jt = CreateNode(CURRENT_JTS_TAG, jtTag);
                jt.BackColor = CURRENT_JTS_COLOR;
                now.Nodes.Add(jt);

                foreach (string id in currentJTs)
                {
                    if (knownNodes.ContainsKey(id))
                    {
                        AddNodeRepresentation(jtTag, knownNodes[id]);
                    }
                    else
                    {
                        NodeRepresentation node = new NodeRepresentation();
                        node.info.Add("UNKNOWN JOBTRACKER WORKER ID", id);
                        AddNodeRepresentation(jtTag, node);
                    }
                }
            }

            now.Expand();
            mostRecentNode = now;
        }
示例#10
0
        public static void UpdateNodeInformation(string id, NodeRepresentation node)
        {
            if (!knownWorkers.ContainsKey(id))
            {
                throw new Exception("Trying to update worker information but he does not exist!");
            }

            knownWorkers[id] = node;
            string myUrl;

            node.info.TryGetValue(NodeRepresentation.SERVICE_URL, out myUrl);

            if (myUrl == null || (myUrl != null && myUrl == ""))
            {
                Logger.LogWarn("Worker " + id + " did not provide a service url!! Bad update!");
                return;
            }

            //node is back up again
            if (downWorkers.Contains(id))
            {
                downWorkers.Remove(id);
            }

            knownKUrlWorkers[myUrl] = node;
        }
示例#11
0
        public void GenerateGraph()
        {
            //reconstruction of the ring again
            IDictionary <string, NodeRepresentation> knownNodes = NetworkManager.GetKnownUrlWorkers();

            if (knownNodes.Count == 0)
            {
                Logger.LogWarn("There are no known nodes");
                return;
            }

            NodeRepresentation node = knownNodes[knownNodes.Keys.First(t => true)];

            //Generating nextUrlGraph
            try {
                string   result  = GenerateFieldIteratorThroughNodes(knownNodes, node, NodeRepresentation.NEXT_URL, " -> ");
                TreeNode tagNode = CreateNode(RING_NEXT_URL_TAG + " : " + result, RING_NEXT_URL_TAG);
                tagNode.BackColor = RING_NEXT_COLOR;
                mostRecentNode.Nodes.Add(tagNode);
            }catch (Exception) {
                //Logger.LogWarn(ex.Message);
            }


            //Generating nextNextUrlGraph 1
            try
            {
                string   resultNextNextUrl1 = GenerateFieldIteratorThroughNodes(knownNodes, node, NodeRepresentation.NEXT_NEXT_URL, " ->> ");
                TreeNode tagNode1           = CreateNode(RING_NEXT_NEXT_URL_START1_TAG + " : " + resultNextNextUrl1, RING_NEXT_NEXT_URL_START1_TAG);
                tagNode1.BackColor = RING_NEXT_NEXT_1_COLOR;
                mostRecentNode.Nodes.Add(tagNode1);
            }catch (Exception) {
                //Logger.LogWarn(ex.Message);
            }

            //Generating nextNextUrlGraph 2
            try {
                string nextUrl;
                node.info.TryGetValue(NodeRepresentation.NEXT_URL, out nextUrl);
                NodeRepresentation node2;

                if (nextUrl == null)
                {
                    throw new Exception("Not enough information to process nextNextGraph 2");
                }

                knownNodes.TryGetValue(nextUrl, out node2);
                string   resultNextNextUrl2 = GenerateFieldIteratorThroughNodes(knownNodes, node2, NodeRepresentation.NEXT_NEXT_URL, " ->> ");
                TreeNode tagNode2           = CreateNode(RING_NEXT_NEXT_URL_START2_TAG + " : " + resultNextNextUrl2, RING_NEXT_NEXT_URL_START2_TAG);
                tagNode2.BackColor = RING_NEXT_NEXT_2_COLOR;
                mostRecentNode.Nodes.Add(tagNode2);
            }
            catch (Exception)
            {
                //Logger.LogWarn(ex.Message);
            }


            //Generating backUrlGraph 1
            try
            {
                string   resultBackUrl = GenerateFieldIteratorThroughNodes(knownNodes, node, NodeRepresentation.BACK_URL, " <- ");
                TreeNode backNode      = CreateNode(RING_BACK_URL_TAG + " : " + resultBackUrl, RING_BACK_URL_TAG);
                backNode.BackColor = RING_BACK_URL_COLOR;
                mostRecentNode.Nodes.Add(backNode);
            }
            catch (Exception)
            {
                //Logger.LogWarn(ex.Message);
            }
        }
示例#12
0
        public string GenerateFieldIteratorThroughNodes(IDictionary <string, NodeRepresentation> knownNodes, NodeRepresentation node, string fieldName, string separator)
        {
            int numberOfTimes = knownNodes.Count * 2 + 1;

            string id = "";
            string nextFieldNameValue = "";
            string result             = "";

            for (int i = 0; i < numberOfTimes; i++)
            {
                node.info.TryGetValue(NodeRepresentation.ID, out id);
                node.info.TryGetValue(fieldName, out nextFieldNameValue);

                result += separator + id;

                if (nextFieldNameValue == null || (nextFieldNameValue != null && nextFieldNameValue == ""))
                {
                    throw new Exception("Node " + id + " has no " + fieldName + " !");
                }

                knownNodes.TryGetValue(nextFieldNameValue, out node);

                if (node == null)
                {
                    throw new Exception("No information on " + fieldName + ".");
                }
            }

            return(result);
        }
示例#13
0
        public void RefreshNetWorkConfiguration()
        {
            //collapse
            NetworkTreeView.CollapseAll();

            string   timeStamp = TIMESTAMP_TAG + ":" + GenerateTimeStamp();
            TreeNode now       = CreateNode(timeStamp, timeStamp);

            NetworkTreeView.Nodes.Add(now);


            IDictionary <string, NodeRepresentation> knownNodes = NetworkManager.GetKnownWorkers();
            List <string> downNodes  = NetworkManager.GetDownWorkers();
            List <string> currentJTs = new List <string>();

            //check if active nodes
            if (knownNodes.Count != 0 && knownNodes.Count != downNodes.Count)
            {
                string   activeTag = ACTIVE_WORKERS_TAG + ":" + timeStamp;
                TreeNode active    = CreateNode(ACTIVE_WORKERS_TAG, activeTag);
                active.BackColor = ACTIVE_WORKERS_COLOR;
                now.Nodes.Add(active);

                string   splitTag  = SPLITS_TAG + ":" + timeStamp;
                TreeNode splitNode = CreateNode(SPLITS_TAG, splitTag);
                splitNode.BackColor = SPLITS_COLOR;
                now.Nodes.Add(splitNode);

                //Generating Active workers
                foreach (KeyValuePair <string, NodeRepresentation> entry in knownNodes)
                {
                    string splits;
                    entry.Value.info.TryGetValue(NodeRepresentation.PROCESSED_SPLITS, out splits);

                    if (!(splits == null || (splits != null && splits == "")))
                    {
                        splitNode.Nodes.Add(CreateNode(splits, splitTag + ":" + splits));
                    }

                    //check if it not flagged as down
                    if (!downNodes.Contains(entry.Key))
                    {
                        AddNodeRepresentation(activeTag, entry.Value);

                        string jobTracker = "";
                        entry.Value.info.TryGetValue(NodeRepresentation.CURRENT_JT, out jobTracker);

                        if (jobTracker != null && !currentJTs.Contains(jobTracker))
                        {
                            currentJTs.Add(jobTracker);
                        }
                    }
                }
            }

            if (downNodes.Count != 0)
            {
                string   downTag = DOWN_WORKERS_TAG + ":" + timeStamp;
                TreeNode down    = CreateNode(DOWN_WORKERS_TAG, downTag);
                down.BackColor = DOWN_WORKERS_COLOR;
                now.Nodes.Add(down);

                foreach (string id in downNodes)
                {
                    AddNodeRepresentation(downTag, knownNodes[id]);
                }
            }

            if (currentJTs.Count != 0)
            {
                string   jtTag = CURRENT_JTS_TAG + ":" + timeStamp;
                TreeNode jt    = CreateNode(CURRENT_JTS_TAG, jtTag);
                jt.BackColor = CURRENT_JTS_COLOR;
                now.Nodes.Add(jt);

                foreach (string id in currentJTs)
                {
                    if (knownNodes.ContainsKey(id))
                    {
                        AddNodeRepresentation(jtTag, knownNodes[id]);
                    }
                    else
                    {
                        NodeRepresentation node = new NodeRepresentation();
                        node.info.Add("UNKNOWN JOBTRACKER WORKER ID", id);
                        AddNodeRepresentation(jtTag, node);
                    }
                }
            }

            now.Expand();
            mostRecentNode = now;
        }