Пример #1
0
        public HttpResponseMessage NewOngoingTask([FromBody] dynamic data)
        {
            SLW_DatabaseInfo db     = new SLW_DatabaseInfo();
            KeyDetail        detail = db.GetKeyDetail((string)data.access_key);

            if (detail.data_present)
            {
                UnassignedTask unassigned = db.GetSingleUnassignedTask((string)data.application_id);
                db.DeleteUnassignedTask((string)data.application_id);

                UserDetails userDetailsAdmin = db.GetUserDetails(detail.username);
                db.NewOngoingTask((string)data.application_id, (string)data.assigned_to, unassigned.username, (string)data.status, unassigned.created_date_raw, userDetailsAdmin.fullname, userDetailsAdmin.username);
                db.UpdateApplicationStatus((string)data.application_id, Commons.Constants.PENDING_TYPE, DateTime.Now);
                OngoingTask ongoing     = db.GetSingleOngoingTask((string)data.application_id);
                UserDetails userDetails = db.GetUserDetails(ongoing.assigned_to);
                ongoing.assigned_to = userDetails.fullname;
                db.SaveActivity(new UserActivity(detail.username, Commons.Constants.ACTIVITY_NEW_ONGOING, (string)data.application_id, (string)data.assigned_to, 1));
                Form form = db.GetApplication((string)data.application_id);

                Email.Send(userDetails.email, "New Type Approval Application", "Type approval application " + form.application_id + " for Device with Model number " + form.product_identification + " from " + ongoing.submitted_by + " is assigned to you for processing.");
                return(Request.CreateResponse(HttpStatusCode.OK, ongoing));
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden, "invalid key"));
            }
        }
Пример #2
0
        public HttpResponseMessage ReassignTask([FromBody] dynamic data)
        {
            SLW_DatabaseInfo db     = new SLW_DatabaseInfo();
            KeyDetail        detail = db.GetKeyDetail((string)data.access_key);

            if (detail.data_present)
            {
                OngoingTask prev_ongoing = db.GetSingleOngoingTask((string)data.application_id);
                db.ReassignTask((string)data.application_id, (string)data.assign_to);
                OngoingTask ongoing         = db.GetSingleOngoingTask((string)data.application_id);
                UserDetails prevUserDetails = db.GetUserDetails(prev_ongoing.assigned_to);
                UserDetails userDetails     = db.GetUserDetails(ongoing.assigned_to);

                Form form = db.GetApplication((string)data.application_id);
                ongoing.assigned_to = userDetails.fullname;
                db.SaveActivity(new UserActivity(detail.username, Commons.Constants.ACTIVITY_REASSIGN_TASK, (string)data.application_id, (string)data.assign_to, 1));

                Email.Send(userDetails.email, "New Type Approval Application", "Type approval application " + form.application_id + " for Device with Model number " + form.product_identification + " from " + ongoing.submitted_by + " is assigned to you for processing.");
                Email.Send(prevUserDetails.email, "Assigned Type Approval Application", "Application " + form.application_id + " that had been assigned to you has been reassigned.");

                return(Request.CreateResponse(HttpStatusCode.OK, ongoing));
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized, "invalid key"));
            }
        }
Пример #3
0
        private void WriteResult(JsonOperationContext context, OngoingTask taskInfo)
        {
            HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;

            using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
            {
                context.Write(writer, taskInfo.ToJson());
                writer.Flush();
            }
        }
Пример #4
0
        public HttpResponseMessage MoveToUnassigned([FromBody] dynamic data)
        {
            SLW_DatabaseInfo db     = new SLW_DatabaseInfo();
            KeyDetail        detail = db.GetKeyDetail((string)data.access_key);

            if (detail.data_present)
            {
                OngoingTask ongoing = db.GetSingleOngoingTask((string)data.application_id);
                db.DeleteOngoingTask((string)data.application_id);
                db.NewUnassignedTask(ongoing.application_id, ongoing.submitted_by_username, ongoing.created_date_raw);
                db.UpdateApplicationStatus((string)data.application_id, Commons.Constants.SUBMITTED_TYPE, DateTime.Now);
                db.SaveActivity(new UserActivity(detail.username, Commons.Constants.ACTIVITY_MOVE_UNASSAIGNED, (string)data.application_id, "", 1));
                return(Request.CreateResponse(HttpStatusCode.OK, new UnassignedTask(ongoing.application_id, ongoing.created_date, ongoing.created_date_raw, ongoing.submitted_by, ongoing.submitted_by_username)));
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized, "invalid key"));
            }
        }
Пример #5
0
        public async Task CanPassNodeTagToRestoreBackupOperation()
        {
            var myBackupsList = new List <MyBackup>();
            var backupPath    = NewDataPath(suffix: "BackupFolder");
            var clusterSize   = 3;
            var databaseName  = GetDatabaseName();
            var cluster       = await CreateRaftCluster(clusterSize, false);

            using (var store = new DocumentStore
            {
                Urls = new[] { cluster.Leader.WebUrl },
                Database = databaseName,
            }.Initialize())
            {
                var doc            = new DatabaseRecord(databaseName);
                var databaseResult = await store.Maintenance.Server.SendAsync(new CreateDatabaseOperation(doc, clusterSize));

                await store.Maintenance.SendAsync(new CreateSampleDataOperation());

                var myNodesList = databaseResult.Topology.AllNodes.ToList();
                Assert.True(clusterSize == myNodesList.Count, $"clusterSize({clusterSize}) == myNodesList.Count({myNodesList.Count})");

                foreach (var node in myNodesList)
                {
                    var myGuid       = Guid.NewGuid();
                    var backupConfig = Backup.CreateBackupConfiguration(Path.Combine(backupPath, myGuid.ToString()), name: $"Task_{node}_{myGuid}", mentorNode: node);
                    var result       = await store.Maintenance.SendAsync(new UpdatePeriodicBackupOperation(backupConfig));
                    await WaitForRaftIndexToBeAppliedOnClusterNodes(result.RaftCommandIndex, cluster.Nodes);

                    OngoingTask res = null;
                    await WaitForValueAsync(async() =>
                    {
                        res = await store.Maintenance.SendAsync(new GetOngoingTaskInfoOperation(result.TaskId, OngoingTaskType.Backup));
                        return(res.ResponsibleNode.NodeTag);
                    }, node, interval : 333);

                    Assert.NotNull(res);
                    Assert.True(node == res.MentorNode, $"node({node}) == res.MentorNode({res.MentorNode})");
                    Assert.True(node == res.ResponsibleNode.NodeTag, $"node({node}) == res.ResponsibleNode.NodeTag({res.ResponsibleNode.NodeTag})");
                    myBackupsList.Add(new MyBackup
                    {
                        BackupTaskId = result.TaskId,
                        Guid         = myGuid,
                        NodeTag      = res.ResponsibleNode.NodeTag
                    });
                }

                foreach (var myBackup in myBackupsList)
                {
                    var res = await store.Maintenance.SendAsync(new StartBackupOperation(isFullBackup : true, myBackup.BackupTaskId));

                    Assert.True(myBackup.NodeTag == res.Result.ResponsibleNode, $"myBackup.NodeTag({myBackup.NodeTag}) == res.ResponsibleNode({res.Result.ResponsibleNode})");
                    var operation = new GetPeriodicBackupStatusOperation(myBackup.BackupTaskId);
                    PeriodicBackupStatus status = null;
                    var value = WaitForValue(() =>
                    {
                        status = store.Maintenance.Send(operation).Status;
                        if (status?.LastEtag == null)
                        {
                            return(false);
                        }

                        return(true);
                    }, true);

                    Assert.True(value, $"Got status: {status != null}, exception: {status?.Error?.Exception}, LocalBackup.Exception: {status?.LocalBackup?.Exception}");
                    Assert.True(status != null, $"status != null, exception: {status?.Error?.Exception}, LocalBackup.Exception: {status?.LocalBackup?.Exception}");
                    Assert.True(myBackup.NodeTag == status.NodeTag, $"myBackup.NodeTag({myBackup.NodeTag}) == status.NodeTag({status.NodeTag})");

                    var prePath = Path.Combine(backupPath, myBackup.Guid.ToString());
                    myBackup.BackupPath = Path.Combine(prePath, status.FolderName);
                }

                var dbs = new List <string>();
                foreach (var myBackup in myBackupsList)
                {
                    var name          = $"restored_DB1_{myBackup.NodeTag}";
                    var restoreConfig = new RestoreBackupConfiguration
                    {
                        DatabaseName   = name,
                        BackupLocation = myBackup.BackupPath
                    };

                    dbs.Add(name);
                    var restoreBackupTask = store.Maintenance.Server.Send(new RestoreBackupOperation(restoreConfig, myBackup.NodeTag));
                    restoreBackupTask.WaitForCompletion(TimeSpan.FromSeconds(30));
                }
                var dbNames = await store.Maintenance.Server.SendAsync(new GetDatabaseNamesOperation(0, int.MaxValue));

                Assert.Equal(clusterSize + 1, dbNames.Length);
                dbs.ForEach(db => Assert.True(dbNames.Contains(db), $"numOfDbs.Contains(db), db = {db}"));
            }
        }