Exemplo n.º 1
0
		public List<Snapshot> Run(IPolicyEngineFactory agent, ProcessLevel level, RunAt runAt, bool forceGc)
		{
			GC.Collect();
			GC.WaitForPendingFinalizers();
			GC.Collect();

			IContentScanner scanner = agent.CreateContentScanner(null);
			IContentEnforcer enforcer = m_Enforce ? agent.CreateContentEnforcer(null) : null;
			List<Snapshot> snapshots = new List<Snapshot>();

			for (int iteration = 0; iteration < m_Iterations; ++iteration)
			{
				snapshots.Add(new Snapshot("PreLoadRequest", forceGc));
				Request request = ContractSerialization.LoadRequest(m_RequestPath);
				snapshots.Add(new Snapshot("PreScan", forceGc));
				Response response = scanner.Scan(request, null, level, runAt);

				if (enforcer != null)
				{
					snapshots.Add(new Snapshot("PreEnforce", forceGc));
					enforcer.Enforce(request, response);
					snapshots.Add(new Snapshot("PostEnforce", forceGc));
				}
				else
				{
					snapshots.Add(new Snapshot("PostScan", forceGc));
				}
			}

			snapshots.Add(new Snapshot("PostGcFinal", true));

			return snapshots;
		}
Exemplo n.º 2
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="p_Entity">实体类</param>
        /// <returns>操作影响的记录行数</returns>
        public override int Delete(BaseEntity p_Entity)
        {
            try
            {
                ProcessLevel MasterEntity = (ProcessLevel)p_Entity;
                if (MasterEntity.ID == 0)
                {
                    return(0);
                }

                //删除主表数据
                string Sql = "";
                Sql = "DELETE FROM Enum_ProcessLevel WHERE " + "ID=" + SysString.ToDBString(MasterEntity.ID);
                //执行
                int AffectedRows = 0;
                if (!this.sqlTransFlag)
                {
                    AffectedRows = this.ExecuteNonQuery(Sql);
                }
                else
                {
                    AffectedRows = sqlTrans.ExecuteNonQuery(Sql);
                }

                return(AffectedRows);
            }
            catch (BaseException E)
            {
                throw new BaseException(E.Message, E);
            }
            catch (Exception E)
            {
                throw new BaseException(FrameWorkMessage.GetAlertMessage((int)Message.CommonDBDelete), E);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 删除
        /// </summary>
        public override void EntityDelete()
        {
            ProcessLevelRule rule   = new ProcessLevelRule();
            ProcessLevel     entity = EntityGet();

            rule.RDelete(entity);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 获得实体
        /// </summary>
        /// <returns></returns>
        private ProcessLevel EntityGet()
        {
            ProcessLevel entity = new ProcessLevel();

            entity.ID = HTDataID;
            return(entity);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 新增
        /// </summary>
        public override int EntityAdd()
        {
            ProcessLevelRule rule   = new ProcessLevelRule();
            ProcessLevel     entity = EntityGet();

            rule.RAdd(entity);
            return(entity.ID);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 获得实体
        /// </summary>
        /// <returns></returns>
        private ProcessLevel EntityGet()
        {
            ProcessLevel entity = new ProcessLevel();

            entity.ID = HTDataID;
            entity.SelectByID();
            entity.Code   = txtCode.Text.Trim();
            entity.Name   = txtName.Text.Trim();
            entity.Remark = txtRemark.Text.Trim();

            return(entity);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 设置
        /// </summary>
        public override void EntitySet()
        {
            ProcessLevel entity = new ProcessLevel();

            entity.ID = HTDataID;
            bool findFlag = entity.SelectByID();

            txtCode.Text   = entity.Code.ToString();
            txtName.Text   = entity.Name.ToString();
            txtRemark.Text = entity.Remark.ToString();


            if (!findFlag)
            {
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="p_Entity">实体类</param>
        /// <returns>操作影响的记录行数</returns>
        public override int AddNew(BaseEntity p_Entity)
        {
            try
            {
                ProcessLevel MasterEntity = (ProcessLevel)p_Entity;
                if (MasterEntity.ID == 0)
                {
                    return(0);
                }

                //新增主表数据
                StringBuilder MasterField = new StringBuilder();
                StringBuilder MasterValue = new StringBuilder();
                MasterField.Append("INSERT INTO Enum_ProcessLevel(");
                MasterValue.Append(" VALUES(");
                MasterField.Append("ID" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.ID) + ",");
                MasterField.Append("Code" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.Code) + ",");
                MasterField.Append("Name" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.Name) + ",");
                MasterField.Append("Remark" + ")");
                MasterValue.Append(SysString.ToDBString(MasterEntity.Remark) + ")");



                //执行
                int AffectedRows = 0;
                if (!this.sqlTransFlag)
                {
                    AffectedRows = this.ExecuteNonQuery(MasterField.Append(MasterValue.ToString()).ToString());
                }
                else
                {
                    AffectedRows = sqlTrans.ExecuteNonQuery(MasterField.Append(MasterValue.ToString()).ToString());
                }
                return(AffectedRows);
            }
            catch (BaseException E)
            {
                throw new BaseException(E.Message, E);
            }
            catch (Exception E)
            {
                throw new BaseException(FrameWorkMessage.GetAlertMessage((int)Message.CommonDBInsert), E);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Gets the response time (in millisec) for the engine to process the given file.
        /// </summary>
        /// <param name="filePath">The file you are testing</param>
        /// <returns>measurement in milliseconds</returns>
        internal static long GetResponseTimeForFile(IContentScanner scanner, string filePath, ProcessLevel level, RunAt runAt)
        {
            using (var cs = new ContractSerialization())
            {
                Request request = cs.LoadRequest(filePath);

                Response response = null;

                TimeSpan timeSpan = Measure(delegate()
                                                {
                                                    response = scanner.Scan(request, null, level, runAt);
                                                });

                AssertValidResponse(response); //Essential to validate, but it should not be part of what is timed.

                return Convert.ToInt64(timeSpan.TotalMilliseconds);
            }
        }
Exemplo n.º 10
0
 /// <summary>
 /// 删除
 /// </summary>
 /// <param name="p_BE">要删除的实体</param>
 /// <param name="sqlTrans">事务类</param>
 public void RDelete(BaseEntity p_BE, IDBTransAccess sqlTrans)
 {
     try
     {
         this.CheckCorrect(p_BE);
         ProcessLevel    entity  = (ProcessLevel)p_BE;
         ProcessLevelCtl control = new ProcessLevelCtl(sqlTrans);
         control.Delete(entity);
     }
     catch (BaseException)
     {
         throw;
     }
     catch (Exception E)
     {
         throw new BaseException(E.Message);
     }
 }
Exemplo n.º 11
0
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="p_Entity">实体类</param>
        /// <returns>操作影响的记录行数</returns>
        public override int Update(BaseEntity p_Entity)
        {
            try
            {
                ProcessLevel MasterEntity = (ProcessLevel)p_Entity;
                if (MasterEntity.ID == 0)
                {
                    return(0);
                }

                //更新主表数据
                StringBuilder UpdateBuilder = new StringBuilder();
                UpdateBuilder.Append("UPDATE Enum_ProcessLevel SET ");
                UpdateBuilder.Append(" ID=" + SysString.ToDBString(MasterEntity.ID) + ",");
                UpdateBuilder.Append(" Code=" + SysString.ToDBString(MasterEntity.Code) + ",");
                UpdateBuilder.Append(" Name=" + SysString.ToDBString(MasterEntity.Name) + ",");
                UpdateBuilder.Append(" Remark=" + SysString.ToDBString(MasterEntity.Remark));

                UpdateBuilder.Append(" WHERE " + "ID=" + SysString.ToDBString(MasterEntity.ID));



                //执行
                int AffectedRows = 0;
                if (!this.sqlTransFlag)
                {
                    AffectedRows = this.ExecuteNonQuery(UpdateBuilder.ToString());
                }
                else
                {
                    AffectedRows = sqlTrans.ExecuteNonQuery(UpdateBuilder.ToString());
                }
                return(AffectedRows);
            }
            catch (BaseException E)
            {
                throw new BaseException(E.Message, E);
            }
            catch (Exception E)
            {
                throw new BaseException(FrameWorkMessage.GetAlertMessage((int)Message.CommonDBUpdate), E);
            }
        }
Exemplo n.º 12
0
 /// <summary>
 /// 新增(传入事务处理)
 /// </summary>
 /// <param name="p_BE">要新增的实体</param>
 /// <param name="sqlTrans">事务类</param>
 public void RAdd(BaseEntity p_BE, IDBTransAccess sqlTrans)
 {
     try
     {
         this.CheckCorrect(p_BE);
         ProcessLevel    entity  = (ProcessLevel)p_BE;
         ProcessLevelCtl control = new ProcessLevelCtl(sqlTrans);
         //entity.ID=(int)EntityIDTable.GetID((long)SysEntity.Enum_ProcessLevel,sqlTrans);
         control.AddNew(entity);
     }
     catch (BaseException)
     {
         throw;
     }
     catch (Exception E)
     {
         throw new BaseException(E.Message);
     }
 }
Exemplo n.º 13
0
		public Response Scan(Request request, string user, ProcessLevel level, RunAt runat)
		{
			Logger.LogDebug(Properties.Resources.LOG_SCAN_BEGIN);

			if (PolicyCache.Instance().IsCacheEmpty)
			{
				Logger.LogInfo(Properties.Resources.LOG_CATEGORY_NO_MATCHES);
				return null;
			}
						
			try
			{
				return HandleContentScanning(request, user, level, runat, SkipDiscovery, TotalAttachmentSize);
			}
			catch (Exception ex)
			{
				Logger.LogError(ex);
                return ErrorResponse(ex);
			}
			finally
			{
				Logger.LogDebug(Properties.Resources.LOG_SCAN_END);
			}
		}
Exemplo n.º 14
0
		private static IPolicyResponseObject GetPolicyResponseFromScanner(IBaseContentScanner scanner, IUniversalRequestObject uro, ProcessLevel level, bool skipDiscovery)
		{
			Workshare.Policy.Interfaces.ProcessLevel translatedProcessLevel =
				(Workshare.Policy.Interfaces.ProcessLevel) Enum.Parse(typeof(Workshare.Policy.Interfaces.ProcessLevel), level.ToString());

			Logger.LogDebug(string.Format(CultureInfo.InvariantCulture, Properties.Resources.LOG_CALLING_SCANNER, scanner));
			scanner.SkipDiscovery = skipDiscovery;
			return scanner.Scan(uro, translatedProcessLevel);
		}
Exemplo n.º 15
0
        public IPolicyResponseObject Scan(IUniversalRequestObject uro, ProcessLevel processLevel)
        {
            PerformanceCounters.Instance.StartTimer(PerformanceCounters.CounterType.ContentScan);

            PolicyResponseObject pro = new PolicyResponseObject();

            GeneralPolicyProcessor gpp = GetGeneralPolicyProcessor(uro);

            if ( null == gpp)
                return pro;

            try
            {
                SetupPolicyProcessor(gpp, uro);

                InitialisePro(pro, uro);

                ProcessExpressions(gpp, pro);

                if (processLevel >= ProcessLevel.Routing)
                {
                    ProcessRouting(gpp, pro);

                    if (processLevel >= ProcessLevel.Actions)
                    {
                        ProcessActions(gpp, pro, m_skipDiscovery);
                    }
                }
            }
            finally
            {
                TearDownPolicyProcessor(gpp);
                PerformanceCounters.Instance.StopTimer(PerformanceCounters.CounterType.ContentScan, 0);
            }

            return pro;
        }
Exemplo n.º 16
0
		private static Response HandleContentScanning(Request request, string user, ProcessLevel level, RunAt runat, bool skipDiscovery, Int64 totalAttachmentSize)
		{
			PolicyType policyType = (PolicyType)Enum.Parse(typeof(PolicyType), request.PolicyType );

			List<string> users = new List<string>();
			users.Add(user);

			Collection<Lease<EngineLookupKey, IBaseContentScanner>> scanners = PolicyCacheManager.Instance.GetScanners(
					policyType,
					users.ToArray(),
					runat.ToString());

			if ( 0 == scanners.Count )
			{
				string userParam = string.IsNullOrEmpty(user) ? "NULL" : user;

				Logger.LogInfo( string.Format(CultureInfo.InvariantCulture, Properties.Resources.LOG_CATEGORY_NO_MATCHES, policyType.ToString(), userParam));

				return new Response();
			}

			List<IDisposable> disposeList = new List<IDisposable>();
			try
			{
				IUniversalRequestObject uro = RequestAdaptor.GetURO(request);
				
				disposeList.Add(uro as IDisposable);

                List<IPolicyResponseObject> pros = new List<IPolicyResponseObject>();

                bool verified = VerifyRequest(request);

                foreach (Lease<EngineLookupKey, IBaseContentScanner> scannerLease in scanners)
                {
                    using (scannerLease)
                    {
                        IBaseContentScanner scanner = scannerLease.Object;
                        if (scanner != null)
                        {
                            scanner.TotalAttachmentSize = totalAttachmentSize;
                        }
                        IPolicyResponseObject pro = GetPolicyResponseFromScanner(scannerLease.Object, uro, level, skipDiscovery);

                        if (verified)
                            pro.VerifiedOnClient = true;

                        pros.Add(pro);
                        disposeList.Add(pro as IDisposable);
                        scannerLease.Object.PrepareForRecycle();
                    }
                }

                IPolicyResponseObject consolidatedPro = PROConsolidator.Consolidate(pros);

                disposeList.Add(consolidatedPro as IDisposable);

                UpdateIncidentProperties(consolidatedPro);
                Response result = ResponseAdaptor.GetResponse(consolidatedPro);

                //Copy Routing over from Request
                result.Routing = new RoutingEntity[] { request.Source, request.Destination };

                PopulateRunAt(result, runat);

                DocumentReaderCache.Instance.Clear();

                RemoveExpressionDetail(result);
				return result;
			}
			finally
			{
				foreach (IDisposable disposable in disposeList)
				{
					if ( disposable != null)
						disposable.Dispose();
				}
				disposeList.Clear();
			}
		}
Exemplo n.º 17
0
 public Protect.Service.Response Scan(Request request, ProcessLevel processLevel)
 {
     return null;
 }
Exemplo n.º 18
0
		private static void AssertValid(Response resp, ProcessLevel processLevel)
		{
			Assert.IsNotNull(resp.Contents, "A NULL Contents is invalid");
			Assert.IsNotNull(resp.Routing, "A NULL Routing is invalid");

			if (processLevel == ProcessLevel.Actions)
			{
				Assert.IsNotNull(resp.ResolvedActions, "A NULL ResolvedActions is invalid");
			}

			foreach (ContentItem item in resp.Contents)
			{
				Assert.IsFalse(string.IsNullOrEmpty(item.Id), "All content items must have a populated id");
			}
		}
Exemplo n.º 19
0
 /// <summary>
 /// 检查将要操作的数据是否符合业务规则
 /// </summary>
 /// <param name="p_BE"></param>
 private void CheckCorrect(BaseEntity p_BE)
 {
     ProcessLevel entity = (ProcessLevel)p_BE;
 }
Exemplo n.º 20
0
        internal static ResultStat[] MeasureFolder(IContentScanner scanner, string basePath, ProcessLevel scanLevel, RunAt runAt)
        {
            FileInfo[] requestFiles = new DirectoryInfo(basePath).GetFiles("*.xml", SearchOption.AllDirectories);

            Assert.IsTrue(requestFiles.Length > 0);

            List<ResultStat> resultStats = new List<ResultStat>();

            //do it twice, take the second result.
            for (int i = 0; i < 2; ++i)
            {
                long totalBytes = 0;
                List<long> results = new List<long>();

                foreach (FileInfo requestFile in requestFiles)
                {
                    long responseTime = PerfTestHelp.GetResponseTimeForFile(scanner, requestFile.FullName, scanLevel, runAt);

                    results.Add(responseTime);

                    totalBytes += PerfTestHelp.GetRequestSizeInBytes(requestFile);
                }

                //JIT paranoia.
                //For consistency, disregard the first iteration of every test.
                if (i > 0)
                {
                    long totalMillisec = 0;
                    results.ForEach(delegate(long responseTime) { totalMillisec += responseTime; });

                    resultStats.Add(new ResultStat(totalMillisec, requestFiles.Length, totalBytes));
                }
            }

            return resultStats.ToArray();
        }
 public RoleProviderAttribute(ProcessLevel level, ProcessEvent eventType)
 {
     this.name      = level.ToString();
     this.level     = level;
     this.eventType = eventType;
 }
		private ResultStat[] MeasureFolder(string basepath, ProcessLevel level)
		{
			try
			{
				return PerfTestHelp.MeasureFolder(GetContentScanner(), basepath, level, RunAt.Client);
			}
			catch
			{
				//do not upload records if anything fails.
				m_success = false;
				throw;
			}
		}