Example #1
0
        static ODataValidator()
        {
            // Get the 3 term documents.
            RuleEngine.Common.TermDocuments.GetInstance();
            ThreadPool.QueueUserWorkItem(new WaitCallback(ValidationJobQueueWorkers.ValidationQueueListener));

            if (!int.TryParse(ConfigurationManager.AppSettings["MaxPayloadByteCount"], out MaxPayloadByteCount))
            {
                // Set the maximum bytes of the payload accepted to 1 MB
                MaxPayloadByteCount = 1000000;
            }

            if (!int.TryParse(ConfigurationManager.AppSettings["MaxValidationJobQueueSize"], out MaxValidationJobQueueSize))
            {
                MaxValidationJobQueueSize = 20;
            }

            string serverMappedRulestorePath      = string.Empty;
            string serverMappedExtensionStorePath = string.Empty;

            // Add for Test project
            if (DataService.serviceInstance != null)
            {
                DataService service = new DataService();
                serverMappedRulestorePath      = service.GetRulestorePath();
                serverMappedExtensionStorePath = service.GetExtensionStorePath();
            }
            else
            {
                RulestorePath = ConfigurationManager.AppSettings["RulestorePath"] ?? "~/rulestore";
                ODataValidator.ExtensionStorePath = ConfigurationManager.AppSettings["ExtensionStorePath"] ?? "~/extensions";
                serverMappedRulestorePath         = HttpContext.Current.Server.MapPath(RulestorePath);
                serverMappedExtensionStorePath    = HttpContext.Current.Server.MapPath(ODataValidator.ExtensionStorePath);
            }

            // Load the rule catalog from the rule store
            Guid    initJobId = Guid.NewGuid();
            ILogger logger    = new DatabaseResultProvider(initJobId);
            RuleStoreAsXmlFolder ruleStore = new RuleStoreAsXmlFolder(serverMappedRulestorePath, logger);

            foreach (var r in ruleStore.GetRules())
            {
                RuleCatalogCollection.Instance.Add(r);
            }

            // Load the rule catalog from the extension rule store
            ExtensionRuleStore extensionStore = new ExtensionRuleStore(serverMappedExtensionStorePath, logger);

            foreach (var rule in extensionStore.GetRules())
            {
                if (rule.IsValid())
                {
                    RuleCatalogCollection.Instance.Add(rule);
                }
            }
        }
Example #2
0
        private JobGroup CreateJobGroupItem(string format, Guid masterJobId, ServiceContext ctx, JobType jobType, List <string> ruleNameList = null, bool insertJobToDB = true)
        {
            RuleEngine.IResultProvider resultProvider = new DatabaseResultProvider(ctx.JobId, jobType);
            ILogger           logger     = resultProvider as ILogger;
            RuleEngineWrapper ruleEngine = new RuleEngineWrapper(ctx, resultProvider, logger, ruleNameList);

            // start the validation workflow on the backend threadpool thread
            this.InitJobState(ruleEngine, ctx.JobId);

            if (insertJobToDB)
            {
                // insert validation job entry, and insert payload lines, to underlying DB
                ExtValidationJobs extJob = new ExtValidationJobs();

                extJob.ID           = ctx.JobId;
                extJob.Complete     = false;
                extJob.CreatedDate  = DateTime.Now;
                extJob.Uri          = ctx.Destination.OriginalString;
                extJob.Format       = format;
                extJob.RuleCount    = ruleEngine.RuleCount;
                extJob.ResourceType = ctx.PayloadType.ToString();
                extJob.ServiceType  = ctx.ServiceType.ToString();
                foreach (var levelType in ctx.LevelTypes)
                {
                    extJob.LevelTypes += Enum.GetName(typeof(ConformanceLevelType), levelType).ToString() + ',';
                }
                extJob.LevelTypes = extJob.LevelTypes.TrimEnd(',');

                if (ctx.RequestHeaders != null && ctx.RequestHeaders.Any())
                {
                    var headers = "";
                    foreach (var p in ctx.RequestHeaders)
                    {
                        if (p.Key.Equals("Authorization"))
                        {
                            continue;
                        }
                        headers += p.Key + ":" + p.Value + ";";
                    }
                    extJob.ReqHeaders = headers;
                }
                AddPayloadLinesToJobInImmediateDBEnv(extJob, ctx);
                LogJobRespHeaders(extJob, ctx);
            }

            // populate the data to return
            JobGroup item = JobGroup.CreateJobGroup(masterJobId, ctx.PayloadType.ToString(), ruleEngine.RuleCount, ctx.Destination.OriginalString);

            item.DerivativeJobId = ctx.JobId;

            return(item);
        }
Example #3
0
        public void OnInsertJob(ExtValidationJobs job, UpdateOperations op)
        {
            if (job == null)
            {
                throw new ArgumentNullException("job");
            }

            // ensure only insert ops are allowed
            ValidateOperationType(op);

            // limit total size of validation job queue
            CheckValidationJobQueueSize();

            job.Complete    = false;
            job.CreatedDate = DateTime.Now;
            job.ID          = Guid.NewGuid();

            // instantiate validation engine
            var               ctx            = CreateRuleEngineContext(job);
            IResultProvider   resultProvider = new DatabaseResultProvider(job.ID);
            ILogger           logger         = resultProvider as ILogger;
            RuleEngineWrapper ruleEngine     = new RuleEngineWrapper(ctx, resultProvider, logger);

            // set total # of rules to execute for the given URI & format
            job.RuleCount    = ruleEngine.RuleCount;
            job.ResourceType = ctx.PayloadType.ToString();
            job.ServiceType  = ctx.ServiceType.ToString();
            foreach (var levelType in ctx.LevelTypes)
            {
                job.LevelTypes += Enum.GetName(typeof(ConformanceLevelType), levelType).ToString() + ',';
            }
            job.LevelTypes.TrimEnd(',');

            LogJobRespHeaders(job, ctx);
            AddPayloadLinesToJob(job, ctx);

            // state object is used to start the validation workflow on a threadpool thread
            this.InitJobState(ruleEngine, job.ID);
        }