示例#1
0
        public virtual void AddData(SequenceResultData sequenceResult)
        {
            Dictionary <string, string> columnToValue = DataModelMapper.GetColumnValueMapping(sequenceResult);
            string cmd = SqlCommandFactory.CreateInsertCmd(DataBaseItemNames.SequenceTableName, columnToValue);

            ExecuteWriteCommand(cmd);
        }
示例#2
0
        public virtual void AddData(TestInstanceData testInstance)
        {
            Dictionary <string, string> columnToValue = DataModelMapper.GetColumnValueMapping(testInstance);
            string cmd = SqlCommandFactory.CreateInsertCmd(DataBaseItemNames.InstanceTableName, columnToValue);

            ExecuteWriteCommand(cmd);
        }
示例#3
0
        public virtual void AddData(RuntimeStatusData runtimeStatus)
        {
            Dictionary <string, string> columnToValue = DataModelMapper.GetColumnValueMapping(runtimeStatus);
            string cmd = SqlCommandFactory.CreateInsertCmd(DataBaseItemNames.StatusTableName, columnToValue);

            ExecuteWriteCommand(cmd);
        }
示例#4
0
        public virtual void GetPerformanceResult(string runtimeHash, int session, IPerformanceResult performance)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={session}";
            // 最高CPU时间
            string cmd = SqlCommandFactory.CreateQueryMaxCmd(DataBaseItemNames.PerformanceTableName,
                                                             DataBaseItemNames.ProcessorTimeColumn, filter);

            using (DbDataReader reader = ExecuteReadCommand(cmd))
            {
                if (reader.Read() && !reader.IsDBNull(0))
                {
                    performance.CpuTime = (ulong)reader.GetDouble(0);
                }
            }
            // 最高分配内存
            cmd = SqlCommandFactory.CreateQueryMaxCmd(DataBaseItemNames.PerformanceTableName,
                                                      DataBaseItemNames.MemoryAllocatedColumn, filter);
            using (DbDataReader reader = ExecuteReadCommand(cmd))
            {
                if (reader.Read() && !reader.IsDBNull(0))
                {
                    performance.MaxAllocatedMemory = reader.GetInt64(0);
                }
            }
            // 最高使用内存
            cmd = SqlCommandFactory.CreateQueryMaxCmd(DataBaseItemNames.PerformanceTableName,
                                                      DataBaseItemNames.MemoryUsedColumn, filter);
            using (DbDataReader reader = ExecuteReadCommand(cmd))
            {
                if (reader.Read() && !reader.IsDBNull(0))
                {
                    performance.MaxUsedMemory = reader.GetInt64(0);
                }
            }
            // 平均分配内存
            cmd = SqlCommandFactory.CreateQueryAverageCmd(DataBaseItemNames.PerformanceTableName,
                                                          DataBaseItemNames.MemoryAllocatedColumn, filter);
            using (DbDataReader reader = ExecuteReadCommand(cmd))
            {
                if (reader.Read() && !reader.IsDBNull(0))
                {
                    performance.AverageAllocatedMemory = (long)reader.GetDouble(0);
                }
            }
            // 平均使用内存
            cmd = SqlCommandFactory.CreateQueryAverageCmd(DataBaseItemNames.PerformanceTableName,
                                                          DataBaseItemNames.MemoryUsedColumn, filter);
            using (DbDataReader reader = ExecuteReadCommand(cmd))
            {
                if (reader.Read() && !reader.IsDBNull(0))
                {
                    performance.AverageUsedMemory = (long)reader.GetDouble(0);
                }
            }
        }
示例#5
0
        public virtual void UpdateData(SessionResultData sessionResult)
        {
            SessionResultData           lastSessionResult = InternalGetSessionResult(sessionResult.RuntimeHash, sessionResult.Session);
            Dictionary <string, string> lastSessionValues = DataModelMapper.GetColumnValueMapping(lastSessionResult);

            Dictionary <string, string> columnToValue = DataModelMapper.GetColumnValueMapping(sessionResult);

            string filter = $"{DataBaseItemNames.RuntimeIdColumn}='{sessionResult.RuntimeHash}' AND {DataBaseItemNames.SessionIdColumn}={sessionResult.Session}";
            string cmd    = SqlCommandFactory.CreateUpdateCmd(DataBaseItemNames.SessionTableName, lastSessionValues,
                                                              columnToValue, filter);

            ExecuteWriteCommand(cmd);
        }
示例#6
0
        public virtual long GetTestInstanceCount(string filterString)
        {
            string cmd = SqlCommandFactory.CreateCalcCountCmd(filterString, DataBaseItemNames.InstanceTableName);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                long count = 0;
                if (dataReader.Read() && !dataReader.IsDBNull(0))
                {
                    count = dataReader.GetInt64(0);
                }
                return(count);
            }
        }
示例#7
0
        public virtual IList <TestInstanceData> GetTestInstances(string filterString)
        {
            string cmd = SqlCommandFactory.CreateQueryCmd(filterString, DataBaseItemNames.InstanceTableName);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                List <TestInstanceData> testInstanceDatas = new List <TestInstanceData>(50);
                while (dataReader.Read())
                {
                    TestInstanceData instanceData = new TestInstanceData();
                    DataModelMapper.ReadToObject(dataReader, instanceData);
                    testInstanceDatas.Add(instanceData);
                }
                return(testInstanceDatas);
            }
        }
示例#8
0
        public long GetRuntimeStatusCount(string runtimeHash, int session, int sequenceIndex)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={session} AND {DataBaseItemNames.SequenceIndexColumn}={sequenceIndex}";
            string cmd = SqlCommandFactory.CreateCalcCountCmd(filter, DataBaseItemNames.StatusTableName);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                long count = 0;
                if (dataReader.Read() && !dataReader.IsDBNull(0))
                {
                    count = dataReader.GetInt64(0);
                }
                return(count);
            }
        }
示例#9
0
        public bool ExistFailedStep(string runtimeHash, int session, int sequence)
        {
            const string failedResultFilter = "StepResult IN ('Error', 'Timeout', 'Failed', 'Abort')";
            string       filter             =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={session} AND {DataBaseItemNames.SequenceIndexColumn} = {sequence} AND {failedResultFilter}";
            string cmd = SqlCommandFactory.CreateCalcCountCmd(filter, DataBaseItemNames.StatusTableName);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                int count = 0;
                if (dataReader.Read() && !dataReader.IsDBNull(0))
                {
                    count = dataReader.GetInt32(0);
                }
                return(count > 0);
            }
        }
示例#10
0
        public virtual PerformanceStatus GetPerformanceStatusByIndex(string runtimeHash, long index)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.StatusIndexColumn}={index}";
            string            cmd = SqlCommandFactory.CreateQueryCmd(filter, DataBaseItemNames.PerformanceTableName);
            PerformanceStatus performanceStatus = null;

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                if (dataReader.Read())
                {
                    performanceStatus = new PerformanceStatus();
                    DataModelMapper.ReadToObject(dataReader, performanceStatus);
                }
            }
            return(performanceStatus);
        }
示例#11
0
        public virtual RuntimeStatusData GetRuntimeStatusByIndex(string runtimeHash, long index)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.StatusIndexColumn}={index}";
            string            cmd        = SqlCommandFactory.CreateQueryCmd(filter, DataBaseItemNames.StatusTableName);
            RuntimeStatusData statusData = null;

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                while (dataReader.Read())
                {
                    statusData = new RuntimeStatusData();
                    DataModelMapper.ReadToObject(dataReader, statusData);
                }
            }
            return(statusData);
        }
示例#12
0
        protected SessionResultData InternalGetSessionResult(string runtimeHash, int sessionId)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={sessionId}";
            string cmd = SqlCommandFactory.CreateQueryCmd(filter, DataBaseItemNames.SessionTableName);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                SessionResultData sessionResultData = null;
                if (dataReader.Read())
                {
                    sessionResultData = new SessionResultData();
                    DataModelMapper.ReadToObject(dataReader, sessionResultData);
                }
                return(sessionResultData);
            }
        }
示例#13
0
        public virtual IList <SequenceResultData> GetSequenceResults(string runtimeHash, int sessionId)
        {
            string filter = $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={sessionId}";
            string cmd    = SqlCommandFactory.CreateQueryCmd(filter, DataBaseItemNames.SequenceTableName);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                List <SequenceResultData> resultDatas = new List <SequenceResultData>(10);
                while (dataReader.Read())
                {
                    SequenceResultData sequenceResultData = new SequenceResultData();
                    DataModelMapper.ReadToObject(dataReader, sequenceResultData);
                    resultDatas.Add(sequenceResultData);
                }
                return(resultDatas);
            }
        }
示例#14
0
        public virtual void UpdateData(TestInstanceData testInstance)
        {
            // 获取原数据,转换为键值对类型
            TestInstanceData            lastInstanceData   = InternalGetTestInstanceData(testInstance.RuntimeHash);
            Dictionary <string, string> lastInstanceValues = DataModelMapper.GetColumnValueMapping(lastInstanceData);

            Dictionary <string, string> columnToValue = DataModelMapper.GetColumnValueMapping(testInstance);
            // 比较并创建更新命令
            string filter = $"{DataBaseItemNames.RuntimeIdColumn}='{testInstance.RuntimeHash}'";
            string cmd    = SqlCommandFactory.CreateUpdateCmd(DataBaseItemNames.InstanceTableName, lastInstanceValues,
                                                              columnToValue, filter);

            if (string.IsNullOrWhiteSpace(cmd))
            {
                return;
            }
            ExecuteWriteCommand(cmd);
        }
示例#15
0
        public IList <RuntimeStatusData> GetRuntimeStatus(string runtimeHash, int session, int sequenceIndex)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={session} AND {DataBaseItemNames.SequenceIndexColumn}={sequenceIndex}";
            string cmd = SqlCommandFactory.CreateQueryCmdWithOrder(filter, DataBaseItemNames.StatusTableName,
                                                                   DataBaseItemNames.StatusIndexColumn);
            List <RuntimeStatusData> statusDatas = new List <RuntimeStatusData>(500);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                while (dataReader.Read())
                {
                    RuntimeStatusData runtimeStatusData = new RuntimeStatusData();
                    DataModelMapper.ReadToObject(dataReader, runtimeStatusData);
                    statusDatas.Add(runtimeStatusData);
                }
            }
            return(statusDatas);
        }
示例#16
0
        public virtual IList <PerformanceStatus> GetPerformanceStatus(string runtimeHash, int session)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={session}";
            string cmd = SqlCommandFactory.CreateQueryCmdWithOrder(filter, DataBaseItemNames.PerformanceTableName,
                                                                   DataBaseItemNames.StatusIndexColumn);
            List <PerformanceStatus> performanceStatuses = new List <PerformanceStatus>(500);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                while (dataReader.Read())
                {
                    PerformanceStatus performanceStatus = new PerformanceStatus();
                    DataModelMapper.ReadToObject(dataReader, performanceStatus);
                    performanceStatuses.Add(performanceStatus);
                }
            }
            return(performanceStatuses);
        }
示例#17
0
        protected TestInstanceData InternalGetTestInstanceData(string runtimeHash)
        {
            string filter = $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}'";
            string cmd    = SqlCommandFactory.CreateQueryCmd(filter, DataBaseItemNames.InstanceTableName);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                TestInstanceData instanceData;
                if (dataReader.Read())
                {
                    instanceData = new TestInstanceData();
                    DataModelMapper.ReadToObject(dataReader, instanceData);
                }
                else
                {
                    instanceData = null;
                }
                return(instanceData);
            }
        }
示例#18
0
        public IList <RuntimeStatusData> GetRuntimeStatusInRange(string runtimeHash, int session, long startIndex, long count)
        {
            string filter =
                $"{DataBaseItemNames.RuntimeIdColumn}='{runtimeHash}' AND {DataBaseItemNames.SessionIdColumn}={session} AND {DataBaseItemNames.StatusIndexColumn} >= {startIndex}";
            string cmd = SqlCommandFactory.CreateQueryCmdWithOrder(filter, DataBaseItemNames.StatusTableName, DataBaseItemNames.StatusIndexColumn);

            if (count > 0)
            {
                cmd += $" LIMIT {count}";
            }
            List <RuntimeStatusData> statusDatas = new List <RuntimeStatusData>(500);

            using (DbDataReader dataReader = ExecuteReadCommand(cmd))
            {
                while (dataReader.Read())
                {
                    RuntimeStatusData runtimeStatusData = new RuntimeStatusData();
                    DataModelMapper.ReadToObject(dataReader, runtimeStatusData);
                    statusDatas.Add(runtimeStatusData);
                }
            }
            statusDatas.TrimExcess();
            return(statusDatas);
        }
示例#19
0
        public virtual void DeleteTestInstance(string fileterString)
        {
            DbTransaction transaction = null;

            try
            {
                // 删除TestInstance需要执行事务流程
                transaction = Connection.BeginTransaction(IsolationLevel.Serializable);

                string deleteCmd = SqlCommandFactory.CreateDeleteCmd(DataBaseItemNames.StatusTableName, fileterString);
                ExecuteWriteCommand(deleteCmd, transaction);

                deleteCmd = SqlCommandFactory.CreateDeleteCmd(DataBaseItemNames.PerformanceTableName, fileterString);
                ExecuteWriteCommand(deleteCmd, transaction);

                deleteCmd = SqlCommandFactory.CreateDeleteCmd(DataBaseItemNames.SequenceTableName, fileterString);
                ExecuteWriteCommand(deleteCmd, transaction);

                deleteCmd = SqlCommandFactory.CreateDeleteCmd(DataBaseItemNames.SessionTableName, fileterString);
                ExecuteWriteCommand(deleteCmd, transaction);

                deleteCmd = SqlCommandFactory.CreateDeleteCmd(DataBaseItemNames.InstanceTableName, fileterString);
                ExecuteWriteCommand(deleteCmd, transaction);

                transaction.Commit();
            }
            catch (Exception)
            {
                transaction?.Rollback();
                throw;
            }
            finally
            {
                transaction?.Dispose();
            }
        }