Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        public RpcTaskRepository(Persistence.Models.Computer computer, IRepositoryFactory repositoryFactory, Persistence.Models.User user)
        {
            _computer          = computer;
            _repositoryFactory = repositoryFactory;
            _user = user;

            _taskRepository = _repositoryFactory.GetTaskRepository();
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
        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());
        }
Пример #8
0
        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);
        }
Пример #9
0
 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)));
 }
Пример #10
0
        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
                       ));
        }
Пример #11
0
        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));
        }