예제 #1
0
        public List <RemoteWorker> UpdateWorkersWithSavedData(RemoteWorkerFactory workerFactory, List <RemoteWorker> workers)
        {
            List <RemoteWorker> deserializedWorkers = LoadWorkers(workerFactory);

            //
            // If no workers were saved, there is no information to update, so just use the original
            // list of workers.
            //

            if (deserializedWorkers == null)
            {
                return(workers);
            }

            List <RemoteWorker> updatedWorkersInfo = new List <RemoteWorker>();

            foreach (RemoteWorker worker in workers)
            {
                RemoteWorker updatedWorker = FindMatchingWorker(deserializedWorkers, worker);

                if (updatedWorker != null)
                {
                    updatedWorkersInfo.Add(updatedWorker);
                }
                else
                {
                    updatedWorkersInfo.Add(worker);
                }
            }

            return(updatedWorkersInfo);
        }
        private void RemoteWorkerToStream(Stream serializationStream, RemoteWorker worker)
        {
            BinaryFormatter formatter = new BinaryFormatter();

            formatter.Serialize(serializationStream, worker.Id);
            formatter.Serialize(serializationStream, worker.RemoteAddress);
            formatter.Serialize(serializationStream, worker.LastPullTime);
        }
예제 #3
0
        private List <RemoteWorker> WorkersFromCommandLineOptions(CommandLineOptions options)
        {
            List <RemoteWorker> remoteWorkers = new List <RemoteWorker>();

            if (options.WorkerHost != null)
            {
                remoteWorkers.Add(_workerFactory.CreateRemoteWorker(options.WorkerHost));
                return(remoteWorkers);
            }

            if (options.WorkerHostFile != null)
            {
                if (!File.Exists(options.WorkerHostFile))
                {
                    Console.WriteLine("Error: File {0} does not exist.", options.WorkerHostFile);
                    return(null);
                }
                try
                {
                    using (Stream workerHostFileStream = File.OpenRead(options.WorkerHostFile))
                    {
                        foreach (string workerAddress in TargetFileParser.ParseTargets(workerHostFileStream))
                        {
                            RemoteWorker worker = _workerFactory.CreateRemoteWorker(workerAddress);
                            remoteWorkers.Add(worker);
                        }
                    }
                }
                catch (IOException ex)
                {
                    Console.WriteLine(string.Format("Error reading file: {0}\r\n{1}", options.WorkerHostFile, ex.Message));
                    return(null);
                }
            }

            if (options.UseAws)
            {
                AwsWorkerController aws = new AwsWorkerController();

                List <Amazon.EC2.Model.Instance> awsWorkers = aws.GetWorkerInstances();
                Console.WriteLine("Found {0} AWS workers", awsWorkers.Count);
                foreach (Amazon.EC2.Model.Instance instance in awsWorkers)
                {
                    RemoteWorker awsWorker = _workerFactory.CreateRemoteWorker(instance.PublicDnsName, instance.InstanceId, null);
                    remoteWorkers.Add(awsWorker);
                }
            }

            remoteWorkers = _savedWorkerManager.UpdateWorkersWithSavedData(_workerFactory, remoteWorkers);

            return(remoteWorkers);
        }
예제 #4
0
        private RemoteWorker FindMatchingWorker(IEnumerable <RemoteWorker> workers, RemoteWorker toMatch)
        {
            foreach (RemoteWorker worker in workers)
            {
                if ((!string.IsNullOrEmpty(worker.Id) && (worker.Id == toMatch.Id)) ||
                    (worker.RemoteAddress == toMatch.RemoteAddress))
                {
                    return(worker);
                }
            }

            return(null);
        }
예제 #5
0
        public static List <RemoteWorker> MergeWorkers(List <RemoteWorker> primaryList, List <RemoteWorker> extraList)
        {
            List <RemoteWorker> mergedList = new List <RemoteWorker>();

            foreach (RemoteWorker primaryWorker in primaryList)
            {
                RemoteWorker matchingWorker = FindMatchingWorker(extraList, primaryWorker);

                if (matchingWorker != null)
                {
                    mergedList.Add(matchingWorker);
                }
                else
                {
                    mergedList.Add(primaryWorker);
                }
            }

            return(mergedList);
        }