public static void StartDBProcess() { List <TblDatabaseManagement> lstDB = DatabaseManagementsDS.GetDBToWork(StatusDB.Received); Metaquery rootMQ = Metaquery.GetRootMQ(); foreach (TblDatabaseManagement db in lstDB) { //create first level Console.WriteLine("start : {0}:{1}:{2}:{3}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond); Console.WriteLine(rootMQ.ToString()); TblMetaquery tblMetaquery = new TblMetaquery() { Arity = rootMQ.Arity, FkDatabaseId = db.Id, FkStatusId = (int)StatusDB.Received, Metaquery = rootMQ.ToString() }; MetaqueryDS.Create(tblMetaquery); DatabaseManagementsDS.UpdateStatus(db, StatusDB.InProcess); } //if at least 1 metaquery created - we can start send it to solver if (lstDB.Count > 0 && IsAutoRunJobs) { ThreadPool.QueueUserWorkItem(delegate { StartSendMQToSolver(); }); } }
public static List <KeyValue> GetDBArityExists(int dbID) { var list = MetaqueryDS.GetDBArityExists(dbID); List <KeyValue> results = new List <KeyValue>(); results.Add(new KeyValue(0, "Select Arity")); results.AddRange(list.Select(x => new KeyValue(x, x.ToString())).ToList()); return(results); }
public static void StartExpandMQProcess() { List <TblMetaquery> lstMQ = MetaqueryDS.GetMQForExpand(); while (lstMQ.Count > 0) { foreach (TblMetaquery tblMetaquery in lstMQ) { TblDatabaseManagement curDB = tblMetaquery.TblDatabaseManagement; Metaquery metaqueryToExpand = new Metaquery(tblMetaquery.Metaquery); //create first level //int MaxVariablesInRelation = ProcessMQDetails.MaxVariablesInRelation; int maxVariables = curDB.MaxVariablesInRelation; ExpandType expandType = ExpandType.All; if (tblMetaquery.FkResult == (int)ResultMQ.SupportFailure) { expandType = ExpandType.NewRelationOnly; } if (tblMetaquery.FkResult == (int)ResultMQ.ConfidenceFailure) { expandType = ExpandType.InBodyOnly; } List <Metaquery> list = metaqueryToExpand.Expand(maxVariables, expandType); foreach (Metaquery mq in list) { TblMetaquery newTblMetaquery = new TblMetaquery() { Arity = mq.Arity, FkDatabaseId = curDB.Id, FkStatusId = (int)StatusDB.Received, Metaquery = mq.ToString() }; MetaqueryDS.Create(newTblMetaquery); } if (curDB.ForExperiment || tblMetaquery.FkResult != (int)ResultMQ.HasAnswers) { MetaqueryDS.UpdateStatus(tblMetaquery, StatusMQ.ExpandedAndDone); } else { MetaqueryDS.UpdateStatus(tblMetaquery, StatusMQ.Expanded); } } lstMQ = MetaqueryDS.GetMQForExpand(); } if (IsAutoRunJobs) { StartIncreaseDBArity(); } }
public static int StartSendMQToSolver() { List <TblMetaquery> lstMQ = MetaqueryDS.GetMQForSendToSolver(); int count = 0; bool doStartExpandMQProcess = false, doStartIncreaseDBArity = false; while (lstMQ.Count > 0) { RabbitProducer <string> producer = null; foreach (TblMetaquery tblMetaquery in lstMQ) { TblDatabaseManagement curDB = tblMetaquery.TblDatabaseManagement; if (!curDB.ForExperiment) { if (producer == null) { string queueToMQSolverName = ConfigurationManager.AppSettings["QueueToMQSolverName"]; producer = new RabbitProducer <string>(queueToMQSolverName); } Metaquery metaquery = new Metaquery(tblMetaquery.Metaquery); //שליחה לסולבר SendMQMessage message = new SendMQMessage() { ID = tblMetaquery.Id, SupportThreshold = curDB.SupportThreshold, ConfidenceThreshold = curDB.ConfidenceThreshold, Head = metaquery.Head.Variables, Body = metaquery.Body.GetVariables() }; string strMessage = message.ToJson(); //JsonConvert.SerializeObject(message); producer.SendMessage(strMessage); MetaqueryDS.UpdateStatus(tblMetaquery, StatusMQ.WaitingToSolver); } else { RandomMQProbability randomMQProbability = new RandomMQProbability(curDB.SupportProbability.Value, curDB.ConfidenceProbability.Value, curDB.ProbabilityIncreaseByArity ?? 0, tblMetaquery.Arity); tblMetaquery.FkResult = (int)randomMQProbability.GetRandomResultMQ(); StatusMQ statusMQ = (tblMetaquery.IsExpanded || tblMetaquery.Arity == tblMetaquery.TblDatabaseManagement.MaxArity ? StatusMQ.Done : StatusMQ.WaitingToExpand); MetaqueryDS.UpdateStatus(tblMetaquery, statusMQ); if (statusMQ == StatusMQ.WaitingToExpand) { doStartExpandMQProcess = true; } else if (statusMQ == StatusMQ.Done) { doStartIncreaseDBArity = true; } } count++; } lstMQ = MetaqueryDS.GetMQForSendToSolver(); } if (MQGenerator.IsAutoRunJobs) { if (doStartExpandMQProcess) { MQGenerator.StartExpandMQProcess(); } else if (doStartIncreaseDBArity) { MQGenerator.StartIncreaseDBArity(); } } return(count); }
public static void OnGetMessageFromSolver(string strMessage) { MQMessage message = null; if (strMessage.Contains("Result")) //strMessage is MQResultMessage { message = JsonConvert.DeserializeObject <MQResultMessage>(strMessage); } else //strMessage is MQAssignmentResultMessage { message = JsonConvert.DeserializeObject <MQAssignmentResultMessage>(strMessage); } int metaqueryID = message.ID; TblMetaquery tblMetaquery = MetaqueryDS.GetByID(metaqueryID); try { if (tblMetaquery == null) { throw new UnknownMetaqueryException(string.Format("There is an unknown metaquery id sent from solver. message id: {0}. MQ Solver message :", metaqueryID, message.ToString())); } if (message is MQResultMessage) { MQResultMessage resultMessage = message as MQResultMessage; tblMetaquery.FkResult = (int)resultMessage.Result; StatusMQ statusMQ = (tblMetaquery.IsExpanded || tblMetaquery.Arity == tblMetaquery.TblDatabaseManagement.MaxArity ? StatusMQ.Done : StatusMQ.WaitingToExpand); MetaqueryDS.UpdateStatus(tblMetaquery, statusMQ); bool execSendMail = bool.Parse(ConfigurationManager.AppSettings["ExecSendMail"]); if (execSendMail) { MQGeneratorMail.SendResultMail(tblMetaquery); } if (MQGenerator.IsAutoRunJobs) { if (statusMQ == StatusMQ.WaitingToExpand) { MQGenerator.StartExpandMQProcess(); } else if (statusMQ == StatusMQ.Done) { MQGenerator.StartIncreaseDBArity(); } } } else if (message is MQAssignmentResultMessage) { MQAssignmentResultMessage assignmentResultMessage = message as MQAssignmentResultMessage; TblMetaqueriesResult tblMetaqueriesResult = new TblMetaqueriesResult() { FkMetaqueryId = metaqueryID, Assignment = assignmentResultMessage.Assignment, ConfidenceValue = assignmentResultMessage.ConfidenceValue, SupportValue = assignmentResultMessage.SupportValue }; MetaqueryResultDS.Create(tblMetaqueriesResult); bool execSendMail = bool.Parse(ConfigurationManager.AppSettings["ExecSendMail"]); if (execSendMail) { MQGeneratorMail.SendAssignmentMail(tblMetaqueriesResult, tblMetaquery.Metaquery); } if (MQGenerator.IsAutoRunJobs && !tblMetaquery.IsExpanded) { MQGenerator.StartExpandMQProcess(); } } else { throw new UnknownMetaqueryException("There is an unknown metaquery sent from solver. MQ Solver message :" + message.ToString()); } } catch (Exception ex) { MQGeneratorMail.SendExceptionMail(ex); } }
public static List <VMetaquery> GetMetaqueriesByDBID(int dbID) { return(MetaqueryDS.GetMetaqueriesByID(dbID)); }