public static void SendResultMail(TblMetaquery tblMetaquery) { string strMessage = "Result to Metaquery {0} Done"; if (tblMetaquery.FkResult.HasValue && tblMetaquery.FkResult.Value == (int)ResultMQ.HasAnswers) { strMessage = "Result to Metaquery {0} Done"; } else { strMessage = "There is no result for Metaquery {0}"; } string subject = string.Format(strMessage, tblMetaquery.Id); /*string strMsgBody = strMessage + * @"Metaquery ID: { 0}< br\> " + * @"Metaquery: {1}<br\>" + * @"StartTime: {2}<br\>" + * @"FinishTime: {3}<br\>"; */ string body = string.Format(GetStringHtmlMessage("MQResult.html") , subject, tblMetaquery.Id, tblMetaquery.Metaquery, tblMetaquery.StartTime, tblMetaquery.FinishTime); MailHelper.SendHtmlMailAsync(subject, body); }
public static void UpdateStatus(TblMetaquery tblMetaquery, StatusMQ newStatus) { using (MetaqueriesContext context = new MetaqueriesContext()) { tblMetaquery.FkStatusId = (int)(newStatus == StatusMQ.ExpandedAndDone ? StatusMQ.Done : newStatus); if (newStatus == StatusMQ.WaitingToSolver) { tblMetaquery.StartTime = DateTime.Now; } if (newStatus == StatusMQ.Done || newStatus == StatusMQ.ExpandedAndDone) { tblMetaquery.FinishTime = DateTime.Now; } if (newStatus == StatusMQ.Expanded || newStatus == StatusMQ.ExpandedAndDone) { tblMetaquery.IsExpanded = true; } tblMetaquery.TblDatabaseManagement = null; context.TblMetaqueries.Attach(tblMetaquery); //context.Entry(tblMetaquery).State = System.Data.Entity.EntityState.Modified; context.MarkAsModified(tblMetaquery); context.SaveChanges(); } }
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 void Create(TblMetaquery tblMetaquery) { using (MetaqueriesContext context = new MetaqueriesContext()) { context.TblMetaqueries.Add(tblMetaquery); context.MarkAsCreated(tblMetaquery); context.SaveChanges(); } }
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 void UpdateStatus(TblMetaquery tblMetaquery, StatusMQ newStatus) { using (MetaqueriesContext context = new MetaqueriesContext()) { tblMetaquery.FkStatusId = (int)newStatus; if (newStatus == StatusMQ.WaitingToSolver) { tblMetaquery.StartTime = DateTime.Now; } if (newStatus == StatusMQ.Done) { tblMetaquery.FinishTime = DateTime.Now; } context.TblMetaqueries.Attach(tblMetaquery); //context.Entry(tblMetaquery).State = System.Data.Entity.EntityState.Modified; context.MarkAsModified(tblMetaquery); context.SaveChanges(); } }
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); } }