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); }
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); }
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); }
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); }