public Persistence.Models.Task[] Run(Persistence.Models.Computer computer, TimeSpan?timeout, TimeSpan?pollInterval) { timeout = timeout ?? TimeSpan.FromSeconds(90); pollInterval = pollInterval ?? TimeSpan.FromSeconds(1 / 4); Persistence.Models.Task[] tasks = null; var endTime = DateTime.Now.Add(timeout.Value); while (true) { computer.UpdatePing(); _computerRepository.Update(computer); var now = DateTime.UtcNow; var cache = new InMemoryRepositoryModelCache(); tasks = _taskRepository.ForComputer(computer, now, cache); if (tasks.Length > 0 || DateTime.Now >= endTime) { foreach (var task in tasks) { task.MarkAsReceived(); _taskRepository.Update(task); } return(tasks); } System.Threading.Thread.Sleep(pollInterval.Value); } }
private static Persistence.Models.Computer GetSerializableVersion(Persistence.Models.Computer computer) { Persistence.Models.User owner = null; if (computer.Owner != null) { owner = new Persistence.Models.User( alias: computer.Owner.Alias, email: null, id: computer.Owner.Id, registeredTimestamp: null, secret: null, token: null ); } var result = new Persistence.Models.Computer( accessKey: computer.AccessKey, address: computer.Address, encryptionKey: computer.EncryptionKey, id: computer.Id, lastPing: computer.LastPing, lastScript: computer.LastScript, name: computer.Name, owner: owner ); return(result); }
public RpcTaskRepository(Persistence.Models.Computer computer, IRepositoryFactory repositoryFactory, Persistence.Models.User user) { _computer = computer; _repositoryFactory = repositoryFactory; _user = user; _taskRepository = _repositoryFactory.GetTaskRepository(); }
protected void AddTask(Persistence.Models.Computer computer, string origin, string scriptText) { var scriptRepository = RepositoryFactory.GetScriptRepository(); var taskRepository = RepositoryFactory.GetTaskRepository(); var script = Persistence.Models.Script.Create(false, scriptText); scriptRepository.Add(script); var task = Persistence.Models.Task.Create(User, origin, computer, script); taskRepository.Add(task); }
public void Run(Persistence.Models.User user, Persistence.Models.Computer computer, string source, string scriptText, bool updateLastRunScript) { var script = Persistence.Models.Script.Create(false, scriptText); _scriptRepository.Add(script); var task = Persistence.Models.Task.Create(user, source, computer, script); _taskRepository.Add(task); if (updateLastRunScript) { computer.UpdateLastScript(task.Script); _computerRepository.Update(computer); } }
private Persistence.Models.Task GetSerializableVersion(Persistence.Models.Task task) { if (task == null) { return(null); } Persistence.Models.User owner = null; if (task.Owner != null) { owner = new Persistence.Models.User( alias: task.Owner.Alias, email: null, id: task.Owner.Id, registeredTimestamp: null, secret: null, token: null ); } Persistence.Models.Computer target = null; if (task.Target != null) { target = new Persistence.Models.Computer( accessKey: null, address: null, encryptionKey: null, id: task.Target.Id, lastPing: null, lastScript: null, name: task.Target.Name, owner: null ); } var result = new Persistence.Models.Task( expiration: task.Expiration, id: task.Id, origin: task.Origin, owner: owner, receivedTimestamp: task.ReceivedTimestamp, script: task.Script, target: target ); return(result); }
private Response RunScript(Persistence.Models.Computer computer, string script, string source) { var scriptRepository = _repositoryFactory.GetScriptRepository(); var taskRepository = _repositoryFactory.GetTaskRepository(); var runScript = new Actions.RunScript(_computerRepository, scriptRepository, taskRepository); runScript.Run( computer: computer, scriptText: script, source: source ?? "Website", updateLastRunScript: true, user: _user ); return(Response.Empty()); }
public Persistence.Models.Device[] Run(Persistence.Models.Computer computer, Persistence.Models.User user, Persistence.Models.Network network, IDeviceState[] sentDevices) { computer.UpdatePing(); _computerRepository.Update(computer); network.UpdatePing(computer); _networkRepository.Update(network); var existingDevices = _deviceRepository.Get(network); UpdateDevices(sentDevices, existingDevices, network); var devicesToRemove = GetRemovedDevices(sentDevices, existingDevices); RemoveDevices(devicesToRemove); return(existingDevices); }
public Persistence.Models.Device[] Run(Persistence.Models.Computer computer, Persistence.Models.User user, Persistence.Models.Network network, IEnumerable <XElement> sentDevices) { return(Run(computer, user, network, ProcessSentDevices(sentDevices, network))); }
private static Persistence.Models.Network GetSerializableVersion(Persistence.Models.Network network) { Persistence.Models.Computer computer = null; if (network.AttatchedComputer != null) { computer = new Persistence.Models.Computer( accessKey: null, address: null, encryptionKey: null, id: network.AttatchedComputer.Id, lastPing: network.AttatchedComputer.LastPing, lastScript: null, name: network.AttatchedComputer.Name, owner: null ); } Persistence.Models.Device[] devices = null; if (network.Devices != null) { devices = network.Devices .Select(x => new Persistence.Models.Device( address: x.Address, id: x.Id, lastPing: null, name: x.Name, network: null, scripts: null, state: null, tasks: null, type: x.Type )) .ToArray(); } Persistence.Models.User owner = null; if (network.Owner != null) { owner = new Persistence.Models.User( alias: network.Owner.Alias, email: null, id: network.Owner.Id, registeredTimestamp: null, secret: null, token: null ); } return(new Persistence.Models.Network( address: network.Address, attatchedComputer: computer, devices: devices, id: network.Id, lastPing: network.LastPing, name: network.Name, owner: owner )); }
private Response <string[]> SyncWholeNetwork(Persistence.Models.Network network, Persistence.Models.Computer computer, string[] devicesXml) { var computerRepository = _repositoryFactory.GetComputerRepository(); var deviceRepository = _repositoryFactory.GetDeviceRepository(); var syncWholeNetwork = new Actions.SyncWholeNetwork(computerRepository, deviceRepository, _networkRepository); var sentDevices = devicesXml .Select(x => XElement.Parse(x)) .ToArray(); var existingDevices = syncWholeNetwork.Run( computer: computer, network: network, sentDevices: sentDevices, user: _user ); var existingDevicesXml = existingDevices .Select(x => x.ToXElement()) .Select(x => x.ToString()) .ToArray(); return(Response.Create(existingDevicesXml)); }