public static bool EqualsJob(this Template template, WikiJobRequest job)
        {
            var  templateID    = template.Arguments.SingleOrDefault(arg => arg.Name.ToPlainText().Equals("id"));
            bool hasMatchingID = (templateID == null || templateID.Value.ToPlainText().Equals(job.ID.ToString()));

            return(template.ToString().Equals(job.RawRequest) && hasMatchingID);
        }
Example #2
0
        public static WikiJob GetWikiJob(WikiJobRequest request, Serilog.ILogger log, IWikiAccessLogic wikiAccessLogic, IConfiguration config, RequestData jobData, IWikiJobRetriever retriever)
        {
            WikiJob job;
            var     throttleSpeedInSeconds = int.Parse(config["ThreadThrottleSpeedInSeconds"]);

            switch (request.JobType)
            {
            case JobType.TextReplacementJob:
                job = new TextReplacementJob(log, wikiAccessLogic, retriever, jobData, throttleSpeedInSeconds);
                break;

            case JobType.LinkFixJob:
                job = new LinkFixJob(log, wikiAccessLogic, retriever, jobData, throttleSpeedInSeconds);
                break;

            case JobType.ContinuityLinkFixJob:
                job = new ContinuityLinkFixJob(log, wikiAccessLogic, retriever, jobData, throttleSpeedInSeconds);
                break;

            default:
                throw new Exception("Job type is undefined");
            }

            job.Configuration = config;
            job.JobData       = jobData;
            job.Request       = request;
            job.Log           = log;

            return(job);
        }
Example #3
0
        private WikiJobRequest MapPageToWikiJobRequest(WikiJobRequest request, Page page)
        {
            if (_requestDictionary == null)
            {
                _requestDictionary = new Dictionary <long, WikiJobRequest>();
            }

            WikiJobRequest tempRequest;

            if (!_requestDictionary.TryGetValue(request.ID, out tempRequest))
            {
                _requestDictionary.Add(request.ID, tempRequest = request);
            }

            if (page != null)
            {
                if (request.Pages == null)
                {
                    request.Pages = new List <Page>();
                }
                if (!tempRequest.Pages.Any(x => x.PageID == page.PageID))
                {
                    tempRequest.Pages.Add(page);
                }
            }

            return(tempRequest);
        }
Example #4
0
        private void CheckForUserApproval(WikiJobRequest request, JobApprovalLogic jobApprovalLogic)
        {
            var user = _userRetriever.GetUser(request.RequestingUsername);

            if (jobApprovalLogic.IsUserAutoApproved(user))
            {
                request.Status = JobStatus.PreApproved;
            }
            else
            {
                request.Status = JobStatus.PendingPreApproval;
            }
        }
Example #5
0
        public void SaveWikiJobRequest(WikiJobRequest request)
        {
            var p = new DynamicParameters();

            p.Add("@Comment", request.Comment, System.Data.DbType.String);
            p.Add("@JobType", request.JobType, System.Data.DbType.String);
            p.Add("@RawRequest", request.RawRequest, System.Data.DbType.String);
            p.Add("@Status", request.Status, System.Data.DbType.Int32);
            p.Add("@SubmittedDate", request.SubmittedDateUTC, System.Data.DbType.DateTime2);
            p.Add("@Username", request.RequestingUsername, System.Data.DbType.String);
            p.Add("@ID", request.ID, System.Data.DbType.Int64, System.Data.ParameterDirection.Output);

            p.RemoveUnused = true;

            _database.SaveData("dbo.spCreateUpdateWikiJobRequest", p, "JobDb");
            request.ID = p.Get <long>("ID");
            if (request.Pages != null && request.Pages.Any())
            {
                new PageData(_database).SavePages(request.Pages, request.ID);
            }
        }
        public static WikiJobRequest GetWikiJobRequest(JobType type, TimeZoneInfo timezone, Template template = null)
        {
            var            timeZoneString = GetTimeZoneString(timezone);
            WikiJobRequest jobRequest     = new WikiJobRequest();

            switch (type)
            {
            case JobType.TextReplacementJob:
                jobRequest.JobType = JobType.TextReplacementJob;
                //((TextReplacementJob)job).FromText = template.Arguments.Single(arg => arg.Name.ToPlainText() == "before").Value.ToPlainText();
                //((TextReplacementJob)job).ToText = template.Arguments.Single(arg => arg.Name.ToPlainText() == "after").Value.ToPlainText();
                jobRequest.Pages = template.Arguments.SingleOrDefault(arg => arg.Name.ToPlainText() == "pages")?.Value.ToPlainText().Split(';').Select(val => new Page {
                    Name = val, PageID = 0
                }).ToList();
                break;

            case JobType.LinkFixJob:
                jobRequest.JobType = JobType.LinkFixJob;
                //((TextReplacementJob)job).FromText = template.Arguments.Single(arg => arg.Name.ToPlainText() == "before").Value.ToPlainText();
                //((TextReplacementJob)job).ToText = template.Arguments.Single(arg => arg.Name.ToPlainText() == "after").Value.ToPlainText();
                jobRequest.Pages = template.Arguments.SingleOrDefault(arg => arg.Name.ToPlainText() == "pages")?.Value.ToPlainText().Split(';').Select(val => new Page {
                    Name = val, PageID = 0
                }).ToList();
                break;

            case JobType.ContinuityLinkFixJob:
                jobRequest.JobType = type;
                jobRequest.Pages   = template.Arguments.SingleOrDefault(arg => arg.Name.ToPlainText() == "pages")?.Value.ToPlainText().Split(';').Select(val => new Page {
                    Name = val, PageID = 0
                }).ToList();
                break;

            default:
                throw new Exception("Job type is undefined");
            }

            if (template != null)
            {
                jobRequest.Status             = (JobStatus)Enum.Parse(typeof(JobStatus), template.Arguments.SingleOrDefault(arg => arg.Name.ToPlainText() == "status")?.Value.ToPlainText() ?? JobStatus.ToBeProcessed.ToString());
                jobRequest.ID                 = long.Parse(template.Arguments.SingleOrDefault(arg => arg.Name.ToPlainText() == "id")?.Value.ToPlainText() ?? "0");
                jobRequest.RequestingUsername = template.Arguments.Single(arg => arg.Name.ToPlainText() == "username").Value.ToPlainText();
                jobRequest.Comment            = template.Arguments.Single(arg => arg.Name.ToPlainText() == "comment").Value.ToPlainText();

                //WikiMedia timestamp example: 14:58, 30 June 2020-04:00:00
                var timeString = template.Arguments.Single(arg => arg.Name.ToPlainText() == "timestamp").Value.ToPlainText()[..^ 6];
                //More flexible on format string. If there's more than one comma, we have a full signature instead of just a timestamp.
                if (timeString.Where(x => x == ',').Count() > 1)
                {
                    timeString = timeString.Substring(timeString.IndexOf(",")).Trim(); //Grab everything after first comma
                }
                jobRequest.SubmittedDateUTC = DateTime.ParseExact($"{timeString}{timeZoneString}", "HH:mm, dd MMMM yyyyKKKK", new CultureInfo("en-US")).ToUniversalTime();
            }
            else
            {
                jobRequest.Status             = JobStatus.ToBeProcessed;
                jobRequest.RequestingUsername = "******";
                jobRequest.Comment            = "Internally scheduled job";
                jobRequest.SubmittedDateUTC   = DateTime.UtcNow;
            }

            jobRequest.RawRequest = template.ToString();
            return(jobRequest);
        }