예제 #1
0
        public ActionResult <BaseResponse> UpdateStatus(DetailedStatus status)
        {
            try
            {
                _statusService.AddOrUpdate(status);

                if (status.Id != 0)
                {
                    var oldStatus = _statusService.Get(status.Id);
                    var newStatus = _statusService.Get(status.Status);
                    _deviceService.UpdateStatuses(newStatus, oldStatus);
                }

                return(new BaseResponse()
                {
                    Message = $"Updated/Added status: {status.Status}"
                });
            }
            catch (Exception ex)
            {
                return(new BaseResponse()
                {
                    Error = ErrorCode.InternalError,
                    Message = ex.Message
                });
            }
        }
예제 #2
0
 void WhenSendingStatusAsXml(Guid clientId, DetailedStatus detailedStatus)
 {
     _response = _browser.Put(UrlList.TestClients_Root + "/" + clientId + "/status", with => {
         with.JsonBody(detailedStatus);
         with.Accept("application/xml");
     });
 }
예제 #3
0
 /// <summary>
 /// 默认构造函数
 /// </summary>
 public BaseResponse()
 {
     GatewayStatus   = GatewayStatusCode.Success;
     GatewayMessage  = GatewayStatus.Description();
     DetailedStatus  = DetailedStatusCode.Success;
     DetailedMessage = DetailedStatus.Description();
 }
 public virtual bool UpdateStatus(Guid clientId, DetailedStatus detailedStatus)
 {
     if (ClientsCollection.Clients.All(client => client.Id != clientId))
         return false;
     ClientsCollection.Clients.First(client => client.Id == clientId).DetailedStatus = detailedStatus.Status;
     return true;
 }
예제 #5
0
 public virtual bool UpdateStatus(Guid clientId, DetailedStatus detailedStatus)
 {
     if (ClientsCollection.Clients.All(client => client.Id != clientId))
     {
         return(false);
     }
     ClientsCollection.Clients.First(client => client.Id == clientId).DetailedStatus = detailedStatus.Status;
     return(true);
 }
        private async void GetClassifications()
        {
            Statuses = new ObservableCollection <DetailedStatus>();

            var service = ServicesManager.SelfService;

            try
            {
                var statusResponse = await service.GetStatuses(Token);

                if (statusResponse == null || statusResponse.Error != ErrorCode.OK)
                {
                    MainWindow.Instance.AddNotification(statusResponse ?? new BaseResponse()
                    {
                        Error = ErrorCode.InternalError, Message = "Failed to receive response from host."
                    });
                }
                else
                {
                    foreach (var stat in statusResponse.Statuses)
                    {
                        Statuses.Add(stat);
                    }

                    if (Statuses.Count > 0)
                    {
                        CurrentStatus = Statuses[0];
                    }
                }
            }
            catch (ServiceException ex)
            {
                //TODO: HIGH Add logging
                MainWindow.Instance.AddNotification(ex);
            }
        }
예제 #7
0
        private async Task ValidateList(SqlService sql, ModlistMetadata list, WorkQueue queue, ValidateModlist whitelists)
        {
            var modlistPath = Consts.ModListDownloadFolder.Combine(list.Links.MachineURL + Consts.ModListExtension);

            if (list.NeedsDownload(modlistPath))
            {
                modlistPath.Delete();

                var state = DownloadDispatcher.ResolveArchive(list.Links.Download);
                Utils.Log($"Downloading {list.Links.MachineURL} - {list.Title}");
                await state.Download(modlistPath);
            }
            else
            {
                Utils.Log($"No changes detected from downloaded modlist");
            }


            Utils.Log($"Loading {modlistPath}");

            var installer = AInstaller.LoadFromFile(modlistPath);

            Utils.Log($"{installer.Archives.Count} archives to validate");

            await DownloadDispatcher.PrepareAll(installer.Archives.Select(a => a.State));


            var validated = (await installer.Archives
                             .PMap(queue, async archive =>
            {
                var isValid = await IsValid(sql, whitelists, archive);

                return(new DetailedStatusItem {
                    IsFailing = !isValid, Archive = archive
                });
            }))
                            .ToList();


            var status = new DetailedStatus
            {
                Name             = list.Title,
                Archives         = validated.OrderBy(v => v.Archive.Name).ToList(),
                DownloadMetaData = list.DownloadMetadata,
                HasFailures      = validated.Any(v => v.IsFailing)
            };

            var dto = new ModListStatus
            {
                Id      = list.Links.MachineURL,
                Summary = new ModListSummary
                {
                    Name       = status.Name,
                    MachineURL = list.Links?.MachineURL ?? status.Name,
                    Checked    = status.Checked,
                    Failed     = status.Archives.Count(a => a.IsFailing),
                    Passed     = status.Archives.Count(a => !a.IsFailing),
                },
                DetailedStatus = status,
                Metadata       = list
            };

            Utils.Log(
                $"Writing Update for {dto.Summary.Name} - {dto.Summary.Failed} failed - {dto.Summary.Passed} passed");
            await sql.UpdateModListStatus(dto);

            Utils.Log(
                $"Done updating {dto.Summary.Name}");
        }
예제 #8
0
 HttpStatusCode UpdateStatus(Guid clientId, DetailedStatus detailedStatus)
 {
     return(ServerObjectFactory.Resolve <TestClientCollectionMethods>().UpdateStatus(clientId, detailedStatus)
         ? HttpStatusCode.OK
         : HttpStatusCode.NotFound);
 }
예제 #9
0
 HttpStatusCode UpdateStatus(Guid clientId, DetailedStatus detailedStatus)
 {
     return ServerObjectFactory.Resolve<TestClientCollectionMethods>().UpdateStatus(clientId, detailedStatus)
         ? HttpStatusCode.OK
         : HttpStatusCode.NotFound;
 }
예제 #10
0
        private static async Task ValidateList(DBContext db, ModlistMetadata list, WorkQueue queue, ValidateModlist whitelists)
        {
            var existing = await db.ModListStatus.FindOneAsync(l => l.Id == list.Links.MachineURL);

            var modlist_path = Path.Combine(Consts.ModListDownloadFolder, list.Links.MachineURL + Consts.ModListExtension);

            if (list.NeedsDownload(modlist_path))
            {
                if (File.Exists(modlist_path))
                {
                    File.Delete(modlist_path);
                }

                var state = DownloadDispatcher.ResolveArchive(list.Links.Download);
                Utils.Log($"Downloading {list.Links.MachineURL} - {list.Title}");
                await state.Download(modlist_path);
            }
            else
            {
                Utils.Log($"No changes detected from downloaded modlist");
            }


            Utils.Log($"Loading {modlist_path}");

            var installer = AInstaller.LoadFromFile(modlist_path);

            Utils.Log($"{installer.Archives.Count} archives to validate");

            DownloadDispatcher.PrepareAll(installer.Archives.Select(a => a.State));


            var validated = (await installer.Archives
                             .PMap(queue, async archive =>
            {
                bool is_failed;
                try
                {
                    is_failed = !(await archive.State.Verify(archive)) || !archive.State.IsWhitelisted(whitelists.ServerWhitelist);
                }
                catch (Exception)
                {
                    is_failed = false;
                }

                return(new DetailedStatusItem {
                    IsFailing = is_failed, Archive = archive
                });
            }))
                            .ToList();


            var status = new DetailedStatus
            {
                Name             = list.Title,
                Archives         = validated.OrderBy(v => v.Archive.Name).ToList(),
                DownloadMetaData = list.DownloadMetadata,
                HasFailures      = validated.Any(v => v.IsFailing)
            };

            var dto = new ModListStatus
            {
                Id      = list.Links.MachineURL,
                Summary = new ModlistSummary
                {
                    Name    = status.Name,
                    Checked = status.Checked,
                    Failed  = status.Archives.Count(a => a.IsFailing),
                    Passed  = status.Archives.Count(a => !a.IsFailing),
                },
                DetailedStatus = status,
                Metadata       = list
            };

            Utils.Log(
                $"Writing Update for {dto.Summary.Name} - {dto.Summary.Failed} failed - {dto.Summary.Passed} passed");
            await ModListStatus.Update(db, dto);

            Utils.Log(
                $"Done updating {dto.Summary.Name}");
        }
예제 #11
0
 void WhenSendingStatusAsXml(Guid clientId, DetailedStatus detailedStatus)
 {
     _response = _browser.Put(UrlList.TestClients_Root + "/" + clientId + "/status", with => {
         with.JsonBody(detailedStatus);
         with.Accept("application/xml");
     });
 }
예제 #12
0
 public async Task <BaseResponse> UpdateStatus(string token, DetailedStatus status)
 {
     return(await RequestHandler.ProcessPostRequest <BaseResponse, DetailedStatus>(POST_UPDATESTATUSES, status, token));
 }
예제 #13
0
 void WHEN_SendingStatus_as_json(Guid clientId, DetailedStatus detailedStatus)
 {
     _response = _browser.Put(UrlList.TestClients_Root + "/" + clientId + "/status", with => {
         with.JsonBody<DetailedStatus>(detailedStatus);
         with.Accept("application/json");
     });
 }
        private void AddProperties(DeviceDataFlag flag, List <Tuple <string, string> > properties)
        {
            //TODO: HIGH AddOrUpdate property
            switch (flag)
            {
            case DeviceDataFlag.Statusai:
                var statuses = new List <DetailedStatus>();
                foreach (var statusItem in properties)
                {
                    var stat = new DetailedStatus()
                    {
                        Status      = statusItem.Item1,
                        Description = statusItem.Item2,
                    };
                    statuses.Add(stat);
                }
                _statusService.AddOrUpdate(statuses);
                break;

            case DeviceDataFlag.klasifikatorius:
                var models = new List <DeviceModel>();
                foreach (var statusItem in properties)
                {
                    var deviceModel = new DeviceModel()
                    {
                        Name        = statusItem.Item1,
                        Description = statusItem.Item2,
                    };
                    models.Add(deviceModel);
                }
                _deviceModelService.AddOrUpdate(models);
                break;

            case DeviceDataFlag.komplektacijos:
                var groups = new List <Classification>();
                foreach (var groupItem in properties)
                {
                    var group = new Classification()
                    {
                        Code  = groupItem.Item1,
                        Model = groupItem.Item2,
                    };
                    groups.Add(group);
                }
                _groupService.AddOrUpdate(groups);
                break;

            case DeviceDataFlag.Vietos:
                var locations = new List <DeviceLocation>();
                foreach (var locationItem in properties)
                {
                    var location = new DeviceLocation()
                    {
                        Name    = locationItem.Item1,
                        Details = locationItem.Item2,
                    };
                    locations.Add(location);
                }
                _deviceLocationService.AddOrUpdate(locations);
                break;
            }
        }
 public void AddOrUpdate(DetailedStatus status)
 {
     _detailedStatusService.AddOrUpdate(_mapper.Map <DetailedStatusData>(status));
     _detailedStatusService.Save();
 }