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); }
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); }
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); }
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; } }
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); }